tcpdump mailing list archives

cap_compile() generates strange code with DLT_RAW


From: Anton Yuzhaninov <citrin () rambler-co ru>
Date: Wed, 30 May 2007 20:59:20 +0400

Hello.

When libpcap build with -DINET6 pcap_compile() generates strange pbf
code with DLT_RAW

cap_compile_nopcap(65535, DLT_RAW, &bp, "udp", 1, 0)
generates this code:

# (000) ld       #0x0
{ code=0 jt=0 jf=0 k=0 }
# (001) ldb      [6]
{ code=48 jt=0 jf=0 k=6 }
# (002) jeq      #0x11            jt 5  jf 3
{ code=21 jt=2 jf=0 k=17 }
# (003) ldb      [9]
{ code=48 jt=0 jf=0 k=9 }
# (004) jeq      #0x11            jt 5  jf 6
{ code=21 jt=0 jf=1 k=17 }
# (005) ret      #65535
{ code=6 jt=0 jf=0 k=65535 }
# (006) ret      #0
{ code=6 jt=0 jf=0 k=0 }

It seems to be wrong.

(000) - seems to be nop, why it here?

(001), (002) - check that byte with offset 6 (4 bits from flags filed
and 4 bits from fragment offset) equal 17 (protocol number for udp)
It seems to be wrong

(003), (004) - correct commands for check Protocol filed in IP header
to be equal 17 (udp).

When libpcap compiled without INET6 it generates correct code:

# (000) ld       #0x0
{ code=0 jt=0 jf=0 k=0 }
# (001) ldb      [9]
{ code=48 jt=0 jf=0 k=9 }
# (002) jeq      #0x11            jt 3  jf 4
{ code=21 jt=0 jf=1 k=17 }
# (003) ret      #65535
{ code=6 jt=0 jf=0 k=65535 }
# (004) ret      #0
{ code=6 jt=0 jf=0 k=0 }

(but firs command still unnecessary)

I use libpcap 0.9.4 under FreeBSD, but in Changelog I don't found
related changes in 0.9.5

-- 
WBR,
 Anton Yuzhaninov

 P. S. code used to test in attach.-
This is the tcpdump-workers list.
Visit https://cod.sandelman.ca/ to unsubscribe.


Current thread: