]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
decode: create linklayer entry point
authorVictor Julien <victor@inliniac.net>
Fri, 21 Feb 2020 15:07:57 +0000 (16:07 +0100)
committerVictor Julien <victor@inliniac.net>
Fri, 10 Apr 2020 11:53:22 +0000 (13:53 +0200)
Make AF_PACKET and PCAP mode use it.

src/decode.h
src/source-af-packet.c
src/source-pcap.c

index 0787707d1c445483566923dad4b794f6d119e777..408944858bc2a6dabf22b31ccbe214fc76596c6f 100644 (file)
@@ -1149,5 +1149,33 @@ static inline bool VerdictTunnelPacket(Packet *p)
     return verdict;
 }
 
+static inline void DecodeLinkLayer(ThreadVars *tv, DecodeThreadVars *dtv,
+        const int datalink, Packet *p, const uint8_t *data, const uint32_t len)
+{
+    /* call the decoder */
+    switch (datalink) {
+        case LINKTYPE_ETHERNET:
+            DecodeEthernet(tv, dtv, p, data, len);
+            break;
+        case LINKTYPE_LINUX_SLL:
+            DecodeSll(tv, dtv, p, data, len);
+            break;
+        case LINKTYPE_PPP:
+            DecodePPP(tv, dtv, p, data, len);
+            break;
+        case LINKTYPE_RAW:
+        case LINKTYPE_GRE_OVER_IP:
+            DecodeRaw(tv, dtv, p, data, len);
+            break;
+        case LINKTYPE_NULL:
+            DecodeNull(tv, dtv, p, data, len);
+            break;
+        default:
+            SCLogError(SC_ERR_DATALINK_UNIMPLEMENTED, "datalink type "
+                    "%"PRId32" not yet supported", datalink);
+            break;
+    }
+}
+
 #endif /* __DECODE_H__ */
 
index 98657ab21fcb0ab21b86b4d3cb56281e64a800f9..e64af60b816409c50715f9da2e631135206fd797 100644 (file)
@@ -2898,27 +2898,7 @@ TmEcode DecodeAFP(ThreadVars *tv, Packet *p, void *data)
     }
 
     /* call the decoder */
-    switch (p->datalink) {
-        case LINKTYPE_ETHERNET:
-            DecodeEthernet(tv, dtv, p,GET_PKT_DATA(p), GET_PKT_LEN(p));
-            break;
-        case LINKTYPE_LINUX_SLL:
-            DecodeSll(tv, dtv, p, GET_PKT_DATA(p), GET_PKT_LEN(p));
-            break;
-        case LINKTYPE_PPP:
-            DecodePPP(tv, dtv, p, GET_PKT_DATA(p), GET_PKT_LEN(p));
-            break;
-        case LINKTYPE_RAW:
-        case LINKTYPE_GRE_OVER_IP:
-            DecodeRaw(tv, dtv, p, GET_PKT_DATA(p), GET_PKT_LEN(p));
-            break;
-        case LINKTYPE_NULL:
-            DecodeNull(tv, dtv, p, GET_PKT_DATA(p), GET_PKT_LEN(p));
-            break;
-        default:
-            SCLogError(SC_ERR_DATALINK_UNIMPLEMENTED, "Error: datalink type %" PRId32 " not yet supported in module DecodeAFP", p->datalink);
-            break;
-    }
+    DecodeLinkLayer(tv, dtv, p->datalink, p, GET_PKT_DATA(p), GET_PKT_LEN(p));
 
     PacketDecodeFinalize(tv, dtv, p);
 
index ee23429c5ba7ad106ee5fc7e49d17f6fd8193eeb..6fdc417ab256697bd6c03e6c698c4dc2b0b7f73a 100644 (file)
@@ -550,30 +550,7 @@ static TmEcode DecodePcap(ThreadVars *tv, Packet *p, void *data)
     /* update counters */
     DecodeUpdatePacketCounters(tv, dtv, p);
 
-    /* call the decoder */
-    switch(p->datalink) {
-        case LINKTYPE_LINUX_SLL:
-            DecodeSll(tv, dtv, p, GET_PKT_DATA(p), GET_PKT_LEN(p));
-            break;
-        case LINKTYPE_ETHERNET:
-            DecodeEthernet(tv, dtv, p,GET_PKT_DATA(p), GET_PKT_LEN(p));
-            break;
-        case LINKTYPE_PPP:
-            DecodePPP(tv, dtv, p, GET_PKT_DATA(p), GET_PKT_LEN(p));
-            break;
-        case LINKTYPE_RAW:
-        case LINKTYPE_GRE_OVER_IP:
-            DecodeRaw(tv, dtv, p, GET_PKT_DATA(p), GET_PKT_LEN(p));
-            break;
-        case LINKTYPE_NULL:
-            DecodeNull(tv, dtv, p, GET_PKT_DATA(p), GET_PKT_LEN(p));
-            break;
-        default:
-            SCLogError(SC_ERR_DATALINK_UNIMPLEMENTED, "Error: datalink "
-                    "type %" PRId32 " not yet supported in module "
-                    "DecodePcap", p->datalink);
-            break;
-    }
+    DecodeLinkLayer(tv, dtv, p->datalink, p, GET_PKT_DATA(p), GET_PKT_LEN(p));
 
     PacketDecodeFinalize(tv, dtv, p);