6to4: Tos support
[openwrt/staging/chunkeey.git] / package / network / ipv6 / 6to4 / files / 6to4.sh
index 3a616f675bb609bceb6ffa2a1b5ce74f66d18e25..ce1de53ea851d405bdf2303ee00d0ddb3d2c919e 100755 (executable)
@@ -29,82 +29,13 @@ test_6to4_rfc1918()
        return 1
 }
 
-set_6to4_radvd_interface() {
-       local cfgid="$1"
-       local lanif="${2:-lan}"
-       local ifmtu="${3:-1280}"
-       local ifsection=""
-
-       find_ifsection() {
-               local net
-               local cfg="$1"
-               config_get net "$cfg" interface
-
-               [ "$net" = "$lanif" ] && {
-                       ifsection="$cfg"
-                       return 1
-               }
-       }
-
-       config_foreach find_ifsection interface
-
-       [ -z "$ifsection" ] && {
-               ifsection="iface_$sid"
-               uci_set_state radvd "$ifsection" "" interface
-               uci_set_state radvd "$ifsection" interface "$lanif"
-       }
-
-       uci_set_state radvd "$ifsection" ignore            0
-       uci_set_state radvd "$ifsection" IgnoreIfMissing   1
-       uci_set_state radvd "$ifsection" AdvSendAdvert     1
-       uci_set_state radvd "$ifsection" MaxRtrAdvInterval 30
-       uci_set_state radvd "$ifsection" AdvLinkMTU        "$ifmtu"
-}
-
-set_6to4_radvd_prefix() {
-       local cfgid="$1"
-       local lanif="${2:-lan}"
-       local wanif="${3:-wan}"
-       local prefix="${4:-0:0:0:1::/64}"
-       local vlt="${5:-300}"
-       local plt="${6:-120}"
-       local pfxsection=""
-
-       find_pfxsection() {
-               local net base
-               local cfg="$1"
-               config_get net  "$cfg" interface
-               config_get base "$cfg" Base6to4Interface
-
-               [ "$net" = "$lanif" ] && [ "$base" = "$wanif" ] && {
-                       pfxsection="$cfg"
-                       return 1
-               }
-       }
-
-       config_foreach find_pfxsection prefix
-
-       [ -z "$pfxsection" ] && {
-               pfxsection="prefix_${sid}_${lanif}"
-               uci_set_state radvd "$pfxsection" ""                   prefix
-               uci_set_state radvd "$pfxsection" ignore               0
-               uci_set_state radvd "$pfxsection" interface            "$lanif"
-               uci_set_state radvd "$pfxsection" prefix               "$prefix"
-               uci_set_state radvd "$pfxsection" AdvOnLink            1
-               uci_set_state radvd "$pfxsection" AdvAutonomous        1
-               uci_set_state radvd "$pfxsection" AdvValidLifetime     "$vlt"
-               uci_set_state radvd "$pfxsection" AdvPreferredLifetime "$plt"
-               uci_set_state radvd "$pfxsection" Base6to4Interface    "$wanif"
-       }
-}
-
 proto_6to4_setup() {
        local cfg="$1"
        local iface="$2"
        local link="6to4-$cfg"
 
-       local mtu ttl ipaddr adv_subnet adv_interface adv_valid_lifetime adv_preferred_lifetime
-       json_get_vars mtu ttl ipaddr adv_subnet adv_interface adv_valid_lifetime adv_preferred_lifetime
+       local mtu ttl tos ipaddr sourcerouting
+       json_get_vars mtu ttl tos ipaddr sourcerouting
 
        ( proto_add_host_dependency "$cfg" 0.0.0.0 )
 
@@ -132,63 +63,29 @@ proto_6to4_setup() {
 
        proto_init_update "$link" 1
        proto_add_ipv6_address "$local6" 16
-       proto_add_ipv6_route "::" 0 "::192.88.99.1"
+       proto_add_ipv6_prefix "$prefix6::/48"
+
+       if [ "$sourcerouting" != "0" ]; then
+               proto_add_ipv6_route "::" 0 "::192.88.99.1" "" "" "::/128"
+               proto_add_ipv6_route "::" 0 "::192.88.99.1" "" "" "$local6/16"
+               proto_add_ipv6_route "::" 0 "::192.88.99.1" "" "" "$prefix6::/48"
+       else
+               proto_add_ipv6_route "::" 0 "::192.88.99.1"
+       fi
 
        proto_add_tunnel
        json_add_string mode sit
        json_add_int mtu "${mtu:-1280}"
        json_add_int ttl "${ttl:-64}"
+       [ -n "$tos" ] && json_add_string tos "$tos"
        json_add_string local "$ipaddr"
        proto_close_tunnel
 
        proto_send_update "$cfg"
-
-       [ -f /etc/config/radvd ] && /etc/init.d/radvd enabled && {
-               local sid="6to4_$cfg"
-
-               uci_revert_state radvd
-               config_load radvd
-
-               adv_subnet=$((0x${adv_subnet:-1}))
-
-               local adv_subnets=""
-
-               for adv_interface in ${adv_interface:-lan}; do
-                       local adv_ifname
-                       network_get_device adv_ifname "${adv_interface:-lan}" || continue
-
-                       local subnet6="$(printf "%s:%x::1/64" "$prefix6" $adv_subnet)"
-
-                       logger -t "$link" " * Advertising IPv6 subnet $subnet6 on ${adv_interface:-lan} ($adv_ifname)"
-                       ip -6 addr add $subnet6 dev $adv_ifname
-
-                       set_6to4_radvd_interface "$sid" "$adv_interface" "$mtu"
-                       set_6to4_radvd_prefix    "$sid" "$adv_interface" \
-                               "$wanif" "$(printf "0:0:0:%x::/64" $adv_subnet)" \
-                               "$adv_valid_lifetime" "$adv_preferred_lifetime"
-
-                       adv_subnets="${adv_subnets:+$adv_subnets }$adv_ifname:$subnet6"
-                       adv_subnet=$(($adv_subnet + 1))
-               done
-
-               uci_set_state network "$cfg" adv_subnets "$adv_subnets"
-
-               /etc/init.d/radvd restart
-       }
 }
 
 proto_6to4_teardown() {
        local cfg="$1"
-       local link="6to4-$cfg"
-
-       local adv_subnets=$(uci_get_state network "$cfg" adv_subnets)
-
-       grep -qs "^ *$link:" /proc/net/dev && {
-               [ -n "$adv_subnets" ] && {
-                       uci_revert_state radvd
-                       /etc/init.d/radvd enabled && /etc/init.d/radvd restart
-               }
-       }
 }
 
 proto_6to4_init_config() {
@@ -198,10 +95,8 @@ proto_6to4_init_config() {
        proto_config_add_string "ipaddr"
        proto_config_add_int "mtu"
        proto_config_add_int "ttl"
-       proto_config_add_string "adv_interface"
-       proto_config_add_string "adv_subnet"
-       proto_config_add_int "adv_valid_lifetime"
-       proto_config_add_int "adv_preferred_lifetime"
+       proto_config_add_string "tos"
+       proto_config_add_boolean "sourcerouting"
 }
 
 [ -n "$INCLUDE_ONLY" ] || {