mirror of
https://github.com/freebsd/freebsd-src
synced 2024-10-15 12:54:27 +00:00
120 lines
2 KiB
Plaintext
120 lines
2 KiB
Plaintext
|
#!/bin/sh
|
||
|
|
||
|
. /etc/rc.subr
|
||
|
. /etc/network.subr
|
||
|
|
||
|
load_rc_config netif
|
||
|
|
||
|
#
|
||
|
# Customized per-interface setup, e.g. hyperv_vfup.hn1
|
||
|
#
|
||
|
# NOTE-CUSTOMIZE:
|
||
|
# Comment this out, if this script is used as template
|
||
|
# for the customized per-interface setup.
|
||
|
#
|
||
|
if [ -f /usr/libexec/hyperv/hyperv_vfup.$1 ]
|
||
|
then
|
||
|
/usr/libexec/hyperv/hyperv_vfup.$1
|
||
|
exit $?
|
||
|
fi
|
||
|
|
||
|
# NOTE-CUSTOMIZE:
|
||
|
#hn=${0##*.}
|
||
|
hn=$1
|
||
|
hn_unit=`echo $hn | sed 's/[^0-9]*//g'`
|
||
|
|
||
|
vf=`sysctl -n dev.hn.$hn_unit.vf`
|
||
|
if [ ! $vf ]
|
||
|
then
|
||
|
# Race happened; VF was removed, before we ran.
|
||
|
echo "$hn: VF was detached"
|
||
|
exit 0
|
||
|
fi
|
||
|
|
||
|
#
|
||
|
# Create laggX for hnX.
|
||
|
# Add VF and hnX to laggX.
|
||
|
#
|
||
|
|
||
|
lagg=lagg$hn_unit
|
||
|
|
||
|
ifconfig $lagg > /dev/null 2>&1
|
||
|
if [ $? -ne 0 ]
|
||
|
then
|
||
|
#
|
||
|
# No laggX, create it now.
|
||
|
#
|
||
|
ifconfig $lagg create > /dev/null 2>&1
|
||
|
if [ $? -ne 0 ]
|
||
|
then
|
||
|
echo "$lagg creation failed"
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
#
|
||
|
# Configure laggX (failover), add hnX and VF to it.
|
||
|
#
|
||
|
ifconfig $lagg laggproto failover laggport $hn laggport $vf
|
||
|
ifconfig $lagg inet6 no_dad
|
||
|
|
||
|
#
|
||
|
# Stop dhclient on hnX, if any.
|
||
|
#
|
||
|
pidfile=/var/run/dhclient.$hn.pid
|
||
|
if [ -f $pidfile ]
|
||
|
then
|
||
|
kill -TERM `cat $pidfile`
|
||
|
fi
|
||
|
|
||
|
#
|
||
|
# Remove all configured IPv4 addresses on hnX, e.g.
|
||
|
# configured by dhclient. laggX will take over the
|
||
|
# network operations.
|
||
|
#
|
||
|
while true
|
||
|
do
|
||
|
ifconfig $hn -alias > /dev/null 2>&1
|
||
|
if [ $? -ne 0 ]
|
||
|
then
|
||
|
break
|
||
|
fi
|
||
|
done
|
||
|
|
||
|
# TODO: Remove IPv6 addresses on hnX
|
||
|
|
||
|
#
|
||
|
# Use hnX's configuration for laggX
|
||
|
#
|
||
|
# NOTE-CUSTOMIZE:
|
||
|
# If this script is used as template for the customized
|
||
|
# per-interface setup, replace this with whatever you
|
||
|
# want to do with the laggX.
|
||
|
#
|
||
|
if dhcpif $hn;
|
||
|
then
|
||
|
ifconfig $lagg up
|
||
|
if syncdhcpif $hn;
|
||
|
then
|
||
|
dhclient $lagg
|
||
|
else
|
||
|
dhclient -b $lagg
|
||
|
fi
|
||
|
else
|
||
|
ifconfig_args=`ifconfig_getargs $hn`
|
||
|
if [ -n "$ifconfig_args" ]
|
||
|
then
|
||
|
ifconfig $lagg $ifconfig_args
|
||
|
fi
|
||
|
fi
|
||
|
else
|
||
|
#
|
||
|
# laggX exists. Check whether VF was there or not.
|
||
|
# If VF was not added to laggX, add it now.
|
||
|
#
|
||
|
ifconfig $lagg | grep "laggport: $vf" > /dev/null 2>&1
|
||
|
if [ $? -ne 0 ]
|
||
|
then
|
||
|
ifconfig $lagg laggport $vf
|
||
|
fi
|
||
|
fi
|