odhcp6c: fix some more compatibility issues
[openwrt.git] / package / network / ipv6 / odhcp6c / files / dhcpv6.script
index 5e5b9a9..b8cbddb 100755 (executable)
@@ -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,10 +87,17 @@ setup_interface () {
                entry="${entry#*,}"
                local metric="${entry%%,*}"
 
-               if [ -z "$SOURCE_ROUTING" -o -z "$gw" ]; then
+               for xentry in $RA_ROUTES; do
+                       local xprefix="${xentry%%,*}"
+                       xentry="${xentry#*,}"
+                       local xgw="${xentry%%,*}"
+
+                       [ -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
-                       proto_add_ipv6_route "$addr" "$mask" "$gw" "$metric" "$valid" "::/128"
                        for prefix in $PREFIXES $ADDRESSES; do
                                local paddr="${prefix%%,*}"
                                proto_add_ipv6_route "$addr" "$mask" "$gw" "$metric" "$valid" "$paddr"
@@ -119,7 +127,7 @@ setup_interface () {
                MAPRULE="$LW4O6"
        fi
 
-       [ -n "$ZONE" ] || ZONE=$(fw3 -q network $INTERFACE)
+       [ -n "$ZONE" ] || ZONE=$(fw3 -q network $INTERFACE 2>/dev/null)
 
        if [ "$IFACE_MAP" != 0 -a -n "$MAPTYPE" -a -n "$MAPRULE" ]; then
                [ -z "$IFACE_MAP" -o "$IFACE_MAP" = 1 ] && IFACE_MAP=${INTERFACE}_4