[1/2] udev: Add hotplugging for VLAN devices
Message ID | 1438775121-14063-1-git-send-email-michael.tremer@ipfire.org |
---|---|
State | Accepted |
Commit | 36f7fe6a38c7923ac0e25a677484542f9388520a |
Headers |
Return-Path: <development-bounces@lists.ipfire.org> Received: from mail01.ipfire.org (mail01.tremer.info [172.28.1.200]) by septima.ipfire.org (Postfix) with ESMTP id CA41B61FE3 for <patchwork@ipfire.org>; Wed, 5 Aug 2015 13:45:44 +0200 (CEST) Received: from hedwig.ipfire.org (localhost [IPv6:::1]) by mail01.ipfire.org (Postfix) with ESMTP id 8A0D824C8; Wed, 5 Aug 2015 13:45:44 +0200 (CEST) Received: from hughes.lan (5751a3c7.skybroadband.com [87.81.163.199]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail01.ipfire.org (Postfix) with ESMTPSA id 5A78C2441; Wed, 5 Aug 2015 13:45:42 +0200 (CEST) From: Michael Tremer <michael.tremer@ipfire.org> To: development@lists.ipfire.org Subject: [PATCH 1/2] udev: Add hotplugging for VLAN devices Date: Wed, 5 Aug 2015 12:45:20 +0100 Message-Id: <1438775121-14063-1-git-send-email-michael.tremer@ipfire.org> X-Mailer: git-send-email 2.4.3 X-BeenThere: development@lists.ipfire.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: IPFire development talk <development.lists.ipfire.org> List-Unsubscribe: <http://lists.ipfire.org/mailman/options/development>, <mailto:development-request@lists.ipfire.org?subject=unsubscribe> List-Archive: <http://lists.ipfire.org/pipermail/development/> List-Post: <mailto:development@lists.ipfire.org> List-Help: <mailto:development-request@lists.ipfire.org?subject=help> List-Subscribe: <http://lists.ipfire.org/mailman/listinfo/development>, <mailto:development-request@lists.ipfire.org?subject=subscribe> Cc: Michael Tremer <michael.tremer@ipfire.org> Errors-To: development-bounces@lists.ipfire.org Sender: "Development" <development-bounces@lists.ipfire.org> |
Message
Michael Tremer
Aug. 5, 2015, 9:45 p.m. UTC
The VLAN devices will now automatically be created after
a parent device has been added.
Mainly this will resolve a race-condition between udev
initialising the network adapters and sysvinit running
scripts that will do the initialisation of the VLAN.
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
---
config/rootfiles/common/udev | 1 +
config/udev/60-net.rules | 4 ++
config/udev/network-hotplug-vlan | 87 ++++++++++++++++++++++++++++++++++++++++
lfs/udev | 2 +
4 files changed, 94 insertions(+)
create mode 100644 config/udev/network-hotplug-vlan
Comments
Hello guys, could someone please review this patch? This is a result from a bug report on the forum and supposed to resolve a race-condition. Someone has already confirmed that this works, but I want to have more feedback before merging this into the next tree. http://forum.ipfire.org/viewtopic.php?f=6&t=14459 Best, -Michael On Wed, 2015-08-05 at 12:45 +0100, Michael Tremer wrote: > The VLAN devices will now automatically be created after > a parent device has been added. > > Mainly this will resolve a race-condition between udev > initialising the network adapters and sysvinit running > scripts that will do the initialisation of the VLAN. > > Signed-off-by: Michael Tremer <michael.tremer@ipfire.org> > --- > config/rootfiles/common/udev | 1 + > config/udev/60-net.rules | 4 ++ > config/udev/network-hotplug-vlan | 87 ++++++++++++++++++++++++++++++++++++++++ > lfs/udev | 2 + > 4 files changed, 94 insertions(+) > create mode 100644 config/udev/network-hotplug-vlan > > diff --git a/config/rootfiles/common/udev b/config/rootfiles/common/udev > index d01c461..4d51954 100644 > --- a/config/rootfiles/common/udev > +++ b/config/rootfiles/common/udev > @@ -29,6 +29,7 @@ lib/udev > #lib/udev/init-net-rules.sh > #lib/udev/mtd_probe > #lib/udev/network-hotplug-rename > +#lib/udev/network-hotplug-vlan > #lib/udev/rule_generator.functions > #lib/udev/rules.d > #lib/udev/rules.d/25-alsa.rules > diff --git a/config/udev/60-net.rules b/config/udev/60-net.rules > index 4f22a1e..dc39ff0 100644 > --- a/config/udev/60-net.rules > +++ b/config/udev/60-net.rules > @@ -1,3 +1,7 @@ > # Call a script that checks for the right name of the new device. > # If it matches the configuration it will be renamed accordingly. > ACTION=="add", SUBSYSTEM=="net", PROGRAM="/lib/udev/network-hotplug-rename", RESULT=="?*", NAME="$result" > + > +# Call a script that will create all virtual devices for a parent device > +# that has just come up. > +ACTION=="add", SUBSYSTEM=="net", PROGRAM="/lib/udev/network-hotplug-vlan" > diff --git a/config/udev/network-hotplug-vlan b/config/udev/network-hotplug-vlan > new file mode 100644 > index 0000000..f7b6a9d > --- /dev/null > +++ b/config/udev/network-hotplug-vlan > @@ -0,0 +1,87 @@ > +#!/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) 2015 IPFire Team <info@ipfire.org> # > +# # > +############################################################################ > + > +[ -n "${INTERFACE}" ] || exit 2 > + > +CONFIG_FILE="/var/ipfire/ethernet/vlans" > + > +# Skip immediately if no configuration file has been found. > +[ -e "${CONFIG_FILE}" ] || exit 0 > + > +eval $(/usr/local/bin/readhash ${CONFIG_FILE}) > + > +for interface in green0 red0 blue0 orange0; do > +> > case "${interface}" in > +> > > green*) > +> > > > PARENT_DEV=${GREEN_PARENT_DEV} > +> > > > VLAN_ID=${GREEN_VLAN_ID} > +> > > > MAC_ADDRESS=${GREEN_MAC_ADDRESS} > +> > > > ;; > +> > > red*) > +> > > > PARENT_DEV=${RED_PARENT_DEV} > +> > > > VLAN_ID=${RED_VLAN_ID} > +> > > > MAC_ADDRESS=${RED_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 > + > +> > # If the parent device does not match the interface that > +> > # has just come up, we will go on for the next one. > +> > [ "${PARENT_DEV}" = "${INTERFACE}" ] || continue > + > +> > # 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." >&2 > +> > > continue > +> > fi > + > +> > if [ -z "${VLAN_ID}" ]; then > +> > > echo "${interface}: You did not set the VLAN ID." >&2 > +> > > continue > +> > fi > + > +> > # Build command line. > +> > command="ip link add link ${PARENT_DEV} name ${interface}" > +> > if [ -n "${MAC_ADDRESS}" ]; then > +> > > command="${command} address ${MAC_ADDRESS}" > +> > fi > +> > command="${command} type vlan id ${VLAN_ID}" > + > +> > echo "Creating VLAN interface ${interface}..." > +> > ${command} > + > +> > # Bring up the parent device. > +> > ip link set ${PARENT_DEV} up > +done > + > +exit 0 > diff --git a/lfs/udev b/lfs/udev > index e58839c..7d5bdbc 100644 > --- a/lfs/udev > +++ b/lfs/udev > @@ -107,6 +107,8 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) > > > # Install network rules. > > > install -v -m 755 $(DIR_SRC)/config/udev/network-hotplug-rename \ > > > > /lib/udev/network-hotplug-rename > +> > install -v -m 755 $(DIR_SRC)/config/udev/network-hotplug-vlan \ > +> > > /lib/udev/network-hotplug-vlan > > > install -v -m 644 $(DIR_SRC)/config/udev/60-net.rules \ > > > > /lib/udev/rules.d >