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;
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)
{
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!!
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"