aboutsummaryrefslogtreecommitdiffstats
path: root/net/decnet/dn_route.c
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2011-07-17 16:34:11 -0400
committerDavid S. Miller <davem@davemloft.net>2011-07-18 02:11:17 -0400
commit8f40b161de4f27402b4c0659ad2ae83fad5a0cdd (patch)
tree9e2dbd4ba8a66916c690b0e5791ac25ea0958c26 /net/decnet/dn_route.c
parent69ecca86da4890c13a5e29c51b4ac76a1a8a62c9 (diff)
neigh: Pass neighbour entry to output ops.
This will get us closer to being able to do "neigh stuff" completely independent of the underlying dst_entry for protocols (ipv4/ipv6) that wish to do so. We will also be able to make dst entries neigh-less. Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/decnet/dn_route.c')
-rw-r--r--net/decnet/dn_route.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/net/decnet/dn_route.c b/net/decnet/dn_route.c
index fceb86ca011..3b6400d17dc 100644
--- a/net/decnet/dn_route.c
+++ b/net/decnet/dn_route.c
@@ -705,6 +705,14 @@ out:
705 return NET_RX_DROP; 705 return NET_RX_DROP;
706} 706}
707 707
708static int dn_to_neigh_output(struct sk_buff *skb)
709{
710 struct dst_entry *dst = skb_dst(skb);
711 struct neighbour *n = dst->neighbour;
712
713 return n->output(n, skb);
714}
715
708static int dn_output(struct sk_buff *skb) 716static int dn_output(struct sk_buff *skb)
709{ 717{
710 struct dst_entry *dst = skb_dst(skb); 718 struct dst_entry *dst = skb_dst(skb);
@@ -733,7 +741,7 @@ static int dn_output(struct sk_buff *skb)
733 cb->hops = 0; 741 cb->hops = 0;
734 742
735 return NF_HOOK(NFPROTO_DECNET, NF_DN_LOCAL_OUT, skb, NULL, dev, 743 return NF_HOOK(NFPROTO_DECNET, NF_DN_LOCAL_OUT, skb, NULL, dev,
736 neigh->output); 744 dn_to_neigh_output);
737 745
738error: 746error:
739 if (net_ratelimit()) 747 if (net_ratelimit())
@@ -750,7 +758,6 @@ static int dn_forward(struct sk_buff *skb)
750 struct dst_entry *dst = skb_dst(skb); 758 struct dst_entry *dst = skb_dst(skb);
751 struct dn_dev *dn_db = rcu_dereference(dst->dev->dn_ptr); 759 struct dn_dev *dn_db = rcu_dereference(dst->dev->dn_ptr);
752 struct dn_route *rt; 760 struct dn_route *rt;
753 struct neighbour *neigh = dst->neighbour;
754 int header_len; 761 int header_len;
755#ifdef CONFIG_NETFILTER 762#ifdef CONFIG_NETFILTER
756 struct net_device *dev = skb->dev; 763 struct net_device *dev = skb->dev;
@@ -783,7 +790,7 @@ static int dn_forward(struct sk_buff *skb)
783 cb->rt_flags |= DN_RT_F_IE; 790 cb->rt_flags |= DN_RT_F_IE;
784 791
785 return NF_HOOK(NFPROTO_DECNET, NF_DN_FORWARD, skb, dev, skb->dev, 792 return NF_HOOK(NFPROTO_DECNET, NF_DN_FORWARD, skb, dev, skb->dev,
786 neigh->output); 793 dn_to_neigh_output);
787 794
788drop: 795drop:
789 kfree_skb(skb); 796 kfree_skb(skb);