the installer uses the vlan/vlandev ifconfig params to configure
vlan interfaces. this updates it to use vnetid and parent.
there's some semantic tweaks in here too. firstly, instead of
creating a vlan interface so it can be selected to configure, this
adds the next vlan interface to the list of options passed to
ask_which().
secondly, if you reconfigure a vlan interface, itll read the parent
as well as the tag off the parent to present as the default.
thanks to rpe@ for helping me with this.
ok?
Index: install.sub
===================================================================
RCS file: /cvs/src/distrib/miniroot/install.sub,v
retrieving revision 1.1014
diff -u -p -r1.1014 install.sub
--- install.sub 3 Jun 2017 22:27:41 -0000 1.1014
+++ install.sub 9 Jun 2017 08:28:57 -0000
@@ -1131,14 +1131,12 @@ ieee80211_config() {
# Set up IPv4 and IPv6 interface configuration.
configure_ifs() {
- local _first _ifs _if _name _hn _vl=0 _vd _vi _p _tags
+ local _first _ifs _if _name _hn _vl=0 _vd _vi _p
# In case of restart, discover last vlan configured.
while :; do
_vd=$(ifconfig vlan$_vl 2>&1)
[[ $_vd == @(*no such interface*) ]] && break
- [[ $_vd == @(*vlan: +([[:digit:]]) parent interface:*) ]] ||
- break
((_vl++))
done
_vd=
@@ -1150,11 +1148,8 @@ configure_ifs() {
rm -f /tmp/i/mygate
while :; do
- # Create new vlan if possible.
- ifconfig vlan$_vl create >/dev/null 2>&1
-
ask_which "network interface" "do you wish to configure" \
- '$(get_ifs)' \
+ "\$(get_ifs) vlan$_vl" \
${_p:-'$( (get_ifs netboot; get_ifs) | sed q )'}
[[ $resp == done ]] && break
@@ -1165,25 +1160,24 @@ configure_ifs() {
# If the offered vlan is chosen, ask the relevant
# questions and bring it up.
if [[ $_if == vlan+([0-9]) ]]; then
- # Get existing tag for this vlan.
- _vi=$(ifconfig $_if 2>/dev/null |
- sed -n 's/vlan: \([0-9]*\).*/\1/p')
- # Get list of all in-use tags.
- _tags=$(ifconfig vlan 2>/dev/null |
- sed -n 's/vlan: \([0-9]*\).*/\1/p')
- # Current tag is a valid tag for this vlan.
- [[ -n $_tags ]] && _tags=$(rmel "$_vi" $_tags)
+ # Get existing parent and tag for this vlan.
+ resp=$(ifconfig $_if 2>/dev/null |
+ sed -En 's/.encap: vnetid ([[:alnum:]]+) parent
([[:alnum:]]+)/\2:\1/p')
+ _vd=${resp%%:*}
+ _vi=${resp##*:}
+
+ # If there's no existing tag, use the interface minor
if [[ -z $_vi ]]; then
- _vi=0
- while ((++_vi < 4096)); do
- ! isin "$_vi" $_tags && break
- done
+ _vi=${_if##vlan}
+ [[ $_vi -eq 0 ]] && _vi=none
fi
+
_ifs=$(get_ifs)
set -- $_ifs
while [[ $1 == vlan+([0-9]) ]]; do
shift
done
+ [[ $_vd == none ]] && _vd=
ask "Which interface:tag should $_if be on?" \
"${_vd:=$1}:$_vi"
_vd=${resp%%:*}
@@ -1193,13 +1187,16 @@ configure_ifs() {
if ! (isin "$_vd" $_ifs &&
[[ $_vd != vlan+([0-9]) ]]); then
echo "Invalid interface choice '$_vd'"
- _vd=
continue
fi
- # Validate range of $_vi as 1-4095, and $_vi not in use.
- if ((_vi < 1 || _vi > 4095)) || isin "$_vi" $_tags; then
- echo "Invalid or in-use vlan tag '$_vi'"
+ # Validate $_vi as 1-4095, or none
+ if [[ "$_vi" -ge 1 && "$_vi" -le 4095 ]]; then
+ _vi="vnetid $_vi"
+ elif [[ "$_vi" == "none" ]]; then
+ _vi="-vnetid"
+ else
+ echo "Invalid vlan tag '$_vi'"
continue
fi
@@ -1212,8 +1209,10 @@ configure_ifs() {
# Make sure a hostname.$_if is created with this info.
ifconfig $_if destroy >/dev/null 2>&1
- ifconfig $_if vlan $_vi vlandev $_vd
- echo "vlan $_vi vlandev $_vd" >>$_hn
+ ifconfig $_if create >/dev/null 2>&1
+ ifconfig $_if $_vi parent $_vd
+ echo "$_vi parent $_vd" >>$_hn
+
# Create a new vlan if we just configured the highest.
[[ ${_if##vlan} == $_vl ]] && ((_vl++))
fi