diff options
author | Steven Barth <cyrus@openwrt.org> | 2015-07-13 21:51:38 +0000 |
---|---|---|
committer | Steven Barth <cyrus@openwrt.org> | 2015-07-13 21:51:38 +0000 |
commit | a06c1c810ebd6a89ae04ca4cd4c2229e0ec335a0 (patch) | |
tree | 58831fee53fd225a1ae4ecbf6e562a8c29c717a6 | |
parent | fab6209f71c6b1a9fd920aa39fc57cfe96fc6afa (diff) | |
download | upstream-a06c1c810ebd6a89ae04ca4cd4c2229e0ec335a0.tar.gz upstream-a06c1c810ebd6a89ae04ca4cd4c2229e0ec335a0.tar.bz2 upstream-a06c1c810ebd6a89ae04ca4cd4c2229e0ec335a0.zip |
odhcp6c: fix some more compatibility issues
Signed-off-by: Steven Barth <steven@midlink.org>
SVN-Revision: 46335
-rwxr-xr-x | package/network/ipv6/odhcp6c/files/dhcpv6.script | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/package/network/ipv6/odhcp6c/files/dhcpv6.script b/package/network/ipv6/odhcp6c/files/dhcpv6.script index 84eb706ebc..b8cbddb942 100755 --- a/package/network/ipv6/odhcp6c/files/dhcpv6.script +++ b/package/network/ipv6/odhcp6c/files/dhcpv6.script @@ -76,6 +76,7 @@ setup_interface () { done for entry in $RA_ROUTES; do + local duplicate=0 local addr="${entry%%/*}" entry="${entry#*/}" local mask="${entry%%,*}" @@ -86,12 +87,16 @@ setup_interface () { entry="${entry#*,}" local metric="${entry%%,*}" - if [ -z "$gw" ]; then - proto_add_ipv6_route "$addr" "$mask" "$gw" "$metric" "$valid" + for xentry in $RA_ROUTES; do + local xprefix="${xentry%%,*}" + xentry="${xentry#*,}" + local xgw="${xentry%%,*}" - # work around if there is a PIO matching a RIO - # Linux seems to prefer source-dest over dest-only even if metric is higher - proto_add_ipv6_route "$addr" "$mask" "$gw" "$metric" "$valid" "$addr/$mask" + [ -n "$gw" -a -z "$xgw" -a "$addr/$mask" = "$xprefix" ] && duplicate=1 + done + + if [ -z "$gw" -o "$duplicate" = 1 ]; then + proto_add_ipv6_route "$addr" "$mask" "$gw" "$metric" "$valid" else for prefix in $PREFIXES $ADDRESSES; do local paddr="${prefix%%,*}" |