odhcp6c: add workaround for broken extendprefix scenario
authorHans Dedecker <dedeckeh@gmail.com>
Tue, 5 Sep 2017 12:33:01 +0000 (14:33 +0200)
committerHans Dedecker <dedeckeh@gmail.com>
Tue, 5 Sep 2017 12:46:18 +0000 (14:46 +0200)
Extendprefix is typically used to extend an IPv6 RA prefix from a mobile
wan link to the LAN; such scenario requires correct RA prefix settings
like the on link flag not being set.
However some mobile manufacter set the RA prefix on link flag which breaks
basic IPv6 routing.
Work around this issue by filtering out the route being equal to the
extended prefix.

Signed-off-by: Hans Dedecker <dedeckeh@gmail.com>
package/network/ipv6/odhcp6c/Makefile
package/network/ipv6/odhcp6c/files/dhcpv6.script

index a95a380e0d850a5537b8030ee79a0ca9a20a0327..457a871efb2adfc7540e9f1fa0681fc72826e759 100644 (file)
@@ -8,13 +8,13 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=odhcp6c
-PKG_RELEASE:=3
+PKG_RELEASE:=4
 
 PKG_SOURCE_PROTO:=git
 PKG_SOURCE_URL=$(LEDE_GIT)/project/odhcp6c.git
-PKG_SOURCE_DATE:=2017-09-02
+PKG_SOURCE_DATE:=2017-09-05
 PKG_SOURCE_VERSION:=51733a6d3bfe0fb9e8c53aea22231e5b8a1f64c3
-PKG_MIRROR_HASH:=7ab8d3755c588b493792110d871c682cdd8e944ae21db64177321c464c104fb3
+PKG_MIRROR_HASH:=fdccfb9a6cb00d6dbf1a3160bd36622ee8e188a9d58bcd282c71a9368972e184
 PKG_MAINTAINER:=Hans Dedecker <dedeckeh@gmail.com>
 PKG_LICENSE:=GPL-2.0
 
index ab0b55675515425a0bdff04e2efc3faf0e5f445c..03efaf7211bf07bd9e44a020b790dcbd83aec7fd 100755 (executable)
@@ -81,6 +81,23 @@ setup_interface () {
                # RFC 7278
                if [ "$mask" -eq 64 -a -z "$PREFIXES" -a -n "$EXTENDPREFIX" ]; then
                        proto_add_ipv6_prefix "$addr/$mask,$preferred,$valid"
+
+                       local raroutes=""
+                       for route in $RA_ROUTES; do
+                               local prefix="${route%%/*}"
+                               local entry="${route#*/}"
+                               local pmask="${entry%%,*}"
+                               entry="${entry#*,}"
+                               local gw="${entry%%,*}"
+
+                               [ -z "$gw" -a "$mask" = "$pmask" ] && {
+                                       case "$addr" in
+                                               "${prefix%*::}"*) continue;;
+                                       esac
+                               }
+                               raroutes="$raroutes $route"
+                       done
+                       RA_ROUTES="$raroutes"
                fi
        done