31 #ifndef _SF_SNORT_PACKET_H_
32 #define _SF_SNORT_PACKET_H_
35 #include <sys/types.h>
36 #include <netinet/in.h>
43 #include <sfbpf_dlt.h>
49 #define VLAN_HDR_LEN 4
52 #define pcap_header pkt_header
58 #define VTH_PRIORITY(vh) ((ntohs((vh)->vth_pri_cfi_vlan) & 0xe000) >> 13)
59 #define VTH_CFI(vh) ((ntohs((vh)->vth_pri_cfi_vlan) & 0x1000) >> 12)
60 #define VTH_VLAN(vh) ((uint16_t)(ntohs((vh)->vth_pri_cfi_vlan) & 0x0FFF))
70 #define ETHER_HDR_LEN 14
71 #define ETHERNET_TYPE_IP 0x0800
72 #define ETHERNET_TYPE_IPV6 0x86dd
73 #define ETHERNET_TYPE_8021Q 0x8100
106 #if defined (SOLARIS) || defined (SUNOS) || defined (__sparc__) || defined(__sparc64__) || defined (HPUX)
107 #define SUN_SPARC_TWIDDLE 2
109 #define SUN_SPARC_TWIDDLE 0
112 #define IP_RESBIT 0x8000
116 #define IP_DONTFRAG 0x4000
117 #define IP_MOREFRAGS 0x2000
120 #define IP_MAXPKT 65535
123 #define IP_HDR_LEN 20
125 #if !defined(SFLINUX) && defined(DAQ_CAPA_CARRIER_ID)
126 #if defined(DAQ_VERSION) && DAQ_VERSION > 10
127 #define GET_SFOUTER_IPH_PROTOID(p, pkt_header) ((uint32_t)(p->pkt_header->carrier_id) ? p->pkt_header->carrier_id : 0 )
129 #define GET_SFOUTER_IPH_PROTOID(p, pkt_header) ((uint32_t)((p)->outer_ip4_header ? (IS_IP6(p) ? ((p)->outer_ip6h.next) : ((p)->outer_ip4h.ip_proto)):0))
147 #define MAX_LOG_FUNC 32
148 #define MAX_IP_OPTIONS 40
151 #define IPOPTION_EOL 0x00
152 #define IPOPTION_NOP 0x01
153 #define IPOPTION_RR 0x07
154 #define IPOPTION_RTRALT 0x94
155 #define IPOPTION_TS 0x44
156 #define IPOPTION_SECURITY 0x82
157 #define IPOPTION_LSRR 0x83
158 #define IPOPTION_LSRR_E 0x84
159 #define IPOPTION_SATID 0x88
160 #define IPOPTION_SSRR 0x89
170 #define TCP_HDR_LEN 20
185 #define TCPHEADER_FIN 0x01
186 #define TCPHEADER_SYN 0x02
187 #define TCPHEADER_RST 0x04
188 #define TCPHEADER_PUSH 0x08
189 #define TCPHEADER_ACK 0x10
190 #define TCPHEADER_URG 0x20
191 #define TCPHEADER_ECE 0x40
192 #define TCPHEADER_CWR 0x80
193 #define TCPHEADER_NORESERVED (TCPHEADER_FIN|TCPHEADER_SYN|TCPHEADER_RST \
194 |TCPHEADER_PUSH|TCPHEADER_ACK|TCPHEADER_URG)
196 #define MAX_TCP_OPTIONS 40
198 #define TCPOPT_EOL 0x00
199 #define TCPOPT_NOP 0x01
200 #define TCPOPT_MSS 0x02
201 #define TCPOPT_WSCALE 0x03
202 #define TCPOPT_SACKOK 0x04
203 #define TCPOPT_SACK 0x05
204 #define TCPOPT_ECHO 0x06
205 #define TCPOPT_ECHOREPLY 0x07
206 #define TCPOPT_TIMESTAMP 0x08
207 #define TCPOPT_CC 0x11
208 #define TCPOPT_CCNEW 0x12
209 #define TCPOPT_CCECHO 0x13
213 #define UDP_HDR_LEN 8
270 #define icmp_parameter_ptr icmp_header_union.parameter_problem_ptr
271 #define icmp_gateway_addr icmp_header_union.gateway_waddr
272 #define icmp_echo_id icmp_header_union.echo.id
273 #define icmp_echo_seq icmp_header_union.echo.seq
274 #define icmp_timestamp_id icmp_header_union.timestamp.id
275 #define icmp_timestamp_seq icmp_header_union.timestamp.seq
276 #define icmp_info_id icmp_header_union.info.id
277 #define icmp_info_seq icmp_header_union.info.seq
278 #define icmp_void icmp_header_union.void
279 #define icmp_nextmtu icmp_header_union.path_mtu.nextmtu
280 #define icmp_ra_num_addrs icmp_header_union.router_advertisement.number_addrs
281 #define icmp_ra_entry_size icmp_header_union.router_advertisement.entry_size
282 #define icmp_ra_lifetime icmp_header_union.router_advertisement.lifetime
314 #define icmp_orig_timestamp icmp_data_union.timestamp.orig
315 #define icmp_recv_timestamp icmp_data_union.timestamp.receive
316 #define icmp_xmit_timestamp icmp_data_union.timestamp.transmit
317 #define icmp_ipheader icmp_data_union.ip_header
318 #define icmp_ra_addr0 icmp_data_union.router_address
319 #define icmp_mask icmp_data_union.mask
320 #define icmp_data icmp_data_union.data
323 #define ICMP_ECHO_REPLY 0
324 #define ICMP_DEST_UNREACHABLE 3
325 #define ICMP_SOURCE_QUENCH 4
326 #define ICMP_REDIRECT 5
327 #define ICMP_ECHO_REQUEST 8
328 #define ICMP_ROUTER_ADVERTISEMENT 9
329 #define ICMP_ROUTER_SOLICITATION 10
330 #define ICMP_TIME_EXCEEDED 11
331 #define ICMP_PARAMETER_PROBLEM 12
332 #define ICMP_TIMESTAMP_REQUEST 13
333 #define ICMP_TIMESTAMP_REPLY 14
334 #define ICMP_INFO_REQUEST 15
335 #define ICMP_INFO_REPLY 16
336 #define ICMP_ADDRESS_REQUEST 17
337 #define ICMP_ADDRESS_REPLY 18
339 #define INVALID_CHECKSUM_IP 0x01
340 #define INVALID_CHECKSUM_TCP 0x02
341 #define INVALID_CHECKSUM_UDP 0x04
342 #define INVALID_CHECKSUM_ICMP 0x08
343 #define INVALID_CHECKSUM_IGMP 0x10
344 #define INVALID_CHECKSUM_ALL 0x1F
345 #define INVALID_TTL 0x20
384 #define ip6_payload_len payload_len
385 #define ip6_next_header next_header
386 #define ip6_hop_limit hop_limit
387 #define ip6_hops hop_limit
416 #define ICMP6_UNREACH 1
419 #define ICMP6_PARAMS 4
420 #define ICMP6_ECHO 128
421 #define ICMP6_REPLY 129
424 #define ICMP6_MIN_HEADER_LEN (sizeof(ICMP6Hdr) )
469 #define IP6_HEADER_LEN 40
477 #define iph_is_valid(p) ((p)->family != NO_IP)
481 #define IP6_HDR_LEN 40
508 #define MAX_PROTO_LAYERS 32
517 #define stream_session_ptr stream_session
611 #ifndef NO_NON_ETHER_DECODER
630 #ifdef DLT_IEEE802_11
631 const void *wifi_header;
681 #define IP_INNER_LAYER 1
682 #define IP_OUTTER_LAYER 0
684 #define PKT_ZERO_LEN offsetof(SFSnortPacket, ip_options)
686 #define PROTO_BIT__IP 0x0001
687 #define PROTO_BIT__ARP 0x0002
688 #define PROTO_BIT__TCP 0x0004
689 #define PROTO_BIT__UDP 0x0008
690 #define PROTO_BIT__ICMP 0x0010
691 #define PROTO_BIT__TEREDO 0x0020
692 #define PROTO_BIT__ALL 0xffff
694 #define IsIP(p) (IPH_IS_VALID(p))
695 #define IsTCP(p) (IsIP(p) && p->tcp_header)
696 #define IsUDP(p) (IsIP(p) && p->udp_header)
697 #define IsICMP(p) (IsIP(p) && p->icmp_header)
699 #define SET_IP4_VER(ip_header, value) \
700 ((ip_header)->version_headerlength = \
701 (unsigned char)(((ip_header)->version_headerlength & 0x0f) | (value << 4)))
702 #define SET_IP4_HLEN(ip_header, value) \
703 ((ip_header)->version_headerlength = \
704 (unsigned char)(((ip_header)->version_headerlength & 0xf0) | (value & 0x0f)))
706 #define SET_TCP_HDR_OFFSET(tcp_header, value) \
707 ((tcp_header)->offset_reserved = \
708 (unsigned char)(((tcp_header)->offset_reserved & 0x0f) | (value << 4)))
710 #define BIT(i) (0x1 << (i-1))
714 #define FLAG_REBUILT_FRAG 0x00000001
715 #define FLAG_REBUILT_STREAM 0x00000002
716 #define FLAG_STREAM_UNEST_UNI 0x00000004
718 #define FLAG_STREAM_EST 0x00000008
720 #define FLAG_STREAM_INSERT 0x00000010
721 #define FLAG_STREAM_TWH 0x00000020
722 #define FLAG_FROM_SERVER 0x00000040
724 #define FLAG_FROM_CLIENT 0x00000080
727 #define FLAG_PDU_HEAD 0x00000100
728 #define FLAG_PDU_TAIL 0x00000200
729 #define FLAG_UNSURE_ENCAP 0x00000400
731 #define FLAG_HTTP_DECODE 0x00000800
733 #define FLAG_IGNORE_PORT 0x00001000
734 #define FLAG_NO_DETECT 0x00002000
735 #define FLAG_ALLOW_MULTIPLE_DETECT 0x00004000
737 #define FLAG_PAYLOAD_OBFUSCATE 0x00008000
739 #define FLAG_STATELESS 0x00010000
740 #define FLAG_PASS_RULE 0x00020000
741 #define FLAG_IP_RULE 0x00040000
742 #define FLAG_IP_RULE_2ND 0x00080000
744 #define FLAG_LOGGED 0x00100000
745 #define FLAG_PSEUDO 0x00200000
746 #define FLAG_MODIFIED 0x00400000
748 #define FLAG_RESIZED 0x00800000
754 #define FLAG_STREAM_ORDER_OK 0x01000000
755 #define FLAG_STREAM_ORDER_BAD 0x02000000
756 #define FLAG_REASSEMBLED_OLD 0x04000000
758 #define FLAG_IPREP_SOURCE_TRIGGERED 0x08000000
759 #define FLAG_IPREP_DATA_SET 0x10000000
760 #define FLAG_FILE_EVENT_SET 0x20000000
761 #define FLAG_EARLY_REASSEMBLY 0x40000000
762 #define FLAG_RETRANSMIT 0x80000000
763 #define FLAG_PURGE 0x0100000000
764 #define FLAG_H1_ABORT 0x0200000000
765 #define FLAG_UPGRADE_PROTO 0x0400000000
766 #define FLAG_PSEUDO_FLUSH 0x0800000000
767 #define FLAG_FAST_BLOCK 0x1000000000
768 #define FLAG_EVAL_DROP 0x2000000000
771 #define FLAG_PDU_FULL (FLAG_PDU_HEAD | FLAG_PDU_TAIL)
773 #define REASSEMBLED_PACKET_FLAGS (FLAG_REBUILT_STREAM|FLAG_REASSEMBLED_OLD)
775 #define SFTARGET_UNKNOWN_PROTOCOL -1
uint64_t PreprocEnableMask
struct _ICMPSequenceID ICMPSequenceID
struct _SFSnortPacket SFSnortPacket
struct _IP6RawHdr IP6RawHdr
#define FLAG_REBUILT_STREAM
static int PacketHasStartOfPDU(const SFSnortPacket *p)
static void SetExtraData(SFSnortPacket *p, uint32_t xid)
struct _EtherHeader EtherHeader
int(* LogFunction)(void *ssnptr, uint8_t **buf, uint32_t *len, uint32_t *type)
static int PacketHasPAFPayload(const SFSnortPacket *p)
static int PacketHasFullPDU(const SFSnortPacket *p)
struct _CiscoMetaHdr CiscoMetaHdr
struct _UDPHeader UDPHeader
struct _VlanHeader VlanHeader
DAQ_PktHdr_t SFDAQ_PktHdr_t
struct _IP6FragHdr IP6FragHdr
static int PacketWasCooked(const SFSnortPacket *p)
struct _H2PriSpec H2PriSpec
struct _IPAddresses IPAddresses
struct _TCPHeader TCPHeader
static uint8_t GetEventProto(const SFSnortPacket *p)
struct _IPV4Header IPV4Header
struct _ICMPHeader ICMPHeader
struct _IPOptions IPOptions
static int IsPortscanPacket(const SFSnortPacket *p)
struct _IPv6Extension IP6Extension
struct _CiscoMetaOpt CiscoMetaOpt
uint16_t(* iph_ret_off)(const struct _Packet *)
uint16_t(* iph_ret_len)(const struct _Packet *)
uint8_t(* orig_iph_ret_ttl)(const struct _Packet *)
uint8_t(* orig_iph_ret_hlen)(const struct _Packet *)
uint8_t(* iph_ret_hlen)(const struct _Packet *)
uint16_t(* orig_iph_ret_len)(const struct _Packet *)
uint8_t(* orig_iph_ret_ver)(const struct _Packet *)
uint8_t(* orig_iph_ret_proto)(const struct _Packet *)
uint8_t(* iph_ret_proto)(const struct _Packet *)
uint8_t(* iph_ret_ttl)(const struct _Packet *)
uint16_t(* iph_ret_tos)(const struct _Packet *)
uint16_t(* orig_iph_ret_tos)(const struct _Packet *)
uint16_t(* orig_iph_ret_off)(const struct _Packet *)
uint32_t(* orig_iph_ret_id)(const struct _Packet *)
uint32_t(* iph_ret_id)(const struct _Packet *)
uint8_t(* iph_ret_ver)(const struct _Packet *)
const uint8_t * option_data
const IPV4Header * outer_ip4_header
const IPV4Header * ip4_header
uint8_t ip6_frag_extension
PseudoPacketType pseudo_type
const void * eapol_headear
uint16_t normalized_payload_size
const uint8_t * ip_frag_start
const UDPHeader * outer_udph
ProtoLayer proto_layers[32]
uint8_t ip_more_fragments
const UDPHeader * udp_header
const ICMPHeader * icmp_header
const uint8_t * ip_payload
IPAddresses inner_orig_ips
uint16_t actual_ip_length
uint8_t num_ip6_extensions
const UDPHeader * inner_udph
const SFDAQ_PktHdr_t * pkt_header
IPH_API * outer_orig_iph_api
const EtherHeader * ether_header
const UDPHeader * orig_udp_header
TCPOptions tcp_options[40]
CiscoMetaOpt * cmd_options
const TCPHeader * tcp_header
const uint8_t * tcp_options_data
const CiscoMetaHdr * cmdh
struct _ExpectNode * expectedSession
uint16_t ip4_options_length
void * ether_header_other
const IPV4Header * inner_ip4_header
const TCPHeader * orig_tcp_header
PreprocEnableMask preprocessor_bit_mask
IPAddresses outer_orig_ips
const IP6RawHdr * raw_ip6_header
const IPV4Header * orig_ip4_header
IP6Extension * ip6_extensions
const uint8_t * ip4_options_data
const void * ppp_over_ether_header
uint16_t ip_fragment_offset
const uint8_t * outer_ip_payload
uint16_t tcp_options_length
const uint8_t * eapol_type
const void * ether_eapol_header
uint16_t outer_ip_payload_size
void * fragmentation_tracking_ptr
void * tokenring_header_mr
unsigned char iprep_layer
void * tokenring_header_llc
const void * tokenring_header
const VlanHeader * vlan_tag_header
int16_t application_protocol_ordinal
const ICMPHeader * orig_icmp_header