diff options
author | Roman I Khimov <khimov@altell.ru> | 2009-09-08 19:01:03 +0400 |
---|---|---|
committer | Roman I Khimov <khimov@altell.ru> | 2010-03-25 09:35:30 +0300 |
commit | c2745e97a62e4f5f2f3ef5f536df62ac978e31e7 (patch) | |
tree | eea48682a737fb79cfe62fa2719ba4d3d8c02c23 /recipes/vlan | |
parent | cbdea1efdc7e10e12f8f5352558e205842593098 (diff) |
vlan: add pre-up/post-down/up scripts
Diffstat (limited to 'recipes/vlan')
-rw-r--r-- | recipes/vlan/files/ip | 21 | ||||
-rw-r--r-- | recipes/vlan/files/vlan-post-down | 28 | ||||
-rw-r--r-- | recipes/vlan/files/vlan-pre-up | 61 | ||||
-rw-r--r-- | recipes/vlan/vlan_1.9.bb | 14 |
4 files changed, 122 insertions, 2 deletions
diff --git a/recipes/vlan/files/ip b/recipes/vlan/files/ip new file mode 100644 index 0000000000..d7de05c05a --- /dev/null +++ b/recipes/vlan/files/ip @@ -0,0 +1,21 @@ +#!/bin/sh +# This should probably go into ifupdown +# But usually only those with lots of interfaces (vlans) need these +if [ -d "/proc/sys/net/ipv4/conf/$IFACE" ] +then + if [ -n "$IF_IP_PROXY_ARP" ]; then + if [ "$IF_IP_PROXY_ARP" -eq "1" ]; then + echo 1 > "/proc/sys/net/ipv4/conf/$IFACE/proxy_arp" + else + echo 0 > "/proc/sys/net/ipv4/conf/$IFACE/proxy_arp" + fi + fi + if [ -n "$IF_IP_RP_FILTER" ]; then + if [ "$IF_IP_RP_FILTER" -eq "0" ]; then + echo 0 > "/proc/sys/net/ipv4/conf/$IFACE/rp_filter" + else + echo 1 > "/proc/sys/net/ipv4/conf/$IFACE/rp_filter" + fi + fi +fi + diff --git a/recipes/vlan/files/vlan-post-down b/recipes/vlan/files/vlan-post-down new file mode 100644 index 0000000000..89b16fb1f4 --- /dev/null +++ b/recipes/vlan/files/vlan-post-down @@ -0,0 +1,28 @@ +#!/bin/sh + +# If IFACE is an automagic vlan interface (without the vlan-raw-device +# parameter) then let's try to discover the magic here.. Another way would be +# to just probe for the right device name in /proc/net/vlan + +case "$IFACE" in + # Ignore any alias (#272891) + *:*) + exit 0 + ;; + eth*.0*|bond*.0*|wlan*.0*) + IF_VLAN_RAW_DEVICE=`echo $IFACE|sed "s/\(eth[0-9][0-9]*\)\..*/\1/;s/\(bond[0-9][0-9]*\)\..*/\1/;s/\(wlan[0-9][0-9]*\)\..*/\1/"` + ;; + eth*.*|bond*.*|wlan*.*) + IF_VLAN_RAW_DEVICE=`echo $IFACE|sed "s/\(eth[0-9][0-9]*\)\..*/\1/;s/\(bond[0-9][0-9]*\)\..*/\1/;s/\(wlan[0-9][0-9]*\)\..*/\1/"` + ;; + # Test for vlan raw device (#196890, #292648) + *) + [ -z "$IF_VLAN_RAW_DEVICE" ] && exit 0 + ;; +esac + +if [ ! -x /sbin/vconfig ]; then + exit 0 +fi + +vconfig rem $IFACE diff --git a/recipes/vlan/files/vlan-pre-up b/recipes/vlan/files/vlan-pre-up new file mode 100644 index 0000000000..b977be8cab --- /dev/null +++ b/recipes/vlan/files/vlan-pre-up @@ -0,0 +1,61 @@ +#!/bin/sh + +# Most of this stuff is to enable vlans + +case "$IFACE" in + # Ignore any alias (#272891) which uses <interface>:<alabel> + *:*) + exit 0 + ;; + vlan0*) + vconfig set_name_type VLAN_PLUS_VID + VLANID=`echo $IFACE|sed "s/vlan0*//"` + ;; + vlan*) + vconfig set_name_type VLAN_PLUS_VID_NO_PAD + VLANID=`echo $IFACE|sed "s/vlan0*//"` + ;; + eth*.0*|bond*.0*|wlan*.0*) + vconfig set_name_type DEV_PLUS_VID + VLANID=`echo $IFACE|sed "s/eth[0-9][0-9]*\.0*//g;s/bond[0-9][0-9]*\.0*//;s/wlan[0-9][0-9]*\.0*//"` + IF_VLAN_RAW_DEVICE=`echo $IFACE|sed "s/\(eth[0-9][0-9]*\)\..*/\1/;s/\(bond[0-9][0-9]*\)\..*/\1/;s/\(wlan[0-9][0-9]*\)\..*/\1/"` + ;; + eth*.*|bond*.*|wlan*.*) + vconfig set_name_type DEV_PLUS_VID_NO_PAD + VLANID=`echo $IFACE|sed "s/eth[0-9][0-9]*\.0*//g;s/bond[0-9][0-9]*\.0*//g;s/wlan[0-9][0-9]*\.0*//g"` + IF_VLAN_RAW_DEVICE=`echo $IFACE|sed "s/\(eth[0-9][0-9]*\)\..*/\1/;s/\(bond[0-9][0-9]*\)\..*/\1/;s/\(wlan[0-9][0-9]*\)\..*/\1/"` + ;; + *.0*) + # Silently ignore interfaces which we do not (know how to) support + [ -z "$IF_VLAN_RAW_DEVICE" ] && exit 0 + vconfig set_name_type DEV_PLUS_VID + VLANID=`echo $IFACE|sed "s/[^.]*\.0*//g"` + ;; + *.*) + # Silently ignore interfaces which we do not (know how to) support + [ -z "$IF_VLAN_RAW_DEVICE" ] && exit 0 + vconfig set_name_type DEV_PLUS_VID_NO_PAD + VLANID=`echo $IFACE|sed "s/[^.]*\.0*//g"` + ;; + + *) + exit 0 + ;; +esac + +if [ -n "$IF_VLAN_RAW_DEVICE" ]; then + if [ ! -x /sbin/vconfig ]; then + exit 0 + fi + if ! ip link show dev "$IF_VLAN_RAW_DEVICE" > /dev/null; then + echo "$IF_VLAN_RAW_DEVICE does not exist, unable to create $IFACE" + exit 1 + fi + ip link set up dev $IF_VLAN_RAW_DEVICE + vconfig add $IF_VLAN_RAW_DEVICE $VLANID +fi + +# This is not vlan specific, and should actually go somewhere else. +if [ -n "$IF_HW_MAC_ADDRESS" ]; then + ip link set $IFACE address $IF_HW_MAC_ADDRESS +fi diff --git a/recipes/vlan/vlan_1.9.bb b/recipes/vlan/vlan_1.9.bb index 3a10e898ab..a4f5e5a56c 100644 --- a/recipes/vlan/vlan_1.9.bb +++ b/recipes/vlan/vlan_1.9.bb @@ -4,8 +4,12 @@ PR = "r0" S = "${WORKDIR}/vlan/" -SRC_URI = "http://www.candelatech.com/~greear/vlan/vlan.${PV}.tar.gz \ - " +SRC_URI = " \ + http://www.candelatech.com/~greear/vlan/vlan.${PV}.tar.gz \ + file://ip \ + file://vlan-pre-up \ + file://vlan-post-down \ + " inherit base @@ -20,5 +24,11 @@ do_compile() { do_install() { install -d "${D}${sbindir}" install -m 755 "${S}/vconfig" "${D}${sbindir}/vconfig" + install -d ${D}/${sysconfdir}/network/if-pre-up.d + install -d ${D}/${sysconfdir}/network/if-post-down.d + install -d ${D}/${sysconfdir}/network/if-up.d + install -m 0755 ${WORKDIR}/ip ${D}/${sysconfdir}/network/if-up.d/ + install -m 0755 ${WORKDIR}/vlan-pre-up ${D}/${sysconfdir}/network/if-pre-up.d/vlan + install -m 0755 ${WORKDIR}/vlan-post-down ${D}/${sysconfdir}/network/if-post-down.d/vlan } |