#!/bin/sh set -e [ -n "$VERBOSE" ] && set -x IF_LINK_OPTIONS="$IF_LINK_OPTIONS" [ -n "$IF_MTU" ] && IF_LINK_OPTIONS="$IF_LINK_OPTIONS mtu $IF_MTU" [ -n "$IF_HWADDRESS" ] && IF_LINK_OPTIONS="$IF_LINK_OPTIONS address $IF_HWADDRESS" is_vlan() { case "$IFACE" in *#*) return 1 ;; *:*) return 1 ;; vlan*.*) return 1 ;; vlan*) IF_VLAN_ID="${IFACE#vlan}" [ -n "${IF_VLAN_RAW_DEVICE:-}" ] && return 0 return 1 ;; *.*) IF_VLAN_RAW_DEVICE="${IFACE%.*}" IF_VLAN_ID="${IFACE##*.}" return 0 ;; *) [ -z "${IF_VLAN_ID:-}" ] && return 1 [ -z "${IF_VLAN_RAW_DEVICE:-}" ] && return 1 return 0 ;; esac } case "$PHASE" in pre-up) if [ "${IF_LINK_TYPE}" = "dummy" ]; then if [ -d "/sys/class/net/${IFACE}" ]; then iface_type=$(ip -d link show dev "${IFACE}" | head -n3 | tail -n1 | awk '{ print $1 }') if [ "${iface_type}" = 'dummy' ]; then exit 0 fi fi ip link add "${IFACE}" type dummy fi ;; up|down) if is_vlan; then ADD_DEL="add" [ "$PHASE" = "down" ] && ADD_DEL="delete" if [ "$PHASE" = "up" -a -e /sys/class/net/$IFACE ]; then exit 0 fi if [ -z "$MOCK" ]; then if ! ip link show "$IF_VLAN_RAW_DEVICE" >/dev/null; then echo "Device $IF_VLAN_RAW_DEVICE for $IFACE does not exist" exit 1 fi if ! [ -d /proc/net/vlan ]; then echo "Loading 8021q kernel module for VLAN support" ${MOCK} modprobe 8021q fi fi ${MOCK} ip link $ADD_DEL link "$IF_VLAN_RAW_DEVICE" name "$IFACE" type vlan id "$IF_VLAN_ID" [ "$PHASE" = "down" ] && exit 0 fi ${MOCK} ip link set $PHASE dev $IFACE $IF_LINK_OPTIONS ;; post-down) if [ "${IF_LINK_TYPE}" = "dummy" ]; then if [ -d "/sys/class/net/${IFACE}" ]; then ip link del "${IFACE}" fi fi ;; depend) if is_vlan; then echo "$IF_VLAN_RAW_DEVICE" fi ;; esac