[Iftop-users] patch for FreeBSD tunnel interface
Scott Bertilson
ssb at umn.edu
Sun, 5 Jun 2011 12:24:32 -0500
It also adds support for the OpenBSD DLT_LOOP. Based on handling of
these DLT types from tcpdump.c.
@@ -432,10 +432,15 @@
static void handle_raw_packet(unsigned char* args, const struct
pcap_pkthdr* pkthdr, const unsigned char* packet)
{
handle_ip_packet((struct ip*)packet, -1);
}
+static void handle_null_packet(unsigned char* args, const struct
pcap_pkthdr* pkthdr, const unsigned char* packet)
+{
+ handle_ip_packet((struct ip*)(packet+4), -1);
+}
+
#ifdef DLT_PFLOG
static void handle_pflog_packet(unsigned char* args, const struct
pcap_pkthdr* pkthdr, const unsigned char* packet)
{
register u_int length = pkthdr->len;
u_int hdrlen;
@@ -680,13 +685,21 @@
#ifdef DLT_PFLOG
else if (dlt == DLT_PFLOG) {
packet_handler = handle_pflog_packet;
}
#endif
- else if(dlt == DLT_RAW || dlt == DLT_NULL) {
+ else if(dlt == DLT_RAW) {
packet_handler = handle_raw_packet;
}
+ else if(dlt == DLT_NULL) {
+ packet_handler = handle_null_packet;
+ }
+#ifdef DLT_LOOP
+ else if(dlt == DLT_LOOP) {
+ packet_handler = handle_null_packet;
+ }
+#endif
else if(dlt == DLT_IEEE802) {
packet_handler = handle_tokenring_packet;
}
else if(dlt == DLT_PPP) {
packet_handler = handle_ppp_packet;