+test_6to4_rfc1918()
+{
+ local oIFS="$IFS"; IFS="."; set -- $1; IFS="$oIFS"
+ [ $1 -eq 10 ] && return 0
+ [ $1 -eq 192 ] && [ $2 -eq 168 ] && return 0
+ [ $1 -eq 172 ] && [ $2 -ge 16 ] && [ $2 -le 31 ] && return 0
+ 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"
+ }
+}
+
+