How to inject fullsize 802.1q-tagged frame through BPF?
Eugene Perevyazko
john at dnepro.net
Mon May 19 13:07:27 UTC 2008
On Thu, May 15, 2008 at 12:21:23PM -0400, Sam Leffler wrote:
> Eugene Perevyazko wrote:
> > Is there a way to inject full-mtu vlan-tagged frame through BPF on parent
> >device?
> > I'd like not to open several tenths of BPFs for each vlanN if it's
> > possible.
>
> bpf write code in the kernel calculates header size when packets are
> injected. This is likely based on the frames being stock 802.3 so would
> require mods to the bpf code to handle the additional space for the tag.
I've made a simple patch that works for me on FreeBSD 6.2-RELEASE #1.
Not sure if this is the way to do it, but it "just works". May be someone
else will need such feature too.
Eugene Perevyazko
--- bpf.c.old Mon May 19 10:47:55 2008
+++ bpf.c Mon May 19 10:57:44 2008
@@ -64,6 +64,7 @@
#include <sys/socket.h>
#include <net/if.h>
+#include <net/ethernet.h>
#include <net/bpf.h>
#include <net/bpfdesc.h>
@@ -617,7 +618,9 @@
return (0);
bzero(&dst, sizeof(dst));
- error = bpf_movein(uio, (int)d->bd_bif->bif_dlt, ifp->if_mtu,
+ /* Use VLAN_MTU capability, if supported */
+ error = bpf_movein(uio, (int)d->bd_bif->bif_dlt,
+ ifp->if_mtu + ( (ifp->if_capenable & IFCAP_VLAN_MTU) ? ETHER_VLAN_ENCAP_LEN : 0 ),
&m, &dst, d->bd_wfilter);
if (error)
return (error);
More information about the freebsd-net
mailing list