xref: /freebsd/contrib/hyperv/tools/scripts/hyperv_vfup (revision 0275f9dbf73b01e9478dc7d6ab5fab4f8e077448)
1*c6859569SSepherosa Ziehau#!/bin/sh
2*c6859569SSepherosa Ziehau
3*c6859569SSepherosa Ziehau. /etc/rc.subr
4*c6859569SSepherosa Ziehau. /etc/network.subr
5*c6859569SSepherosa Ziehau
6*c6859569SSepherosa Ziehauload_rc_config netif
7*c6859569SSepherosa Ziehau
8*c6859569SSepherosa Ziehau#
9*c6859569SSepherosa Ziehau# Customized per-interface setup, e.g. hyperv_vfup.hn1
10*c6859569SSepherosa Ziehau#
11*c6859569SSepherosa Ziehau# NOTE-CUSTOMIZE:
12*c6859569SSepherosa Ziehau# Comment this out, if this script is used as template
13*c6859569SSepherosa Ziehau# for the customized per-interface setup.
14*c6859569SSepherosa Ziehau#
15*c6859569SSepherosa Ziehauif [ -f /usr/libexec/hyperv/hyperv_vfup.$1 ]
16*c6859569SSepherosa Ziehauthen
17*c6859569SSepherosa Ziehau	/usr/libexec/hyperv/hyperv_vfup.$1
18*c6859569SSepherosa Ziehau	exit $?
19*c6859569SSepherosa Ziehaufi
20*c6859569SSepherosa Ziehau
21*c6859569SSepherosa Ziehau# NOTE-CUSTOMIZE:
22*c6859569SSepherosa Ziehau#hn=${0##*.}
23*c6859569SSepherosa Ziehauhn=$1
24*c6859569SSepherosa Ziehauhn_unit=`echo $hn | sed 's/[^0-9]*//g'`
25*c6859569SSepherosa Ziehau
26*c6859569SSepherosa Ziehauvf=`sysctl -n dev.hn.$hn_unit.vf`
27*c6859569SSepherosa Ziehauif [ ! $vf ]
28*c6859569SSepherosa Ziehauthen
29*c6859569SSepherosa Ziehau	# Race happened; VF was removed, before we ran.
30*c6859569SSepherosa Ziehau	echo "$hn: VF was detached"
31*c6859569SSepherosa Ziehau	exit 0
32*c6859569SSepherosa Ziehaufi
33*c6859569SSepherosa Ziehau
34*c6859569SSepherosa Ziehau#
35*c6859569SSepherosa Ziehau# Create laggX for hnX.
36*c6859569SSepherosa Ziehau# Add VF and hnX to laggX.
37*c6859569SSepherosa Ziehau#
38*c6859569SSepherosa Ziehau
39*c6859569SSepherosa Ziehaulagg=lagg$hn_unit
40*c6859569SSepherosa Ziehau
41*c6859569SSepherosa Ziehauifconfig $lagg > /dev/null 2>&1
42*c6859569SSepherosa Ziehauif [ $? -ne 0 ]
43*c6859569SSepherosa Ziehauthen
44*c6859569SSepherosa Ziehau	#
45*c6859569SSepherosa Ziehau	# No laggX, create it now.
46*c6859569SSepherosa Ziehau	#
47*c6859569SSepherosa Ziehau	ifconfig $lagg create > /dev/null 2>&1
48*c6859569SSepherosa Ziehau	if [ $? -ne 0 ]
49*c6859569SSepherosa Ziehau	then
50*c6859569SSepherosa Ziehau		echo "$lagg creation failed"
51*c6859569SSepherosa Ziehau		exit 1
52*c6859569SSepherosa Ziehau	fi
53*c6859569SSepherosa Ziehau
54*c6859569SSepherosa Ziehau	#
55*c6859569SSepherosa Ziehau	# Configure laggX (failover), add hnX and VF to it.
56*c6859569SSepherosa Ziehau	#
57*c6859569SSepherosa Ziehau	ifconfig $lagg laggproto failover laggport $hn laggport $vf
58*c6859569SSepherosa Ziehau	ifconfig $lagg inet6 no_dad
59*c6859569SSepherosa Ziehau
60*c6859569SSepherosa Ziehau	#
61*c6859569SSepherosa Ziehau	# Stop dhclient on hnX, if any.
62*c6859569SSepherosa Ziehau	#
63*c6859569SSepherosa Ziehau	pidfile=/var/run/dhclient.$hn.pid
64*c6859569SSepherosa Ziehau	if [ -f $pidfile ]
65*c6859569SSepherosa Ziehau	then
66*c6859569SSepherosa Ziehau		kill -TERM `cat $pidfile`
67*c6859569SSepherosa Ziehau	fi
68*c6859569SSepherosa Ziehau
69*c6859569SSepherosa Ziehau	#
70*c6859569SSepherosa Ziehau	# Remove all configured IPv4 addresses on hnX, e.g.
71*c6859569SSepherosa Ziehau	# configured by dhclient.  laggX will take over the
72*c6859569SSepherosa Ziehau	# network operations.
73*c6859569SSepherosa Ziehau	#
74*c6859569SSepherosa Ziehau	while true
75*c6859569SSepherosa Ziehau	do
76*c6859569SSepherosa Ziehau		ifconfig $hn -alias > /dev/null 2>&1
77*c6859569SSepherosa Ziehau		if [ $? -ne 0 ]
78*c6859569SSepherosa Ziehau		then
79*c6859569SSepherosa Ziehau			break
80*c6859569SSepherosa Ziehau		fi
81*c6859569SSepherosa Ziehau	done
82*c6859569SSepherosa Ziehau
83*c6859569SSepherosa Ziehau	# TODO: Remove IPv6 addresses on hnX
84*c6859569SSepherosa Ziehau
85*c6859569SSepherosa Ziehau	#
86*c6859569SSepherosa Ziehau	# Use hnX's configuration for laggX
87*c6859569SSepherosa Ziehau	#
88*c6859569SSepherosa Ziehau	# NOTE-CUSTOMIZE:
89*c6859569SSepherosa Ziehau	# If this script is used as template for the customized
90*c6859569SSepherosa Ziehau	# per-interface setup, replace this with whatever you
91*c6859569SSepherosa Ziehau	# want to do with the laggX.
92*c6859569SSepherosa Ziehau	#
93*c6859569SSepherosa Ziehau	if dhcpif $hn;
94*c6859569SSepherosa Ziehau	then
95*c6859569SSepherosa Ziehau		ifconfig $lagg up
96*c6859569SSepherosa Ziehau		if syncdhcpif $hn;
97*c6859569SSepherosa Ziehau		then
98*c6859569SSepherosa Ziehau			dhclient $lagg
99*c6859569SSepherosa Ziehau		else
100*c6859569SSepherosa Ziehau			dhclient -b $lagg
101*c6859569SSepherosa Ziehau		fi
102*c6859569SSepherosa Ziehau	else
103*c6859569SSepherosa Ziehau		ifconfig_args=`ifconfig_getargs $hn`
104*c6859569SSepherosa Ziehau		if [ -n "$ifconfig_args" ]
105*c6859569SSepherosa Ziehau		then
106*c6859569SSepherosa Ziehau			ifconfig $lagg $ifconfig_args
107*c6859569SSepherosa Ziehau		fi
108*c6859569SSepherosa Ziehau	fi
109*c6859569SSepherosa Ziehauelse
110*c6859569SSepherosa Ziehau	#
111*c6859569SSepherosa Ziehau	# laggX exists.  Check whether VF was there or not.
112*c6859569SSepherosa Ziehau	# If VF was not added to laggX, add it now.
113*c6859569SSepherosa Ziehau	#
114*c6859569SSepherosa Ziehau	ifconfig $lagg | grep "laggport: $vf" > /dev/null 2>&1
115*c6859569SSepherosa Ziehau	if [ $? -ne 0 ]
116*c6859569SSepherosa Ziehau	then
117*c6859569SSepherosa Ziehau		ifconfig $lagg laggport $vf
118*c6859569SSepherosa Ziehau	fi
119*c6859569SSepherosa Ziehaufi
120