bridge: use rx_handler_data pointer to store net_bridge_port pointer
[deliverable/linux.git] / net / bridge / netfilter / ebt_redirect.c
index 9be8fbcd370b93eb33137c8e4e2c2f08b432f919..46624bb6d9be5f0ca26b2b845f44f1a857499291 100644 (file)
@@ -16,7 +16,7 @@
 #include <linux/netfilter_bridge/ebt_redirect.h>
 
 static unsigned int
-ebt_redirect_tg(struct sk_buff *skb, const struct xt_target_param *par)
+ebt_redirect_tg(struct sk_buff *skb, const struct xt_action_param *par)
 {
        const struct ebt_redirect_info *info = par->targinfo;
 
@@ -24,31 +24,32 @@ ebt_redirect_tg(struct sk_buff *skb, const struct xt_target_param *par)
                return EBT_DROP;
 
        if (par->hooknum != NF_BR_BROUTING)
+               /* rcu_read_lock()ed by nf_hook_slow */
                memcpy(eth_hdr(skb)->h_dest,
-                      par->in->br_port->br->dev->dev_addr, ETH_ALEN);
+                      br_port_get_rcu(par->in)->br->dev->dev_addr, ETH_ALEN);
        else
                memcpy(eth_hdr(skb)->h_dest, par->in->dev_addr, ETH_ALEN);
        skb->pkt_type = PACKET_HOST;
        return info->target;
 }
 
-static bool ebt_redirect_tg_check(const struct xt_tgchk_param *par)
+static int ebt_redirect_tg_check(const struct xt_tgchk_param *par)
 {
        const struct ebt_redirect_info *info = par->targinfo;
        unsigned int hook_mask;
 
        if (BASE_CHAIN && info->target == EBT_RETURN)
-               return false;
+               return -EINVAL;
 
        hook_mask = par->hook_mask & ~(1 << NF_BR_NUMHOOKS);
        if ((strcmp(par->table, "nat") != 0 ||
            hook_mask & ~(1 << NF_BR_PRE_ROUTING)) &&
            (strcmp(par->table, "broute") != 0 ||
            hook_mask & ~(1 << NF_BR_BROUTING)))
-               return false;
+               return -EINVAL;
        if (INVALID_TARGET)
-               return false;
-       return true;
+               return -EINVAL;
+       return 0;
 }
 
 static struct xt_target ebt_redirect_tg_reg __read_mostly = {
This page took 0.024031 seconds and 5 git commands to generate.