#
# Location definitions for packet matching
#

# name		alignment	offset		mask		shift
ip.version	u8		net+0		0xF0		4
ip.hdrlen	u8		net+0		0x0F
ip.diffserv	u8		net+1
ip.length	u16		net+2
ip.id		u16		net+4
ip.flag.res	u8		net+6		0xff		7
ip.df		u8		net+6		0x40		6
ip.mf		u8		net+6		0x20		5
ip.offset	u16		net+6		0x1FFF
ip.ttl		u8		net+8
ip.proto	u8		net+9
ip.chksum	u16		net+10
ip.src		u32		net+12
ip.dst		u32		net+16

# if ip.ihl > 5
ip.opts		u32		net+20


#
# IP version 6
#
# name		alignment	offset		mask		shift
ip6.version	u8		net+0		0xF0		4
ip6.tc		u16		net+0		0xFF0		4
ip6.flowlabel	u32		net+0		0xFFFFF
ip6.length	u16		net+4
ip6.nexthdr	u8		net+6
ip6.hoplimit	u8		net+7
ip6.src		16		net+8
ip6.dst		16		net+24

#
# Transmission Control Protocol (TCP)
#
# name		alignment	offset		mask		shift
tcp.sport	u16		tcp+0
tcp.dport	u16		tcp+2
tcp.seq		u32		tcp+4
tcp.ack		u32		tcp+8

# Data offset (4 bits)
tcp.off		u8		tcp+12		0xF0		4

# Reserved [0 0 0] (3 bits)
tcp.reserved	u8		tcp+12		0x04		1

# ECN [N C E] (3 bits)
tcp.ecn		u16		tcp+12		0x01C00		6

# Individual TCP flags (0|1) (6 bits in total)
tcp.flag.urg	u8		tcp+13		0x20		5
tcp.flag.ack	u8		tcp+13		0x10		4
tcp.flag.psh	u8		tcp+13		0x08		3
tcp.flag.rst	u8		tcp+13		0x04		2
tpc.flag.syn	u8		tcp+13		0x02		1
tcp.flag.fin	u8		tcp+13		0x01

tcp.win		u16		tcp+14
tcp.csum	u16		tcp+16
tcp.urg		u16		tcp+18
tcp.opts	u32		tcp+20

#
# User Datagram Protocol (UDP)
#
# name		alignment	offset		mask		shift
udp.sport	u16		tcp+0
udp.dport	u16		tcp+2
udp.length	u16		tcp+4
udp.csum	u16		tcp+6