aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2011-07-16 20:26:00 -0400
committerDavid S. Miller <davem@davemloft.net>2011-07-16 20:26:00 -0400
commit05e3aa0949c138803185f92bd7db9be59cfca1be (patch)
tree8ea4dd1ab94160dfe51d3d0c0d305d20f2a62a04
parenta29282972cc9b80126d4e4d68251c6712bdad051 (diff)
net: Create and use new helper, neigh_output().
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--include/net/neighbour.h9
-rw-r--r--net/ipv4/ip_output.c10
-rw-r--r--net/ipv6/ip6_output.c10
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
347static 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
347static inline struct neighbour * 356static 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);