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