summaryrefslogtreecommitdiffstats
path: root/include/regs.h
blob: dcbb0f4b6f7c52552f9fbce79b4cf3d6181e72d6 (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
#ifndef _LIBNFTNL_REGS_INTERNAL_H_
#define _LIBNFTNL_REGS_INTERNAL_H_

enum nftnl_expr_type {
	NFT_EXPR_UNSPEC	= 0,
	NFT_EXPR_PAYLOAD,
	NFT_EXPR_META,
	NFT_EXPR_CT,
	NFT_EXPR_EXTHDR,
	NFT_EXPR_FIB,
	NFT_EXPR_OSF,
	NFT_EXPR_RT,
	NFT_EXPR_XFRM,
	NFT_EXPR_SOCKET,
};

struct nftnl_reg {
	enum nftnl_expr_type				type;
	uint32_t					len;
	uint64_t					genid;
	uint8_t						word;
	union {
		struct {
			enum nft_meta_keys		key;
		} meta;
		struct {
			enum nft_payload_bases		base;
			uint32_t			offset;
		} payload;
		struct {
			enum nft_ct_keys		key;
			uint8_t				dir;
		} ct;
		struct {
			uint32_t			offset;
			uint32_t			len;
			uint8_t				type;
			uint32_t			op;
			uint32_t			flags;
		} exthdr;
		struct {
			uint32_t			flags;
			uint32_t			result;
		} fib;
		struct {
			uint8_t                 	ttl;
			uint32_t                	flags;
		} osf;
		struct {
			enum nft_rt_keys		key;
		} rt;
		struct {
			enum nft_socket_keys		key;
			uint32_t			level;
		} socket;
		struct {
			enum nft_xfrm_keys		key;
			uint32_t			spnum;
			uint8_t				dir;
		} xfrm;
	};
};

struct nftnl_regs {
	uint32_t		num_regs;
	struct nftnl_reg	*reg;
	uint64_t		genid;
};

#endif