diff options
Diffstat (limited to 'net/netfilter/nf_conntrack_proto.c')
-rw-r--r-- | net/netfilter/nf_conntrack_proto.c | 72 |
1 files changed, 36 insertions, 36 deletions
diff --git a/net/netfilter/nf_conntrack_proto.c b/net/netfilter/nf_conntrack_proto.c index 24c61a38471..330b9acc62d 100644 --- a/net/netfilter/nf_conntrack_proto.c +++ b/net/netfilter/nf_conntrack_proto.c | |||
@@ -24,38 +24,38 @@ | |||
24 | 24 | ||
25 | #include <net/netfilter/nf_conntrack.h> | 25 | #include <net/netfilter/nf_conntrack.h> |
26 | #include <net/netfilter/nf_conntrack_l3proto.h> | 26 | #include <net/netfilter/nf_conntrack_l3proto.h> |
27 | #include <net/netfilter/nf_conntrack_protocol.h> | 27 | #include <net/netfilter/nf_conntrack_l4proto.h> |
28 | #include <net/netfilter/nf_conntrack_core.h> | 28 | #include <net/netfilter/nf_conntrack_core.h> |
29 | 29 | ||
30 | struct nf_conntrack_protocol **nf_ct_protos[PF_MAX] __read_mostly; | 30 | struct nf_conntrack_l4proto **nf_ct_protos[PF_MAX] __read_mostly; |
31 | struct nf_conntrack_l3proto *nf_ct_l3protos[PF_MAX] __read_mostly; | 31 | struct nf_conntrack_l3proto *nf_ct_l3protos[PF_MAX] __read_mostly; |
32 | 32 | ||
33 | struct nf_conntrack_protocol * | 33 | struct nf_conntrack_l4proto * |
34 | __nf_ct_proto_find(u_int16_t l3proto, u_int8_t protocol) | 34 | __nf_ct_l4proto_find(u_int16_t l3proto, u_int8_t l4proto) |
35 | { | 35 | { |
36 | if (unlikely(l3proto >= AF_MAX || nf_ct_protos[l3proto] == NULL)) | 36 | if (unlikely(l3proto >= AF_MAX || nf_ct_protos[l3proto] == NULL)) |
37 | return &nf_conntrack_generic_protocol; | 37 | return &nf_conntrack_l4proto_generic; |
38 | 38 | ||
39 | return nf_ct_protos[l3proto][protocol]; | 39 | return nf_ct_protos[l3proto][l4proto]; |
40 | } | 40 | } |
41 | 41 | ||
42 | /* this is guaranteed to always return a valid protocol helper, since | 42 | /* this is guaranteed to always return a valid protocol helper, since |
43 | * it falls back to generic_protocol */ | 43 | * it falls back to generic_protocol */ |
44 | struct nf_conntrack_protocol * | 44 | struct nf_conntrack_l4proto * |
45 | nf_ct_proto_find_get(u_int16_t l3proto, u_int8_t protocol) | 45 | nf_ct_l4proto_find_get(u_int16_t l3proto, u_int8_t l4proto) |
46 | { | 46 | { |
47 | struct nf_conntrack_protocol *p; | 47 | struct nf_conntrack_l4proto *p; |
48 | 48 | ||
49 | preempt_disable(); | 49 | preempt_disable(); |
50 | p = __nf_ct_proto_find(l3proto, protocol); | 50 | p = __nf_ct_l4proto_find(l3proto, l4proto); |
51 | if (!try_module_get(p->me)) | 51 | if (!try_module_get(p->me)) |
52 | p = &nf_conntrack_generic_protocol; | 52 | p = &nf_conntrack_l4proto_generic; |
53 | preempt_enable(); | 53 | preempt_enable(); |
54 | 54 | ||
55 | return p; | 55 | return p; |
56 | } | 56 | } |
57 | 57 | ||
58 | void nf_ct_proto_put(struct nf_conntrack_protocol *p) | 58 | void nf_ct_l4proto_put(struct nf_conntrack_l4proto *p) |
59 | { | 59 | { |
60 | module_put(p->me); | 60 | module_put(p->me); |
61 | } | 61 | } |
@@ -68,7 +68,7 @@ nf_ct_l3proto_find_get(u_int16_t l3proto) | |||
68 | preempt_disable(); | 68 | preempt_disable(); |
69 | p = __nf_ct_l3proto_find(l3proto); | 69 | p = __nf_ct_l3proto_find(l3proto); |
70 | if (!try_module_get(p->me)) | 70 | if (!try_module_get(p->me)) |
71 | p = &nf_conntrack_generic_l3proto; | 71 | p = &nf_conntrack_l3proto_generic; |
72 | preempt_enable(); | 72 | preempt_enable(); |
73 | 73 | ||
74 | return p; | 74 | return p; |
@@ -86,7 +86,7 @@ nf_ct_l3proto_try_module_get(unsigned short l3proto) | |||
86 | struct nf_conntrack_l3proto *p; | 86 | struct nf_conntrack_l3proto *p; |
87 | 87 | ||
88 | retry: p = nf_ct_l3proto_find_get(l3proto); | 88 | retry: p = nf_ct_l3proto_find_get(l3proto); |
89 | if (p == &nf_conntrack_generic_l3proto) { | 89 | if (p == &nf_conntrack_l3proto_generic) { |
90 | ret = request_module("nf_conntrack-%d", l3proto); | 90 | ret = request_module("nf_conntrack-%d", l3proto); |
91 | if (!ret) | 91 | if (!ret) |
92 | goto retry; | 92 | goto retry; |
@@ -114,14 +114,14 @@ static int kill_l3proto(struct nf_conn *i, void *data) | |||
114 | ((struct nf_conntrack_l3proto *)data)->l3proto); | 114 | ((struct nf_conntrack_l3proto *)data)->l3proto); |
115 | } | 115 | } |
116 | 116 | ||
117 | static int kill_proto(struct nf_conn *i, void *data) | 117 | static int kill_l4proto(struct nf_conn *i, void *data) |
118 | { | 118 | { |
119 | struct nf_conntrack_protocol *proto; | 119 | struct nf_conntrack_l4proto *l4proto; |
120 | proto = (struct nf_conntrack_protocol *)data; | 120 | l4proto = (struct nf_conntrack_l4proto *)data; |
121 | return (i->tuplehash[IP_CT_DIR_ORIGINAL].tuple.dst.protonum == | 121 | return (i->tuplehash[IP_CT_DIR_ORIGINAL].tuple.dst.protonum == |
122 | proto->proto) && | 122 | l4proto->l4proto) && |
123 | (i->tuplehash[IP_CT_DIR_ORIGINAL].tuple.src.l3num == | 123 | (i->tuplehash[IP_CT_DIR_ORIGINAL].tuple.src.l3num == |
124 | proto->l3proto); | 124 | l4proto->l3proto); |
125 | } | 125 | } |
126 | 126 | ||
127 | int nf_conntrack_l3proto_register(struct nf_conntrack_l3proto *proto) | 127 | int nf_conntrack_l3proto_register(struct nf_conntrack_l3proto *proto) |
@@ -129,7 +129,7 @@ int nf_conntrack_l3proto_register(struct nf_conntrack_l3proto *proto) | |||
129 | int ret = 0; | 129 | int ret = 0; |
130 | 130 | ||
131 | write_lock_bh(&nf_conntrack_lock); | 131 | write_lock_bh(&nf_conntrack_lock); |
132 | if (nf_ct_l3protos[proto->l3proto] != &nf_conntrack_generic_l3proto) { | 132 | if (nf_ct_l3protos[proto->l3proto] != &nf_conntrack_l3proto_generic) { |
133 | ret = -EBUSY; | 133 | ret = -EBUSY; |
134 | goto out; | 134 | goto out; |
135 | } | 135 | } |
@@ -143,7 +143,7 @@ out: | |||
143 | void nf_conntrack_l3proto_unregister(struct nf_conntrack_l3proto *proto) | 143 | void nf_conntrack_l3proto_unregister(struct nf_conntrack_l3proto *proto) |
144 | { | 144 | { |
145 | write_lock_bh(&nf_conntrack_lock); | 145 | write_lock_bh(&nf_conntrack_lock); |
146 | nf_ct_l3protos[proto->l3proto] = &nf_conntrack_generic_l3proto; | 146 | nf_ct_l3protos[proto->l3proto] = &nf_conntrack_l3proto_generic; |
147 | write_unlock_bh(&nf_conntrack_lock); | 147 | write_unlock_bh(&nf_conntrack_lock); |
148 | 148 | ||
149 | /* Somebody could be still looking at the proto in bh. */ | 149 | /* Somebody could be still looking at the proto in bh. */ |
@@ -155,43 +155,43 @@ void nf_conntrack_l3proto_unregister(struct nf_conntrack_l3proto *proto) | |||
155 | 155 | ||
156 | /* FIXME: Allow NULL functions and sub in pointers to generic for | 156 | /* FIXME: Allow NULL functions and sub in pointers to generic for |
157 | them. --RR */ | 157 | them. --RR */ |
158 | int nf_conntrack_protocol_register(struct nf_conntrack_protocol *proto) | 158 | int nf_conntrack_l4proto_register(struct nf_conntrack_l4proto *l4proto) |
159 | { | 159 | { |
160 | int ret = 0; | 160 | int ret = 0; |
161 | 161 | ||
162 | retry: | 162 | retry: |
163 | write_lock_bh(&nf_conntrack_lock); | 163 | write_lock_bh(&nf_conntrack_lock); |
164 | if (nf_ct_protos[proto->l3proto]) { | 164 | if (nf_ct_protos[l4proto->l3proto]) { |
165 | if (nf_ct_protos[proto->l3proto][proto->proto] | 165 | if (nf_ct_protos[l4proto->l3proto][l4proto->l4proto] |
166 | != &nf_conntrack_generic_protocol) { | 166 | != &nf_conntrack_l4proto_generic) { |
167 | ret = -EBUSY; | 167 | ret = -EBUSY; |
168 | goto out_unlock; | 168 | goto out_unlock; |
169 | } | 169 | } |
170 | } else { | 170 | } else { |
171 | /* l3proto may be loaded latter. */ | 171 | /* l3proto may be loaded latter. */ |
172 | struct nf_conntrack_protocol **proto_array; | 172 | struct nf_conntrack_l4proto **proto_array; |
173 | int i; | 173 | int i; |
174 | 174 | ||
175 | write_unlock_bh(&nf_conntrack_lock); | 175 | write_unlock_bh(&nf_conntrack_lock); |
176 | 176 | ||
177 | proto_array = (struct nf_conntrack_protocol **) | 177 | proto_array = (struct nf_conntrack_l4proto **) |
178 | kmalloc(MAX_NF_CT_PROTO * | 178 | kmalloc(MAX_NF_CT_PROTO * |
179 | sizeof(struct nf_conntrack_protocol *), | 179 | sizeof(struct nf_conntrack_l4proto *), |
180 | GFP_KERNEL); | 180 | GFP_KERNEL); |
181 | if (proto_array == NULL) { | 181 | if (proto_array == NULL) { |
182 | ret = -ENOMEM; | 182 | ret = -ENOMEM; |
183 | goto out; | 183 | goto out; |
184 | } | 184 | } |
185 | for (i = 0; i < MAX_NF_CT_PROTO; i++) | 185 | for (i = 0; i < MAX_NF_CT_PROTO; i++) |
186 | proto_array[i] = &nf_conntrack_generic_protocol; | 186 | proto_array[i] = &nf_conntrack_l4proto_generic; |
187 | 187 | ||
188 | write_lock_bh(&nf_conntrack_lock); | 188 | write_lock_bh(&nf_conntrack_lock); |
189 | if (nf_ct_protos[proto->l3proto]) { | 189 | if (nf_ct_protos[l4proto->l3proto]) { |
190 | /* bad timing, but no problem */ | 190 | /* bad timing, but no problem */ |
191 | write_unlock_bh(&nf_conntrack_lock); | 191 | write_unlock_bh(&nf_conntrack_lock); |
192 | kfree(proto_array); | 192 | kfree(proto_array); |
193 | } else { | 193 | } else { |
194 | nf_ct_protos[proto->l3proto] = proto_array; | 194 | nf_ct_protos[l4proto->l3proto] = proto_array; |
195 | write_unlock_bh(&nf_conntrack_lock); | 195 | write_unlock_bh(&nf_conntrack_lock); |
196 | } | 196 | } |
197 | 197 | ||
@@ -202,7 +202,7 @@ retry: | |||
202 | goto retry; | 202 | goto retry; |
203 | } | 203 | } |
204 | 204 | ||
205 | nf_ct_protos[proto->l3proto][proto->proto] = proto; | 205 | nf_ct_protos[l4proto->l3proto][l4proto->l4proto] = l4proto; |
206 | 206 | ||
207 | out_unlock: | 207 | out_unlock: |
208 | write_unlock_bh(&nf_conntrack_lock); | 208 | write_unlock_bh(&nf_conntrack_lock); |
@@ -210,16 +210,16 @@ out: | |||
210 | return ret; | 210 | return ret; |
211 | } | 211 | } |
212 | 212 | ||
213 | void nf_conntrack_protocol_unregister(struct nf_conntrack_protocol *proto) | 213 | void nf_conntrack_l4proto_unregister(struct nf_conntrack_l4proto *l4proto) |
214 | { | 214 | { |
215 | write_lock_bh(&nf_conntrack_lock); | 215 | write_lock_bh(&nf_conntrack_lock); |
216 | nf_ct_protos[proto->l3proto][proto->proto] | 216 | nf_ct_protos[l4proto->l3proto][l4proto->l4proto] |
217 | = &nf_conntrack_generic_protocol; | 217 | = &nf_conntrack_l4proto_generic; |
218 | write_unlock_bh(&nf_conntrack_lock); | 218 | write_unlock_bh(&nf_conntrack_lock); |
219 | 219 | ||
220 | /* Somebody could be still looking at the proto in bh. */ | 220 | /* Somebody could be still looking at the proto in bh. */ |
221 | synchronize_net(); | 221 | synchronize_net(); |
222 | 222 | ||
223 | /* Remove all contrack entries for this protocol */ | 223 | /* Remove all contrack entries for this protocol */ |
224 | nf_ct_iterate_cleanup(kill_proto, proto); | 224 | nf_ct_iterate_cleanup(kill_l4proto, l4proto); |
225 | } | 225 | } |