#!/bin/sh
echo ==== >> /var/hotplug.log
env >> /var/hotplug.log

# set to '1' to enable USB thumbdrive automount
AUTOMOUNT=0
AUTOMOUNT_POINT="/mnt/usb"
SAVED_DEVPATH="/tmp/saved-usb-devpath"
AUTOMOUNT_FS="vfat"

# network hotplug
# NOTE: this only operates on real NICs (ethN), not lo/br0/sit0/etc.

if [ "$1" = "net" -a -e /sys/class/net/$INTERFACE/device ]; then
	if [ "$ACTION" = "add" ]; then
		if [[ "$INTERFACE" == "usbeth"* ]] && [[ "$DEVPATH" == *"usb"* ]]; then
			echo 0 > /proc/sys/net/ipv6/conf/$INTERFACE/forwarding
			echo 0 > /proc/sys/net/ipv4/conf/$INTERFACE/forwarding
			cmdline=`cat /proc/cmdline`
			if [[ "$cmdline" != *nfsroot=* ]] && [[ "$cmdline" != "*root=/dev/nfs*" ]]; then
				if [ ! -f "/proc/device-tree/subsystem" ]; then
					/sbin/ifup $INTERFACE
				else
					# Only bring iface up if not doing platformboot
					# i.e. ony bring up for initrd kernel
					grep platformboot /proc/cmdline >/dev/null 2>&1
					if [[ "0" != "$?" ]]; then
						/sbin/ifup $INTERFACE
					fi
				fi
			fi
		fi
	elif [ "$ACTION" = "remove" ]; then
		/sbin/ifdown $INTERFACE
        elif [ "$ACTION" = "move" ]; then
		# USB eth NIC is renamed ethX -> extethX. We rename it to usbethX
		if [[ "$INTERFACE" == "exteth"* ]] && [[ "$DEVPATH" == *"usb"* ]]; then
			IFNUM=${INTERFACE: -1}
			ip link set dev $INTERFACE name usbeth$IFNUM
			echo 0 > /proc/sys/net/ipv6/conf/$INTERFACE/forwarding
			echo 0 > /proc/sys/net/ipv4/conf/$INTERFACE/forwarding
			cmdline=`cat /proc/cmdline`
			if [[ "$cmdline" != *nfsroot=* ]] && [[ "$cmdline" != "*root=/dev/nfs*" ]]; then
				if [ ! -f "/proc/device-tree/subsystem" ]; then
					/sbin/ifup $INTERFACE
				else
					# Only bring iface up if not doing platformboot
					# i.e. ony bring up for initrd kernel
					grep platformboot /proc/cmdline >/dev/null 2>&1
					if [[ "0" != "$?" ]]; then
						/sbin/ifup $INTERFACE
					fi
				fi
			fi
		fi
	fi
fi

# USB automount (only works with bash)

if [ -z "$BASH_VERSION" ]; then
	exec /sbin/mdev "$@"
fi

if [[ "$ACTION" = "remove" && "$1" = "block" && -e $SAVED_DEVPATH ]]; then
	USB_DEVPATH=`cat $SAVED_DEVPATH`
	if [[ "$DEVPATH" = "$USB_DEVPATH" ]]; then
		rm -f $SAVED_DEVPATH
		exec umount -l ${AUTOMOUNT_POINT}
	fi
fi

# PHYSDEV* vars were removed in 2.6.37
if [ -z "$PHYSDEVPATH" ]; then
	# for DEVPATH = /block/sda/sda1
	PHYSDEVPATH=`readlink /sys/$DEVPATH/../device`
	PHYSDEVDRIVER=`readlink /sys/$DEVPATH/../device/driver`
fi

if [[ "$AUTOMOUNT" = "1" && "$1" = "block" && "$ACTION" = "add" && \
	! -e $SAVED_DEVPATH && "$PHYSDEVPATH" = *usb* && \
	"$PHYSDEVDRIVER" = *sd && $[ ($MINOR % 16) == 1 ] ]]; then

	DEV=${DEVPATH##*/}
	mdev "$@"
	echo $DEVPATH > $SAVED_DEVPATH
	exec mount -t ${AUTOMOUNT_FS} /dev/${DEV} ${AUTOMOUNT_POINT}
fi

exec /sbin/mdev "$@"
