66 lines
1.3 KiB
Bash
Executable file
66 lines
1.3 KiB
Bash
Executable file
#!/bin/sh
|
|
|
|
[ -n "$VERBOSE" ] && set -x
|
|
|
|
IF_LINK_OPTIONS="$IF_LINK_OPTIONS"
|
|
[ -n "$IF_MTU" ] && IF_LINK_OPTIONS="$IF_LINK_OPTIONS mtu $IF_MTU"
|
|
|
|
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|post-down)
|
|
UP_DOWN="${PHASE##*-}"
|
|
|
|
if is_vlan; then
|
|
ADD_DEL="add"
|
|
[ "$UP_DOWN" = "down" ] && ADD_DEL="delete"
|
|
|
|
if [ "$UP_DOWN" = "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
|
|
fi
|
|
|
|
if ! [ -d /proc/net/vlan ]; then
|
|
echo "Loading 8021q kernel module for VLAN support"
|
|
${MOCK} modprobe 8021q
|
|
fi
|
|
|
|
${MOCK} ip link $ADD_DEL link "$IF_VLAN_RAW_DEVICE" name "$IFACE" type vlan id "$IF_VLAN_ID"
|
|
[ "$UP_DOWN" = "up" ] && ${MOCK} ip link set $UP_DOWN dev $IFACE $IF_LINK_OPTIONS
|
|
else
|
|
${MOCK} ip link set $UP_DOWN dev $IFACE $IF_LINK_OPTIONS
|
|
fi
|
|
;;
|
|
depend)
|
|
if is_vlan; then
|
|
echo "$IF_VLAN_RAW_DEVICE"
|
|
fi
|
|
;;
|
|
esac
|