#!/bin/sh set -eu # guessing parameters case "$IFACE" in *#*) exit 0 ;; *:*) exit 0 ;; vlan*.*) exit 0 ;; vlan*) GUESSED_VLAN_ID="${IFACE#vlan}" ;; *.*) GUESSED_RAW_DEVICE="${IFACE%.*}" GUESSED_VLAN_ID="${IFACE##*.}" ;; *) [ -n "${IF_VLAN_ID:-}" -o -n "${IF_VLAN_RAW_DEVICE:-}" ] || exit 0 ;; esac RAW_DEVICE="${IF_VLAN_RAW_DEVICE:-${GUESSED_RAW_DEVICE:-}}" VLAN_ID="$(expr ${IF_VLAN_ID:-${GUESSED_VLAN_ID:-0}} + 0 || :)" device_creation_error() { echo "Failed to create vlan device $IFACE on device $RAW_DEVICE with tag $VLAN_ID" exit 1 } if ! [ "$VLAN_ID" -gt 0 ]; then echo "VLAN_ID for $IFACE is not set" exit 1 fi if [ -z "$RAW_DEVICE" ]; then echo "RAW_DEVICE for $IFACE is not set" exit 1 fi if ! ip link show "$RAW_DEVICE" >/dev/null; then echo "Device $RAW_DEVICE for $IFACE does not exist" exit 1 fi if ! [ -d /proc/net/vlan ]; then modprobe 8021q fi trap "device_creation_error" ERR ip link set dev "$RAW_DEVICE" up if [ ! -e "/proc/net/vlan/${IFACE}" ]; then ip link add link "$RAW_DEVICE" name "$IFACE" type vlan id "$VLAN_ID" fi