diff --git a/docs/add_rtadv.md b/docs/add_rtadv.md index 1020c5e..cc92410 100644 --- a/docs/add_rtadv.md +++ b/docs/add_rtadv.md @@ -7,12 +7,12 @@ ## Synopsis ``` -add_rtadv ${card} ${vlan} +add_rtadv ${interface} ``` ## Description -Adds the network defined by the specified `${card}` and `${vlan}` to the list of +Adds the network defined by the specified `${interface}` to the list of interfaces to be advertised by `rtadvd`. The internal implementation prevents adding duplicate interfaces to the @@ -29,8 +29,8 @@ settings for all advertised IPv6 networks. ## Examples ``` -add_rtadv xy0 123 # Adds `xy0.123` to `rtadvd_interfaces` -add_rtadv abc3 765 # Adds `abc3.765` to `rtadvd_interfaces` +add_rtadv xy0.123 # Adds `xy0.123` to `rtadvd_interfaces` +add_rtadv abc3.765 # Adds `abc3.765` to `rtadvd_interfaces` ``` ## See Also diff --git a/rc.subr b/rc.subr index 2684ab9..7f9d997 100755 --- a/rc.subr +++ b/rc.subr @@ -133,8 +133,8 @@ _compute_nets() shift 1 _base=$((${_vlan}%10)) - _net=$((${_vlan}/100)) - _subnet=${_net}${_base} + _net=$(( ( ( ${_vlan} / 100 ) % 10 ) * 10 )) + _subnet=$(( ${_net} + ${_base} )) _extra_address="" if [ -z "${1}" ] @@ -203,10 +203,7 @@ add_vlan() add_rtadv() { - _card=$1 - _vlan=$2 - - _subcard="${_card}.${_vlan}" + _subcard="$1" _echo "XXX ${rtadvd_interfaces} XXX" _echo "QQQ ${rtadvd_interfaces} QQQ" | grep ${_subcard} @@ -462,15 +459,23 @@ _emit_dhcpv4() add_v4_net() { _compute_nets $* - add_vlan $_card $_vlan + _card_and_vlan="${_card}_${_vlan}" + _card_dot_vlan="${_card}.${_vlan}" + if [ ${_vlan} -ne 0 ] + then + add_vlan $_card $_vlan + else + _card_and_vlan="${_card}" + _card_dot_vlan="${_card}" + fi _class_group="" if [ ! -z "${_class}" ] then _class_group="group ${_class}" fi - eval ifconfig_${_card}_${_vlan}=\"$(compute_v4_net $_card $_subnet) group internal ${_class_group}\" - eval dhcpd_ifaces=\"${dhcpd_ifaces} ${_card}.${_vlan}\" + eval ifconfig_${_card_and_vlan}=\"$(compute_v4_net $_card $_subnet) group internal ${_class_group}\" + eval dhcpd_ifaces=\"${dhcpd_ifaces} ${_card_dot_vlan}\" } _add_v6_prefixes() @@ -480,7 +485,7 @@ _add_v6_prefixes() while [ -n "${1}" ] do - eval ifconfig_${_card}_${_vlan}_alias${_next_alias}=\"inet6 $1/64\" + eval ifconfig_${_card_and_vlan}_alias${_next_alias}=\"inet6 $1/64\" shift 1 _next_alias=`expr $_next_alias + 1` done @@ -490,8 +495,16 @@ add_v6_net() { _isp="" _compute_nets $* - add_vlan $_card $_vlan - add_rtadv $_card $_vlan + _card_and_vlan="${_card}_${_vlan}" + _card_dot_vlan="${_card}.${_vlan}" + if [ ${_vlan} -ne 0 ] + then + add_vlan $_card $_vlan + else + _card_and_vlan="${_card}" + _card_dot_vlan="${_card}" + fi + add_rtadv ${_card_dot_vlan} _compute_ula_prefix @@ -501,22 +514,27 @@ add_v6_net() _class_group="group ${_class}" fi - eval ifconfig_${_card}_${_vlan}_ipv6=\"inet6 fe80::1/64 group internal ${_class_group}\" + eval ifconfig_${_card_and_vlan}_ipv6=\"inet6 fe80::1/64 group internal ${_class_group}\" _next_alias=0 + if [ "${_subnet}" = "0" ] + then + _subnet="00" + fi + if [ "${_priv}" = "YES" ] then - eval ifconfig_${_card}_${_vlan}_alias${_next_alias}=\"inet6 $(compute_v6_net ${secret_ip6_net} ${_subnet})/64\" + eval ifconfig_${_card_and_vlan}_alias${_next_alias}=\"inet6 $(compute_v6_net ${secret_ip6_net} ${_subnet})/64\" _next_alias=1 # UGLY HACK!!! Does BASH increment work in BSD's sh? fi if [ -n "${_isp}" ] then - _add_dhcpv6 ${_card}.${_vlan} ${_isp} + _add_dhcpv6 ${_card_dot_vlan} ${_isp} else - _echo "Adding ${_card}.${_vlan} to default (which is ${default_isp} at this time)" - _add_dhcpv6 ${_card}.${_vlan} default + _echo "Adding ${_card_dot_vlan} to default (which is ${default_isp} at this time)" + _add_dhcpv6 ${_card_dot_vlan} default fi _add_v6_prefixes ${_next_alias} ${_extra_address}