xref: /freebsd/contrib/hyperv/tools/scripts/hyperv_vfattach (revision 0275f9dbf73b01e9478dc7d6ab5fab4f8e077448)
1*c6859569SSepherosa Ziehau#!/bin/sh
2*c6859569SSepherosa Ziehau
3*c6859569SSepherosa Ziehau#
4*c6859569SSepherosa Ziehau# If transparent VF is enabled, don't do anything.
5*c6859569SSepherosa Ziehau#
6*c6859569SSepherosa Ziehau
7*c6859569SSepherosa Ziehausysctl -n hw.hn.vf_transparent > /dev/null 2>&1
8*c6859569SSepherosa Ziehauif [ $? -ne 0 ]
9*c6859569SSepherosa Ziehauthen
10*c6859569SSepherosa Ziehau	# Old kernel; no transparent VF.
11*c6859569SSepherosa Ziehau	vf_transparent=0
12*c6859569SSepherosa Ziehauelse
13*c6859569SSepherosa Ziehau	vf_transparent=`sysctl -n hw.hn.vf_transparent`
14*c6859569SSepherosa Ziehaufi
15*c6859569SSepherosa Ziehau
16*c6859569SSepherosa Ziehauif [ $vf_transparent -ne 0 ]
17*c6859569SSepherosa Ziehauthen
18*c6859569SSepherosa Ziehau	# Transparent VF; done!
19*c6859569SSepherosa Ziehau	exit 0
20*c6859569SSepherosa Ziehaufi
21*c6859569SSepherosa Ziehau
22*c6859569SSepherosa Ziehauiface=$1
23*c6859569SSepherosa Ziehaudelay=$2
24*c6859569SSepherosa Ziehau
25*c6859569SSepherosa Ziehauif [ $delay -gt 0 ]
26*c6859569SSepherosa Ziehauthen
27*c6859569SSepherosa Ziehau	#
28*c6859569SSepherosa Ziehau	# Delayed VF up.
29*c6859569SSepherosa Ziehau	#
30*c6859569SSepherosa Ziehau	sleep $delay
31*c6859569SSepherosa Ziehau	ifconfig $iface up
32*c6859569SSepherosa Ziehau	# Done!
33*c6859569SSepherosa Ziehau	exit $?
34*c6859569SSepherosa Ziehaufi
35*c6859569SSepherosa Ziehau
36*c6859569SSepherosa Ziehau#
37*c6859569SSepherosa Ziehau# Check to see whether $iface is a VF or not.
38*c6859569SSepherosa Ziehau# If $iface is a VF, bring it up now.
39*c6859569SSepherosa Ziehau#
40*c6859569SSepherosa Ziehau
41*c6859569SSepherosa Ziehau# for hyperv_vf_delay
42*c6859569SSepherosa Ziehau. /etc/rc.conf
43*c6859569SSepherosa Ziehau
44*c6859569SSepherosa Ziehausysctl -n hw.hn.vflist > /dev/null 2>&1
45*c6859569SSepherosa Ziehauif [ $? -ne 0 ]
46*c6859569SSepherosa Ziehauthen
47*c6859569SSepherosa Ziehau	# Old kernel; nothing could be done properly.
48*c6859569SSepherosa Ziehau	exit 0
49*c6859569SSepherosa Ziehaufi
50*c6859569SSepherosa Ziehauvf_list=`sysctl -n hw.hn.vflist`
51*c6859569SSepherosa Ziehau
52*c6859569SSepherosa Ziehaufor vf in $vf_list
53*c6859569SSepherosa Ziehaudo
54*c6859569SSepherosa Ziehau	if [ $vf = $iface ]
55*c6859569SSepherosa Ziehau	then
56*c6859569SSepherosa Ziehau		#
57*c6859569SSepherosa Ziehau		# Linger a little bit (at least 2 seconds) mainly to
58*c6859569SSepherosa Ziehau		# make sure that $iface is fully attached.
59*c6859569SSepherosa Ziehau		#
60*c6859569SSepherosa Ziehau		# NOTE:
61*c6859569SSepherosa Ziehau		# In Azure hyperv_vf_delay should be configured to a
62*c6859569SSepherosa Ziehau		# large value, e.g. 120 seconds, to avoid racing cloud
63*c6859569SSepherosa Ziehau		# agent goofs.
64*c6859569SSepherosa Ziehau		#
65*c6859569SSepherosa Ziehau		test $hyperv_vf_delay -ge 2 > /dev/null 2>&1
66*c6859569SSepherosa Ziehau		if [ $? -ne 0 ]
67*c6859569SSepherosa Ziehau		then
68*c6859569SSepherosa Ziehau			hyperv_vf_delay=2
69*c6859569SSepherosa Ziehau		fi
70*c6859569SSepherosa Ziehau		#
71*c6859569SSepherosa Ziehau		# NOTE:
72*c6859569SSepherosa Ziehau		# "(sleep ..; ifconfig .. up) > /dev/null 2>&1 &"
73*c6859569SSepherosa Ziehau		# does _not_ work.
74*c6859569SSepherosa Ziehau		#
75*c6859569SSepherosa Ziehau		daemon -f /usr/libexec/hyperv/hyperv_vfattach \
76*c6859569SSepherosa Ziehau		    $iface $hyperv_vf_delay
77*c6859569SSepherosa Ziehau		break
78*c6859569SSepherosa Ziehau	fi
79*c6859569SSepherosa Ziehaudone
80