#!/bin/bash source scan-netdev modprobe bonding # All vlans are using netmask /22 MASK=22 CTLPLANE=110 # ctlplane vlan #Fixme: hardcoded #VLANS='110 218 222 226 306 321 480 1000' SPEED=25000 MTU=9000 for VLAN in {10..4000} ; do # Most vLANs if [[ -f /etc/netdev/vlan.$VLAN.csv ]] ; then VLAN_CONF=`grep $SERVER_SERIAL \ /etc/netdev/vlan.$VLAN.csv` else VLAN_CONF= fi [[ -z $VLAN_CONF ]] && continue MY_HOSTNAME=`hostname` #HOSTNAME,SERIAL,IP_ADDRESS,BOND,MODE,SLAVE0,SLAVE1,GW VLAN_HOSTNAME=`cut -d ',' -f 1 <<< $VLAN_CONF` if [[ -n $VLAN_HOSTNAME ]] ; then if [[ "$MY_HOSTNAME" != "$VLAN_HOSTNAME" ]] ; then hostname $VLAN_HOSTNAME fi fi VLAN_IP=`cut -d ',' -f 3 <<< $VLAN_CONF` VLAN_BOND=`cut -d ',' -f 4 <<< $VLAN_CONF` BOND_MODE=`cut -d ',' -f 5 <<< $VLAN_CONF` SLAVE_0=`cut -d ',' -f 6 <<< $VLAN_CONF` SLAVE_1=`cut -d ',' -f 7 <<< $VLAN_CONF` [[ -z $VLAN_BOND ]] && continue if [[ ! -d /sys/class/net/$VLAN_BOND ]] ; then if [[ ! -f /sys/class/net/bonding_masters ]] ; then echo "Missing bonding_masters special file" exit 22 fi echo "+$VLAN_BOND" \ > /sys/class/net/bonding_masters sleep 3 if [[ ! -d /sys/class/net/$VLAN_BOND ]] ; then echo "$VLAN_BOND not available" exit 23 fi MY_MODE=`cut -d ' ' -f 2 /sys/class/net/$VLAN_BOND/bonding/mode` if [[ "$MY_MODE" != "$BOND_MODE" ]] ; then echo $BOND_MODE \ > /sys/class/net/$VLAN_BOND/bonding/mode sleep 2 fi ip link set $VLAN_BOND up [[ -n $MTU ]] && ip link set $VLAN_BOND mtu $MTU if [[ -n $SPEED ]] ; then ethtool -s $SLAVE_0 autoneg off speed $SPEED duplex full ethtool -s $SLAVE_1 autoneg off speed $SPEED duplex full fi sleep 5 ifenslave $VLAN_BOND $SLAVE_0 $SLAVE_1 sleep 5 fi if [[ $VLAN == $CTLPLANE ]] ; then ip addr add $VLAN_IP/$MASK dev $VLAN_BOND GATEWAY=`cut -d ',' -f 8 <<< $VLAN_CONF` if [[ -n $GATEWAY ]] ; then ip route add default via $GATEWAY fi else ip link add link $VLAN_BOND \ name $VLAN_BOND.$VLAN \ type vlan id $VLAN ip link set $VLAN_BOND.$VLAN up ip addr add $VLAN_IP/$MASK dev $VLAN_BOND.$VLAN fi done systemctl restart sshd