diff options
author | Jon Maloy <jon.maloy@ericsson.com> | 2006-06-25 23:36:43 -0700 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2006-06-25 23:36:43 -0700 |
commit | 5e3c8854c1898828ffb0141d4ac4e6190aa9eb4e (patch) | |
tree | 37d58dc51a1d3f7bc7f2fef26397563bb38bfaa9 /net/tipc/eth_media.c | |
parent | fcc18e83e1f6fd9fa6b333735bf0fcd530655511 (diff) | |
download | blackbird-op-linux-5e3c8854c1898828ffb0141d4ac4e6190aa9eb4e.tar.gz blackbird-op-linux-5e3c8854c1898828ffb0141d4ac4e6190aa9eb4e.zip |
[TIPC] Improved tolerance to promiscuous mode interface
Signed-off-by: Jon Maloy <jon.maloy@ericsson.com>
Signed-off-by: Per Liden <per.liden@ericsson.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/tipc/eth_media.c')
-rw-r--r-- | net/tipc/eth_media.c | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/net/tipc/eth_media.c b/net/tipc/eth_media.c index 7a252785f727..b64661904e0d 100644 --- a/net/tipc/eth_media.c +++ b/net/tipc/eth_media.c @@ -98,17 +98,19 @@ static int recv_msg(struct sk_buff *buf, struct net_device *dev, u32 size; if (likely(eb_ptr->bearer)) { - size = msg_size((struct tipc_msg *)buf->data); - skb_trim(buf, size); - if (likely(buf->len == size)) { - buf->next = NULL; - tipc_recv_msg(buf, eb_ptr->bearer); - } else { - kfree_skb(buf); + if (likely(!dev->promiscuity) || + !memcmp(buf->mac.raw,dev->dev_addr,ETH_ALEN) || + !memcmp(buf->mac.raw,dev->broadcast,ETH_ALEN)) { + size = msg_size((struct tipc_msg *)buf->data); + skb_trim(buf, size); + if (likely(buf->len == size)) { + buf->next = NULL; + tipc_recv_msg(buf, eb_ptr->bearer); + return TIPC_OK; + } } - } else { - kfree_skb(buf); } + kfree_skb(buf); return TIPC_OK; } |