diff options
author | John Fastabend <john.r.fastabend@intel.com> | 2012-10-24 04:13:09 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2012-10-31 13:18:29 -0400 |
commit | 815cccbf10b27115fb3e5827bef26768616e5e27 (patch) | |
tree | c8c4a2a2bc95bc89926c91c67c98b020be1efaa7 /drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c | |
parent | 2469ffd723f76ac2d3ce3d4f31ee31ee0a06cd38 (diff) |
ixgbe: add setlink, getlink support to ixgbe and ixgbevf
This adds support for the net device ops to manage the embedded
hardware bridge on ixgbe devices. With this patch the bridge
mode can be toggled between VEB and VEPA to support stacking
macvlan devices or using the embedded switch without any SW
component in 802.1Qbg/br environments.
Additionally, this adds source address pruning to the ixgbevf
driver to prune any frames sent back from a reflective relay on
the switch. This is required because the existing hardware does
not support this. Without it frames get pushed into the stack
with its own src mac which is invalid per 802.1Qbg VEPA
definition.
Signed-off-by: John Fastabend <john.r.fastabend@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c')
-rw-r--r-- | drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c b/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c index 07d7eaba6f1b..ac6a76deb01d 100644 --- a/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c +++ b/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c | |||
@@ -478,6 +478,16 @@ static bool ixgbevf_clean_rx_irq(struct ixgbevf_q_vector *q_vector, | |||
478 | } | 478 | } |
479 | skb->protocol = eth_type_trans(skb, rx_ring->netdev); | 479 | skb->protocol = eth_type_trans(skb, rx_ring->netdev); |
480 | 480 | ||
481 | /* Workaround hardware that can't do proper VEPA multicast | ||
482 | * source pruning. | ||
483 | */ | ||
484 | if ((skb->pkt_type & (PACKET_BROADCAST | PACKET_MULTICAST)) && | ||
485 | !(compare_ether_addr(adapter->netdev->dev_addr, | ||
486 | eth_hdr(skb)->h_source))) { | ||
487 | dev_kfree_skb_irq(skb); | ||
488 | goto next_desc; | ||
489 | } | ||
490 | |||
481 | ixgbevf_receive_skb(q_vector, skb, staterr, rx_desc); | 491 | ixgbevf_receive_skb(q_vector, skb, staterr, rx_desc); |
482 | 492 | ||
483 | next_desc: | 493 | next_desc: |