vconfig is deprecated. Please use iproute.
- /sbin/vconfig add ${PHYSDEV} ${VID}
+ ip link add dev ${DEVICE} link ${PHYSDEV} type vlan id ${VID}
Am 21.05.2012 11:14, schrieb Cong Wang:
> From: Cong Wang <[email protected]>
>
> This patch adds basic vlan support in network module.
>
> The cmdline syntax for vlan is:
>
> vlan=<vlanname>[:<phydevice>]
>
> for an example:
>
> vlan=eth0.2:eth0
>
> or
> vlan=eth0.2
>
> This is just the basic syntax, vlan has other styles of
> naming, like "vlan2". We need to extend the syntax in the future,
> this patch is just a starter. ;-)
>
> TODO: Add doc for vlan= cmdline
>
> Any comments?
>
> Cc: Dave Young <[email protected]>
> Cc: Harald Hoyer <[email protected]>
> Signed-off-by: Cong Wang <[email protected]>
>
> ---
> modules.d/40network/ifup.sh | 18 +++++++++++++
> modules.d/40network/module-setup.sh | 5 +++-
> modules.d/40network/net-genrules.sh | 5 ++++
> modules.d/40network/parse-vlan.sh | 46
> +++++++++++++++++++++++++++++++++++
> 4 files changed, 73 insertions(+), 1 deletions(-)
> create mode 100644 modules.d/40network/parse-vlan.sh
>
> diff --git a/modules.d/40network/ifup.sh b/modules.d/40network/ifup.sh
> index 71b869d..aab0dfc 100755
> --- a/modules.d/40network/ifup.sh
> +++ b/modules.d/40network/ifup.sh
> @@ -40,6 +40,17 @@ if [ -e /tmp/bridge.info ]; then
> fi
> fi
>
> +if [ -e /tmp/vlan.info ]; then
> + . /tmp/vlan.info
> + if [ "$netif" = "$phydevice" ]; then
> + if [ "$netif" = "$bondname" ] && [ -n "$DO_BOND_SETUP" ] ; then
> + : # We need to really setup bond (recursive call)
> + else
> + netif="$vlanname"
> + fi
> + fi
> +fi
> +
> # disable manual ifup while netroot is set for simplifying our logic
> # in netroot case we prefer netroot to bringup $netif automaticlly
> [ -n "$2" -a "$2" = "-m" ] && [ -z "$netroot" ] && manualup="$2"
> @@ -178,6 +189,13 @@ if [ "$netif" = "$bridgename" ] && [ ! -e
> /tmp/net.$bridgename.up ]; then
> brctl addif $bridgename $ethname
> fi
>
> +if [ "$netif" = "$vlanname" ] && [ ! -e /tmp/net.$vlanname.up ]; then
> + modprobe 8021q
> + ip link set "$phydevice" up
> + wait_for_if_up "$phydevice"
> + vconfig add "$phydevice" "${vlanname##*.}"
> +fi
> +
> # No ip lines default to dhcp
> ip=$(getarg ip)
>
> diff --git a/modules.d/40network/module-setup.sh
> b/modules.d/40network/module-setup.sh
> index d49b594..07cdc7f 100755
> --- a/modules.d/40network/module-setup.sh
> +++ b/modules.d/40network/module-setup.sh
> @@ -68,12 +68,14 @@ installkernel() {
> instmods ipv6
> # bonding
> instmods bonding
> + # vlan
> + instmods 8021q
> }
>
> install() {
> local _arch _i _dir
> dracut_install ip arping tr dhclient
> - dracut_install -o brctl ifenslave
> + dracut_install -o brctl ifenslave vconfig
> inst "$moddir/ifup.sh" "/sbin/ifup"
> inst "$moddir/netroot.sh" "/sbin/netroot"
> inst "$moddir/dhclient-script.sh" "/sbin/dhclient-script"
> @@ -82,6 +84,7 @@ install() {
> inst_hook pre-udev 50 "$moddir/ifname-genrules.sh"
> inst_hook pre-udev 60 "$moddir/net-genrules.sh"
> inst_hook cmdline 91 "$moddir/dhcp-root.sh"
> + inst_hook cmdline 95 "$moddir/parse-vlan.sh"
> inst_hook cmdline 96 "$moddir/parse-bond.sh"
> inst_hook cmdline 97 "$moddir/parse-bridge.sh"
> inst_hook cmdline 98 "$moddir/parse-ip-opts.sh"
> diff --git a/modules.d/40network/net-genrules.sh
> b/modules.d/40network/net-genrules.sh
> index 7176681..142634e 100755
> --- a/modules.d/40network/net-genrules.sh
> +++ b/modules.d/40network/net-genrules.sh
> @@ -31,6 +31,11 @@ fix_bootif() {
> IFACES=${bondslaves%% *}
> fi
>
> + if [ -e /tmp/vlan.info ]; then
> + . /tmp/vlan.info
> + IFACES=$phydevice
> + fi
> +
> ifup='/sbin/ifup $env{INTERFACE}'
> [ -z "$netroot" ] && ifup="$ifup -m"
>
> diff --git a/modules.d/40network/parse-vlan.sh
> b/modules.d/40network/parse-vlan.sh
> new file mode 100644
> index 0000000..efe7bfa
> --- /dev/null
> +++ b/modules.d/40network/parse-vlan.sh
> @@ -0,0 +1,46 @@
> +#!/bin/sh
> +#
> +# Format:
> +# vlan=<vlanname>[:<phydevice>]
> +#
> +
> +# return if vlan already parsed
> +[ -n "$vlanname" ] && return
> +
> +# Check if vlan parameter is valid
> +if getarg vlan= >/dev/null ; then
> + if [ -z "$netroot" ] ; then
> + die "No netboot configured, vlan is invalid"
> + fi
> + command -v vconfig >/dev/null 2>&1 || die "No 'vconfig' installed"
> +fi
> +
> +parsevlan() {
> + local v=${1}:
> + set --
> + while [ -n "$v" ]; do
> + set -- "$@" "${v%%:*}"
> + v=${v#*:}
> + done
> +
> + unset vlanname phydevice
> + case $# in
> + 1) vlanname=$1; phydevice="${1%.*}" ;;
> + 2) vlanname=$1; phydevice=$2 ;;
> + *) die "vlan= requires one or two parameters" ;;
> + esac
> +}
> +
> +unset vlanname phydevice
> +
> +if getarg vlan >/dev/null; then
> + # Read vlan= parameters if they exist
> + vlan="$(getarg vlan=)"
> + if [ ! "$vlan" = "vlan" ]; then
> + parsevlan "$(getarg vlan=)"
> + fi
> +
> + echo "vlanname=\"$vlanname\"" > /tmp/vlan.info
> + echo "phydevice=\"$phydevice\"" >> /tmp/vlan.info
> + return
> +fi
--
To unsubscribe from this list: send the line "unsubscribe initramfs" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html