]> git.ipfire.org Git - thirdparty/snort3.git/commitdiff
revert packet manager change for gtp and have the gtp codec track multi encap with...
authorruss <russ@localhost.localdomain>
Wed, 21 Oct 2015 16:26:07 +0000 (12:26 -0400)
committerruss <russ@localhost.localdomain>
Wed, 21 Oct 2015 16:26:07 +0000 (12:26 -0400)
src/codecs/misc/cd_gtp.cc
src/framework/decode_data.h
src/protocols/packet_manager.cc

index 709678f4a3b4b177e5bb7cc279681ca376b34c80..636916d088320881ddcab548adaa6ecaa37693b8 100644 (file)
@@ -85,7 +85,7 @@ void GtpCodec::get_protocol_ids(std::vector<uint16_t>& v)
     v.push_back(PROTO_GTP);
 }
 
-bool GtpCodec::decode(const RawData& raw, CodecData& codec, DecodeData&)
+bool GtpCodec::decode(const RawData& raw, CodecData& codec, DecodeData& dd)
 {
     uint8_t next_hdr_type;
     uint8_t version;
@@ -191,11 +191,12 @@ bool GtpCodec::decode(const RawData& raw, CodecData& codec, DecodeData&)
         Active::set_tunnel_bypass();
 
     codec.lyr_len = len;
+    codec.proto_bits |= PROTO_BIT__GTP;
 
-    if ( codec.proto_bits & PROTO_BIT__GTP )
+    if ( dd.decode_flags & DECODE_GTP )
         codec_event(codec, DECODE_GTP_MULTIPLE_ENCAPSULATION);
     else
-        codec.proto_bits |= PROTO_BIT__GTP;
+        dd.decode_flags |= DECODE_GTP;
 
     if (raw.len > 0)
     {
index 0541be14bb6ddd8465cea5494a9dfbb61ec30152..5a203945feb396a9cbfe11b73388c8620ad9e445 100644 (file)
@@ -80,6 +80,7 @@ enum DecodeFlags : std::uint16_t
     DECODE_C2S =            0x0100,  // user - client to server
     DECODE_SOF =            0x0200,  // user - start of flow
     DECODE_EOF =            0x0400,  // user - end of flow
+    DECODE_GTP =            0x0800,  // gtp encap
 };
 
 // FIXIT-L make this an enum!!
index e5c469b61cb5499ab141734ca205b2a0d7c36b9d..8441900095a3e03863130b437cfea639391d1f0f 100644 (file)
@@ -272,9 +272,11 @@ void PacketManager::decode(
         assert(curr_lyr_len <= raw.len);
         raw.len -= curr_lyr_len;
         raw.data += curr_lyr_len;
+        p->proto_bits |= codec_data.proto_bits;
         codec_data.next_prot_id = FINISHED_DECODE;
         codec_data.lyr_len = 0;
         codec_data.invalid_bytes = 0;
+        codec_data.proto_bits = 0;
     }
 
     DebugFormat(DEBUG_DECODE, "Codec %s (protocol_id: %hu: ip header"