From d23fc9122091aea3581571e1367d4696d834cd1c Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Fri, 24 Aug 2012 15:58:38 +0200 Subject: [PATCH] Add a script to create VLAN interfaces (on console). --- config/cfgroot/ethernet-vlans | 9 ++ config/rootfiles/common/armv5tel/initscripts | 2 + config/rootfiles/common/i586/initscripts | 2 + config/rootfiles/core/62/filelists/files | 3 + lfs/configroot | 1 + lfs/initscripts | 1 + src/initscripts/init.d/network-vlans | 101 +++++++++++++++++++ 7 files changed, 119 insertions(+) create mode 100644 config/cfgroot/ethernet-vlans create mode 100755 src/initscripts/init.d/network-vlans diff --git a/config/cfgroot/ethernet-vlans b/config/cfgroot/ethernet-vlans new file mode 100644 index 000000000..08cb36a7c --- /dev/null +++ b/config/cfgroot/ethernet-vlans @@ -0,0 +1,9 @@ +#GREEN_PARENT_DEV="eth0" +#GREEN_VLAN_ID=20 +#GREEN_MAC_ADDRESS="00:11:22:33:44:55" +#BLUE_PARENT_DEV="green0" +#BLUE_VLAN_ID=30 +#BLUE_MAC_ADDRESS="00:22:33:44:55:66" +#ORANGE_PARENT_DEV="green0" +#ORANGE_VLAN_ID=40 +#ORANGE_MAC_ADDRESS="00:33:44:55:66:77" diff --git a/config/rootfiles/common/armv5tel/initscripts b/config/rootfiles/common/armv5tel/initscripts index c23416692..ccb7bfb33 100644 --- a/config/rootfiles/common/armv5tel/initscripts +++ b/config/rootfiles/common/armv5tel/initscripts @@ -58,6 +58,7 @@ etc/rc.d/init.d/mountkernfs #etc/rc.d/init.d/mysql #etc/rc.d/init.d/netsnmpd etc/rc.d/init.d/network +etc/rc.d/init.d/network-vlans #etc/rc.d/init.d/networking etc/rc.d/init.d/networking/any etc/rc.d/init.d/networking/blue @@ -213,6 +214,7 @@ etc/rc.d/rcsysinit.d/S70console etc/rc.d/rcsysinit.d/S75firstsetup etc/rc.d/rcsysinit.d/S80localnet etc/rc.d/rcsysinit.d/S90sysctl +etc/rc.d/rcsysinit.d/S91network-vlans etc/rc.d/rc3.d/S15fireinfo #etc/sysconfig etc/sysconfig/createfiles diff --git a/config/rootfiles/common/i586/initscripts b/config/rootfiles/common/i586/initscripts index 63cd27448..653060f72 100644 --- a/config/rootfiles/common/i586/initscripts +++ b/config/rootfiles/common/i586/initscripts @@ -59,6 +59,7 @@ etc/rc.d/init.d/mountkernfs #etc/rc.d/init.d/mysql #etc/rc.d/init.d/netsnmpd etc/rc.d/init.d/network +etc/rc.d/init.d/network-vlans #etc/rc.d/init.d/networking etc/rc.d/init.d/networking/any etc/rc.d/init.d/networking/blue @@ -216,6 +217,7 @@ etc/rc.d/rcsysinit.d/S70console etc/rc.d/rcsysinit.d/S75firstsetup etc/rc.d/rcsysinit.d/S80localnet etc/rc.d/rcsysinit.d/S90sysctl +etc/rc.d/rcsysinit.d/S91network-vlans etc/rc.d/rc3.d/S15fireinfo #etc/sysconfig etc/sysconfig/createfiles diff --git a/config/rootfiles/core/62/filelists/files b/config/rootfiles/core/62/filelists/files index 731daa03c..34f0d1620 100644 --- a/config/rootfiles/core/62/filelists/files +++ b/config/rootfiles/core/62/filelists/files @@ -1,5 +1,8 @@ etc/system-release etc/issue +etc/rc.d/init.d/network-vlans +etc/rc.d/rcsysinit.d/S91network-vlans srv/web/ipfire/cgi-bin/connections.cgi usr/lib/gconv +var/ipfire/ethernet/vlans var/ipfire/outgoing/bin/outgoingfw.pl diff --git a/lfs/configroot b/lfs/configroot index f35361469..90f5afab6 100644 --- a/lfs/configroot +++ b/lfs/configroot @@ -100,6 +100,7 @@ $(TARGET) : cp $(DIR_SRC)/config/cfgroot/time-settings $(CONFIG_ROOT)/time/settings cp $(DIR_SRC)/config/cfgroot/logging-settings $(CONFIG_ROOT)/logging/settings cp $(DIR_SRC)/config/cfgroot/useragents $(CONFIG_ROOT)/proxy/advanced + cp $(DIR_SRC)/config/cfgroot/ethernet-vlans $(CONFIG_ROOT)/ethernet/vlans cp $(DIR_SRC)/langs/list $(CONFIG_ROOT)/langs/ # Oneliner configfiles diff --git a/lfs/initscripts b/lfs/initscripts index 03cec8031..7210c0d2e 100644 --- a/lfs/initscripts +++ b/lfs/initscripts @@ -170,6 +170,7 @@ $(TARGET) : ln -sf ../init.d/firstsetup /etc/rc.d/rcsysinit.d/S75firstsetup ln -sf ../init.d/localnet /etc/rc.d/rcsysinit.d/S80localnet ln -sf ../init.d/sysctl /etc/rc.d/rcsysinit.d/S90sysctl + ln -sf ../init.d/network-vlans /etc/rc.d/rcsysinit.d/S91network-vlans ln -sf ../../dnsmasq /etc/rc.d/init.d/networking/red.up/05-RS-dnsmasq ln -sf ../../firewall /etc/rc.d/init.d/networking/red.up/20-RL-firewall diff --git a/src/initscripts/init.d/network-vlans b/src/initscripts/init.d/network-vlans new file mode 100755 index 000000000..88733e6c3 --- /dev/null +++ b/src/initscripts/init.d/network-vlans @@ -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 # +# # +############################################################################ + +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 -- 2.39.2