diff options
author | Patrick McHardy <kaber@trash.net> | 2006-03-20 21:02:15 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2006-03-20 21:02:15 -0500 |
commit | 1c524830d0b39472f0278989bf1119750a5e234d (patch) | |
tree | 9c60dd1717ddf458f66c4a71cb41c3ef7186cdd3 /net/sched/act_ipt.c | |
parent | 5d04bff096180f032de8b9b12153a8a1b4009b8d (diff) |
[NETFILTER]: x_tables: pass registered match/target data to match/target functions
This allows to make decisions based on the revision (and address family
with a follow-up patch) at runtime.
Signed-off-by: Patrick McHardy <kaber@trash.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/sched/act_ipt.c')
-rw-r--r-- | net/sched/act_ipt.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/net/sched/act_ipt.c b/net/sched/act_ipt.c index 39a22a3ffe78..6056d20ef429 100644 --- a/net/sched/act_ipt.c +++ b/net/sched/act_ipt.c | |||
@@ -70,7 +70,8 @@ ipt_init_target(struct ipt_entry_target *t, char *table, unsigned int hook) | |||
70 | t->u.kernel.target = target; | 70 | t->u.kernel.target = target; |
71 | 71 | ||
72 | if (t->u.kernel.target->checkentry | 72 | if (t->u.kernel.target->checkentry |
73 | && !t->u.kernel.target->checkentry(table, NULL, t->data, | 73 | && !t->u.kernel.target->checkentry(table, NULL, |
74 | t->u.kernel.target, t->data, | ||
74 | t->u.target_size - sizeof(*t), | 75 | t->u.target_size - sizeof(*t), |
75 | hook)) { | 76 | hook)) { |
76 | DPRINTK("ipt_init_target: check failed for `%s'.\n", | 77 | DPRINTK("ipt_init_target: check failed for `%s'.\n", |
@@ -86,7 +87,7 @@ static void | |||
86 | ipt_destroy_target(struct ipt_entry_target *t) | 87 | ipt_destroy_target(struct ipt_entry_target *t) |
87 | { | 88 | { |
88 | if (t->u.kernel.target->destroy) | 89 | if (t->u.kernel.target->destroy) |
89 | t->u.kernel.target->destroy(t->data, | 90 | t->u.kernel.target->destroy(t->u.kernel.target, t->data, |
90 | t->u.target_size - sizeof(*t)); | 91 | t->u.target_size - sizeof(*t)); |
91 | module_put(t->u.kernel.target->me); | 92 | module_put(t->u.kernel.target->me); |
92 | } | 93 | } |
@@ -224,8 +225,9 @@ tcf_ipt(struct sk_buff *skb, struct tc_action *a, struct tcf_result *res) | |||
224 | /* iptables targets take a double skb pointer in case the skb | 225 | /* iptables targets take a double skb pointer in case the skb |
225 | * needs to be replaced. We don't own the skb, so this must not | 226 | * needs to be replaced. We don't own the skb, so this must not |
226 | * happen. The pskb_expand_head above should make sure of this */ | 227 | * happen. The pskb_expand_head above should make sure of this */ |
227 | ret = p->t->u.kernel.target->target(&skb, skb->dev, NULL, | 228 | ret = p->t->u.kernel.target->target(&skb, skb->dev, NULL, p->hook, |
228 | p->hook, p->t->data, NULL); | 229 | p->t->u.kernel.target, p->t->data, |
230 | NULL); | ||
229 | switch (ret) { | 231 | switch (ret) { |
230 | case NF_ACCEPT: | 232 | case NF_ACCEPT: |
231 | result = TC_ACT_OK; | 233 | result = TC_ACT_OK; |