aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStephen Hemminger <shemminger@osdl.org>2006-08-29 20:48:57 -0400
committerDavid S. Miller <davem@sunset.davemloft.net>2006-09-22 18:18:31 -0400
commit9bcfcaf5e9cc887eb39236e43bdbe4b4b2572229 (patch)
tree34d6369208bdd707a5e45bdf1972c94e3206b6e3
parent07317621d004e8e6967f2dac8562825267e56135 (diff)
[NETFILTER] bridge: simplify nf_bridge_pad
Do some simple optimization on the nf_bridge_pad() function and don't use magic constants. Eliminate a double call and the #ifdef'd code for CONFIG_BRIDGE_NETFILTER. Signed-off-by: Stephen Hemminger <shemminger@osdl.org> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--include/linux/netfilter_bridge.h16
-rw-r--r--net/ipv4/ip_output.c15
2 files changed, 12 insertions, 19 deletions
diff --git a/include/linux/netfilter_bridge.h b/include/linux/netfilter_bridge.h
index 274fe4b33155..9a4dd11af86e 100644
--- a/include/linux/netfilter_bridge.h
+++ b/include/linux/netfilter_bridge.h
@@ -5,9 +5,8 @@
5 */ 5 */
6 6
7#include <linux/netfilter.h> 7#include <linux/netfilter.h>
8#if defined(__KERNEL__) && defined(CONFIG_BRIDGE_NETFILTER)
9#include <linux/if_ether.h> 8#include <linux/if_ether.h>
10#endif 9#include <linux/if_vlan.h>
11 10
12/* Bridge Hooks */ 11/* Bridge Hooks */
13/* After promisc drops, checksum checks. */ 12/* After promisc drops, checksum checks. */
@@ -57,16 +56,10 @@ static inline int nf_bridge_maybe_copy_header(struct sk_buff *skb)
57 56
58/* This is called by the IP fragmenting code and it ensures there is 57/* This is called by the IP fragmenting code and it ensures there is
59 * enough room for the encapsulating header (if there is one). */ 58 * enough room for the encapsulating header (if there is one). */
60static inline 59static inline int nf_bridge_pad(const struct sk_buff *skb)
61int nf_bridge_pad(struct sk_buff *skb)
62{ 60{
63 if (skb->protocol == __constant_htons(ETH_P_IP)) 61 return (skb->nf_bridge && skb->protocol == htons(ETH_P_8021Q))
64 return 0; 62 ? VLAN_HLEN : 0;
65 if (skb->nf_bridge) {
66 if (skb->protocol == __constant_htons(ETH_P_8021Q))
67 return 4;
68 }
69 return 0;
70} 63}
71 64
72struct bridge_skb_cb { 65struct bridge_skb_cb {
@@ -78,6 +71,7 @@ struct bridge_skb_cb {
78extern int brnf_deferred_hooks; 71extern int brnf_deferred_hooks;
79#else 72#else
80#define nf_bridge_maybe_copy_header(skb) (0) 73#define nf_bridge_maybe_copy_header(skb) (0)
74#define nf_bridge_pad(skb) (0)
81#endif /* CONFIG_BRIDGE_NETFILTER */ 75#endif /* CONFIG_BRIDGE_NETFILTER */
82 76
83#endif /* __KERNEL__ */ 77#endif /* __KERNEL__ */
diff --git a/net/ipv4/ip_output.c b/net/ipv4/ip_output.c
index 81b2795a4c20..97aee76fb746 100644
--- a/net/ipv4/ip_output.c
+++ b/net/ipv4/ip_output.c
@@ -426,7 +426,7 @@ int ip_fragment(struct sk_buff *skb, int (*output)(struct sk_buff*))
426 int ptr; 426 int ptr;
427 struct net_device *dev; 427 struct net_device *dev;
428 struct sk_buff *skb2; 428 struct sk_buff *skb2;
429 unsigned int mtu, hlen, left, len, ll_rs; 429 unsigned int mtu, hlen, left, len, ll_rs, pad;
430 int offset; 430 int offset;
431 __be16 not_last_frag; 431 __be16 not_last_frag;
432 struct rtable *rt = (struct rtable*)skb->dst; 432 struct rtable *rt = (struct rtable*)skb->dst;
@@ -556,14 +556,13 @@ slow_path:
556 left = skb->len - hlen; /* Space per frame */ 556 left = skb->len - hlen; /* Space per frame */
557 ptr = raw + hlen; /* Where to start from */ 557 ptr = raw + hlen; /* Where to start from */
558 558
559#ifdef CONFIG_BRIDGE_NETFILTER
560 /* for bridged IP traffic encapsulated inside f.e. a vlan header, 559 /* for bridged IP traffic encapsulated inside f.e. a vlan header,
561 * we need to make room for the encapsulating header */ 560 * we need to make room for the encapsulating header
562 ll_rs = LL_RESERVED_SPACE_EXTRA(rt->u.dst.dev, nf_bridge_pad(skb)); 561 */
563 mtu -= nf_bridge_pad(skb); 562 pad = nf_bridge_pad(skb);
564#else 563 ll_rs = LL_RESERVED_SPACE_EXTRA(rt->u.dst.dev, pad);
565 ll_rs = LL_RESERVED_SPACE(rt->u.dst.dev); 564 mtu -= pad;
566#endif 565
567 /* 566 /*
568 * Fragment the datagram. 567 * Fragment the datagram.
569 */ 568 */