Merge branch 'upstream' of git://ftp.linux-mips.org/pub/scm/upstream-linus
[sfrench/cifs-2.6.git] / include / net / netfilter / nf_conntrack_compat.h
1 #ifndef _NF_CONNTRACK_COMPAT_H
2 #define _NF_CONNTRACK_COMPAT_H
3
4 #ifdef __KERNEL__
5
6 #if defined(CONFIG_IP_NF_CONNTRACK) || defined(CONFIG_IP_NF_CONNTRACK_MODULE)
7
8 #include <linux/netfilter_ipv4/ip_conntrack.h>
9 #include <linux/socket.h>
10
11 #ifdef CONFIG_IP_NF_CONNTRACK_MARK
12 static inline u_int32_t *nf_ct_get_mark(const struct sk_buff *skb,
13                                         u_int32_t *ctinfo)
14 {
15         struct ip_conntrack *ct = ip_conntrack_get(skb, ctinfo);
16
17         if (ct)
18                 return &ct->mark;
19         else
20                 return NULL;
21 }
22 #endif /* CONFIG_IP_NF_CONNTRACK_MARK */
23
24 #ifdef CONFIG_IP_NF_CONNTRACK_SECMARK
25 static inline u_int32_t *nf_ct_get_secmark(const struct sk_buff *skb,
26                                            u_int32_t *ctinfo)
27 {
28         struct ip_conntrack *ct = ip_conntrack_get(skb, ctinfo);
29
30         if (ct)
31                 return &ct->secmark;
32         else
33                 return NULL;
34 }
35 #endif /* CONFIG_IP_NF_CONNTRACK_SECMARK */
36
37 #ifdef CONFIG_IP_NF_CT_ACCT
38 static inline struct ip_conntrack_counter *
39 nf_ct_get_counters(const struct sk_buff *skb)
40 {
41         enum ip_conntrack_info ctinfo;
42         struct ip_conntrack *ct = ip_conntrack_get(skb, &ctinfo);
43
44         if (ct)
45                 return ct->counters;
46         else
47                 return NULL;
48 }
49 #endif /* CONFIG_IP_NF_CT_ACCT */
50
51 static inline int nf_ct_is_untracked(const struct sk_buff *skb)
52 {
53         return (skb->nfct == &ip_conntrack_untracked.ct_general);
54 }
55
56 static inline void nf_ct_untrack(struct sk_buff *skb)
57 {
58         skb->nfct = &ip_conntrack_untracked.ct_general;
59 }
60
61 static inline int nf_ct_get_ctinfo(const struct sk_buff *skb,
62                                    enum ip_conntrack_info *ctinfo)
63 {
64         struct ip_conntrack *ct = ip_conntrack_get(skb, ctinfo);
65         return (ct != NULL);
66 }
67
68 static inline int nf_ct_l3proto_try_module_get(unsigned short l3proto)
69 {
70         need_conntrack();
71         return l3proto == PF_INET ? 0 : -1;
72 }
73
74 static inline void nf_ct_l3proto_module_put(unsigned short l3proto)
75 {
76 }
77
78 #else /* CONFIG_IP_NF_CONNTRACK */
79
80 #include <net/netfilter/ipv4/nf_conntrack_ipv4.h>
81 #include <net/netfilter/nf_conntrack.h>
82
83 #ifdef CONFIG_NF_CONNTRACK_MARK
84
85 static inline u_int32_t *nf_ct_get_mark(const struct sk_buff *skb,
86                                         u_int32_t *ctinfo)
87 {
88         struct nf_conn *ct = nf_ct_get(skb, ctinfo);
89
90         if (ct)
91                 return &ct->mark;
92         else
93                 return NULL;
94 }
95 #endif /* CONFIG_NF_CONNTRACK_MARK */
96
97 #ifdef CONFIG_NF_CONNTRACK_SECMARK
98 static inline u_int32_t *nf_ct_get_secmark(const struct sk_buff *skb,
99                                            u_int32_t *ctinfo)
100 {
101         struct nf_conn *ct = nf_ct_get(skb, ctinfo);
102
103         if (ct)
104                 return &ct->secmark;
105         else
106                 return NULL;
107 }
108 #endif /* CONFIG_NF_CONNTRACK_MARK */
109
110 #ifdef CONFIG_NF_CT_ACCT
111 static inline struct ip_conntrack_counter *
112 nf_ct_get_counters(const struct sk_buff *skb)
113 {
114         enum ip_conntrack_info ctinfo;
115         struct nf_conn *ct = nf_ct_get(skb, &ctinfo);
116
117         if (ct)
118                 return ct->counters;
119         else
120                 return NULL;
121 }
122 #endif /* CONFIG_NF_CT_ACCT */
123
124 static inline int nf_ct_is_untracked(const struct sk_buff *skb)
125 {
126         return (skb->nfct == &nf_conntrack_untracked.ct_general);
127 }
128
129 static inline void nf_ct_untrack(struct sk_buff *skb)
130 {
131         skb->nfct = &nf_conntrack_untracked.ct_general;
132 }
133
134 static inline int nf_ct_get_ctinfo(const struct sk_buff *skb,
135                                    enum ip_conntrack_info *ctinfo)
136 {
137         struct nf_conn *ct = nf_ct_get(skb, ctinfo);
138         return (ct != NULL);
139 }
140
141 #endif /* CONFIG_IP_NF_CONNTRACK */
142
143 #endif /* __KERNEL__ */
144
145 #endif /* _NF_CONNTRACK_COMPAT_H */