summaryrefslogtreecommitdiff
path: root/emulators/virtualbox-ose-kmod/files/patch-src-VBox-HostDrivers-VBoxNetFlt-freebsd-VBoxNetFlt-freebsd.c
diff options
context:
space:
mode:
Diffstat (limited to 'emulators/virtualbox-ose-kmod/files/patch-src-VBox-HostDrivers-VBoxNetFlt-freebsd-VBoxNetFlt-freebsd.c')
-rw-r--r--emulators/virtualbox-ose-kmod/files/patch-src-VBox-HostDrivers-VBoxNetFlt-freebsd-VBoxNetFlt-freebsd.c72
1 files changed, 0 insertions, 72 deletions
diff --git a/emulators/virtualbox-ose-kmod/files/patch-src-VBox-HostDrivers-VBoxNetFlt-freebsd-VBoxNetFlt-freebsd.c b/emulators/virtualbox-ose-kmod/files/patch-src-VBox-HostDrivers-VBoxNetFlt-freebsd-VBoxNetFlt-freebsd.c
deleted file mode 100644
index 6cb5a1ebd30c..000000000000
--- a/emulators/virtualbox-ose-kmod/files/patch-src-VBox-HostDrivers-VBoxNetFlt-freebsd-VBoxNetFlt-freebsd.c
+++ /dev/null
@@ -1,72 +0,0 @@
-Add VLAN trunking support to vboxnetflt
-
-See: http://lists.freebsd.org/pipermail/freebsd-emulation/2012-April/009698.html
-See: http://lists.freebsd.org/pipermail/freebsd-emulation/2013-May/010605.html
-Submitted by: Landon J Fuller <landonf at plausible.coop>
---- ./src/VBox/HostDrivers/VBoxNetFlt/freebsd/VBoxNetFlt-freebsd.c.orig 2013-04-12 06:38:11.000000000 -0400
-+++ ./src/VBox/HostDrivers/VBoxNetFlt/freebsd/VBoxNetFlt-freebsd.c 2013-05-25 20:14:52.152180452 -0400
-@@ -51,6 +51,7 @@
- #include <net/if_dl.h>
- #include <net/if_types.h>
- #include <net/ethernet.h>
-+#include <net/if_vlan_var.h>
-
- #include <netgraph/ng_message.h>
- #include <netgraph/netgraph.h>
-@@ -427,6 +428,8 @@
- struct ifnet *ifp = pThis->u.s.ifp;
- unsigned int cSegs = 0;
- bool fDropIt = false, fActive;
-+ bool is_vl_tagged = false;
-+ uint16_t vl_tag;
- PINTNETSG pSG;
-
- VBOXCURVNET_SET(ifp->if_vnet);
-@@ -439,6 +442,19 @@
- if (m == NULL)
- break;
-
-+ /* Prepend a VLAN header for consumption by the virtual switch */
-+ if (m->m_flags & M_VLANTAG) {
-+ vl_tag = m->m_pkthdr.ether_vtag;
-+ is_vl_tagged = true;
-+
-+ 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++;
-@@ -453,6 +469,27 @@
- vboxNetFltFreeBSDMBufToSG(pThis, m, pSG, cSegs, 0);
- fDropIt = pThis->pSwitchPort->pfnRecv(pThis->pSwitchPort, NULL /* pvIf */, pSG, INTNETTRUNKDIR_WIRE);
- RTMemTmpFree(pSG);
-+
-+ /* Restore the VLAN flags before re-injecting the packet */
-+ if (is_vl_tagged && !fDropIt) {
-+ struct ether_vlan_header *vl_hdr;
-+
-+ /* This shouldn't fail, as the header was just prepended */
-+ if (m->m_len < sizeof(*vl_hdr) && (m = m_pullup(m, sizeof(*vl_hdr))) == NULL) {
-+ printf("vboxflt: unable to pullup VLAN header\n");
-+ m_freem(m);
-+ break;
-+ }
-+
-+ /* Copy the MAC dhost/shost over the 802.1q field */
-+ vl_hdr = mtod(m, struct ether_vlan_header *);
-+ bcopy((char *)vl_hdr, (char *)vl_hdr + ETHER_VLAN_ENCAP_LEN, ETHER_HDR_LEN - ETHER_TYPE_LEN);
-+ m_adj(m, ETHER_VLAN_ENCAP_LEN);
-+
-+ m->m_pkthdr.ether_vtag = vl_tag;
-+ m->m_flags |= M_VLANTAG;
-+ }
-+
- if (fDropIt)
- m_freem(m);
- else