Date: Fri, 13 Apr 2012 14:51:49 -0400 From: Landon J Fuller <landonf@plausible.coop> To: freebsd-emulation@freebsd.org Subject: [PATCH] VLAN trunking support in VirtualBox vboxnetflt Message-ID: <6BCC0BDE-C9FD-47F0-96AE-88F797EFB074@plausible.coop>
next in thread | raw e-mail | index | archive | help
--Apple-Mail=_6B83BA87-1108-4832-B016-1EF6DA3DFC93 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=us-ascii Howdy, I was looking into trunking VLANs into a virtual machine via bridging, = and noted that transmit of 802.1q tagged packets worked from the guest = VM, but upon reception, the VLAN tag seemed to be stripped before the = packets hit the guest's interface. Taking a look at the netgraph-based bridging implementation, it looks = like the VLAN tag is not being re-inserted at the head of the ethernet = frame prior to handing off the to VirtualBox, and VBox doesn't seem to = have an equivalent 'ether_vtag' field in its INTNETSG struct to handle = this. Thus, to preserve the VLAN tag, I modified vboxNetFltFreeBSDMBufToSG() = to ether_vlanencap() to insert the VLAN tag before handing off to VBox. = With this in place, I was able to successfully trunk VLANs to a virtual = machine.=20 Some caveats: - If using virtio-kmod's if_vtnet, you must set vlanhwfilter (or = promisc) flags on the guest interface before virtualbox will pass the = VLAN tagged packets through. Otherwise, the VBox virtio-net device = implementation will filter out the incoming packets before handing them = to the VM hardware. - VBox's em(4) host implementation does not appear to support = 'hardware' VLAN tagging, but it does declare it. If using a em(4) = virtualized NIC, you must set -vlanhwtag on the guest interface. I welcome someone(s) with more experience than I eyeballing the (tiny) = attached patch. I'm also especially concerned as to whether this should = be considered supported functionality in VBox, or I'm just getting lucky = with the virtio-net code path. Thanks, Landon --Apple-Mail=_6B83BA87-1108-4832-B016-1EF6DA3DFC93 Content-Disposition: attachment; filename*0=patch-src-VBox-HostDrivers-VBoxNetFlt-freebsd-VBoxNetFlt-freebsd; filename*1=.c Content-Type: application/octet-stream; name="patch-src-VBox-HostDrivers-VBoxNetFlt-freebsd-VBoxNetFlt-freebsd.c" Content-Transfer-Encoding: 7bit --- src/VBox/./HostDrivers/VBoxNetFlt/freebsd/VBoxNetFlt-freebsd.c.orig 2012-04-12 17:27:56.035382846 -0400 +++ src/VBox/./HostDrivers/VBoxNetFlt/freebsd/VBoxNetFlt-freebsd.c 2012-04-12 17:30:13.038601065 -0400 @@ -439,6 +439,16 @@ if (m == NULL) break; + /* Preprend a VLAN header for consumption by the virtual switch */ + if (m->m_flags & M_VLANTAG) { + m = ether_vlanencap(m, m->m_pkthdr.ether_vtag); + if (m == NULL) { + printf("vboxflt: unable to prepend VLAN header\n"); + break; + } + m->m_flags &= ~M_VLANTAG; + } + for (m0 = m; m0 != NULL; m0 = m0->m_next) if (m0->m_len > 0) cSegs++; --Apple-Mail=_6B83BA87-1108-4832-B016-1EF6DA3DFC93--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?6BCC0BDE-C9FD-47F0-96AE-88F797EFB074>