802.1Q VLAN implementation for Linux

Updated Sept 13, 2005
Release: 1.9

Translations (or so they claim!)

PLUG:   Check out LANforge traffic generation and WAN simulation test equipment based on the Linux operating system:
Candela Technologies
LANforge is similar to Charriot and Smartbits for traffic generation needs. It can generate Ethernet, UDP, TCP, HTTP, FTP, VOIP (SIP, RTP) and other protocols. LANforge-ICE is a WAN emulator and network-impairment test tool. It can inject latency, jitter, packet loss and other network abnormalities in a controlled fashion.

802.1Q VLAN code is now part of the official kernel, and has been for years and years. MAC-VLAN code has been added since around 2.6.29. It is very unlikely that you need to download anything from this site, the packages are left here for posterity's sake. Please send questions and bug reports to the linux network mailing list: netdev@vger.kernel.org.

802.1Q VLANs and MAC-VLANs can be created with the 'ip' utility (vconfig works for vlans, but is crufty and deprecated).

ip link add link eth0 name eth0.5 type vlan id 5
ip link add link eth0 name eth0#1 address 00:aa:bb:cc:dd:ee type macvlan

---- Legacy Section -----

I hear that the 2.2/2.4 kernel patches have worked with these (and other, I'm sure) systems:

Performance: The difference in running traffic over VLANs v/s regular ethernet is very slight. If someone has done some sort of benchmark, I'll be happy to place it here!

VLAN related Resources.


Change Log

VLAN Setup and Configuration

To get started, you will want to download the latest vlan.X.X.tar.gz file (to your $HOME directory.) Unpack it with your favorite commands, for example: tar -xvzf vlan.1.6.tar.gz Alternatively, you can get it from the CVS Repository using something like this:
  1. Install and configure on your machine.
  2. Specify the vlan repository:
    export CVSROOT=:pserver:anonymous@cvs.candelatech.com:/home/cvs_user/vlan
  3. Log in to the repository:
    cvs login     (PASSWORD: anonymous)
  4. Check out the source:
    mkdir vlan; cd vlan; cvs -z3 checkout vlan

Now, you should have a vlan directory in your home directory. You only have to patch the kernel if you are using Linux 2.4.14 or earlier. Now, read the README or other docs to figure out what kernel it patches against. A list of mirrors are kept at www.kernel.org. Unzip and un-tar this in your home directory as well, which should create a linux directory in your $HOME directory. Example: tar -xvzf linux-2.2.14.tar.gz

Now add the VLAN kernel changes to the kernel if your kernel requires it. I finally figured out how to do patches that diff can handle (I think I did it right at least!). You will find the patch in the vlan directory. It will be called: vlan.patch, or something equally straight-foward. Apply the patch to your kernel:

cd $HOME/linux
patch -p 1 < $HOME/vlan/[vlan.patch]

Your new, patched, kernel should be in your INCLUDE path before trying to compile the vconfig program. One way to get things working is to link $HOME/linux to the 'linux' directory that you just un-zipped and patched. A command might be something like: cd $HOME; ln -s /home/greear/kernel/2.4/linux.dev linux

Build the vconfig program in the $HOME/vlan directory:
cd $HOME/vlan

Now, time to compile your new kernel! Use the make xconfig command in your $HOME/linux directory to select your kernel options. The option related to 802.1Q VLANs is found under the Networking options. If the option is not highlighted, make sure you select "Experimental Drivers" in one of the first xconfig menus.

Assuming your kernel compiled cleanly (yell if it didn't and you think my code broke it!!), you are now ready to try it out!! Install your kernel in the normal manner (fix up your /etc/lilo.conf file appropriately and run lilo as root.) Reboot your computer and choose your new kernel.

As your computer comes back to life, there will be little sign that you are now 802.1Q capable, other than a line spit out during the boot process. There should be a config programs in your $HOME/vlan directory: vconfig. vconfig is used to create and destroy VLAN devices. So, lets create a VLAN device on your first ethernet NIC. vconfig<return> will list a short spiel on how to use it. The vconfig command I usually use is:

vconfig add eth0 5

This attempts to create a VLAN device with VLAN-ID of 5 on the eth0 device. If you want to delete a VLAN, use something like:

vconfig rem eth0.5

You will also need to give it an ip, eg: ifconfig -i eth0.5
and configure it UP: ifconfig -i eth0.5 up

NOTE: You can get lots of VLAN related configuration information from the /proc/net/vlan/* files by using 'cat' or 'more' to look at them.

Please get in contact with me if you have suggestions, patches, or other comments.

greearb@candelatech.com   Ben Greear's Home Page
Last modified: Fri Jul 2 15:26:14 PDT 2021