ensure 4 spaces indentation is used everywhere. Change-Id: Ieb48faacb4c96b7b358771d70c17f2f22d0354f4
		
			
				
	
	
		
			116 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			116 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
#!/bin/bash
 | 
						|
 | 
						|
set -eu
 | 
						|
set -o pipefail
 | 
						|
 | 
						|
INTERFACE=${1:-} #optional, if not specified configure all available interfaces
 | 
						|
ENI_FILE="/etc/network/interfaces"
 | 
						|
 | 
						|
PATH=/sbin:$PATH
 | 
						|
 | 
						|
if [ -d "/etc/network" ]; then
 | 
						|
    CONF_TYPE="eni"
 | 
						|
elif [ -d "/etc/sysconfig/network-scripts/" ]; then
 | 
						|
    CONF_TYPE="netscripts"
 | 
						|
else
 | 
						|
    echo "Unsupported network configuration type!"
 | 
						|
    exit 1
 | 
						|
fi
 | 
						|
 | 
						|
ARGS="$0 $@"
 | 
						|
 | 
						|
function serialize_me() {
 | 
						|
    if [ "$CONF_TYPE" == "eni" ]; then
 | 
						|
        # Serialize runs so that we don't miss hot-add interfaces
 | 
						|
        FLOCKED=${FLOCKED:-}
 | 
						|
        if [ -z "$FLOCKED" ] ; then
 | 
						|
            FLOCKED=true exec flock -x $ENI_FILE $ARGS
 | 
						|
        fi
 | 
						|
    fi
 | 
						|
}
 | 
						|
 | 
						|
function get_if_link() {
 | 
						|
    cat /sys/class/net/${1}/carrier
 | 
						|
}
 | 
						|
 | 
						|
function enable_interface() {
 | 
						|
    local interface=$1
 | 
						|
 | 
						|
    serialize_me
 | 
						|
    if [ "$CONF_TYPE" == "eni" ]; then
 | 
						|
        printf "auto $interface\niface $interface inet dhcp\n\n" >>$ENI_FILE
 | 
						|
    elif [ "$CONF_TYPE" == "netscripts" ]; then
 | 
						|
        printf "DEVICE=\"$interface\"\nBOOTPROTO=\"dhcp\"\nONBOOT=\"yes\"\nTYPE=\"Ethernet\"" >"/etc/sysconfig/network-scripts/ifcfg-$interface"
 | 
						|
    fi
 | 
						|
    echo "Configured $1"
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
function disable_interface() {
 | 
						|
    local interface=$1
 | 
						|
 | 
						|
    serialize_me
 | 
						|
    if [ "$CONF_TYPE" == "netscripts" ]; then
 | 
						|
        local IFCFG_FILE="/etc/sysconfig/network-scripts/ifcfg-$interface"
 | 
						|
        if [ -f "$IFCFG_FILE" ]; then
 | 
						|
            rm $IFCFG_FILE
 | 
						|
        else
 | 
						|
                echo "No link detected, skipping"
 | 
						|
        fi
 | 
						|
        else
 | 
						|
        echo "No link detected, skipping"
 | 
						|
    fi
 | 
						|
}
 | 
						|
 | 
						|
function config_exists() {
 | 
						|
    local interface=$1
 | 
						|
    if [ "$CONF_TYPE" == "netscripts" ]; then
 | 
						|
        if [ -f "/etc/sysconfig/network-scripts/ifcfg-$interface" ]; then
 | 
						|
            return 0
 | 
						|
        fi
 | 
						|
    else
 | 
						|
        ifquery $interface >/dev/null 2>&1 && return 0 || return 1
 | 
						|
    fi
 | 
						|
    return 1
 | 
						|
}
 | 
						|
 | 
						|
function inspect_interface() {
 | 
						|
    local interface=$1
 | 
						|
    local mac_addr_type="$(cat /sys/class/net/${interface}/addr_assign_type)"
 | 
						|
 | 
						|
    echo -n "Inspecting interface: $interface..."
 | 
						|
    if config_exists $interface; then
 | 
						|
        echo "Has config, skipping."
 | 
						|
        elif [ "$mac_addr_type" != "0" ]; then
 | 
						|
        echo "Device has generated MAC, skipping."
 | 
						|
        else
 | 
						|
        ip link set dev $interface up &>/dev/null
 | 
						|
        HAS_LINK="$(get_if_link $interface)"
 | 
						|
 | 
						|
        TRIES=10
 | 
						|
        while [ "$HAS_LINK" == "0" -a $TRIES -gt 0 ]; do
 | 
						|
            HAS_LINK="$(get_if_link $interface)"
 | 
						|
            if [ "$HAS_LINK" == "1" ]; then
 | 
						|
                break
 | 
						|
            else
 | 
						|
                sleep 1
 | 
						|
            fi
 | 
						|
                TRIES=$(( TRIES - 1 ))
 | 
						|
        done
 | 
						|
        if [ "$HAS_LINK" == "1" ] ; then
 | 
						|
            enable_interface "$interface"
 | 
						|
        else
 | 
						|
            disable_interface "$interface"
 | 
						|
        fi
 | 
						|
    fi
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
if [ -n "$INTERFACE" ]; then
 | 
						|
    inspect_interface $INTERFACE
 | 
						|
else
 | 
						|
    for iface in $(ls /sys/class/net | grep -v ^lo$); do
 | 
						|
        inspect_interface $iface
 | 
						|
    done
 | 
						|
fi
 |