From 47ec132a40d788d45e2f088545dea68798034dab Mon Sep 17 00:00:00 2001 From: "David S. Miller" Date: Sat, 16 Jul 2011 17:39:57 -0700 Subject: neigh: Kill neigh_ops->hh_output It's always dev_queue_xmit(). Signed-off-by: David S. Miller --- net/atm/clip.c | 1 - 1 file changed, 1 deletion(-) (limited to 'net/atm/clip.c') diff --git a/net/atm/clip.c b/net/atm/clip.c index 1d4be60e1390..036cd43c13a4 100644 --- a/net/atm/clip.c +++ b/net/atm/clip.c @@ -273,7 +273,6 @@ static const struct neigh_ops clip_neigh_ops = { .error_report = clip_neigh_error, .output = dev_queue_xmit, .connected_output = dev_queue_xmit, - .hh_output = dev_queue_xmit, .queue_xmit = dev_queue_xmit, }; -- cgit v1.2.3 From 542d4d685febf3110d1a08d0bcb9f6ef060b76f7 Mon Sep 17 00:00:00 2001 From: "David S. Miller" Date: Sat, 16 Jul 2011 18:06:24 -0700 Subject: neigh: Kill ndisc_ops->queue_xmit It is always dev_queue_xmit(). Signed-off-by: David S. Miller --- net/atm/clip.c | 1 - 1 file changed, 1 deletion(-) (limited to 'net/atm/clip.c') diff --git a/net/atm/clip.c b/net/atm/clip.c index 036cd43c13a4..40d736899676 100644 --- a/net/atm/clip.c +++ b/net/atm/clip.c @@ -273,7 +273,6 @@ static const struct neigh_ops clip_neigh_ops = { .error_report = clip_neigh_error, .output = dev_queue_xmit, .connected_output = dev_queue_xmit, - .queue_xmit = dev_queue_xmit, }; static int clip_constructor(struct neighbour *neigh) -- cgit v1.2.3 From 8f40b161de4f27402b4c0659ad2ae83fad5a0cdd Mon Sep 17 00:00:00 2001 From: "David S. Miller" Date: Sun, 17 Jul 2011 13:34:11 -0700 Subject: 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 --- net/atm/clip.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'net/atm/clip.c') diff --git a/net/atm/clip.c b/net/atm/clip.c index 40d736899676..c6cd5318be3f 100644 --- a/net/atm/clip.c +++ b/net/atm/clip.c @@ -271,8 +271,8 @@ static const struct neigh_ops clip_neigh_ops = { .family = AF_INET, .solicit = clip_neigh_solicit, .error_report = clip_neigh_error, - .output = dev_queue_xmit, - .connected_output = dev_queue_xmit, + .output = neigh_direct_output, + .connected_output = neigh_direct_output, }; static int clip_constructor(struct neighbour *neigh) -- cgit v1.2.3 From 69cce1d1404968f78b177a0314f5822d5afdbbfb Mon Sep 17 00:00:00 2001 From: "David S. Miller" Date: Sun, 17 Jul 2011 23:09:49 -0700 Subject: net: Abstract dst->neighbour accesses behind helpers. dst_{get,set}_neighbour() Signed-off-by: David S. Miller --- net/atm/clip.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) (limited to 'net/atm/clip.c') diff --git a/net/atm/clip.c b/net/atm/clip.c index c6cd5318be3f..4bc8c67ecb14 100644 --- a/net/atm/clip.c +++ b/net/atm/clip.c @@ -362,33 +362,37 @@ static netdev_tx_t clip_start_xmit(struct sk_buff *skb, struct net_device *dev) { struct clip_priv *clip_priv = PRIV(dev); + struct dst_entry *dst = skb_dst(skb); struct atmarp_entry *entry; + struct neighbour *n; struct atm_vcc *vcc; int old; unsigned long flags; pr_debug("(skb %p)\n", skb); - if (!skb_dst(skb)) { + if (!dst) { pr_err("skb_dst(skb) == NULL\n"); dev_kfree_skb(skb); dev->stats.tx_dropped++; return NETDEV_TX_OK; } - if (!skb_dst(skb)->neighbour) { + n = dst_get_neighbour(dst); + if (!n) { #if 0 - skb_dst(skb)->neighbour = clip_find_neighbour(skb_dst(skb), 1); - if (!skb_dst(skb)->neighbour) { + n = clip_find_neighbour(skb_dst(skb), 1); + if (!n) { dev_kfree_skb(skb); /* lost that one */ dev->stats.tx_dropped++; return 0; } + dst_set_neighbour(dst, n); #endif pr_err("NO NEIGHBOUR !\n"); dev_kfree_skb(skb); dev->stats.tx_dropped++; return NETDEV_TX_OK; } - entry = NEIGH2ENTRY(skb_dst(skb)->neighbour); + entry = NEIGH2ENTRY(n); if (!entry->vccs) { if (time_after(jiffies, entry->expires)) { /* should be resolved */ @@ -405,7 +409,7 @@ static netdev_tx_t clip_start_xmit(struct sk_buff *skb, } pr_debug("neigh %p, vccs %p\n", entry, entry->vccs); ATM_SKB(skb)->vcc = vcc = entry->vccs->vcc; - pr_debug("using neighbour %p, vcc %p\n", skb_dst(skb)->neighbour, vcc); + pr_debug("using neighbour %p, vcc %p\n", n, vcc); if (entry->vccs->encap) { void *here; -- cgit v1.2.3