add_subdirectory (doc)
-
# Miscelaneous stuff. Does NOT directly effect snort's building environment
-
include (cmake/packaging_data.cmake)
include (cmake/create_pkg_config.cmake)
COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake)
-# Test Plugins!!
+# Test plugins in the 'Extra' directory!!
if (BUILD_EXTRA_PLUGINS)
if (${CMAKE_GENERATOR} MATCHES "Make")
add_subdirectory(extra)
# Some shared library flags for the two platforms which I am using
+ include(CheckCXXCompilerFlag)
set(CMAKE_REQUIRED_FLAGS "-Wl,-undefined,dynamic_lookup")
check_cxx_compiler_flag("" HAVE_DYNAMIC_LOOKUP)
if(HAVE_DYNAMIC_LOOKUP)
-DSNORT_INCLUDE_DIR:PATH=/full/path/to/snort/include/dir
3) set the environment variable SNORT_DIR
+
"
)
void DpxPH::eval(Packet* p)
{
// precondition - what we registered for
- assert(IsUDP(p));
+ assert(p->is_udp());
if ( p->ptrs.dp == port && p->dsize > max )
SnortEventqAdd(DPX_GID, DPX_SID);
~AuthCodec(){};
virtual void get_protocol_ids(std::vector<uint16_t>& v);
- virtual bool decode(const RawData&, CodecData&, SnortData&);
+ virtual bool decode(const RawData&, CodecData&, DecodeData&);
};
/* Valid for both IPv4 and IPv6 */
v.push_back(IPPROTO_ID_AUTH);
}
-bool AuthCodec::decode(const RawData& raw, CodecData& codec, SnortData& snort)
+bool AuthCodec::decode(const RawData& raw, CodecData& codec, DecodeData& snort)
{
const AuthHdr* const ah = reinterpret_cast<const AuthHdr* const>(raw.data);
virtual void get_protocol_ids(std::vector<uint16_t>& v);
- virtual bool decode(const RawData&, CodecData&, SnortData&);
+ virtual bool decode(const RawData&, CodecData&, DecodeData&);
virtual bool update(Packet*, Layer*, uint32_t* len);
};
} // anonymous namespace
-bool Ipv6DSTOptsCodec::decode(const RawData& raw, CodecData& codec, SnortData&)
+bool Ipv6DSTOptsCodec::decode(const RawData& raw, CodecData& codec, DecodeData&)
{
const IP6Dest* const dsthdr = reinterpret_cast<const IP6Dest *>(raw.data);
virtual void get_protocol_ids(std::vector<uint16_t>& v);
- virtual bool decode(const RawData&, CodecData&, SnortData&);
+ virtual bool decode(const RawData&, CodecData&, DecodeData&);
};
* the encryption type (or lack thereof).
*
*/
-bool EspCodec::decode(const RawData& raw, CodecData& codec, SnortData& snort)
+bool EspCodec::decode(const RawData& raw, CodecData& codec, DecodeData& snort)
{
const uint8_t *esp_payload;
uint8_t pad_length;
~Ipv6FragCodec() {};
- virtual bool decode(const RawData&, CodecData&, SnortData&);
+ virtual bool decode(const RawData&, CodecData&, DecodeData&);
virtual void log(TextLog* const, const uint8_t* /*raw_pkt*/,
const Packet* const);
} // namespace
-bool Ipv6FragCodec::decode(const RawData& raw, CodecData& codec, SnortData& snort)
+bool Ipv6FragCodec::decode(const RawData& raw, CodecData& codec, DecodeData& snort)
{
const ip::IP6Frag* const ip6frag_hdr = reinterpret_cast<const ip::IP6Frag*>(raw.data);
~GreCodec(){};
virtual void get_protocol_ids(std::vector<uint16_t>& v);
- virtual bool decode(const RawData&, CodecData&, SnortData&);
+ virtual bool decode(const RawData&, CodecData&, DecodeData&);
void log(TextLog* const, const uint8_t* /*raw_pkt*/,
const Packet* const);
};
*
* Notes: see RFCs 1701, 2784 and 2637
*/
-bool GreCodec::decode(const RawData& raw, CodecData& codec, SnortData&)
+bool GreCodec::decode(const RawData& raw, CodecData& codec, DecodeData&)
{
if (raw.len < GRE_HEADER_LEN)
{
~Ipv6HopOptsCodec() {};
virtual void get_protocol_ids(std::vector<uint16_t>& v);
- virtual bool decode(const RawData&, CodecData&, SnortData&);
+ virtual bool decode(const RawData&, CodecData&, DecodeData&);
virtual bool update(Packet*, Layer*, uint32_t* len);
};
* Class functions
*/
-bool Ipv6HopOptsCodec::decode(const RawData& raw, CodecData& codec, SnortData&)
+bool Ipv6HopOptsCodec::decode(const RawData& raw, CodecData& codec, DecodeData&)
{
const IP6HopByHop *hbh_hdr = reinterpret_cast<const IP6HopByHop*>(raw.data);
~Icmp4Codec() {};
virtual void get_protocol_ids(std::vector<uint16_t>&);
- virtual bool decode(const RawData&, CodecData&, SnortData&);
+ virtual bool decode(const RawData&, CodecData&, DecodeData&);
virtual bool update(Packet*, Layer*, uint32_t* len);
virtual void format(EncodeFlags, const Packet* p, Packet* c, Layer*);
virtual void log(TextLog* const, const uint8_t* /*raw_pkt*/,
const Packet* const);
private:
- void ICMP4AddrTests(const SnortData& snort, const CodecData& codec);
+ void ICMP4AddrTests(const DecodeData& snort, const CodecData& codec);
void ICMP4MiscTests(const ICMPHdr* const, const CodecData&, const uint16_t);
};
*
* Returns: void function
*/
-bool Icmp4Codec::decode(const RawData& raw, CodecData& codec,SnortData& snort)
+bool Icmp4Codec::decode(const RawData& raw, CodecData& codec,DecodeData& snort)
{
if(raw.len < icmp::ICMP_HEADER_LEN)
return true;
}
-void Icmp4Codec::ICMP4AddrTests(const SnortData& snort, const CodecData& codec)
+void Icmp4Codec::ICMP4AddrTests(const DecodeData& snort, const CodecData& codec)
{
uint32_t dst = snort.ip_api.get_dst()->ip32[0];
virtual void get_protocol_ids(std::vector<uint16_t>& v);
- virtual bool decode(const RawData&, CodecData&, SnortData&);
+ virtual bool decode(const RawData&, CodecData&, DecodeData&);
virtual bool update(Packet*, Layer*, uint32_t* len);
virtual void format(EncodeFlags, const Packet*, Packet*, Layer*);
virtual void log(TextLog* const, const uint8_t* /*raw_pkt*/,
// decode.c::ICMP6
//--------------------------------------------------------------------
-bool Icmp6Codec::decode(const RawData& raw, CodecData& codec, SnortData& snort)
+bool Icmp6Codec::decode(const RawData& raw, CodecData& codec, DecodeData& snort)
{
if(raw.len < icmp::ICMP6_HEADER_MIN_LEN)
{
~IgmpCodec() {};
- virtual bool decode(const RawData&, CodecData&, SnortData&);
+ virtual bool decode(const RawData&, CodecData&, DecodeData&);
virtual void get_protocol_ids(std::vector<uint16_t>&);
virtual void get_data_link_type(std::vector<int>&){};
-bool IgmpCodec::decode(const RawData& raw, CodecData& codec, SnortData& snort)
+bool IgmpCodec::decode(const RawData& raw, CodecData& codec, DecodeData& snort)
{
if (snort.ip_api.is_ip4() && raw.len >= 1 && raw.data[0] == 0x11)
{
~Ipv4Codec(){};
virtual void get_protocol_ids(std::vector<uint16_t>& v);
- virtual bool decode(const RawData&, CodecData&, SnortData&);
+ virtual bool decode(const RawData&, CodecData&, DecodeData&);
virtual void log(TextLog* const, const uint8_t* /*raw_pkt*/,
const Packet* const);
virtual bool encode(const uint8_t* const raw_in, const uint16_t raw_len,
}
-bool Ipv4Codec::decode(const RawData& raw, CodecData& codec, SnortData& snort)
+bool Ipv4Codec::decode(const RawData& raw, CodecData& codec, DecodeData& snort)
{
uint32_t ip_len; /* length from the start of the ip hdr to the pkt end */
uint16_t hlen; /* ip header length */
~Ipv6Codec(){};
virtual void get_protocol_ids(std::vector<uint16_t>& v);
- virtual bool decode(const RawData&, CodecData&, SnortData&);
+ virtual bool decode(const RawData&, CodecData&, DecodeData&);
virtual bool encode(const uint8_t* const raw_in, const uint16_t raw_len,
EncState&, Buffer&);
virtual bool update(Packet*, Layer*, uint32_t* len);
static inline void IPV6CheckIsatap(const ip::IP6Hdr* const,
- const SnortData&,
+ const DecodeData&,
const CodecData&);
-static inline void IPV6MiscTests(const SnortData&, const CodecData&);
+static inline void IPV6MiscTests(const DecodeData&, const CodecData&);
static void CheckIPV6Multicast(const ip::IP6Hdr* const, const CodecData&);
static inline bool CheckTeredoPrefix(const ip::IP6Hdr* const hdr);
}
-bool Ipv6Codec::decode(const RawData& raw, CodecData& codec, SnortData& snort)
+bool Ipv6Codec::decode(const RawData& raw, CodecData& codec, DecodeData& snort)
{
// FIXIT-L -J necessary for scoping until the 'goto' statements are deleted
{
}
static inline void IPV6CheckIsatap(const ip::IP6Hdr* const ip6h,
- const SnortData& snort,
+ const DecodeData& snort,
const CodecData& codec)
{
/* Only check for IPv6 over IPv4 */
*
* Returns: void function
*/
-static inline void IPV6MiscTests(const SnortData& snort, const CodecData& codec)
+static inline void IPV6MiscTests(const DecodeData& snort, const CodecData& codec)
{
const sfip_t *ip_src = snort.ip_api.get_src();
const sfip_t *ip_dst = snort.ip_api.get_dst();
virtual void get_protocol_ids(std::vector<uint16_t>&);
- virtual bool decode(const RawData&, CodecData&, SnortData&);
+ virtual bool decode(const RawData&, CodecData&, DecodeData&);
};
} // namespace
v.push_back(IPPROTO_ID_MOBILITY);
}
-bool MobilityCodec::decode(const RawData&, CodecData& codec, SnortData&)
+bool MobilityCodec::decode(const RawData&, CodecData& codec, DecodeData&)
{
codec_events::decoder_event(codec, DECODE_IP_BAD_PROTO);
codec.proto_bits |= PROTO_BIT__IP6_EXT; // check for any IP related rules
~Ipv6NoNextCodec() {};
- virtual bool decode(const RawData&, CodecData&, SnortData&);
+ virtual bool decode(const RawData&, CodecData&, DecodeData&);
virtual void get_protocol_ids(std::vector<uint16_t>&);
};
} // namespace
-bool Ipv6NoNextCodec::decode(const RawData& raw, CodecData& codec, SnortData&)
+bool Ipv6NoNextCodec::decode(const RawData& raw, CodecData& codec, DecodeData&)
{
// No need ot check IPv6 extension order since this is automatically
// the last extension.
PgmCodec() : Codec(CD_PGM_NAME){};
~PgmCodec() {};
- virtual bool decode(const RawData&, CodecData&, SnortData&);
+ virtual bool decode(const RawData&, CodecData&, DecodeData&);
virtual void get_protocol_ids(std::vector<uint16_t>&);
};
// private functions
//-------------------------------------------------------------------------
-bool PgmCodec::decode(const RawData& raw, CodecData& codec, SnortData&)
+bool PgmCodec::decode(const RawData& raw, CodecData& codec, DecodeData&)
{
if ( pgm_nak_detect(raw) == PGM_NAK_VULN )
codec_events::decoder_event(codec, DECODE_PGM_NAK_OVERFLOW);
~Ipv6RoutingCodec() {};
- virtual bool decode(const RawData&, CodecData&, SnortData&);
+ virtual bool decode(const RawData&, CodecData&, DecodeData&);
virtual void get_protocol_ids(std::vector<uint16_t>&);
};
} // namespace
-bool Ipv6RoutingCodec::decode(const RawData& raw, CodecData& codec, SnortData&)
+bool Ipv6RoutingCodec::decode(const RawData& raw, CodecData& codec, DecodeData&)
{
const IP6Route* const rte = reinterpret_cast<const IP6Route *>(raw.data);
virtual void get_protocol_ids(std::vector<uint16_t>&);
- virtual bool decode(const RawData&, CodecData&, SnortData&);
+ virtual bool decode(const RawData&, CodecData&, DecodeData&);
};
v.push_back(IPPROTO_ID_SUN_ND);
}
-bool SunNdCodec::decode(const RawData&, CodecData& codec, SnortData&)
+bool SunNdCodec::decode(const RawData&, CodecData& codec, DecodeData&)
{
codec_events::decoder_event(codec, DECODE_IP_BAD_PROTO);
return true;
virtual ~SwipeCodec(){};
virtual void get_protocol_ids(std::vector<uint16_t>& v);
- virtual bool decode(const RawData&, CodecData&, SnortData&);
+ virtual bool decode(const RawData&, CodecData&, DecodeData&);
};
} // namespace
}
-bool SwipeCodec::decode(const RawData&, CodecData& codec, SnortData&)
+bool SwipeCodec::decode(const RawData&, CodecData& codec, DecodeData&)
{
// currently unsupported
codec_events::decoder_event(codec, DECODE_IP_BAD_PROTO);
virtual void get_protocol_ids(std::vector<uint16_t>& v);
virtual void log(TextLog* const, const uint8_t* /*raw_pkt*/,
const Packet* const);
- virtual bool decode(const RawData&, CodecData&, SnortData&);
+ virtual bool decode(const RawData&, CodecData&, DecodeData&);
virtual bool encode(const uint8_t* const raw_in, const uint16_t raw_len,
EncState&, Buffer&);
virtual bool update(Packet*, Layer*, uint32_t* len);
static void DecodeTCPOptions(const uint8_t *, uint32_t, CodecData&);
static inline void TCPMiscTests(const tcp::TCPHdr* const tcph,
- const SnortData& snort,
+ const DecodeData& snort,
const CodecData& codec);
void TcpCodec::get_protocol_ids(std::vector<uint16_t>& v)
v.push_back(IPPROTO_ID_TCP);
}
-bool TcpCodec::decode(const RawData& raw, CodecData& codec, SnortData& snort)
+bool TcpCodec::decode(const RawData& raw, CodecData& codec, DecodeData& snort)
{
if(raw.len < tcp::TCP_HEADER_LEN)
{
/* TCP-layer decoder alerts */
static inline void TCPMiscTests(const tcp::TCPHdr* const tcph,
- const SnortData& snort,
+ const DecodeData& snort,
const CodecData& codec)
{
if ( ((tcph->th_flags & TH_NORESERVED) == TH_SYN ) &&
virtual void get_protocol_ids(std::vector<uint16_t>& v);
- virtual bool decode(const RawData&, CodecData&, SnortData&);
+ virtual bool decode(const RawData&, CodecData&, DecodeData&);
virtual bool encode(const uint8_t* const raw_in, const uint16_t raw_len,
EncState&, Buffer&);
-static inline void UDPMiscTests(const SnortData&,
+static inline void UDPMiscTests(const DecodeData&,
const CodecData&,
uint32_t pay_len);
}
-bool UdpCodec::decode(const RawData& raw, CodecData& codec, SnortData& snort)
+bool UdpCodec::decode(const RawData& raw, CodecData& codec, DecodeData& snort)
{
uint16_t uhlen;
bool fragmented_udp_flag = false;
/* UDP-layer decoder alerts */
-static inline void UDPMiscTests(const SnortData& snort,
+static inline void UDPMiscTests(const DecodeData& snort,
const CodecData& codec,
uint32_t pay_len)
{
~ArpCodec(){};
virtual void get_protocol_ids(std::vector<uint16_t>& v);
- virtual bool decode(const RawData&, CodecData&, SnortData&);
+ virtual bool decode(const RawData&, CodecData&, DecodeData&);
virtual void format(EncodeFlags, const Packet*, Packet*, Layer*);
};
*
* Returns: void function
*/
-bool ArpCodec::decode(const RawData& raw, CodecData& codec, SnortData& snort)
+bool ArpCodec::decode(const RawData& raw, CodecData& codec, DecodeData& snort)
{
if(raw.len < sizeof(arp::EtherARP))
{
~EapolCodec() {};
- virtual bool decode(const RawData&, CodecData&, SnortData&);
+ virtual bool decode(const RawData&, CodecData&, DecodeData&);
virtual void get_protocol_ids(std::vector<uint16_t>&);
};
************** main codec functions ************
*************************************************/
-bool EapolCodec::decode(const RawData& raw, CodecData& codec, SnortData&)
+bool EapolCodec::decode(const RawData& raw, CodecData& codec, DecodeData&)
{
const eapol::EtherEapol* const eplh =
reinterpret_cast<const eapol::EtherEapol*>(raw.data);
~Erspan2Codec(){};
virtual void get_protocol_ids(std::vector<uint16_t>& v);
- virtual bool decode(const RawData&, CodecData&, SnortData&);
+ virtual bool decode(const RawData&, CodecData&, DecodeData&);
};
* Returns: void function
*
*/
-bool Erspan2Codec::decode(const RawData& raw, CodecData& codec, SnortData& )
+bool Erspan2Codec::decode(const RawData& raw, CodecData& codec, DecodeData& )
{
const ERSpanType2Hdr* const erSpan2Hdr =
reinterpret_cast<const ERSpanType2Hdr*>(raw.data);
virtual void get_protocol_ids(std::vector<uint16_t>& v);
- virtual bool decode(const RawData&, CodecData&, SnortData&);
+ virtual bool decode(const RawData&, CodecData&, DecodeData&);
};
* Returns: void function
*
*/
-bool Erspan3Codec::decode(const RawData& raw, CodecData& codec, SnortData&)
+bool Erspan3Codec::decode(const RawData& raw, CodecData& codec, DecodeData&)
{
const ERSpanType3Hdr* const erSpan3Hdr =
reinterpret_cast<const ERSpanType3Hdr*>(raw.data);
~MplsCodec(){};
virtual void get_protocol_ids(std::vector<uint16_t>& v);
- virtual bool decode(const RawData&, CodecData&, SnortData&);
+ virtual bool decode(const RawData&, CodecData&, DecodeData&);
virtual void log(TextLog* const, const uint8_t* /*raw_pkt*/,
const Packet* const);
};
}
-bool MplsCodec::decode(const RawData& raw, CodecData& codec, SnortData& snort)
+bool MplsCodec::decode(const RawData& raw, CodecData& codec, DecodeData& snort)
{
uint32_t mpls_h;
uint32_t label;
~PppEncap(){};
virtual void get_protocol_ids(std::vector<uint16_t>& v);
- virtual bool decode(const RawData&, CodecData&, SnortData&);
+ virtual bool decode(const RawData&, CodecData&, DecodeData&);
};
const static uint16_t PPP_IP = 0x0021; /* Internet Protocol */
*
* Returns: void function
*/
-bool PppEncap::decode(const RawData& raw, CodecData& codec, SnortData&)
+bool PppEncap::decode(const RawData& raw, CodecData& codec, DecodeData&)
{
static THREAD_LOCAL bool had_vj = false;
uint16_t protocol;
static inline bool pppoepkt_decode(const RawData& raw,
CodecData& codec,
- SnortData&,
+ DecodeData&,
PppoepktType ppp_type)
{
/* do a little validation */
virtual void get_protocol_ids(std::vector<uint16_t>& v);
- virtual bool decode(const RawData&, CodecData&, SnortData&);
+ virtual bool decode(const RawData&, CodecData&, DecodeData&);
virtual bool encode(const uint8_t* const raw_in, const uint16_t raw_len,
EncState&, Buffer&);
};
}
-bool PPPoEDiscCodec::decode(const RawData& raw, CodecData& codec, SnortData& snort)
+bool PPPoEDiscCodec::decode(const RawData& raw, CodecData& codec, DecodeData& snort)
{
return pppoepkt_decode(raw, codec, snort, PppoepktType::DISCOVERY);
}
virtual void get_protocol_ids(std::vector<uint16_t>& v);
- virtual bool decode(const RawData&, CodecData&, SnortData&);
+ virtual bool decode(const RawData&, CodecData&, DecodeData&);
virtual bool encode(const uint8_t* const raw_in, const uint16_t raw_len,
EncState&, Buffer&);
};
{ v.push_back(ETHERNET_TYPE_PPPoE_SESS); }
-bool PPPoESessCodec::decode(const RawData& raw, CodecData& codec, SnortData& snort)
+bool PPPoESessCodec::decode(const RawData& raw, CodecData& codec, DecodeData& snort)
{ return pppoepkt_decode(raw, codec, snort, PppoepktType::SESSION); }
virtual void get_protocol_ids(std::vector<uint16_t>& v);
- virtual bool decode(const RawData&, CodecData&, SnortData&);
+ virtual bool decode(const RawData&, CodecData&, DecodeData&);
};
* convention needed to be changed and the stuff at the beginning
* wasn't needed since we are already deep into the packet
*/
-bool TransbridgeCodec::decode(const RawData& raw, CodecData& codec, SnortData&)
+bool TransbridgeCodec::decode(const RawData& raw, CodecData& codec, DecodeData&)
{
if(raw.len < eth::ETH_HEADER_LEN)
{
~VlanCodec(){};
virtual void get_protocol_ids(std::vector<uint16_t>& v);
- virtual bool decode(const RawData&, CodecData&, SnortData&);
+ virtual bool decode(const RawData&, CodecData&, DecodeData&);
virtual void log(TextLog* const, const uint8_t* /*raw_pkt*/,
const Packet* const);
};
}
-bool VlanCodec::decode(const RawData& raw, CodecData& codec, SnortData&)
+bool VlanCodec::decode(const RawData& raw, CodecData& codec, DecodeData&)
{
if(raw.len < sizeof(vlan::VlanTagHdr))
{
virtual void get_protocol_ids(std::vector<uint16_t>& v)
{ v.push_back(FINISHED_DECODE); }
- virtual bool decode(const RawData&, CodecData&, SnortData&)
+ virtual bool decode(const RawData&, CodecData&, DecodeData&)
{ return false; };
};
~GtpCodec(){};
virtual void get_protocol_ids(std::vector<uint16_t>& v);
- virtual bool decode(const RawData&, CodecData&, SnortData&);
+ virtual bool decode(const RawData&, CodecData&, DecodeData&);
virtual bool encode(const uint8_t* const raw_in, const uint16_t raw_len,
EncState&, Buffer&);
virtual bool update(Packet*, Layer*, uint32_t* len);
*
*/
-bool GtpCodec::decode(const RawData& raw, CodecData& codec, SnortData&)
+bool GtpCodec::decode(const RawData& raw, CodecData& codec, DecodeData&)
{
uint8_t next_hdr_type;
uint8_t version;
#include "framework/codec.h"
#include "protocols/ipv4.h"
#include "protocols/packet.h"
+#include "protocols/tcp.h"
#include "codecs/codec_events.h"
#include "log/text_log.h"
#include "main/snort.h"
#include "log/messages.h"
#include "protocols/packet_manager.h"
+#include "protocols/icmp4.h"
+#include "protocols/udp.h"
namespace
{
virtual void get_protocol_ids(std::vector<uint16_t>&);
- virtual bool decode(const RawData&, CodecData&, SnortData&);
+ virtual bool decode(const RawData&, CodecData&, DecodeData&);
virtual void log(TextLog* const, const uint8_t* /*raw_pkt*/,
const Packet* const);
};
v.push_back(IP_EMBEDDED_IN_ICMP4);
}
-bool Icmp4IpCodec::decode(const RawData& raw, CodecData& codec, SnortData& snort)
+bool Icmp4IpCodec::decode(const RawData& raw, CodecData& codec, DecodeData& snort)
{
uint32_t ip_len; /* length from the start of the ip hdr to the
* pkt end */
virtual void get_protocol_ids(std::vector<uint16_t>&);
- virtual bool decode(const RawData&, CodecData&, SnortData&);
+ virtual bool decode(const RawData&, CodecData&, DecodeData&);
};
} // namespace
v.push_back(IP_EMBEDDED_IN_ICMP6);
}
-bool Icmp6IpCodec::decode(const RawData& raw, CodecData& codec, SnortData&)
+bool Icmp6IpCodec::decode(const RawData& raw, CodecData& codec, DecodeData&)
{
// uint16_t orig_frag_offset;
~LlcCodec() {};
- virtual bool decode(const RawData&, CodecData&, SnortData&);
+ virtual bool decode(const RawData&, CodecData&, DecodeData&);
virtual void log(TextLog* const, const uint8_t* /*raw_pkt*/,
const Packet* const);
v.push_back(ETHERNET_LLC);
}
-bool LlcCodec::decode(const RawData& raw, CodecData& codec, SnortData&)
+bool LlcCodec::decode(const RawData& raw, CodecData& codec, DecodeData&)
{
if(raw.len < sizeof(EthLlc))
{
~TeredoCodec(){};
virtual void get_protocol_ids(std::vector<uint16_t>& v);
- virtual bool decode(const RawData&, CodecData&, SnortData&);
+ virtual bool decode(const RawData&, CodecData&, DecodeData&);
};
} // anonymous namespace
v.push_back(PROTOCOL_TEREDO);
}
-bool TeredoCodec::decode(const RawData& raw, CodecData& codec, SnortData& snort)
+bool TeredoCodec::decode(const RawData& raw, CodecData& codec, DecodeData& snort)
{
const uint8_t* raw_pkt = raw.data;
virtual void get_data_link_type(std::vector<int>&);
virtual void log(TextLog* const, const uint8_t* /*raw_pkt*/,
const Packet*const );
- virtual bool decode(const RawData&, CodecData&, SnortData&);
+ virtual bool decode(const RawData&, CodecData&, DecodeData&);
virtual bool encode(const uint8_t* const raw_in, const uint16_t raw_len,
EncState&, Buffer&);
virtual bool update(Packet*, Layer*, uint32_t* len);
*
* Returns: void function
*/
-bool EthCodec::decode(const RawData& raw, CodecData& codec, SnortData&)
+bool EthCodec::decode(const RawData& raw, CodecData& codec, DecodeData&)
{
/* do a little validation */
virtual void get_data_link_type(std::vector<int>&);
- virtual bool decode(const RawData&, CodecData&, SnortData&);
+ virtual bool decode(const RawData&, CodecData&, DecodeData&);
};
* Returns: void function
*/
-bool I4LRawIpCodec::decode(const RawData& raw, CodecData& codec, SnortData&)
+bool I4LRawIpCodec::decode(const RawData& raw, CodecData& codec, DecodeData&)
{
if(raw.len < 2)
return false;
virtual void get_data_link_type(std::vector<int>&);
- virtual bool decode(const RawData&, CodecData&, SnortData&);
+ virtual bool decode(const RawData&, CodecData&, DecodeData&);
};
} // namespace
#endif
}
-bool LinuxSllCodec::decode(const RawData& raw, CodecData& data, SnortData&)
+bool LinuxSllCodec::decode(const RawData& raw, CodecData& data, DecodeData&)
{
/* do a little validation */
if(raw.len < linux_sll::SLL_HDR_LEN)
~NullCodec() {};
- virtual bool decode(const RawData&, CodecData&, SnortData&);
+ virtual bool decode(const RawData&, CodecData&, DecodeData&);
virtual void get_data_link_type(std::vector<int>&);
};
*
* Returns: void function
*/
-bool NullCodec::decode(const RawData& raw, CodecData& data, SnortData&)
+bool NullCodec::decode(const RawData& raw, CodecData& data, DecodeData&)
{
/* do a little validation */
if(raw.len < NULL_HDRLEN)
~PPPCodec() {}
- virtual bool decode(const RawData&, CodecData&, SnortData&);
+ virtual bool decode(const RawData&, CodecData&, DecodeData&);
virtual void get_data_link_type(std::vector<int>&);
};
}
-bool PPPCodec::decode(const RawData& raw, CodecData& codec, SnortData&)
+bool PPPCodec::decode(const RawData& raw, CodecData& codec, DecodeData&)
{
if(raw.len < 2)
return false;
~Raw4Codec() {};
- virtual bool decode(const RawData&, CodecData&, SnortData&);
+ virtual bool decode(const RawData&, CodecData&, DecodeData&);
virtual void get_data_link_type(std::vector<int>&);
};
*
* Returns: void function
*/
-bool Raw4Codec::decode(const RawData&, CodecData& data, SnortData&)
+bool Raw4Codec::decode(const RawData&, CodecData& data, DecodeData&)
{
data.next_prot_id = ETHERTYPE_IPV4;
return true;
Raw6Codec() : Codec(CD_RAW6_NAME){};
~Raw6Codec() {};
- virtual bool decode(const RawData&, CodecData&, SnortData&);
+ virtual bool decode(const RawData&, CodecData&, DecodeData&);
virtual void get_data_link_type(std::vector<int>&);
};
// raw packets are predetermined to be ip4 (above) or ip6 (below) by the DLT
-bool Raw6Codec::decode(const RawData&, CodecData& data, SnortData&)
+bool Raw6Codec::decode(const RawData&, CodecData& data, DecodeData&)
{
data.next_prot_id = ETHERTYPE_IPV6;
return true;
SlipCodec() : Codec(CD_SLIP_NAME){};
~SlipCodec() {};
- virtual bool decode(const RawData&, CodecData&, SnortData&);
+ virtual bool decode(const RawData&, CodecData&, DecodeData&);
virtual void get_data_link_type(std::vector<int>&);
};
}
-bool SlipCodec::decode(const RawData& raw, CodecData& codec, SnortData&)
+bool SlipCodec::decode(const RawData& raw, CodecData& codec, DecodeData&)
{
if (raw.len < SLIP_HEADER_LEN)
return false;
~WlanCodec() {};
- virtual bool decode(const RawData&, CodecData&, SnortData&);
+ virtual bool decode(const RawData&, CodecData&, DecodeData&);
virtual void get_data_link_type(std::vector<int>&);
virtual void log(TextLog* const, const uint8_t* /*raw_pkt*/,
const Packet* const);
#endif
}
-bool WlanCodec::decode(const RawData& raw, CodecData& codec, SnortData&)
+bool WlanCodec::decode(const RawData& raw, CodecData& codec, DecodeData&)
{
/* do a little validation */
if(raw.len < MINIMAL_IEEE80211_HEADER_LEN)
// decode(...) must be implemented!!
- virtual bool decode(const RawData&, CodecData&, SnortData&);
+ virtual bool decode(const RawData&, CodecData&, DecodeData&);
virtual void log(TextLog*, const uint8_t* /*raw_pkt*/, const Packet* const);
virtual void get_protocol_ids(std::vector<uint16_t>&);
// v.push_back(ETHERTYPE);
}
-bool NameCodec::decode(const RawData& raw, CodecData& data, SnortData&)
+bool NameCodec::decode(const RawData& raw, CodecData& data, DecodeData&)
{
// reinterpret the raw data into this codec's data format
const NameHdr* const hdr =
#include "managers/action_manager.h"
#include "sfip/sf_ip.h"
+#include "protocols/tcp.h"
+#include "protocols/udp.h"
+#include "protocols/icmp4.h"
+
/*
** Static function prototypes
*/
#include "protocols/vlan.h"
#include "managers/inspector_manager.h"
#include "sfip/sf_ip.h"
+#include "protocols/tcp.h"
+#include "protocols/udp.h"
+#include "protocols/icmp4.h"
+#include "protocols/icmp6.h"
FlowControl::FlowControl()
{
#include "snort.h"
#include "utils/util.h"
#include "sfip/sf_ip.h"
+#include "protocols/icmp4.h"
+#include "protocols/icmp6.h"
//-------------------------------------------------------------------------
// init foo
// unfortunately necessary due to use of Ipapi in struct
#include "protocols/ip.h"
#include "protocols/mpls.h" // FIXIT-M remove MPLS from Convenience pointers
+#include "framework/decode_data.h"
struct TextLog;
struct Packet;
};
-enum DecodeFlags : std::uint16_t
-{
- /*
- * DO NOT USE PKT_TYPE_* directly!! Use PktType enum and
- * access methods to get/set.
- *
- * Since there are so few Packet Types, I decided to save
- * some bytes (these get zeroes for every packet), and use
- * the three least signfignat bits of 'decode_flags' as
- * the packet_type. Unless you are adding a new PktType,
- * I highly suggest you ignore this section and use
- * the SnortData::xxx_pkt_type() setter and getter methods.
- */
- PKT_TYPE_UNKNOWN = 0x00,
- PKT_TYPE_IP = 0x01,
- PKT_TYPE_TCP = 0x02,
- PKT_TYPE_UDP = 0x03,
- PKT_TYPE_ICMP = 0x04,
- PKT_TYPE_ARP = 0x05,
- PKT_TYPE_FREE1 = 0x06, /* If protocol is added, update enum class PktType below. */
- PKT_TYPE_FREE2 = 0x07, /* If protocol is added, update enum class PktType below. */
- PKT_TYPE_MASK = 0x07,
-
- /* error flags */
- DECODE_ERR_CKSUM_IP = 0x0008,
- DECODE_ERR_CKSUM_TCP = 0x0010,
- DECODE_ERR_CKSUM_UDP = 0x0020,
- DECODE_ERR_CKSUM_ICMP = 0x0040,
- DECODE_ERR_CKSUM_ANY = 0x0080,
- DECODE_ERR_BAD_TTL = 0x0100,
- DECODE_ERR_FLAGS = (DECODE_ERR_CKSUM_IP | DECODE_ERR_CKSUM_TCP |
- DECODE_ERR_CKSUM_UDP | DECODE_ERR_CKSUM_UDP |
- DECODE_ERR_CKSUM_ICMP | DECODE_ERR_CKSUM_ANY |
- DECODE_ERR_BAD_TTL),
-
-
- DECODE_PKT_TRUST = 0x0200, /* Tell Snort++ to whitelist this packet */
- DECODE_FRAG = 0x0400, /* flag to indicate a fragmented packet */
- DECODE_MF = 0x0800,
-};
-
-/* NOTE: if A protocol is added, update DecodeFlags! */
-enum class PktType : std::uint8_t
-{
- UNKNOWN = PKT_TYPE_UNKNOWN,
- IP = PKT_TYPE_IP,
- TCP = PKT_TYPE_TCP,
- UDP = PKT_TYPE_UDP,
- ICMP = PKT_TYPE_ICMP,
- ARP = PKT_TYPE_ARP,
-};
-
-struct SnortData
-{
- /* Pointers which will be used by Snort++. (starting with uint16_t so tcph is 64 bytes from start*/
-
- /*
- * these four pounters are each referenced literally
- * dozens if not hundreds of times. NOTHING else should be added!!
- */
- const tcp::TCPHdr* tcph;
- const udp::UDPHdr* udph;
- const icmp::ICMPHdr* icmph;
- uint16_t sp; /* source port (TCP/UDP) */
- uint16_t dp; /* dest port (TCP/UDP) */
- uint16_t decode_flags; /* First bits (currently 3), which are masked using the constant
- * DECODE_PKT_TYPE_MASK defined above, are specifically
- * for the PktType. Everything else is fair game flag.
- *
- */
- ip::IpApi ip_api;
- mpls::MplsHdr mplsHdr;
-
- inline void reset()
- {
- static_assert(PKT_TYPE_UNKNOWN == 0,
- "The Packets 'type' gets resets to zero - "
- "which means zero is unkown");
- memset((char*)&tcph, '\0', offsetof(SnortData, ip_api));
- ip_api.reset();
- }
-
- inline void set_pkt_type(PktType pkt_type)
- { decode_flags = (decode_flags & ~PKT_TYPE_MASK) | static_cast<uint16_t>(pkt_type); }
-
- inline PktType get_pkt_type() const
- { return static_cast<PktType>(decode_flags & PKT_TYPE_MASK); }
-};
-
-
struct CodecData
{
/* This section will get reset before every decode() function call */
{ next_prot_id = init_prot; }
};
-#define PROTO_BIT__NONE 0x0000
-#define PROTO_BIT__IP 0x0001
-#define PROTO_BIT__ARP 0x0002
-#define PROTO_BIT__TCP 0x0004
-#define PROTO_BIT__UDP 0x0008
-#define PROTO_BIT__ICMP 0x0010
-#define PROTO_BIT__TEREDO 0x0020
-#define PROTO_BIT__GTP 0x0040
-#define PROTO_BIT__MPLS 0x0080
-#define PROTO_BIT__VLAN 0x0100
-#define PROTO_BIT__ETH 0x0200
-#define PROTO_BIT__TCP_EMBED_ICMP 0x0400
-#define PROTO_BIT__UDP_EMBED_ICMP 0x0800
-#define PROTO_BIT__ICMP_EMBED_ICMP 0x1000
-#define PROTO_BIT__ICMP_EMBED (PROTO_BIT__TCP_EMBED_ICMP | PROTO_BIT__UDP_EMBED_ICMP | PROTO_BIT__ICMP_EMBED_ICMP)
-#define PROTO_BIT__IP6_EXT 0x2000
-#define PROTO_BIT__FREE 0x4000
-#define PROTO_BIT__OTHER 0x8000
-#define PROTO_BIT__ALL 0xffff
-
* data.lyr_len = MIN_IP_HEADER_LEN + 12;
* data.invalid_bytes = 8 === 20 - 12
*
- * SnortData& = Data which will be sent to the rest of Snort++.
+ * DecodeData& = Data which will be sent to the rest of Snort++.
* contains convenience pointers and information
* about this packet.
**/
- virtual bool decode(const RawData&, CodecData&, SnortData&)=0;
+ virtual bool decode(const RawData&, CodecData&, DecodeData&)=0;
/*
* Log this layer's information
#include "framework/parameter.h"
#include "framework/module.h"
#include "framework/range.h"
+#include "protocols/tcp.h"
static const char* s_name = "ack";
#include "framework/ips_option.h"
#include "framework/parameter.h"
#include "framework/module.h"
+#include "protocols/tcp.h"
#define M_NORMAL 0
#define M_ALL 1
#include "framework/parameter.h"
#include "framework/module.h"
#include "framework/range.h"
+#include "protocols/icmp4.h"
+#include "protocols/icmp6.h"
static const char* s_name = "icmp_id";
#include "framework/parameter.h"
#include "framework/module.h"
#include "framework/range.h"
+#include "protocols/icmp4.h"
+#include "protocols/icmp6.h"
static const char* s_name = "icmp_seq";
#include "framework/parameter.h"
#include "framework/module.h"
#include "framework/range.h"
+#include "protocols/icmp4.h"
static const char* s_name = "icode";
#include "framework/parameter.h"
#include "framework/module.h"
#include "framework/range.h"
+#include "protocols/icmp4.h"
static const char* s_name = "itype";
#include "framework/parameter.h"
#include "framework/module.h"
#include "framework/range.h"
+#include "protocols/tcp.h"
static const char* s_name = "seq";
#include "framework/parameter.h"
#include "framework/module.h"
#include "framework/range.h"
+#include "protocols/tcp.h"
static const char* s_name = "window";
#include "snort.h"
#include "log/text_log.h"
#include "log/log_text.h"
+#include "protocols/tcp.h"
+#include "protocols/udp.h"
+#include "protocols/icmp4.h"
+#include "protocols/icmp6.h"
+#include "protocols/eth.h"
#define LOG_BUFFER (4*K_BYTES)
#include "stream/stream_api.h"
#include "protocols/layer.h"
#include "protocols/vlan.h"
+#include "protocols/icmp4.h"
using namespace std;
#include "protocols/layer.h"
#include "protocols/arp.h"
#include "sfip/sf_ip.h"
+#include "protocols/eth.h"
static const uint8_t bcast[6] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
#include "protocols/ipv4_options.h"
#include "protocols/tcp.h"
#include "protocols/tcp_options.h"
+#include "protocols/icmp4.h"
+#include "protocols/icmp6.h"
#include "stream/stream.h"
typedef enum {
#include "perf.h"
#include "stream/stream_api.h"
#include "utils/stats.h"
+#include "protocols/tcp.h"
static void GetPktDropStats(SFBASE *, SFBASE_STATS *);
static void DisplayBasePerfStatsConsole(SFBASE_STATS *, int);
#include "snort_types.h"
#include "perf.h"
#include "sfip/sf_ip.h"
+#include "protocols/icmp4.h"
static void DisplayFlowStats(SFFLOW_STATS *sfFlowStats);
static void WriteFlowStats(SFFLOW_STATS *, FILE *);
#include "ipobj.h"
#include "stream/stream_api.h"
#include "sfip/sf_ip.h"
+#include "protocols/tcp.h"
+#include "protocols/udp.h"
+#include "protocols/icmp4.h"
+#include "protocols/icmp6.h"
+#include "protocols/eth.h"
typedef struct s_PS_HASH_KEY
{
}
#include "main/snort_types.h"
-
-#include "framework/codec.h"
-#include "protocols/tcp.h"
-#include "protocols/udp.h"
-#include "protocols/eth.h"
-#include "protocols/icmp4.h"
-#include "protocols/icmp6.h"
-#include "protocols/mpls.h"
-#include "protocols/ip.h"
+#include "framework/decode_data.h"
#include "protocols/layer.h"
-#include "protocols/ipv4.h"
-#include "protocols/ipv6.h"
-
/* D E F I N E S ************************************************************/
const uint8_t* data; /* packet payload pointer */
uint16_t dsize; /* packet payload size */
- SnortData ptrs; // convenience pointers used throughout Snort++
+ DecodeData ptrs; // convenience pointers used throughout Snort++
Layer* layers; /* decoded encapsulations */
#define PKT_ZERO_LEN offsetof(Packet, pkth)
-#define GET_PKT_SEQ(p) (ntohl(p->ptrs.tcph->th_seq))
/* Macros to deal with sequence numbers - p810 TCP Illustrated vol 2 */
#define SEQ_LT(a,b) ((int)((a) - (b)) < 0)
#include "protocols/packet.h"
#include "protocols/protocol_ids.h"
#include "protocols/eth.h"
+#include "protocols/icmp4.h"
+#include "protocols/icmp6.h"
#include "time/profiler.h"
#include "parser/parser.h"
Packet* p, const DAQ_PktHdr_t* pkthdr, const uint8_t* pkt)
{
PROFILE_VARS;
- SnortData unsure_encap_ptrs;
+ DecodeData unsure_encap_ptrs;
uint16_t prev_prot_id = FINISHED_DECODE;
uint8_t mapped_prot = CodecManager::grinder;
#define TCP_MAXSEG 0x02 /* set maximum segment size */
#define SOL_TCP 6 /* TCP level */
+#define GET_PKT_SEQ(p) (ntohl(p->ptrs.tcph->th_seq))
namespace tcp
{
#include "framework/inspector.h"
#include "framework/plug_data.h"
#include "detection/detection_util.h"
+#include "protocols/tcp.h"
static const char* s_name = "ftp_data";
#include "loggers/unified2_common.h"
#include "file_api/file_api.h"
#include "sf_email_attach_decode.h"
+#include "protocols/tcp.h"
const HiSearchToken hi_patterns[] =
{
#include "snort_bounds.h"
#include "detection_util.h"
#include "utils/util_unfold.h"
+#include "protocols/tcp.h"
#define STAT_END 100
#define HTTPRESP_HEADER_NAME__COOKIE "Set-Cookie"
#include "stream/stream_api.h"
#include "stream/stream_splitter.h"
#include "target_based/sftarget_protocol_reference.h"
+#include "protocols/tcp.h"
#define RPC_MAX_BUF_SIZE 256
#define RPC_FRAG_HDR_SIZE sizeof(uint32_t)
#include "protocols/vlan.h"
#include "protocols/ip.h"
#include "protocols/icmp4.h"
+#include "protocols/udp.h"
+#include "protocols/tcp.h"
#include "sfip/sf_ip.h"
THREAD_LOCAL SessionStats icmpStats;
#include "tcp_module.h"
#include "stream/stream_splitter.h"
#include "sfip/sf_ip.h"
+#include "protocols/tcp.h"
+#include "protocols/eth.h"
using namespace tcp;