diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-07-22 14:43:13 -0700 | 
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-07-22 14:43:13 -0700 | 
| commit | 951cc93a7493a81a47e20231441bc6cf17c98a37 (patch) | |
| tree | f53934f0f225e0215a85c8c59af4c6513e89e3f1 /drivers/net/macvlan.c | |
| parent | a7e1aabb28e8154ce987b622fd78d80a1ca39361 (diff) | |
| parent | 415b3334a21aa67806c52d1acf4e72e14f7f402f (diff) | |
| download | olio-linux-3.10-951cc93a7493a81a47e20231441bc6cf17c98a37.tar.xz olio-linux-3.10-951cc93a7493a81a47e20231441bc6cf17c98a37.zip  | |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next: (1287 commits)
  icmp: Fix regression in nexthop resolution during replies.
  net: Fix ppc64 BPF JIT dependencies.
  acenic: include NET_SKB_PAD headroom to incoming skbs
  ixgbe: convert to ndo_fix_features
  ixgbe: only enable WoL for magic packet by default
  ixgbe: remove ifdef check for non-existent define
  ixgbe: Pass staterr instead of re-reading status and error bits from descriptor
  ixgbe: Move interrupt related values out of ring and into q_vector
  ixgbe: add structure for containing RX/TX rings to q_vector
  ixgbe: inline the ixgbe_maybe_stop_tx function
  ixgbe: Update ATR to use recorded TX queues instead of CPU for routing
  igb: Fix for DH89xxCC near end loopback test
  e1000: always call e1000_check_for_link() on e1000_ce4100 MACs.
  netxen: add fw version compatibility check
  be2net: request native mode each time the card is reset
  ipv4: Constrain UFO fragment sizes to multiples of 8 bytes
  virtio_net: Fix panic in virtnet_remove
  ipv6: make fragment identifications less predictable
  ipv6: unshare inetpeers
  can: make function can_get_bittiming static
  ...
Diffstat (limited to 'drivers/net/macvlan.c')
| -rw-r--r-- | drivers/net/macvlan.c | 27 | 
1 files changed, 26 insertions, 1 deletions
diff --git a/drivers/net/macvlan.c b/drivers/net/macvlan.c index d6aeaa5f25e..ba631fcece3 100644 --- a/drivers/net/macvlan.c +++ b/drivers/net/macvlan.c @@ -414,7 +414,8 @@ static struct lock_class_key macvlan_netdev_addr_lock_key;  #define MACVLAN_FEATURES \  	(NETIF_F_SG | NETIF_F_ALL_CSUM | NETIF_F_HIGHDMA | NETIF_F_FRAGLIST | \  	 NETIF_F_GSO | NETIF_F_TSO | NETIF_F_UFO | NETIF_F_GSO_ROBUST | \ -	 NETIF_F_TSO_ECN | NETIF_F_TSO6 | NETIF_F_GRO | NETIF_F_RXCSUM) +	 NETIF_F_TSO_ECN | NETIF_F_TSO6 | NETIF_F_GRO | NETIF_F_RXCSUM | \ +	 NETIF_F_HW_VLAN_FILTER)  #define MACVLAN_STATE_MASK \  	((1<<__LINK_STATE_NOCARRIER) | (1<<__LINK_STATE_DORMANT)) @@ -509,6 +510,28 @@ static struct rtnl_link_stats64 *macvlan_dev_get_stats64(struct net_device *dev,  	return stats;  } +static void macvlan_vlan_rx_add_vid(struct net_device *dev, +				    unsigned short vid) +{ +	struct macvlan_dev *vlan = netdev_priv(dev); +	struct net_device *lowerdev = vlan->lowerdev; +	const struct net_device_ops *ops = lowerdev->netdev_ops; + +	if (ops->ndo_vlan_rx_add_vid) +		ops->ndo_vlan_rx_add_vid(lowerdev, vid); +} + +static void macvlan_vlan_rx_kill_vid(struct net_device *dev, +				     unsigned short vid) +{ +	struct macvlan_dev *vlan = netdev_priv(dev); +	struct net_device *lowerdev = vlan->lowerdev; +	const struct net_device_ops *ops = lowerdev->netdev_ops; + +	if (ops->ndo_vlan_rx_kill_vid) +		ops->ndo_vlan_rx_kill_vid(lowerdev, vid); +} +  static void macvlan_ethtool_get_drvinfo(struct net_device *dev,  					struct ethtool_drvinfo *drvinfo)  { @@ -541,6 +564,8 @@ static const struct net_device_ops macvlan_netdev_ops = {  	.ndo_set_multicast_list	= macvlan_set_multicast_list,  	.ndo_get_stats64	= macvlan_dev_get_stats64,  	.ndo_validate_addr	= eth_validate_addr, +	.ndo_vlan_rx_add_vid	= macvlan_vlan_rx_add_vid, +	.ndo_vlan_rx_kill_vid	= macvlan_vlan_rx_kill_vid,  };  void macvlan_common_setup(struct net_device *dev)  |