diff options
author | Jan Engelhardt <jengelh@medozas.de> | 2008-10-08 05:35:19 -0400 |
---|---|---|
committer | Patrick McHardy <kaber@trash.net> | 2008-10-08 05:35:19 -0400 |
commit | 7eb3558655aaa87a3e71a0c065dfaddda521fa6d (patch) | |
tree | 724466c66c96f14b0378fab87040d8393bc05c8b /net/ipv6 | |
parent | 6be3d8598e883fb632edf059ba2f8d1b9f4da138 (diff) |
netfilter: xtables: move extension arguments into compound structure (4/6)
This patch does this for target extensions' target functions.
Signed-off-by: Jan Engelhardt <jengelh@medozas.de>
Signed-off-by: Patrick McHardy <kaber@trash.net>
Diffstat (limited to 'net/ipv6')
-rw-r--r-- | net/ipv6/netfilter/ip6_tables.c | 24 | ||||
-rw-r--r-- | net/ipv6/netfilter/ip6t_HL.c | 6 | ||||
-rw-r--r-- | net/ipv6/netfilter/ip6t_LOG.c | 8 | ||||
-rw-r--r-- | net/ipv6/netfilter/ip6t_REJECT.c | 18 |
4 files changed, 24 insertions, 32 deletions
diff --git a/net/ipv6/netfilter/ip6_tables.c b/net/ipv6/netfilter/ip6_tables.c index 891358e89a2b..ee0986cdbd66 100644 --- a/net/ipv6/netfilter/ip6_tables.c +++ b/net/ipv6/netfilter/ip6_tables.c | |||
@@ -200,15 +200,11 @@ ip6_checkentry(const struct ip6t_ip6 *ipv6) | |||
200 | } | 200 | } |
201 | 201 | ||
202 | static unsigned int | 202 | static unsigned int |
203 | ip6t_error(struct sk_buff *skb, | 203 | ip6t_error(struct sk_buff *skb, const struct xt_target_param *par) |
204 | const struct net_device *in, | ||
205 | const struct net_device *out, | ||
206 | unsigned int hooknum, | ||
207 | const struct xt_target *target, | ||
208 | const void *targinfo) | ||
209 | { | 204 | { |
210 | if (net_ratelimit()) | 205 | if (net_ratelimit()) |
211 | printk("ip6_tables: error: `%s'\n", (char *)targinfo); | 206 | printk("ip6_tables: error: `%s'\n", |
207 | (const char *)par->targinfo); | ||
212 | 208 | ||
213 | return NF_DROP; | 209 | return NF_DROP; |
214 | } | 210 | } |
@@ -360,6 +356,7 @@ ip6t_do_table(struct sk_buff *skb, | |||
360 | struct ip6t_entry *e, *back; | 356 | struct ip6t_entry *e, *back; |
361 | struct xt_table_info *private; | 357 | struct xt_table_info *private; |
362 | struct xt_match_param mtpar; | 358 | struct xt_match_param mtpar; |
359 | struct xt_target_param tgpar; | ||
363 | 360 | ||
364 | /* Initialization */ | 361 | /* Initialization */ |
365 | indev = in ? in->name : nulldevname; | 362 | indev = in ? in->name : nulldevname; |
@@ -371,8 +368,9 @@ ip6t_do_table(struct sk_buff *skb, | |||
371 | * rule is also a fragment-specific rule, non-fragments won't | 368 | * rule is also a fragment-specific rule, non-fragments won't |
372 | * match it. */ | 369 | * match it. */ |
373 | mtpar.hotdrop = &hotdrop; | 370 | mtpar.hotdrop = &hotdrop; |
374 | mtpar.in = in; | 371 | mtpar.in = tgpar.in = in; |
375 | mtpar.out = out; | 372 | mtpar.out = tgpar.out = out; |
373 | tgpar.hooknum = hook; | ||
376 | 374 | ||
377 | read_lock_bh(&table->lock); | 375 | read_lock_bh(&table->lock); |
378 | IP_NF_ASSERT(table->valid_hooks & (1 << hook)); | 376 | IP_NF_ASSERT(table->valid_hooks & (1 << hook)); |
@@ -438,15 +436,15 @@ ip6t_do_table(struct sk_buff *skb, | |||
438 | } else { | 436 | } else { |
439 | /* Targets which reenter must return | 437 | /* Targets which reenter must return |
440 | abs. verdicts */ | 438 | abs. verdicts */ |
439 | tgpar.target = t->u.kernel.target; | ||
440 | tgpar.targinfo = t->data; | ||
441 | |||
441 | #ifdef CONFIG_NETFILTER_DEBUG | 442 | #ifdef CONFIG_NETFILTER_DEBUG |
442 | ((struct ip6t_entry *)table_base)->comefrom | 443 | ((struct ip6t_entry *)table_base)->comefrom |
443 | = 0xeeeeeeec; | 444 | = 0xeeeeeeec; |
444 | #endif | 445 | #endif |
445 | verdict = t->u.kernel.target->target(skb, | 446 | verdict = t->u.kernel.target->target(skb, |
446 | in, out, | 447 | &tgpar); |
447 | hook, | ||
448 | t->u.kernel.target, | ||
449 | t->data); | ||
450 | 448 | ||
451 | #ifdef CONFIG_NETFILTER_DEBUG | 449 | #ifdef CONFIG_NETFILTER_DEBUG |
452 | if (((struct ip6t_entry *)table_base)->comefrom | 450 | if (((struct ip6t_entry *)table_base)->comefrom |
diff --git a/net/ipv6/netfilter/ip6t_HL.c b/net/ipv6/netfilter/ip6t_HL.c index 7eebd3509166..ac759a54f2c6 100644 --- a/net/ipv6/netfilter/ip6t_HL.c +++ b/net/ipv6/netfilter/ip6t_HL.c | |||
@@ -19,12 +19,10 @@ MODULE_DESCRIPTION("Xtables: IPv6 Hop Limit field modification target"); | |||
19 | MODULE_LICENSE("GPL"); | 19 | MODULE_LICENSE("GPL"); |
20 | 20 | ||
21 | static unsigned int | 21 | static unsigned int |
22 | hl_tg6(struct sk_buff *skb, const struct net_device *in, | 22 | hl_tg6(struct sk_buff *skb, const struct xt_target_param *par) |
23 | const struct net_device *out, unsigned int hooknum, | ||
24 | const struct xt_target *target, const void *targinfo) | ||
25 | { | 23 | { |
26 | struct ipv6hdr *ip6h; | 24 | struct ipv6hdr *ip6h; |
27 | const struct ip6t_HL_info *info = targinfo; | 25 | const struct ip6t_HL_info *info = par->targinfo; |
28 | int new_hl; | 26 | int new_hl; |
29 | 27 | ||
30 | if (!skb_make_writable(skb, skb->len)) | 28 | if (!skb_make_writable(skb, skb->len)) |
diff --git a/net/ipv6/netfilter/ip6t_LOG.c b/net/ipv6/netfilter/ip6t_LOG.c index fd148f3d842f..a31d3ecd1fc9 100644 --- a/net/ipv6/netfilter/ip6t_LOG.c +++ b/net/ipv6/netfilter/ip6t_LOG.c | |||
@@ -438,18 +438,16 @@ ip6t_log_packet(u_int8_t pf, | |||
438 | } | 438 | } |
439 | 439 | ||
440 | static unsigned int | 440 | static unsigned int |
441 | log_tg6(struct sk_buff *skb, const struct net_device *in, | 441 | log_tg6(struct sk_buff *skb, const struct xt_target_param *par) |
442 | const struct net_device *out, unsigned int hooknum, | ||
443 | const struct xt_target *target, const void *targinfo) | ||
444 | { | 442 | { |
445 | const struct ip6t_log_info *loginfo = targinfo; | 443 | const struct ip6t_log_info *loginfo = par->targinfo; |
446 | struct nf_loginfo li; | 444 | struct nf_loginfo li; |
447 | 445 | ||
448 | li.type = NF_LOG_TYPE_LOG; | 446 | li.type = NF_LOG_TYPE_LOG; |
449 | li.u.log.level = loginfo->level; | 447 | li.u.log.level = loginfo->level; |
450 | li.u.log.logflags = loginfo->logflags; | 448 | li.u.log.logflags = loginfo->logflags; |
451 | 449 | ||
452 | ip6t_log_packet(NFPROTO_IPV6, hooknum, skb, in, out, | 450 | ip6t_log_packet(NFPROTO_IPV6, par->hooknum, skb, par->in, par->out, |
453 | &li, loginfo->prefix); | 451 | &li, loginfo->prefix); |
454 | return XT_CONTINUE; | 452 | return XT_CONTINUE; |
455 | } | 453 | } |
diff --git a/net/ipv6/netfilter/ip6t_REJECT.c b/net/ipv6/netfilter/ip6t_REJECT.c index f1a9fce1ec95..1d5f3a70ed09 100644 --- a/net/ipv6/netfilter/ip6t_REJECT.c +++ b/net/ipv6/netfilter/ip6t_REJECT.c | |||
@@ -173,12 +173,10 @@ send_unreach(struct net *net, struct sk_buff *skb_in, unsigned char code, | |||
173 | } | 173 | } |
174 | 174 | ||
175 | static unsigned int | 175 | static unsigned int |
176 | reject_tg6(struct sk_buff *skb, const struct net_device *in, | 176 | reject_tg6(struct sk_buff *skb, const struct xt_target_param *par) |
177 | const struct net_device *out, unsigned int hooknum, | ||
178 | const struct xt_target *target, const void *targinfo) | ||
179 | { | 177 | { |
180 | const struct ip6t_reject_info *reject = targinfo; | 178 | const struct ip6t_reject_info *reject = par->targinfo; |
181 | struct net *net = dev_net(in ? in : out); | 179 | struct net *net = dev_net((par->in != NULL) ? par->in : par->out); |
182 | 180 | ||
183 | pr_debug("%s: medium point\n", __func__); | 181 | pr_debug("%s: medium point\n", __func__); |
184 | /* WARNING: This code causes reentry within ip6tables. | 182 | /* WARNING: This code causes reentry within ip6tables. |
@@ -186,19 +184,19 @@ reject_tg6(struct sk_buff *skb, const struct net_device *in, | |||
186 | must return an absolute verdict. --RR */ | 184 | must return an absolute verdict. --RR */ |
187 | switch (reject->with) { | 185 | switch (reject->with) { |
188 | case IP6T_ICMP6_NO_ROUTE: | 186 | case IP6T_ICMP6_NO_ROUTE: |
189 | send_unreach(net, skb, ICMPV6_NOROUTE, hooknum); | 187 | send_unreach(net, skb, ICMPV6_NOROUTE, par->hooknum); |
190 | break; | 188 | break; |
191 | case IP6T_ICMP6_ADM_PROHIBITED: | 189 | case IP6T_ICMP6_ADM_PROHIBITED: |
192 | send_unreach(net, skb, ICMPV6_ADM_PROHIBITED, hooknum); | 190 | send_unreach(net, skb, ICMPV6_ADM_PROHIBITED, par->hooknum); |
193 | break; | 191 | break; |
194 | case IP6T_ICMP6_NOT_NEIGHBOUR: | 192 | case IP6T_ICMP6_NOT_NEIGHBOUR: |
195 | send_unreach(net, skb, ICMPV6_NOT_NEIGHBOUR, hooknum); | 193 | send_unreach(net, skb, ICMPV6_NOT_NEIGHBOUR, par->hooknum); |
196 | break; | 194 | break; |
197 | case IP6T_ICMP6_ADDR_UNREACH: | 195 | case IP6T_ICMP6_ADDR_UNREACH: |
198 | send_unreach(net, skb, ICMPV6_ADDR_UNREACH, hooknum); | 196 | send_unreach(net, skb, ICMPV6_ADDR_UNREACH, par->hooknum); |
199 | break; | 197 | break; |
200 | case IP6T_ICMP6_PORT_UNREACH: | 198 | case IP6T_ICMP6_PORT_UNREACH: |
201 | send_unreach(net, skb, ICMPV6_PORT_UNREACH, hooknum); | 199 | send_unreach(net, skb, ICMPV6_PORT_UNREACH, par->hooknum); |
202 | break; | 200 | break; |
203 | case IP6T_ICMP6_ECHOREPLY: | 201 | case IP6T_ICMP6_ECHOREPLY: |
204 | /* Do nothing */ | 202 | /* Do nothing */ |