Automatically compute vlans for base card.

This commit is contained in:
2026-09-05 18:41:30 -04:00
parent 4aebcc4f9a
commit 6355efa379
2 changed files with 66 additions and 3 deletions
+3
View File
@@ -53,6 +53,9 @@ rc_router_ula_prefix_size="48"
fib_setup_enable="YES" fib_setup_enable="YES"
rc_router_fibs="1" rc_router_fibs="1"
# The SLA and v4 net addresses for cards start here, incrementing as seen.
# This actual value is incremented during the execution of the user directives.
rc_router_card_base="0"
route_policy_enable="YES" route_policy_enable="YES"
route_policy_file="${rc_router_gen_dir}/pf.route-policies.conf" route_policy_file="${rc_router_gen_dir}/pf.route-policies.conf"
+63 -3
View File
@@ -299,12 +299,25 @@ _emit_dhcpv6_for_isp()
do do
_iface=`echo ${_iface_desc} | sed -e 's;/.*$;;'` _iface=`echo ${_iface_desc} | sed -e 's;/.*$;;'`
_sla=`echo ${_iface_desc} | sed -e 's;^.*/;;'` _sla=`echo ${_iface_desc} | sed -e 's;^.*/;;'`
# Raw cards use a special rule.
if [ -z "${_sla}" ]
then
eval "_sla=\${vlan_for_card_base_${_iface_desc}}"
fi
_emit_dhcpv6_for_iface ${_iface} ${_sla} _emit_dhcpv6_for_iface ${_iface} ${_sla}
done done
for _iface in ${_isp_list} for _iface in ${_isp_list}
do do
_vlan=`echo ${_iface} | sed -e 's/^.*\.//'` _vlan=`echo ${_iface} | sed -e 's/^.*\.//'`
_num=`echo ${_vlan} | sed -e 's/\([0-9]\)0\([0-9]\)/\1\2/'` if [ "${_vlan}" = "${_iface}" ]
then
_compute_card_base ${_iface}
_num=${_vlan}
else
_num=`echo ${_vlan} | sed -e 's/\([0-9]\)0\([0-9]\)/\1\2/'`
fi
_vlan_sla=`printf "%d" 0x${_num}` _vlan_sla=`printf "%d" 0x${_num}`
_emit_dhcpv6_for_iface ${_iface} ${_vlan_sla} _emit_dhcpv6_for_iface ${_iface} ${_vlan_sla}
done done
@@ -463,22 +476,49 @@ _emit_dhcpv4()
do do
_iface_root=$( echo ${_iface} | sed -e 's/\.[0-9][0-9]*//' ) _iface_root=$( echo ${_iface} | sed -e 's/\.[0-9][0-9]*//' )
_vlan=$( echo ${_iface} | sed -e 's/[a-z][a-z]*[0-9][0-9]*\.//' ) _vlan=$( echo ${_iface} | sed -e 's/[a-z][a-z]*[0-9][0-9]*\.//' )
_echo "In building for _iface_root:<${_iface_root}> we first found _vlan:<${_vlan}>"
if [ "${_vlan}" = "${_iface_root}" ]
then
_compute_card_base ${_iface_root}
fi
_echo "Emitting _iface_root:<${_iface_root}> and _vlan:<${_vlan}>"
_emit_dhcpv4_for_iface ${_iface_root} ${_vlan} >> ${_dhcp_file} _emit_dhcpv4_for_iface ${_iface_root} ${_vlan} >> ${_dhcp_file}
done done
} }
_compute_card_base()
{
_echo "Compute card base called with <${*}>"
_compute_card_base_for_card="${1}"
eval _local_vlan="\${vlan_for_card_base_${_compute_card_base_for_card}}"
_echo "First read for <${_compute_card_base_for_card}> found <${_local_vlan}>"
if [ -z "${_local_vlan}" ]
then
_echo "Override of <${_local_vlan}> ${_compute_card_base_for_card} to <${rc_router_card_base}>"
_local_vlan="${rc_router_card_base}"
rc_router_card_base=$(( ${rc_router_card_base} + 1 ))
eval vlan_for_card_base_${_compute_card_base_for_card}="${_local_vlan}"
fi
_vlan=${_local_vlan}
}
add_v4_net() add_v4_net()
{ {
_compute_nets $* _compute_nets $*
_card_and_vlan="${_card}_${_vlan}" _card_and_vlan="${_card}_${_vlan}"
_card_dot_vlan="${_card}.${_vlan}" _card_dot_vlan="${_card}.${_vlan}"
_echo "In v4 net for ${_card_and_vlan} with ${_card_dot_vlan}" _echo "In v4 net for ${_card_and_vlan} with ${_card_dot_vlan}"
_vlan_arg="${_vlan}"
if [ ${_vlan} -ne 0 ] if [ ${_vlan} -ne 0 ]
then then
add_vlan $_card $_vlan add_vlan $_card $_vlan
else else
_card_and_vlan="${_card}" _card_and_vlan="${_card}"
_card_dot_vlan="${_card}" _card_dot_vlan="${_card}"
_compute_card_base ${_card}
fi fi
_class_group="" _class_group=""
@@ -486,7 +526,19 @@ add_v4_net()
then then
_class_group="group ${_class}" _class_group="group ${_class}"
fi fi
eval ifconfig_${_card_and_vlan}=\"$(compute_v4_net ${_card} ${_vlan}) group internal ${_class_group}\"
_extra_opts=""
if [ "${_vlan_arg}" = "0" ]
then
eval _extra_opts="\${${_card}_extra_opts}"
fi
if [ -z "${_extra_address}" ]
then
eval ifconfig_${_card_and_vlan}=\"$(compute_v4_net ${_card} ${_vlan}) group internal ${_class_group} ${_extra_opts}\"
else
eval ifconfig_${_card_and_vlan}=\"${_extra_address} group internal ${_class_group} ${_extra_opts}\"
fi
eval dhcpd_ifaces=\"${dhcpd_ifaces} ${_card_dot_vlan}\" eval dhcpd_ifaces=\"${dhcpd_ifaces} ${_card_dot_vlan}\"
} }
@@ -509,12 +561,14 @@ add_v6_net()
_compute_nets $* _compute_nets $*
_card_and_vlan="${_card}_${_vlan}" _card_and_vlan="${_card}_${_vlan}"
_card_dot_vlan="${_card}.${_vlan}" _card_dot_vlan="${_card}.${_vlan}"
_vlan_arg="${_vlan}"
if [ ${_vlan} -ne 0 ] if [ ${_vlan} -ne 0 ]
then then
add_vlan $_card $_vlan add_vlan $_card $_vlan
else else
_card_and_vlan="${_card}" _card_and_vlan="${_card}"
_card_dot_vlan="${_card}" _card_dot_vlan="${_card}"
_compute_card_base ${_card}
fi fi
add_rtadv ${_card_dot_vlan} add_rtadv ${_card_dot_vlan}
@@ -526,7 +580,13 @@ add_v6_net()
_class_group="group ${_class}" _class_group="group ${_class}"
fi fi
eval ifconfig_${_card_and_vlan}_ipv6=\"inet6 fe80::1/64 group internal ${_class_group}\" _extra_opts=""
if [ "${_vlan_arg}" = "0" ]
then
eval _extra_opts="\${${_card}_extra_opts}"
fi
eval ifconfig_${_card_and_vlan}_ipv6=\"inet6 fe80::1/64 group internal ${_class_group} ${_extra_opts}\"
_next_alias=0 _next_alias=0