Snort mailing list archives

Where to put new protocol header object in Packet structure given in decode.h


From: Awais Ali via Snort-devel <snort-devel () lists snort org>
Date: Thu, 18 Jun 2020 20:30:39 +0200

Hello all,
I wrote a new decoder function for layer 2 protocol in decode.c file and
defined the header of that protocol as structure in decode.h. To use the
same Packet as given by snort, i declared the header object in "struct
_Packet"  at the end of structure like this:

typedef struct _Packet
{
    const DAQ_PktHdr_t *pkth;    // packet meta data
    const uint8_t *pkt;         // raw packet data

    //vvv------------------------------------------------
    // TODO convenience stuff to be refactored for layers
    //^^^------------------------------------------------

    //vvv-----------------------------
    EtherARP *ah;
    const EtherHdr *eh;         /* standard TCP/IP/Ethernet/ARP headers */
    const VlanTagHdr *vh;
    EthLlc *ehllc;
    EthLlcOther *ehllcother;
    const PPPoEHdr *pppoeh;     /* Encapsulated PPP of Ether header */
    const GREHdr *greh;
    uint32_t *mpls;
    const CiscoMetaHdr *cmdh;                /* Cisco Metadata Header */

    const IPHdr *iph, *orig_iph;/* and orig. headers for ICMP_*_UNREACH
family */
    const IPHdr *inner_iph;     /* if IP-in-IP, this will be the inner IP
header */
    const IPHdr *outer_iph;     /* if IP-in-IP, this will be the outer IP
header */
    const TCPHdr *tcph, *orig_tcph;
    const UDPHdr *udph, *orig_udph;
    const UDPHdr *inner_udph;   /* if Teredo + UDP, this will be the inner
UDP header */
    const UDPHdr *outer_udph;   /* if Teredo + UDP, this will be the outer
UDP header */
    const ICMPHdr *icmph, *orig_icmph;
    .
    .
    .
    .

    uint8_t ps_proto;  // Used for portscan and unified2 logging

    uint8_t ips_os_selected;
    void    *cur_pp;
    // Expected session created due to this packet.
    struct _ExpectNode* expectedSession;
    const GOOSEHdr *gooseh; /* Goose Header*/ ------------------>> This is
my new protocol header object
} Packet;

It works fine and decodes newly added protocol as expected but there is one
issue, and that is it disturbs other traffic and gives assertion error like
this:

snort: snort_stream_tcp.c:3407: StreamUpdatePerfBaseState: Assertion
`sf_base->iSessionsInitializing' failed.
Aborted (core dumped)

when i remove  const GOOSEHdr *gooseh; then i don't get this error. My
question is where to put this new protocol header object so that i
don't get such assertion errors? Can someone explain to me this Packet
structure how it's being used and being populated in SNORT2?

Sorry for the long email. I hope you people will cooperate in this regard.

Thanks,
Awais Ali
_______________________________________________
Snort-devel mailing list
Snort-devel () lists snort org
https://lists.snort.org/mailman/listinfo/snort-devel

Please visit http://blog.snort.org for the latest news about Snort!

Current thread: