Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
nf_conntrack_l3proto.h
Go to the documentation of this file.
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 <[email protected]>
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/netlink.h>
15 #include <net/netlink.h>
16 #include <linux/seq_file.h>
18 
20  /* L3 Protocol Family number. ex) PF_INET */
22 
23  /* Protocol name */
24  const char *name;
25 
26  /*
27  * Try to fill in the third arg: nhoff is offset of l3 proto
28  * hdr. Return true if possible.
29  */
30  bool (*pkt_to_tuple)(const struct sk_buff *skb, unsigned int nhoff,
31  struct nf_conntrack_tuple *tuple);
32 
33  /*
34  * Invert the per-proto part of the tuple: ie. turn xmit into reply.
35  * Some packets can't be inverted: return 0 in that case.
36  */
37  bool (*invert_tuple)(struct nf_conntrack_tuple *inverse,
38  const struct nf_conntrack_tuple *orig);
39 
40  /* Print out the per-protocol part of the tuple. */
41  int (*print_tuple)(struct seq_file *s,
42  const struct nf_conntrack_tuple *);
43 
44  /*
45  * Called before tracking.
46  * *dataoff: offset of protocol header (TCP, UDP,...) in skb
47  * *protonum: protocol number
48  */
49  int (*get_l4proto)(const struct sk_buff *skb, unsigned int nhoff,
50  unsigned int *dataoff, u_int8_t *protonum);
51 
53  const struct nf_conntrack_tuple *t);
54 
55  /*
56  * Calculate size of tuple nlattr
57  */
59 
60  int (*nlattr_to_tuple)(struct nlattr *tb[],
61  struct nf_conntrack_tuple *t);
62  const struct nla_policy *nla_policy;
63 
64  size_t nla_size;
65 
66 #ifdef CONFIG_SYSCTL
67  const char *ctl_table_path;
68 #endif /* CONFIG_SYSCTL */
69 
70  /* Init l3proto pernet data */
71  int (*init_net)(struct net *net);
72 
73  /* Module (if any) which this is connected to. */
74  struct module *me;
75 };
76 
78 
79 /* Protocol registration. */
80 extern int nf_conntrack_l3proto_register(struct net *net,
81  struct nf_conntrack_l3proto *proto);
82 extern void nf_conntrack_l3proto_unregister(struct net *net,
83  struct nf_conntrack_l3proto *proto);
85 extern void nf_ct_l3proto_put(struct nf_conntrack_l3proto *p);
86 
87 /* Existing built-in protocols */
89 
90 static inline struct nf_conntrack_l3proto *
91 __nf_ct_l3proto_find(u_int16_t l3proto)
92 {
93  if (unlikely(l3proto >= AF_MAX))
95  return rcu_dereference(nf_ct_l3protos[l3proto]);
96 }
97 
98 #endif /*_NF_CONNTRACK_L3PROTO_H*/