forked from luck/tmp_suning_uos_patched
[BRIDGE]: netfilter whitespace
Run br_netfilter through Lindent to fix whitespace. Signed-off-by: Stephen Hemminger <shemminger@osdl.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
d5513a7d32
commit
789bc3e5b6
|
@ -136,7 +136,7 @@ static void __br_dnat_complain(void)
|
|||
|
||||
if (jiffies - last_complaint >= 5 * HZ) {
|
||||
printk(KERN_WARNING "Performing cross-bridge DNAT requires IP "
|
||||
"forwarding to be enabled\n");
|
||||
"forwarding to be enabled\n");
|
||||
last_complaint = jiffies;
|
||||
}
|
||||
}
|
||||
|
@ -218,12 +218,17 @@ static int br_nf_pre_routing_finish(struct sk_buff *skb)
|
|||
nf_bridge->mask ^= BRNF_NF_BRIDGE_PREROUTING;
|
||||
|
||||
if (dnat_took_place(skb)) {
|
||||
if (ip_route_input(skb, iph->daddr, iph->saddr, iph->tos,
|
||||
dev)) {
|
||||
if (ip_route_input(skb, iph->daddr, iph->saddr, iph->tos, dev)) {
|
||||
struct rtable *rt;
|
||||
struct flowi fl = { .nl_u =
|
||||
{ .ip4_u = { .daddr = iph->daddr, .saddr = 0 ,
|
||||
.tos = RT_TOS(iph->tos)} }, .proto = 0};
|
||||
struct flowi fl = {
|
||||
.nl_u = {
|
||||
.ip4_u = {
|
||||
.daddr = iph->daddr,
|
||||
.saddr = 0,
|
||||
.tos = RT_TOS(iph->tos) },
|
||||
},
|
||||
.proto = 0,
|
||||
};
|
||||
|
||||
if (!ip_route_output_key(&rt, &fl)) {
|
||||
/* - Bridged-and-DNAT'ed traffic doesn't
|
||||
|
@ -257,8 +262,7 @@ static int br_nf_pre_routing_finish(struct sk_buff *skb)
|
|||
1);
|
||||
return 0;
|
||||
}
|
||||
memcpy(eth_hdr(skb)->h_dest, dev->dev_addr,
|
||||
ETH_ALEN);
|
||||
memcpy(eth_hdr(skb)->h_dest, dev->dev_addr, ETH_ALEN);
|
||||
skb->pkt_type = PACKET_HOST;
|
||||
}
|
||||
} else {
|
||||
|
@ -297,10 +301,10 @@ static struct net_device *setup_pre_routing(struct sk_buff *skb)
|
|||
/* We only check the length. A bridge shouldn't do any hop-by-hop stuff anyway */
|
||||
static int check_hbh_len(struct sk_buff *skb)
|
||||
{
|
||||
unsigned char *raw = (u8*)(skb->nh.ipv6h+1);
|
||||
unsigned char *raw = (u8 *) (skb->nh.ipv6h + 1);
|
||||
u32 pkt_len;
|
||||
int off = raw - skb->nh.raw;
|
||||
int len = (raw[1]+1)<<3;
|
||||
int len = (raw[1] + 1) << 3;
|
||||
|
||||
if ((raw + len) - skb->data > skb_headlen(skb))
|
||||
goto bad;
|
||||
|
@ -309,7 +313,7 @@ static int check_hbh_len(struct sk_buff *skb)
|
|||
len -= 2;
|
||||
|
||||
while (len > 0) {
|
||||
int optlen = skb->nh.raw[off+1]+2;
|
||||
int optlen = skb->nh.raw[off + 1] + 2;
|
||||
|
||||
switch (skb->nh.raw[off]) {
|
||||
case IPV6_TLV_PAD0:
|
||||
|
@ -320,16 +324,16 @@ static int check_hbh_len(struct sk_buff *skb)
|
|||
break;
|
||||
|
||||
case IPV6_TLV_JUMBO:
|
||||
if (skb->nh.raw[off+1] != 4 || (off&3) != 2)
|
||||
if (skb->nh.raw[off + 1] != 4 || (off & 3) != 2)
|
||||
goto bad;
|
||||
pkt_len = ntohl(*(u32*)(skb->nh.raw+off+2));
|
||||
pkt_len = ntohl(*(u32 *) (skb->nh.raw + off + 2));
|
||||
if (pkt_len <= IPV6_MAXPLEN ||
|
||||
skb->nh.ipv6h->payload_len)
|
||||
goto bad;
|
||||
if (pkt_len > skb->len - sizeof(struct ipv6hdr))
|
||||
goto bad;
|
||||
if (pskb_trim_rcsum(skb,
|
||||
pkt_len+sizeof(struct ipv6hdr)))
|
||||
pkt_len + sizeof(struct ipv6hdr)))
|
||||
goto bad;
|
||||
break;
|
||||
default:
|
||||
|
@ -350,8 +354,10 @@ static int check_hbh_len(struct sk_buff *skb)
|
|||
/* Replicate the checks that IPv6 does on packet reception and pass the packet
|
||||
* to ip6tables, which doesn't support NAT, so things are fairly simple. */
|
||||
static unsigned int br_nf_pre_routing_ipv6(unsigned int hook,
|
||||
struct sk_buff *skb, const struct net_device *in,
|
||||
const struct net_device *out, int (*okfn)(struct sk_buff *))
|
||||
struct sk_buff *skb,
|
||||
const struct net_device *in,
|
||||
const struct net_device *out,
|
||||
int (*okfn)(struct sk_buff *))
|
||||
{
|
||||
struct ipv6hdr *hdr;
|
||||
u32 pkt_len;
|
||||
|
@ -381,9 +387,9 @@ static unsigned int br_nf_pre_routing_ipv6(unsigned int hook,
|
|||
}
|
||||
}
|
||||
if (hdr->nexthdr == NEXTHDR_HOP && check_hbh_len(skb))
|
||||
goto inhdr_error;
|
||||
goto inhdr_error;
|
||||
|
||||
nf_bridge_put(skb->nf_bridge);
|
||||
nf_bridge_put(skb->nf_bridge);
|
||||
if ((nf_bridge = nf_bridge_alloc(skb)) == NULL)
|
||||
return NF_DROP;
|
||||
if (!setup_pre_routing(skb))
|
||||
|
@ -452,15 +458,15 @@ static unsigned int br_nf_pre_routing(unsigned int hook, struct sk_buff **pskb,
|
|||
if (iph->ihl < 5 || iph->version != 4)
|
||||
goto inhdr_error;
|
||||
|
||||
if (!pskb_may_pull(skb, 4*iph->ihl))
|
||||
if (!pskb_may_pull(skb, 4 * iph->ihl))
|
||||
goto inhdr_error;
|
||||
|
||||
iph = skb->nh.iph;
|
||||
if (ip_fast_csum((__u8 *)iph, iph->ihl) != 0)
|
||||
if (ip_fast_csum((__u8 *) iph, iph->ihl) != 0)
|
||||
goto inhdr_error;
|
||||
|
||||
len = ntohs(iph->tot_len);
|
||||
if (skb->len < len || len < 4*iph->ihl)
|
||||
if (skb->len < len || len < 4 * iph->ihl)
|
||||
goto inhdr_error;
|
||||
|
||||
if (skb->len > len) {
|
||||
|
@ -469,7 +475,7 @@ static unsigned int br_nf_pre_routing(unsigned int hook, struct sk_buff **pskb,
|
|||
skb->ip_summed = CHECKSUM_NONE;
|
||||
}
|
||||
|
||||
nf_bridge_put(skb->nf_bridge);
|
||||
nf_bridge_put(skb->nf_bridge);
|
||||
if ((nf_bridge = nf_bridge_alloc(skb)) == NULL)
|
||||
return NF_DROP;
|
||||
if (!setup_pre_routing(skb))
|
||||
|
@ -482,7 +488,7 @@ static unsigned int br_nf_pre_routing(unsigned int hook, struct sk_buff **pskb,
|
|||
return NF_STOLEN;
|
||||
|
||||
inhdr_error:
|
||||
// IP_INC_STATS_BH(IpInHdrErrors);
|
||||
// IP_INC_STATS_BH(IpInHdrErrors);
|
||||
out:
|
||||
return NF_DROP;
|
||||
}
|
||||
|
@ -496,8 +502,9 @@ static unsigned int br_nf_pre_routing(unsigned int hook, struct sk_buff **pskb,
|
|||
* register an IPv4 PRE_ROUTING 'sabotage' hook that will
|
||||
* prevent this from happening. */
|
||||
static unsigned int br_nf_local_in(unsigned int hook, struct sk_buff **pskb,
|
||||
const struct net_device *in, const struct net_device *out,
|
||||
int (*okfn)(struct sk_buff *))
|
||||
const struct net_device *in,
|
||||
const struct net_device *out,
|
||||
int (*okfn)(struct sk_buff *))
|
||||
{
|
||||
struct sk_buff *skb = *pskb;
|
||||
|
||||
|
@ -509,7 +516,6 @@ static unsigned int br_nf_local_in(unsigned int hook, struct sk_buff **pskb,
|
|||
return NF_ACCEPT;
|
||||
}
|
||||
|
||||
|
||||
/* PF_BRIDGE/FORWARD *************************************************/
|
||||
static int br_nf_forward_finish(struct sk_buff *skb)
|
||||
{
|
||||
|
@ -531,7 +537,7 @@ static int br_nf_forward_finish(struct sk_buff *skb)
|
|||
skb->nh.raw -= VLAN_HLEN;
|
||||
}
|
||||
NF_HOOK_THRESH(PF_BRIDGE, NF_BR_FORWARD, skb, in,
|
||||
skb->dev, br_forward_finish, 1);
|
||||
skb->dev, br_forward_finish, 1);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -541,8 +547,9 @@ static int br_nf_forward_finish(struct sk_buff *skb)
|
|||
* because of the physdev module. For ARP, indev and outdev are the
|
||||
* bridge ports. */
|
||||
static unsigned int br_nf_forward_ip(unsigned int hook, struct sk_buff **pskb,
|
||||
const struct net_device *in, const struct net_device *out,
|
||||
int (*okfn)(struct sk_buff *))
|
||||
const struct net_device *in,
|
||||
const struct net_device *out,
|
||||
int (*okfn)(struct sk_buff *))
|
||||
{
|
||||
struct sk_buff *skb = *pskb;
|
||||
struct nf_bridge_info *nf_bridge;
|
||||
|
@ -584,8 +591,9 @@ static unsigned int br_nf_forward_ip(unsigned int hook, struct sk_buff **pskb,
|
|||
}
|
||||
|
||||
static unsigned int br_nf_forward_arp(unsigned int hook, struct sk_buff **pskb,
|
||||
const struct net_device *in, const struct net_device *out,
|
||||
int (*okfn)(struct sk_buff *))
|
||||
const struct net_device *in,
|
||||
const struct net_device *out,
|
||||
int (*okfn)(struct sk_buff *))
|
||||
{
|
||||
struct sk_buff *skb = *pskb;
|
||||
struct vlan_ethhdr *hdr = vlan_eth_hdr(skb);
|
||||
|
@ -617,7 +625,6 @@ static unsigned int br_nf_forward_arp(unsigned int hook, struct sk_buff **pskb,
|
|||
return NF_STOLEN;
|
||||
}
|
||||
|
||||
|
||||
/* PF_BRIDGE/LOCAL_OUT ***********************************************/
|
||||
static int br_nf_local_out_finish(struct sk_buff *skb)
|
||||
{
|
||||
|
@ -627,7 +634,7 @@ static int br_nf_local_out_finish(struct sk_buff *skb)
|
|||
}
|
||||
|
||||
NF_HOOK_THRESH(PF_BRIDGE, NF_BR_LOCAL_OUT, skb, NULL, skb->dev,
|
||||
br_forward_finish, NF_BR_PRI_FIRST + 1);
|
||||
br_forward_finish, NF_BR_PRI_FIRST + 1);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -653,8 +660,9 @@ static int br_nf_local_out_finish(struct sk_buff *skb)
|
|||
* even routed packets that didn't arrive on a bridge interface have their
|
||||
* nf_bridge->physindev set. */
|
||||
static unsigned int br_nf_local_out(unsigned int hook, struct sk_buff **pskb,
|
||||
const struct net_device *in, const struct net_device *out,
|
||||
int (*okfn)(struct sk_buff *))
|
||||
const struct net_device *in,
|
||||
const struct net_device *out,
|
||||
int (*okfn)(struct sk_buff *))
|
||||
{
|
||||
struct net_device *realindev, *realoutdev;
|
||||
struct sk_buff *skb = *pskb;
|
||||
|
@ -716,7 +724,7 @@ static unsigned int br_nf_local_out(unsigned int hook, struct sk_buff **pskb,
|
|||
/* IP forwarded traffic has a physindev, locally
|
||||
* generated traffic hasn't. */
|
||||
if (realindev != NULL) {
|
||||
if (!(nf_bridge->mask & BRNF_DONT_TAKE_PARENT) ) {
|
||||
if (!(nf_bridge->mask & BRNF_DONT_TAKE_PARENT)) {
|
||||
struct net_device *parent = bridge_parent(realindev);
|
||||
if (parent)
|
||||
realindev = parent;
|
||||
|
@ -738,8 +746,9 @@ static unsigned int br_nf_local_out(unsigned int hook, struct sk_buff **pskb,
|
|||
|
||||
/* PF_BRIDGE/POST_ROUTING ********************************************/
|
||||
static unsigned int br_nf_post_routing(unsigned int hook, struct sk_buff **pskb,
|
||||
const struct net_device *in, const struct net_device *out,
|
||||
int (*okfn)(struct sk_buff *))
|
||||
const struct net_device *in,
|
||||
const struct net_device *out,
|
||||
int (*okfn)(struct sk_buff *))
|
||||
{
|
||||
struct sk_buff *skb = *pskb;
|
||||
struct nf_bridge_info *nf_bridge = (*pskb)->nf_bridge;
|
||||
|
@ -752,7 +761,7 @@ static unsigned int br_nf_post_routing(unsigned int hook, struct sk_buff **pskb,
|
|||
* keep the check just to be sure... */
|
||||
if (skb->mac.raw < skb->head || skb->mac.raw + ETH_HLEN > skb->data) {
|
||||
printk(KERN_CRIT "br_netfilter: Argh!! br_nf_post_routing: "
|
||||
"bad mac.raw pointer.");
|
||||
"bad mac.raw pointer.");
|
||||
goto print_error;
|
||||
}
|
||||
#endif
|
||||
|
@ -794,7 +803,7 @@ static unsigned int br_nf_post_routing(unsigned int hook, struct sk_buff **pskb,
|
|||
realoutdev = nf_bridge->netoutdev;
|
||||
#endif
|
||||
NF_HOOK(pf, NF_IP_POST_ROUTING, skb, NULL, realoutdev,
|
||||
br_dev_queue_push_xmit);
|
||||
br_dev_queue_push_xmit);
|
||||
|
||||
return NF_STOLEN;
|
||||
|
||||
|
@ -806,18 +815,18 @@ static unsigned int br_nf_post_routing(unsigned int hook, struct sk_buff **pskb,
|
|||
printk("[%s]", realoutdev->name);
|
||||
}
|
||||
printk(" head:%p, raw:%p, data:%p\n", skb->head, skb->mac.raw,
|
||||
skb->data);
|
||||
skb->data);
|
||||
return NF_ACCEPT;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
/* IP/SABOTAGE *****************************************************/
|
||||
/* Don't hand locally destined packets to PF_INET(6)/PRE_ROUTING
|
||||
* for the second time. */
|
||||
static unsigned int ip_sabotage_in(unsigned int hook, struct sk_buff **pskb,
|
||||
const struct net_device *in, const struct net_device *out,
|
||||
int (*okfn)(struct sk_buff *))
|
||||
const struct net_device *in,
|
||||
const struct net_device *out,
|
||||
int (*okfn)(struct sk_buff *))
|
||||
{
|
||||
if ((*pskb)->nf_bridge &&
|
||||
!((*pskb)->nf_bridge->mask & BRNF_NF_BRIDGE_PREROUTING)) {
|
||||
|
@ -831,18 +840,18 @@ static unsigned int ip_sabotage_in(unsigned int hook, struct sk_buff **pskb,
|
|||
* and PF_INET(6)/POST_ROUTING until we have done the forwarding
|
||||
* decision in the bridge code and have determined nf_bridge->physoutdev. */
|
||||
static unsigned int ip_sabotage_out(unsigned int hook, struct sk_buff **pskb,
|
||||
const struct net_device *in, const struct net_device *out,
|
||||
int (*okfn)(struct sk_buff *))
|
||||
const struct net_device *in,
|
||||
const struct net_device *out,
|
||||
int (*okfn)(struct sk_buff *))
|
||||
{
|
||||
struct sk_buff *skb = *pskb;
|
||||
|
||||
if ((out->hard_start_xmit == br_dev_xmit &&
|
||||
okfn != br_nf_forward_finish &&
|
||||
okfn != br_nf_local_out_finish &&
|
||||
okfn != br_dev_queue_push_xmit)
|
||||
okfn != br_nf_forward_finish &&
|
||||
okfn != br_nf_local_out_finish && okfn != br_dev_queue_push_xmit)
|
||||
#if defined(CONFIG_VLAN_8021Q) || defined(CONFIG_VLAN_8021Q_MODULE)
|
||||
|| ((out->priv_flags & IFF_802_1Q_VLAN) &&
|
||||
VLAN_DEV_INFO(out)->real_dev->hard_start_xmit == br_dev_xmit)
|
||||
VLAN_DEV_INFO(out)->real_dev->hard_start_xmit == br_dev_xmit)
|
||||
#endif
|
||||
) {
|
||||
struct nf_bridge_info *nf_bridge;
|
||||
|
@ -967,8 +976,8 @@ static struct nf_hook_ops br_nf_ops[] = {
|
|||
|
||||
#ifdef CONFIG_SYSCTL
|
||||
static
|
||||
int brnf_sysctl_call_tables(ctl_table *ctl, int write, struct file * filp,
|
||||
void __user *buffer, size_t *lenp, loff_t *ppos)
|
||||
int brnf_sysctl_call_tables(ctl_table * ctl, int write, struct file *filp,
|
||||
void __user * buffer, size_t * lenp, loff_t * ppos)
|
||||
{
|
||||
int ret;
|
||||
|
||||
|
@ -1055,7 +1064,8 @@ int br_netfilter_init(void)
|
|||
#ifdef CONFIG_SYSCTL
|
||||
brnf_sysctl_header = register_sysctl_table(brnf_net_table, 0);
|
||||
if (brnf_sysctl_header == NULL) {
|
||||
printk(KERN_WARNING "br_netfilter: can't register to sysctl.\n");
|
||||
printk(KERN_WARNING
|
||||
"br_netfilter: can't register to sysctl.\n");
|
||||
for (i = 0; i < ARRAY_SIZE(br_nf_ops); i++)
|
||||
nf_unregister_hook(&br_nf_ops[i]);
|
||||
return -EFAULT;
|
||||
|
|
Loading…
Reference in New Issue
Block a user