[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Date: Sun, 04 May 2008 20:00:28 -0700
From: Joe Eykholt <jre@...vasystems.com>
To: netdev@...r.kernel.org
Subject: [PATCH 2/3] bonding: Allow certain receives on inactive slave.
bonding: Allow certain receives on inactive slave.
Allow a packet_type that specifies the exact device to receive
even on an inactive slave devices. This is important for some
L2 protocols such as LLDP and FCoE. This can eventually be used
for the bonding special cases as well.
Signed-off-by: Joe Eykholt <jre@...vasystems.com>
---
net/core/dev.c | 15 ++++++++-------
1 files changed, 8 insertions(+), 7 deletions(-)
diff --git a/net/core/dev.c b/net/core/dev.c
index 0335d24..ac5d8ac 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -2007,6 +2007,7 @@ int netif_receive_skb(struct sk_buff *skb)
{
struct packet_type *ptype, *pt_prev;
struct net_device *orig_dev;
+ struct net_device *null_or_orig;
int ret = NET_RX_DROP;
__be16 type;
@@ -2020,13 +2021,13 @@ int netif_receive_skb(struct sk_buff *skb)
if (!skb->iif)
skb->iif = skb->dev->ifindex;
+ null_or_orig = NULL;
orig_dev = skb->dev;
if (orig_dev->master) {
- if (skb_bond_should_drop(skb)) {
- kfree_skb(skb);
- return NET_RX_DROP;
- }
- skb->dev = orig_dev->master;
+ if (skb_bond_should_drop(skb))
+ null_or_orig = orig_dev; /* deliver only exact match */
+ else
+ skb->dev = orig_dev->master;
}
__get_cpu_var(netdev_rx_stat).total++;
@@ -2047,7 +2048,7 @@ int netif_receive_skb(struct sk_buff *skb)
#endif
list_for_each_entry_rcu(ptype, &ptype_all, list) {
- if (!ptype->dev || ptype->dev == skb->dev) {
+ if (ptype->dev == null_or_orig || ptype->dev == skb->dev) {
if (pt_prev)
ret = deliver_skb(skb, pt_prev, orig_dev);
pt_prev = ptype;
@@ -2072,7 +2073,7 @@ ncls:
list_for_each_entry_rcu(ptype,
&ptype_base[ntohs(type) & PTYPE_HASH_MASK], list) {
if (ptype->type == type &&
- (!ptype->dev || ptype->dev == skb->dev)) {
+ (ptype->dev == null_or_orig || ptype->dev == skb->dev)) {
if (pt_prev)
ret = deliver_skb(skb, pt_prev, orig_dev);
pt_prev = ptype;
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists