From: Victor Julien Date: Tue, 25 Aug 2015 16:08:55 +0000 (+0200) Subject: decoder: add template/example X-Git-Tag: suricata-3.0RC1~173 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=830dd324173c19186c6d600a9356ced61d8eb4fc;p=thirdparty%2Fsuricata.git decoder: add template/example Add fictional example / template for a packet decoder. It's not invoked anywhere. --- diff --git a/src/Makefile.am b/src/Makefile.am index e74672f425..e2ce97f1e7 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -60,6 +60,7 @@ decode-teredo.c decode-teredo.h \ decode-udp.c decode-udp.h \ decode-vlan.c decode-vlan.h \ decode-mpls.c decode-mpls.h \ +decode-template.c decode-template.h \ defrag-config.c defrag-config.h \ defrag.c defrag.h \ defrag-hash.c defrag-hash.h \ diff --git a/src/decode-template.c b/src/decode-template.c new file mode 100644 index 0000000000..2673a2cdff --- /dev/null +++ b/src/decode-template.c @@ -0,0 +1,97 @@ +/* Copyright (C) 2015 Open Information Security Foundation + * + * You can copy, redistribute or modify this Program under the terms of + * the GNU General Public License version 2 as published by the Free + * Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * version 2 along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + * 02110-1301, USA. + */ + +/** + * \ingroup decode + * + * @{ + */ + + +/** + * \file + * + * \author XXX Your Name + * + * Decodes XXX describe the protocol + */ + +#include "suricata-common.h" +#include "suricata.h" +#include "decode.h" +#include "decode-events.h" +#include "decode-template.h" + +#include "util-unittest.h" +#include "util-debug.h" + +/** + * \brief Function to decode XXX packets + * \param tv thread vars + * \param dtv decoder thread vars + * \param p packet + * \param pkt raw packet data + * \param len length in bytes of pkt array + * \retval TM_ECODE_OK or TM_ECODE_FAILED on serious error + */ + +int DecodeTEMPLATE(ThreadVars *tv, DecodeThreadVars *dtv, Packet *p, + const uint8_t *pkt, uint16_t len, PacketQueue *pq) +{ + /* TODO add counter for your type of packet to DecodeThreadVars, + * and register it in DecodeRegisterPerfCounters */ + //StatsIncr(tv, dtv->counter_template); + + /* Validation: make sure that the input data is big enough to hold + * the header */ + if (len < sizeof(TemplateHdr)) { + /* in case of errors, we set events. Events are defined in + * decode-events.h, and are then exposed to the detection + * engine through detect-engine-events.h */ + //ENGINE_SET_EVENT(p,TEMPLATE_HEADER_TOO_SMALL); + return TM_ECODE_FAILED; + } + + /* Now we can access the header */ + const TemplateHdr *hdr = (const TemplateHdr *)pkt; + + /* lets assume we have UDP encapsulated */ + if (hdr->proto == 17) { + /* we need to pass on the pkt and it's length minus the current + * header */ + size_t hdr_len = sizeof(TemplateHdr); + + /* in this example it's clear that hdr_len can't be bigger than + * 'len', but in more complex cases checking that we can't underflow + * len is very important + if (hdr_len < len) { + */ + + /* invoke the next decoder on the remainder of the data */ + return DecodeUDP(tv, dtv, p, (uint8_t *)pkt + hdr_len, len - hdr_len, pq); + //} + } else { + //ENGINE_SET_EVENT(p,TEMPLATE_UNSUPPORTED_PROTOCOL); + return TM_ECODE_FAILED; + } + + return TM_ECODE_OK; +} + +/** + * @} + */ diff --git a/src/decode-template.h b/src/decode-template.h new file mode 100644 index 0000000000..b6a976e0e4 --- /dev/null +++ b/src/decode-template.h @@ -0,0 +1,37 @@ +/* Copyright (C) 2015 Open Information Security Foundation + * + * You can copy, redistribute or modify this Program under the terms of + * the GNU General Public License version 2 as published by the Free + * Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * version 2 along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + * 02110-1301, USA. + */ + +/** + * \file + * + * \author XXX + * + */ + +#ifndef __DECODE_TEMPLATE_H__ +#define __DECODE_TEMPLATE_H__ + +#include "decode.h" +#include "threadvars.h" + +typedef struct TemplateHdr_ { + uint8_t proto; + uint8_t pad0; + uint16_t pad1; +} __attribute__((__packed__)) TemplateHdr; + +#endif /* __DECODE_TEMPLATE_H__ */