#!/bin/sh
set -e
exec 9<$0
flock -x 9
case $2 in
    add)
        dev=$1
        devid=
        if [ -e /sys/class/net/${dev}/device ]; then
            eval $(readlink -f /sys/class/net/${dev}/device | sed 's#/sys/devices/\(.*\)#devid=\1#')
        else
            exit 0
        fi
        while read i n; do
            expr match "$i" "#" >/dev/null && continue || :
            [ -n "${devid}" ] && expr match "${devid}" "$i" >/dev/null && name=$n && break || :
            expr match "@${dev}" "$i" >/dev/null && name=$n && break || :
        done </etc/netdev

        # There is nothing we need to rename this device to
        [ -n "${name}" ] || exit 0

        isup=`expr match "\`/sbin/ip link show ${dev}\`" '.*UP'` || :
        if [ "$isup" -ne 0 ] ; then
            /sbin/ip link set dev ${dev} down
        fi
        /sbin/ip link set dev ${dev} name ${name}
        if [ "$isup" -ne 0 ] ; then
            /sbin/ip link set dev ${name} up
        fi
        if [ -s /etc/nethw ]; then
            read nethw < /etc/nethw
            /sbin/ip link set dev ${name} addr ${nethw}
        fi
        driver="/sys/devices/${devid}/driver"
        if [[ -e ${driver} ]]; then
            dev_driver="$(basename "$(readlink -f ${driver})")"
            case "${dev_driver}" in
                "tg3")
                    /usr/sbin/tg3fixhwaddr "${name}"
                    ;;
                "igc")
                    /usr/sbin/igc_set_irq_affinity "${name}"
                    /usr/sbin/igcfixhwaddr "${name}"
                    ;;
            esac
        fi
        ;;
esac
