]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
decode: return bool network layer
authorVictor Julien <victor@inliniac.net>
Mon, 2 Mar 2020 14:45:25 +0000 (15:45 +0100)
committerVictor Julien <victor@inliniac.net>
Fri, 10 Apr 2020 11:53:22 +0000 (13:53 +0200)
So that the caller can set the correct event type on error.

src/decode-vlan.c
src/decode.h

index 371e2ad85766e6571b5ab1fb737246cd4edb6efe..d929bae826a8d098ced1cbd3655a0e05e38bca8a 100644 (file)
@@ -87,8 +87,11 @@ int DecodeVLAN(ThreadVars *tv, DecodeThreadVars *dtv, Packet *p,
 
     p->vlan_id[p->vlan_idx++] = (uint16_t)GET_VLAN_ID(vlan_hdr);
 
-    DecodeNetworkLayer(tv, dtv, proto, p, pkt + VLAN_HEADER_LEN, len - VLAN_HEADER_LEN);
-
+    if (DecodeNetworkLayer(tv, dtv, proto, p,
+                pkt + VLAN_HEADER_LEN, len - VLAN_HEADER_LEN) == false) {
+        ENGINE_SET_INVALID_EVENT(p, VLAN_UNKNOWN_TYPE);
+        return TM_ECODE_FAILED;
+    }
     return TM_ECODE_OK;
 }
 
index 2b5c41cc3b4a40d3ed676afffcdc8a95c23d96a3..aadaf373d759526b956017b494f8e844f8236fd6 100644 (file)
@@ -1189,7 +1189,9 @@ static inline void DecodeLinkLayer(ThreadVars *tv, DecodeThreadVars *dtv,
     }
 }
 
-static inline void DecodeNetworkLayer(ThreadVars *tv, DecodeThreadVars *dtv,
+/** \brief decode network layer
+ *  \retval bool true if successful, false if unknown */
+static inline bool DecodeNetworkLayer(ThreadVars *tv, DecodeThreadVars *dtv,
         const uint16_t proto, Packet *p, const uint8_t *data, const uint32_t len)
 {
     switch (proto) {
@@ -1235,10 +1237,10 @@ static inline void DecodeNetworkLayer(ThreadVars *tv, DecodeThreadVars *dtv,
             }
             break;
         default:
-            SCLogDebug("unknown ether type: %" PRIx32 "", proto);
-            ENGINE_SET_INVALID_EVENT(p, VLAN_UNKNOWN_TYPE); // TODO
-            break;
+            SCLogDebug("unknown ether type: %" PRIx16 "", proto);
+            return false;
     }
+    return true;
 }
 
 #endif /* __DECODE_H__ */