GVRP is a protocol that allows automatic learning of VLANs on a network. This is relevant in centrally managed networks or in hosting backbones, where you might have hundreds of VLANs that need to be automatically managed on all to-be-connected nodes. There have been GVRP implementations for linux dating back to at least 2003, and like QinQ or RSTP support and some other important networking features they never made it past the laptop-savvy developer community. After standing in the way for years they finally let it be heard that "GVRP is being deprecated by the IEEE", kinda being proud of sitting on their asses so long that the protocol is being phased out before they manage to take up one of the implementations.
It seems in 2008/2009 there was a set of patches that made it "in", and a buxfix from 2011 clearly suggests those are included in linux-2.6.
What's missing is some extended GVRP usage documentation in the iproute2 man pages. I'll try to fill the gap with as much as I could gather.
So far I could only find the following commands that would create & announce a vlan.
The first problem with those is, that when testing on Ubuntu Natty it's simply not working, and the manpage has no reference to GVRP.
It is solve-able by:
As you can see the first GVRP registration of a non-existant vlan still dangled there when I created the VLAN on my eth0 NIC. Creating the VLAN is whats needed to make ip link talk GVRP, but there must be some big nasty dragons with a bug like that "File exists". Something in kernel space was actually written when it said "Invalid argument" before, otherwise I couldn't imagine how it could trip over the vlan id 200 + gvrp. To make things worse, I spend another hour looking for reasonable documentation, didn't come up with any.
So please handle with care!
Listening to VLAN announcements:
The second problem is that different from some rumors, Linux isn't the center of the universe and so a more important feature is learning about GVRP vlans becoming announced from a network neighbour. There's various daemons for this, that also didn't make it to mainstream linux.
This daemon could help you out:
It's already at version 1.0 and successfully used on FreeBSD for many years.