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); |