macvlan.c (cf5c5763eb531ff5120111ad300126e926fb5a56) | macvlan.c (e16b859872b87650bb55b12cca5a5fcdc49c1442) |
---|---|
1// SPDX-License-Identifier: GPL-2.0-or-later 2/* 3 * Copyright (c) 2007 Patrick McHardy <kaber@trash.net> 4 * 5 * The code this is based on carried the following copyright notice: 6 * --- 7 * (C) Copyright 2001-2006 8 * Alex Zeffertt, Cambridge Broadband Ltd, ajz@cambridgebroadband.com --- 446 unchanged lines hidden (view full) --- 455 if (is_multicast_ether_addr(eth->h_dest)) { 456 unsigned int hash; 457 458 skb = ip_check_defrag(dev_net(skb->dev), skb, IP_DEFRAG_MACVLAN); 459 if (!skb) 460 return RX_HANDLER_CONSUMED; 461 *pskb = skb; 462 eth = eth_hdr(skb); | 1// SPDX-License-Identifier: GPL-2.0-or-later 2/* 3 * Copyright (c) 2007 Patrick McHardy <kaber@trash.net> 4 * 5 * The code this is based on carried the following copyright notice: 6 * --- 7 * (C) Copyright 2001-2006 8 * Alex Zeffertt, Cambridge Broadband Ltd, ajz@cambridgebroadband.com --- 446 unchanged lines hidden (view full) --- 455 if (is_multicast_ether_addr(eth->h_dest)) { 456 unsigned int hash; 457 458 skb = ip_check_defrag(dev_net(skb->dev), skb, IP_DEFRAG_MACVLAN); 459 if (!skb) 460 return RX_HANDLER_CONSUMED; 461 *pskb = skb; 462 eth = eth_hdr(skb); |
463 if (macvlan_forward_source(skb, port, eth->h_source)) | 463 if (macvlan_forward_source(skb, port, eth->h_source)) { 464 kfree_skb(skb); |
464 return RX_HANDLER_CONSUMED; | 465 return RX_HANDLER_CONSUMED; |
466 } |
|
465 src = macvlan_hash_lookup(port, eth->h_source); 466 if (src && src->mode != MACVLAN_MODE_VEPA && 467 src->mode != MACVLAN_MODE_BRIDGE) { 468 /* forward to original port. */ 469 vlan = src; 470 ret = macvlan_broadcast_one(skb, vlan, eth, 0) ?: 471 __netif_rx(skb); 472 handle_res = RX_HANDLER_CONSUMED; 473 goto out; 474 } 475 476 hash = mc_hash(NULL, eth->h_dest); 477 if (test_bit(hash, port->mc_filter)) 478 macvlan_broadcast_enqueue(port, src, skb); 479 480 return RX_HANDLER_PASS; 481 } 482 | 467 src = macvlan_hash_lookup(port, eth->h_source); 468 if (src && src->mode != MACVLAN_MODE_VEPA && 469 src->mode != MACVLAN_MODE_BRIDGE) { 470 /* forward to original port. */ 471 vlan = src; 472 ret = macvlan_broadcast_one(skb, vlan, eth, 0) ?: 473 __netif_rx(skb); 474 handle_res = RX_HANDLER_CONSUMED; 475 goto out; 476 } 477 478 hash = mc_hash(NULL, eth->h_dest); 479 if (test_bit(hash, port->mc_filter)) 480 macvlan_broadcast_enqueue(port, src, skb); 481 482 return RX_HANDLER_PASS; 483 } 484 |
483 if (macvlan_forward_source(skb, port, eth->h_source)) | 485 if (macvlan_forward_source(skb, port, eth->h_source)) { 486 kfree_skb(skb); |
484 return RX_HANDLER_CONSUMED; | 487 return RX_HANDLER_CONSUMED; |
488 } |
|
485 if (macvlan_passthru(port)) 486 vlan = list_first_or_null_rcu(&port->vlans, 487 struct macvlan_dev, list); 488 else 489 vlan = macvlan_hash_lookup(port, eth->h_dest); 490 if (!vlan || vlan->mode == MACVLAN_MODE_SOURCE) 491 return RX_HANDLER_PASS; 492 --- 1348 unchanged lines hidden --- | 489 if (macvlan_passthru(port)) 490 vlan = list_first_or_null_rcu(&port->vlans, 491 struct macvlan_dev, list); 492 else 493 vlan = macvlan_hash_lookup(port, eth->h_dest); 494 if (!vlan || vlan->mode == MACVLAN_MODE_SOURCE) 495 return RX_HANDLER_PASS; 496 --- 1348 unchanged lines hidden --- |