summaryrefslogtreecommitdiffstats
path: root/include/headers.h
blob: 13324c72c734202cfae7fda34436f3d9d3770de4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
#ifndef NFTABLES_HEADERS_H
#define NFTABLES_HEADERS_H

#include <netinet/in.h>

#ifndef IPPROTO_UDPLITE
# define IPPROTO_UDPLITE	136
#endif

enum tcp_hdr_flags {
	TCP_FLAG_FIN	= 0x01,
	TCP_FLAG_SYN	= 0x02,
	TCP_FLAG_RST	= 0x04,
	TCP_FLAG_PSH	= 0x08,
	TCP_FLAG_ACK	= 0x10,
	TCP_FLAG_URG	= 0x20,
	TCP_FLAG_ECN	= 0x40,
	TCP_FLAG_CWR	= 0x80,
};

struct ip_auth_hdr {
	uint8_t 	nexthdr;
	uint8_t 	hdrlen;
	uint16_t	reserved;
	uint32_t	spi;
	uint32_t	seq_no;
};

struct ip_esp_hdr {
	uint32_t	spi;
	uint32_t	seq_no;
};

struct ip_comp_hdr {
	uint8_t		nexthdr;
	uint8_t		flags;
	uint16_t	cpi;
};

#ifndef IPPROTO_DCCP
# define IPPROTO_DCCP 33
#endif

enum dccp_pkt_type {
	DCCP_PKT_REQUEST = 0,
	DCCP_PKT_RESPONSE,
	DCCP_PKT_DATA,
	DCCP_PKT_ACK,
	DCCP_PKT_DATAACK,
	DCCP_PKT_CLOSEREQ,
	DCCP_PKT_CLOSE,
	DCCP_PKT_RESET,
	DCCP_PKT_SYNC,
	DCCP_PKT_SYNCACK,
	DCCP_PKT_INVALID,
};

struct dccp_hdr {
	uint16_t	dccph_sport,
			dccph_dport;
	uint8_t		dccph_doff;
	uint8_t		dccph_ccval:4,
			dccph_cscov:4;
	uint16_t	dccph_checksum;
	uint8_t		dccph_reserved:3,
			dccph_type:4,
			dccph_x:1;
	uint8_t		dccph_seq2;
	uint16_t	dccph_seq;
};

#ifndef IPPROTO_SCTP
# define IPPROTO_SCTP 132
#endif

struct sctphdr {
	uint16_t	source;
	uint16_t	dest;
	uint32_t	vtag;
	uint32_t	checksum;
};

struct arp_hdr {
	uint16_t	htype;
	uint16_t	ptype;
	uint8_t		hlen;
	uint8_t		plen;
	uint16_t	oper;
	uint8_t		sha[6];
	uint32_t	spa;
	uint8_t		tha[6];
	uint32_t	tpa;
} __attribute__((__packed__));

struct ipv6hdr {
	uint8_t		version:4,
			priority:4;
	uint8_t		flow_lbl[3];

	uint16_t	payload_len;
	uint8_t		nexthdr;
	uint8_t		hop_limit;

	struct in6_addr	saddr;
	struct in6_addr	daddr;
};

struct vlan_hdr {
	uint16_t	vlan_id:12,
			vlan_cfi:1,
			vlan_pcp:3;
	uint16_t	vlan_type;
};

#ifndef IPPROTO_MH
# define IPPROTO_MH 135
#endif

struct ip6_mh {
	uint8_t		ip6mh_proto;
	uint8_t		ip6mh_hdrlen;
	uint8_t		ip6mh_type;
	uint8_t		ip6mh_reserved;
	uint16_t	ip6mh_cksum;
	/* Followed by type specific messages */
	uint8_t		data[0];
};

/* Type 4 Routing header - well known as srh */
struct ip6_rt4 {
	uint8_t		ip6r4_nxt;		/* next header			*/
	uint8_t		ip6r4_len;		/* length in units of 8 octets	*/
	uint8_t		ip6r4_type;		/* always zero			*/
	uint8_t		ip6r4_segleft;		/* segments left		*/
	uint8_t		ip6r4_last_entry;	/* last entry			*/
	uint8_t		ip6r4_flags;		/* flags			*/
	uint16_t	ip6r4_tag;		/* tag				*/
	struct in6_addr	ip6r4_segments[0];	/* SID list			*/
};

/* RFC 3775 */
#define IP6_MH_TYPE_BRR		0	/* Binding Refresh Request	*/
#define IP6_MH_TYPE_HOTI	1	/* HOTI Message			*/
#define IP6_MH_TYPE_COTI	2	/* COTI Message			*/
#define IP6_MH_TYPE_HOT		3	/* HOT Message			*/
#define IP6_MH_TYPE_COT		4	/* COT Message			*/
#define IP6_MH_TYPE_BU		5	/* Binding Update		*/
#define IP6_MH_TYPE_BACK	6	/* Binding ACK			*/
#define IP6_MH_TYPE_BERROR	7	/* Binding Error		*/
/* RFC 4068 */
#define IP6_MH_TYPE_FBU		8	/* Fast Binding Update		*/
#define IP6_MH_TYPE_FBACK	9	/* Fast Binding ACK		*/
#define IP6_MH_TYPE_FNA		10	/* Fast Binding Advertisement	*/
/* RFC 5096 */
#define IP6_MH_TYPE_EMH		11	/* Experimental Mobility Header	*/
/* RFC 5142 */
#define IP6_MH_TYPE_HASM	12	/* Home Agent Switch Message	*/

#endif /* NFTABLES_HEADERS_H */