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