diff options
| author | David S. Miller <davem@davemloft.net> | 2011-07-16 20:26:00 -0400 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2011-07-16 20:26:00 -0400 |
| commit | 05e3aa0949c138803185f92bd7db9be59cfca1be (patch) | |
| tree | 8ea4dd1ab94160dfe51d3d0c0d305d20f2a62a04 | |
| parent | a29282972cc9b80126d4e4d68251c6712bdad051 (diff) | |
net: Create and use new helper, neigh_output().
Signed-off-by: David S. Miller <davem@davemloft.net>
| -rw-r--r-- | include/net/neighbour.h | 9 | ||||
| -rw-r--r-- | net/ipv4/ip_output.c | 10 | ||||
| -rw-r--r-- | net/ipv6/ip6_output.c | 10 |
3 files changed, 15 insertions, 14 deletions
diff --git a/include/net/neighbour.h b/include/net/neighbour.h index bd8f9f09ab5c..337da241a80f 100644 --- a/include/net/neighbour.h +++ b/include/net/neighbour.h | |||
| @@ -344,6 +344,15 @@ static inline int neigh_hh_output(struct hh_cache *hh, struct sk_buff *skb) | |||
| 344 | return hh->hh_output(skb); | 344 | return hh->hh_output(skb); |
| 345 | } | 345 | } |
| 346 | 346 | ||
| 347 | static inline int neigh_output(struct neighbour *n, struct sk_buff *skb) | ||
| 348 | { | ||
| 349 | struct hh_cache *hh = &n->hh; | ||
| 350 | if (hh->hh_len) | ||
| 351 | return neigh_hh_output(hh, skb); | ||
| 352 | else | ||
| 353 | return n->output(skb); | ||
| 354 | } | ||
| 355 | |||
| 347 | static inline struct neighbour * | 356 | static inline struct neighbour * |
| 348 | __neigh_lookup(struct neigh_table *tbl, const void *pkey, struct net_device *dev, int creat) | 357 | __neigh_lookup(struct neigh_table *tbl, const void *pkey, struct net_device *dev, int creat) |
| 349 | { | 358 | { |
diff --git a/net/ipv4/ip_output.c b/net/ipv4/ip_output.c index 1ac674a68c77..db296a98b236 100644 --- a/net/ipv4/ip_output.c +++ b/net/ipv4/ip_output.c | |||
| @@ -205,13 +205,9 @@ static inline int ip_finish_output2(struct sk_buff *skb) | |||
| 205 | } | 205 | } |
| 206 | 206 | ||
| 207 | neigh = dst->neighbour; | 207 | neigh = dst->neighbour; |
| 208 | if (neigh) { | 208 | if (neigh) |
| 209 | struct hh_cache *hh = &neigh->hh; | 209 | return neigh_output(neigh, skb); |
| 210 | if (hh->hh_len) | 210 | |
| 211 | return neigh_hh_output(hh, skb); | ||
| 212 | else | ||
| 213 | return neigh->output(skb); | ||
| 214 | } | ||
| 215 | if (net_ratelimit()) | 211 | if (net_ratelimit()) |
| 216 | printk(KERN_DEBUG "ip_finish_output2: No header cache and no neighbour!\n"); | 212 | printk(KERN_DEBUG "ip_finish_output2: No header cache and no neighbour!\n"); |
| 217 | kfree_skb(skb); | 213 | kfree_skb(skb); |
diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c index 36362e9513f0..eb50bb07ab2e 100644 --- a/net/ipv6/ip6_output.c +++ b/net/ipv6/ip6_output.c | |||
| @@ -136,13 +136,9 @@ static int ip6_finish_output2(struct sk_buff *skb) | |||
| 136 | } | 136 | } |
| 137 | 137 | ||
| 138 | neigh = dst->neighbour; | 138 | neigh = dst->neighbour; |
| 139 | if (neigh) { | 139 | if (neigh) |
| 140 | struct hh_cache *hh = &neigh->hh; | 140 | return neigh_output(neigh, skb); |
| 141 | if (hh->hh_len) | 141 | |
| 142 | return neigh_hh_output(hh, skb); | ||
| 143 | else | ||
| 144 | return neigh->output(skb); | ||
| 145 | } | ||
| 146 | IP6_INC_STATS_BH(dev_net(dst->dev), | 142 | IP6_INC_STATS_BH(dev_net(dst->dev), |
| 147 | ip6_dst_idev(dst), IPSTATS_MIB_OUTNOROUTES); | 143 | ip6_dst_idev(dst), IPSTATS_MIB_OUTNOROUTES); |
| 148 | kfree_skb(skb); | 144 | kfree_skb(skb); |
