DAQ_New(snort_conf, intf);
DAQ_Start();
- s_packet = PacketManager::encode_new();
+ s_packet = PacketManager::encode_new(false);
CodecManager::thread_init();
FileAPIPostInit();
// Initialization and setup
//-------------------------------------------------------------------------
-Packet* PacketManager::encode_new()
+Packet* PacketManager::encode_new(bool packet_data)
{
Packet* p = (Packet*)SnortAlloc(sizeof(*p));
- uint8_t* b = (uint8_t*)SnortAlloc(sizeof(*p->pkth) + Codec::PKT_MAX + SPARC_TWIDDLE);
Layer* lyr = new Layer[CodecManager::max_layers];
- if ( !p || !b || !lyr)
+ if ( !p || !lyr)
FatalError("encode_new() => Failed to allocate packet\n");
- p->pkth = (DAQ_PktHdr_t*)b;
- b += sizeof(*p->pkth);
- b += SPARC_TWIDDLE;
- p->pkt = b;
- p->layers = lyr;
+ if (!packet_data)
+ {
+ p->pkt = nullptr;
+ p->pkth = nullptr;
+ }
+ else
+ {
+ uint8_t* b = (uint8_t*)SnortAlloc(sizeof(*p->pkth) + Codec::PKT_MAX + SPARC_TWIDDLE);
+
+ if (!b)
+ FatalError("encode_new() => Failed to allocate packet\n");
+ p->pkth = (DAQ_PktHdr_t*)b;
+ b += sizeof(*p->pkth);
+ b += SPARC_TWIDDLE;
+ p->pkt = b;
+ }
+
+ p->layers = lyr;
return p;
}
if (p)
{
if(p->pkth)
- free((void*)p->pkth); // cast away const!
+ free((void*)p->pkth);
if(p->layers)
delete[] p->layers;
static void decode(Packet*, const struct _daq_pkthdr*, const uint8_t*);
// allocate a Packet for later formatting (cloning)
- static Packet* encode_new(void);
+ static Packet* encode_new(bool allocate_packet_data = true);
// release the allocated Packet
static void encode_delete(Packet*);