]>
Commit | Line | Data |
---|---|---|
9fb9cbb1 YK |
1 | /* |
2 | * Copyright (C)2003,2004 USAGI/WIDE Project | |
3 | * | |
4 | * Header for use in defining a given L3 protocol for connection tracking. | |
5 | * | |
6 | * Author: | |
7 | * Yasuyuki Kozakai @USAGI <yasuyuki.kozakai@toshiba.co.jp> | |
8 | * | |
9 | * Derived from include/netfilter_ipv4/ip_conntrack_protocol.h | |
10 | */ | |
11 | ||
12 | #ifndef _NF_CONNTRACK_L3PROTO_H | |
13 | #define _NF_CONNTRACK_L3PROTO_H | |
14 | #include <linux/seq_file.h> | |
15 | #include <net/netfilter/nf_conntrack.h> | |
16 | ||
c1d10adb PNA |
17 | struct nfattr; |
18 | ||
9fb9cbb1 YK |
19 | struct nf_conntrack_l3proto |
20 | { | |
9fb9cbb1 YK |
21 | /* L3 Protocol Family number. ex) PF_INET */ |
22 | u_int16_t l3proto; | |
23 | ||
24 | /* Protocol name */ | |
25 | const char *name; | |
26 | ||
27 | /* | |
28 | * Try to fill in the third arg: nhoff is offset of l3 proto | |
29 | * hdr. Return true if possible. | |
30 | */ | |
31 | int (*pkt_to_tuple)(const struct sk_buff *skb, unsigned int nhoff, | |
32 | struct nf_conntrack_tuple *tuple); | |
33 | ||
34 | /* | |
35 | * Invert the per-proto part of the tuple: ie. turn xmit into reply. | |
36 | * Some packets can't be inverted: return 0 in that case. | |
37 | */ | |
38 | int (*invert_tuple)(struct nf_conntrack_tuple *inverse, | |
39 | const struct nf_conntrack_tuple *orig); | |
40 | ||
41 | /* Print out the per-protocol part of the tuple. */ | |
42 | int (*print_tuple)(struct seq_file *s, | |
43 | const struct nf_conntrack_tuple *); | |
44 | ||
45 | /* Print out the private part of the conntrack. */ | |
46 | int (*print_conntrack)(struct seq_file *s, const struct nf_conn *); | |
47 | ||
48 | /* Returns verdict for packet, or -1 for invalid. */ | |
49 | int (*packet)(struct nf_conn *conntrack, | |
50 | const struct sk_buff *skb, | |
51 | enum ip_conntrack_info ctinfo); | |
52 | ||
53 | /* | |
54 | * Called when a new connection for this protocol found; | |
55 | * returns TRUE if it's OK. If so, packet() called next. | |
56 | */ | |
57 | int (*new)(struct nf_conn *conntrack, const struct sk_buff *skb); | |
58 | ||
9fb9cbb1 YK |
59 | /* |
60 | * Called before tracking. | |
61 | * *dataoff: offset of protocol header (TCP, UDP,...) in *pskb | |
62 | * *protonum: protocol number | |
63 | */ | |
64 | int (*prepare)(struct sk_buff **pskb, unsigned int hooknum, | |
65 | unsigned int *dataoff, u_int8_t *protonum); | |
66 | ||
c1d10adb PNA |
67 | int (*tuple_to_nfattr)(struct sk_buff *skb, |
68 | const struct nf_conntrack_tuple *t); | |
69 | ||
70 | int (*nfattr_to_tuple)(struct nfattr *tb[], | |
71 | struct nf_conntrack_tuple *t); | |
72 | ||
d62f9ed4 PM |
73 | #ifdef CONFIG_SYSCTL |
74 | struct ctl_table_header *ctl_table_header; | |
75 | struct ctl_table *ctl_table_path; | |
76 | struct ctl_table *ctl_table; | |
77 | #endif /* CONFIG_SYSCTL */ | |
78 | ||
9fb9cbb1 YK |
79 | /* Module (if any) which this is connected to. */ |
80 | struct module *me; | |
81 | }; | |
82 | ||
83 | extern struct nf_conntrack_l3proto *nf_ct_l3protos[AF_MAX]; | |
84 | ||
85 | /* Protocol registration. */ | |
86 | extern int nf_conntrack_l3proto_register(struct nf_conntrack_l3proto *proto); | |
fe3eb20c | 87 | extern void nf_conntrack_l3proto_unregister(struct nf_conntrack_l3proto *proto); |
a3c5029c | 88 | extern struct nf_conntrack_l3proto *nf_ct_l3proto_find_get(u_int16_t l3proto); |
c1d10adb PNA |
89 | extern void nf_ct_l3proto_put(struct nf_conntrack_l3proto *p); |
90 | ||
9fb9cbb1 YK |
91 | /* Existing built-in protocols */ |
92 | extern struct nf_conntrack_l3proto nf_conntrack_l3proto_ipv4; | |
93 | extern struct nf_conntrack_l3proto nf_conntrack_l3proto_ipv6; | |
605dcad6 | 94 | extern struct nf_conntrack_l3proto nf_conntrack_l3proto_generic; |
ddc8d029 YK |
95 | |
96 | static inline struct nf_conntrack_l3proto * | |
97 | __nf_ct_l3proto_find(u_int16_t l3proto) | |
98 | { | |
99 | if (unlikely(l3proto >= AF_MAX)) | |
605dcad6 | 100 | return &nf_conntrack_l3proto_generic; |
923f4902 | 101 | return rcu_dereference(nf_ct_l3protos[l3proto]); |
ddc8d029 YK |
102 | } |
103 | ||
9fb9cbb1 | 104 | #endif /*_NF_CONNTRACK_L3PROTO_H*/ |