Add a script to create VLAN interfaces (on console).

This commit is contained in:
Michael Tremer
2012-08-24 15:58:38 +02:00
parent 3eeb913b05
commit d23fc91220
7 changed files with 119 additions and 0 deletions

View File

@@ -0,0 +1,101 @@
#!/bin/bash
############################################################################
# #
# This file is part of the IPFire Firewall. #
# #
# IPFire is free software; you can redistribute it and/or modify #
# it under the terms of the GNU General Public License as published by #
# the Free Software Foundation; either version 2 of the License, or #
# (at your option) any later version. #
# #
# IPFire is distributed in the hope that it will be useful, #
# but WITHOUT ANY WARRANTY; without even the implied warranty of #
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
# GNU General Public License for more details. #
# #
# You should have received a copy of the GNU General Public License #
# along with IPFire; if not, write to the Free Software #
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #
# #
# Copyright (C) 2012 IPFire Team <info@ipfire.org> #
# #
############################################################################
CONFIG_FILE="/var/ipfire/ethernet/vlans"
# Skip immediately if no configuration file has been found.
[ -e "${CONFIG_FILE}" ] || exit 0
eval $(readhash ${CONFIG_FILE})
# This is start or stop.
action=${1}
for interface in green0 blue0 orange0; do
case "${interface}" in
green*)
PARENT_DEV=${GREEN_PARENT_DEV}
VLAN_ID=${GREEN_VLAN_ID}
MAC_ADDRESS=${GREEN_MAC_ADDRESS}
;;
blue*)
PARENT_DEV=${BLUE_PARENT_DEV}
VLAN_ID=${BLUE_VLAN_ID}
MAC_ADDRESS=${BLUE_MAC_ADDRESS}
;;
orange*)
PARENT_DEV=${ORANGE_PARENT_DEV}
VLAN_ID=${ORANGE_VLAN_ID}
MAC_ADDRESS=${ORANGE_MAC_ADDRESS}
;;
esac
case "${action}" in
start)
# Check if the interface does already exists.
# If so, we skip creating it.
if [ -d "/sys/class/net/${interface}" ]; then
echo "Interface ${interface} already exists."
continue
fi
# Check if the parent interface exists.
if [ -z "${PARENT_DEV}" ] || [ ! -d "/sys/class/net/${PARENT_DEV}" ]; then
echo "${interface}: Parent device is not set or does not exist: ${PARENT_DEV}"
continue
fi
if [ -z "${VLAN_ID}" ]; then
echo "${interface}: You did not set the VLAN ID."
continue
fi
echo "Creating VLAN interface ${interface}..."
vconfig add ${PARENT_DEV} ${VLAN_ID}
ip link set ${PARENT_DEV}.${VLAN_ID} name ${interface}
if [ -n "${MAC_ADDRESS}" ]; then
ip link set ${interface} address ${MAC_ADDRESS}
fi
# Bring up the parent device.
ip link set ${PARENT_DEV} up
;;
stop)
if [ ! -e "/proc/net/vlan/${interface}" ]; then
echo "${interface} is not a VLAN interface. Skipping."
continue
fi
echo "Removing VLAN interface ${interface}..."
ip link set ${interface} down
vconfig rem ${interface}
;;
*)
echo "Invalid action: ${action}"
exit 1
;;
esac
done