odhcp6c: improve handling of RA on-link routes and addresses
[librecmc/librecmc.git] / package / network / ipv6 / odhcp6c / files / dhcpv6.script
index 324a823ce9ff62546fe9f1d70d195b8922ff85c5..5a3b7ecba60773e7fa08ea2b97c3920d92521b93 100755 (executable)
@@ -50,7 +50,7 @@ setup_interface () {
                entry="${entry#*,}"
                local valid="${entry%%,*}"
 
-               proto_add_ipv6_address "$addr" "$mask" "$preferred" "$valid" 1
+               proto_add_ipv6_address "$addr" "$mask" "$preferred" "$valid"
        done
 
        for entry in $RA_ROUTES; do
@@ -64,23 +64,28 @@ setup_interface () {
                entry="${entry#*,}"
                local metric="${entry%%,*}"
 
-               proto_add_ipv6_route "$addr" "$mask" "$gw" "$metric" "$valid"
+               if [ -z "$SOURCE_ROUTING" -o -z "$gw" ]; 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"
+                       done
+               fi
        done
 
        proto_send_update "$INTERFACE"
 
        if [ -n "$AFTR_IP " -a -n "$IFACE_DSLITE" ]; then
-uci -q batch <<-EOF >/dev/null
-set network.$IFACE_DSLITE.proto=dslite
-set network.$IFACE_DSLITE.auto=0
-set network.$IFACE_DSLITE.peeraddr=$AFTR_IP
-set network.$IFACE_DSLITE.tunlink=$INTERFACE
-commit network
-EOF
-
-               ifdown "$IFACE_DSLITE"
-               /etc/init.d/network reload
-               ifup "$IFACE_DSLITE"
+               json_init
+               json_add_string name "$IFACE_DSLITE"
+               json_add_string ifname "@$INTERFACE"
+               json_add_string proto "dslite"
+               json_add_string peeraddr "$AFTR_IP"
+               json_add_string tunlink "$INTERFACE"
+               json_close_object
+               ubus call network add_dynamic "$(json_dump)"
        fi
 
        # TODO: $SNTP_IP $SIP_IP $SNTP_FQDN $SIP_DOMAIN