vconfig - Linux 下的 802.1q 实现配置工具
版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明。
http://windtear.net/archives/2005/07/18/000720.html http://windtear.net/archives/2005/07/18/000720.html
研究过 /sbin/ifup 的话 会发现 ifup 脚本有 vconfig 和 VLAN 支持的判断
(当时搞 ifup 的 bridge 支持也patch过这个脚本
2005-04-08 19:01 hBridge - Linux Ethernet bridging)
# Ethernet 802.1Q VLAN support
if [ -x /sbin/vconfig -a "${VLAN}" = "yes" ]; then
if echo ${DEVICE} | LANG=C egrep -v '(:)' | LANG=C egrep -q 'eth[0-9][0-9]*/.[0-9][0-9]?[0-9]?[0-9]?' ; then
if [ ! -d /proc/net/vlan ]; then
if modprobe 8021q >/dev/null 2>&1 ; then
/sbin/vconfig set_name_type DEV_PLUS_VID_NO_PAD >/dev/null 2>&1 || {
echo $"Could not set 802.1Q VLAN parameters."
}
else
echo $"No 802.1Q VLAN support available in kernel for device ${DEVICE}"
exit 1
fi
fi
VID="`echo ${DEVICE} | /
LANG=C egrep 'eth[0-9]+/.[0-9][0-9]?[0-9]?[0-9]?$' | /
LANG=C sed 's/^[a-z0-9]*/.//g;s/^0*//'`"
PHYSDEV="`echo ${DEVICE} | /
LANG=C egrep 'eth[0-9]+/.[0-9][0-9]?[0-9]?[0-9]?$' | /
LANG=C sed 's//.[a-z0-9]*$//g'`"
is_available ${PHYSDEV} || {
if [ "$?" = "1" ] ; then
echo $"$alias device ${DEVICE} does not seem to be present, delaying initialization."
exit 1
else
exit 0
fi
}
# Link on Physical device needs to be up but no ip required
check_device_down ${PHYSDEV} && {
ip -o link set dev ${PHYSDEV} up
}
if [ ! -f /proc/net/vlan/${DEVICE} ]; then
/sbin/vconfig add ${PHYSDEV} ${VID} || {
(logger -p daemon.info -t ifup /
$"ERROR: could not add vlan ${VID} as ${DEVICE} on dev ${PHYSDEV}" &)&
echo $"ERROR: could not add vlan ${VID} as ${DEVICE} on dev ${PHYSDEV}"
exit 1
}
fi
if [ -f /proc/net/vlan/${DEVICE} ]; then
case "$REORDER_HDR" in
yes|1)
/sbin/vconfig set_flag ${DEVICE} 1 1 || {
(logger -p daemon.info -t ifup /
"WARNING: vconfig not able to enable REORDER_HDR on ${DEVICE}" &)&
}
;;
no|0)
/sbin/vconfig set_flag ${DEVICE} 1 0 || {
(logger -p daemon.info -t ifup /
$"WARNING: vconfig not able to disable REORDER_HDR on ${DEVICE}" &)&
}
;;
esac
fi
fi
fi
vconfig 就是 Linux 下 802.1Q VLAN 实现配置工具
Name : vconfig Relocations: (not relocatable)
Version : 1.6 Vendor: Red Hat, Inc.
Release : 2 Build Date: Sat 01 Feb 2003 06:20:05 AM CST
Install Date: Tue 01 Jun 2004 04:55:57 PM CST Build Host: porky.devel.redhat.com
Group : System Environment/Base Source RPM: vconfig-1.6-2.src.rpm
Size : 170822 License: LGPL
Signature : DSA/SHA1, Mon 24 Feb 2003 02:05:29 PM CST, Key ID 219180cddb42a60e
Packager : Red Hat, Inc.
URL : http://www.candelatech.com/~greear/vlan.html
Summary : Linux 802.1q VLAN configuration utility.
Description :
The vconfig program configures and adjusts 802.1q VLAN parameters.
/sbin/vconfig
/usr/share/doc/vconfig-1.6
/usr/share/doc/vconfig-1.6/CHANGELOG
/usr/share/doc/vconfig-1.6/README
/usr/share/doc/vconfig-1.6/contrib
/usr/share/doc/vconfig-1.6/contrib/CVS
/usr/share/doc/vconfig-1.6/contrib/CVS/Entries
/usr/share/doc/vconfig-1.6/contrib/CVS/Repository
/usr/share/doc/vconfig-1.6/contrib/CVS/Root
/usr/share/doc/vconfig-1.6/contrib/README
/usr/share/doc/vconfig-1.6/contrib/vlan_2.2-full.patch
/usr/share/doc/vconfig-1.6/contrib/vlan_2.2-module.patch
/usr/share/doc/vconfig-1.6/vlan.html
/usr/share/doc/vconfig-1.6/vlan_test.pl
/usr/share/man/man8/vconfig.8.gz
% vconfig
Expecting argc to be 3-5, inclusive. Was: 1
Usage: add [interface-name] [vlan_id]
rem [vlan-name]
set_flag [interface-name] [flag-num] [0 | 1]
set_egress_map [vlan-name] [skb_priority] [vlan_qos]
set_ingress_map [vlan-name] [skb_priority] [vlan_qos]
set_name_type [name-type]
* The [interface-name] is the name of the ethernet card that hosts
the VLAN you are talking about.
* The vlan_id is the identifier (0-4095) of the VLAN you are operating on.
* skb_priority is the priority in the socket buffer (sk_buff).
* vlan_qos is the 3 bit priority in the VLAN header
* name-type: VLAN_PLUS_VID (vlan0005), VLAN_PLUS_VID_NO_PAD (vlan5),
DEV_PLUS_VID (eth0.0005), DEV_PLUS_VID_NO_PAD (eth0.5)
* bind-type: PER_DEVICE # Allows vlan 5 on eth0 and eth1 to be unique.
PER_KERNEL # Forces vlan 5 to be unique across all devices.
* FLAGS: 1 REORDER_HDR When this is set, the VLAN device will move the
ethernet header around to make it look exactly like a real
ethernet device. This may help programs such as DHCPd which
read the raw ethernet packet and make assumptions about the
location of bytes. If you don't need it, don't turn it on, because
there will be at least a small performance degradation. Default
is OFF.
-----> 在eth0接口配置两个vlan 如果没有加载模块会自动加载8021q模块
vconfig add eth0 11
vconfig add eth0 21
-----> 设置参数 REORDER_HDR (默认就是)
vconfig set_flag eth0.11 1 1
vconfig set_flag eth0.21 1 1
-----> 查看一下
cat /proc/net/vlan/eth0.11
cat /proc/net/vlan/eth0.21
-----> 改接口启动配置文件
cd /etc/sysconfig/network-scripts/
cp ifcfg-eth0 ifcfg-eth0.11
perl -pi -e 's/DEVICE=eth0/DEVICE=eth0.11/g' ifcfg-eth0.11
cp ifcfg-eth0 ifcfg-eth0.21
perl -pi -e 's/DEVICE=eth0/DEVICE=eth0.21/g' ifcfg-eth0.21
perl -pi -e 's/IPADDR=/#IPADDR=/g' ifcfg-eth0
perl -pi -e 's/NETMASK=/#NETMASK=/g' ifcfg-eth0
......
-----> 手工切换 这时需要更改交换机配置
ifdown eth0;ifup eth0;ifup eth0.11;ifup eth0.21
-----> 设置下次启动自动加载 8021q 模块
echo VLAN=yes >> /etc/sysconfig/network
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zhongyou2009/archive/2009/11/10/4795194.aspx