Implement support for DLT_RAW.
authorAnton S. Ustyuzhanin <kit@miras.edu.kz>
Thu, 1 Jan 2009 11:36:07 +0000 (22:36 +1100)
committerEmil Mikulic <emikulic@gmail.com>
Fri, 24 Apr 2009 11:40:23 +0000 (21:40 +1000)
decode.c
decode.h

index 9c60d49..1abbf1a 100644 (file)
--- a/decode.c
+++ b/decode.c
@@ -67,6 +67,8 @@ static void decode_pppoe_real(const u_char *pdata, const uint32_t len,
    pktsummary *sm);
 static void decode_linux_sll(u_char *, const struct pcap_pkthdr *,
    const u_char *);
+static void decode_raw(u_char *, const struct pcap_pkthdr *,
+   const u_char *);
 static void decode_ip(const u_char *pdata, const uint32_t len,
    pktsummary *sm);
 
@@ -85,6 +87,7 @@ static const linkhdr_t linkhdrs[] = {
 #ifdef DLT_LINUX_SLL
    { DLT_LINUX_SLL, SLL_HDR_LEN,   decode_linux_sll },
 #endif
+   { DLT_RAW,       RAW_HDR_LEN,   decode_raw },
    { -1, -1, NULL }
 };
 
@@ -299,6 +302,19 @@ decode_linux_sll(u_char *user _unused_,
    }
 }
 
+static void
+decode_raw(u_char *user _unused_,
+      const struct pcap_pkthdr *pheader,
+      const u_char *pdata)
+{
+   pktsummary sm;
+   memset(&sm, 0, sizeof(sm));
+
+   decode_ip(pdata, pheader->caplen, &sm);
+   sm.time = pheader->ts.tv_sec;
+   acct_for(&sm);
+}
+
 static void
 decode_ip(const u_char *pdata, const uint32_t len, pktsummary *sm)
 {
index bdb3999..5128ec9 100644 (file)
--- a/decode.h
+++ b/decode.h
@@ -18,6 +18,7 @@
 #define NULL_HDR_LEN    4
 #define PPPOE_HDR_LEN   8
 #define SLL_HDR_LEN     16
+#define RAW_HDR_LEN     0
 
 #ifndef ETHER_ADDR_LEN
 #define ETHER_ADDR_LEN 6