<div dir="ltr"><div>Hello Steve, Greg<br><br></div><div>Indeed I am skipping IP, TCP, UDP headers<br></div><div>I am using raw ethernet, and testing with ARP<br></div><div><br></div><div>Brief Explanation of what I want to do<br><br>I am sending ARP requests packets(encapsulated with my metadata at the 
end), so it is Raw Ethernet like this "ARP Req bytes + Metadata bytes", I
 already did a test to filter with BPF jumbo ethernet packets and I can 
filter if I want against the last byte in the packet, but to do this I 
need to place in my program code the C filter code (generated with 
tcpdump), exacly the byte position I want to use for filtering, so the 
issue with this is that when I receive another ethernet frame that it is
 not an ARP Req, the byte position to filter will not be the right 
one(because it moves) to use because the packet is bigger or smaller so 
my metadata has shift left or shift right depending on the case, so I 
want BPF to read the total packet length to return it in a variable, and
 then I use this variable to calculate the right byte to use for 
filtering, depending on the packet length.
<br><br></div><div>I need to match with a specific metadata field base on length, but dont know how to use BPF to read packet's length<br></div><div><br><br></div>Thanks!<br><br></div><div class="gmail_extra"><br><div class="gmail_quote">2015-12-30 9:09 GMT-06:00 Greg Troxel <span dir="ltr"><<a href="mailto:gdt@lexort.com" target="_blank">gdt@lexort.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>
First, it's not clear from your mail that what you are doing is<br>
sensible.  You seem to be skipping IP and perhaps using raw Ethernet,<br>
and insisting on adding fields at the end vs encapsulating.   But you<br>
didn't explain and didn't ask...<br>
<br>
The bpf language is fairly powerful, but you'll have to write in BPF<br>
assembler because libpcap doesn't already have compilation support to do<br>
what you need.  See bpf(4) - I suspect it is adequate to find the<br>
metadata field based on length.  Certainly it can find the UDP header<br>
based on IP header length, and things like that.<br>
<br>
<br>
</blockquote></div><br></div>