Lines Matching refs:vlan
59 struct macvlan_dev *vlan; member
125 struct macvlan_dev *vlan; in macvlan_hash_lookup() local
128 hlist_for_each_entry_rcu(vlan, &port->vlan_hash[idx], hlist, in macvlan_hash_lookup()
130 if (ether_addr_equal_64bits(vlan->dev->dev_addr, addr)) in macvlan_hash_lookup()
131 return vlan; in macvlan_hash_lookup()
137 const struct macvlan_dev *vlan, in macvlan_hash_lookup_source() argument
142 struct hlist_head *h = &vlan->port->vlan_source_hash[idx]; in macvlan_hash_lookup_source()
146 entry->vlan == vlan) in macvlan_hash_lookup_source()
152 static int macvlan_hash_add_source(struct macvlan_dev *vlan, in macvlan_hash_add_source() argument
155 struct macvlan_port *port = vlan->port; in macvlan_hash_add_source()
159 entry = macvlan_hash_lookup_source(vlan, addr); in macvlan_hash_add_source()
168 entry->vlan = vlan; in macvlan_hash_add_source()
171 vlan->macaddr_count++; in macvlan_hash_add_source()
176 static void macvlan_hash_add(struct macvlan_dev *vlan) in macvlan_hash_add() argument
178 struct macvlan_port *port = vlan->port; in macvlan_hash_add()
179 const unsigned char *addr = vlan->dev->dev_addr; in macvlan_hash_add()
182 hlist_add_head_rcu(&vlan->hlist, &port->vlan_hash[idx]); in macvlan_hash_add()
191 static void macvlan_hash_del(struct macvlan_dev *vlan, bool sync) in macvlan_hash_del() argument
193 hlist_del_rcu(&vlan->hlist); in macvlan_hash_del()
198 static void macvlan_hash_change_addr(struct macvlan_dev *vlan, in macvlan_hash_change_addr() argument
201 macvlan_hash_del(vlan, true); in macvlan_hash_change_addr()
205 eth_hw_addr_set(vlan->dev, addr); in macvlan_hash_change_addr()
206 macvlan_hash_add(vlan); in macvlan_hash_change_addr()
228 const struct macvlan_dev *vlan, in macvlan_broadcast_one() argument
231 struct net_device *dev = vlan->dev; in macvlan_broadcast_one()
245 static u32 macvlan_hash_mix(const struct macvlan_dev *vlan) in macvlan_hash_mix() argument
247 return (u32)(((unsigned long)vlan) >> L1_CACHE_SHIFT); in macvlan_hash_mix()
251 static unsigned int mc_hash(const struct macvlan_dev *vlan, in mc_hash() argument
256 val ^= macvlan_hash_mix(vlan); in mc_hash()
266 const struct macvlan_dev *vlan; in macvlan_broadcast() local
275 hash_for_each_rcu(port->vlan_hash, i, vlan, hlist) { in macvlan_broadcast()
276 if (vlan->dev == src || !(vlan->mode & mode)) in macvlan_broadcast()
279 hash = mc_hash(vlan, eth->h_dest); in macvlan_broadcast()
280 if (!test_bit(hash, vlan->mc_filter)) in macvlan_broadcast()
286 err = macvlan_broadcast_one(nskb, vlan, eth, in macvlan_broadcast()
289 macvlan_count_rx(vlan, skb->len + ETH_HLEN, in macvlan_broadcast()
378 struct macvlan_dev *vlan) in macvlan_flush_sources() argument
385 if (entry->vlan == vlan) in macvlan_flush_sources()
388 vlan->macaddr_count = 0; in macvlan_flush_sources()
392 struct macvlan_dev *vlan) in macvlan_forward_source_one() argument
399 dev = vlan->dev; in macvlan_forward_source_one()
414 macvlan_count_rx(vlan, len, ret == NET_RX_SUCCESS, false); in macvlan_forward_source_one()
428 if (entry->vlan->flags & MACVLAN_FLAG_NODST) in macvlan_forward_source()
430 macvlan_forward_source_one(skb, entry->vlan); in macvlan_forward_source()
443 const struct macvlan_dev *vlan; in macvlan_handle_frame() local
471 vlan = src; in macvlan_handle_frame()
472 ret = macvlan_broadcast_one(skb, vlan, eth, 0) ?: in macvlan_handle_frame()
490 vlan = list_first_or_null_rcu(&port->vlans, in macvlan_handle_frame()
493 vlan = macvlan_hash_lookup(port, eth->h_dest); in macvlan_handle_frame()
494 if (!vlan || vlan->mode == MACVLAN_MODE_SOURCE) in macvlan_handle_frame()
497 dev = vlan->dev; in macvlan_handle_frame()
517 macvlan_count_rx(vlan, len, ret == NET_RX_SUCCESS, false); in macvlan_handle_frame()
523 const struct macvlan_dev *vlan = netdev_priv(dev); in macvlan_queue_xmit() local
524 const struct macvlan_port *port = vlan->port; in macvlan_queue_xmit()
527 if (vlan->mode == MACVLAN_MODE_BRIDGE) { in macvlan_queue_xmit()
540 dev_forward_skb(vlan->lowerdev, skb); in macvlan_queue_xmit()
546 skb->dev = vlan->lowerdev; in macvlan_queue_xmit()
551 static inline netdev_tx_t macvlan_netpoll_send_skb(struct macvlan_dev *vlan, struct sk_buff *skb) in macvlan_netpoll_send_skb() argument
554 return netpoll_send_skb(vlan->netpoll, skb); in macvlan_netpoll_send_skb()
564 struct macvlan_dev *vlan = netdev_priv(dev); in macvlan_start_xmit() local
569 return macvlan_netpoll_send_skb(vlan, skb); in macvlan_start_xmit()
576 pcpu_stats = this_cpu_ptr(vlan->pcpu_stats); in macvlan_start_xmit()
582 this_cpu_inc(vlan->pcpu_stats->tx_dropped); in macvlan_start_xmit()
591 const struct macvlan_dev *vlan = netdev_priv(dev); in macvlan_hard_header() local
592 struct net_device *lowerdev = vlan->lowerdev; in macvlan_hard_header()
607 struct macvlan_dev *vlan = netdev_priv(dev); in macvlan_open() local
608 struct net_device *lowerdev = vlan->lowerdev; in macvlan_open()
611 if (macvlan_passthru(vlan->port)) { in macvlan_open()
612 if (!(vlan->flags & MACVLAN_FLAG_NOPROMISC)) { in macvlan_open()
621 if (macvlan_addr_busy(vlan->port, dev->dev_addr)) in macvlan_open()
628 vlan->accel_priv = in macvlan_open()
634 if (IS_ERR_OR_NULL(vlan->accel_priv)) { in macvlan_open()
635 vlan->accel_priv = NULL; in macvlan_open()
654 macvlan_hash_add(vlan); in macvlan_open()
661 if (vlan->accel_priv) { in macvlan_open()
663 vlan->accel_priv); in macvlan_open()
664 vlan->accel_priv = NULL; in macvlan_open()
674 struct macvlan_dev *vlan = netdev_priv(dev); in macvlan_stop() local
675 struct net_device *lowerdev = vlan->lowerdev; in macvlan_stop()
677 if (vlan->accel_priv) { in macvlan_stop()
679 vlan->accel_priv); in macvlan_stop()
680 vlan->accel_priv = NULL; in macvlan_stop()
686 if (macvlan_passthru(vlan->port)) { in macvlan_stop()
687 if (!(vlan->flags & MACVLAN_FLAG_NOPROMISC)) in macvlan_stop()
701 macvlan_hash_del(vlan, !dev->dismantle); in macvlan_stop()
708 struct macvlan_dev *vlan = netdev_priv(dev); in macvlan_sync_address() local
709 struct net_device *lowerdev = vlan->lowerdev; in macvlan_sync_address()
710 struct macvlan_port *port = vlan->port; in macvlan_sync_address()
718 if (macvlan_addr_busy(vlan->port, addr)) in macvlan_sync_address()
729 macvlan_hash_change_addr(vlan, addr); in macvlan_sync_address()
736 ether_addr_copy(vlan->port->perm_addr, in macvlan_sync_address()
745 struct macvlan_dev *vlan = netdev_priv(dev); in macvlan_set_mac_address() local
755 if (vlan->mode == MACVLAN_MODE_PASSTHRU) { in macvlan_set_mac_address()
756 macvlan_set_addr_change(vlan->port); in macvlan_set_mac_address()
757 return dev_set_mac_address(vlan->lowerdev, addr, NULL); in macvlan_set_mac_address()
760 if (macvlan_addr_busy(vlan->port, addr->sa_data)) in macvlan_set_mac_address()
768 struct macvlan_dev *vlan = netdev_priv(dev); in macvlan_change_rx_flags() local
769 struct net_device *lowerdev = vlan->lowerdev; in macvlan_change_rx_flags()
783 struct macvlan_dev *vlan) in macvlan_compute_filter() argument
793 __set_bit(mc_hash(vlan, ha->addr), filter); in macvlan_compute_filter()
796 __set_bit(mc_hash(vlan, dev->broadcast), filter); in macvlan_compute_filter()
804 struct macvlan_dev *vlan = netdev_priv(dev); in macvlan_set_mac_lists() local
806 macvlan_compute_filter(vlan->mc_filter, dev, vlan); in macvlan_set_mac_lists()
808 dev_uc_sync(vlan->lowerdev, dev); in macvlan_set_mac_lists()
809 dev_mc_sync(vlan->lowerdev, dev); in macvlan_set_mac_lists()
824 macvlan_compute_filter(vlan->port->mc_filter, vlan->lowerdev, NULL); in macvlan_set_mac_lists()
829 struct macvlan_dev *vlan = netdev_priv(dev); in macvlan_change_mtu() local
831 if (vlan->lowerdev->mtu < new_mtu) in macvlan_change_mtu()
895 struct macvlan_dev *vlan = netdev_priv(dev); in macvlan_init() local
896 struct net_device *lowerdev = vlan->lowerdev; in macvlan_init()
897 struct macvlan_port *port = vlan->port; in macvlan_init()
911 vlan->pcpu_stats = netdev_alloc_pcpu_stats(struct vlan_pcpu_stats); in macvlan_init()
912 if (!vlan->pcpu_stats) in macvlan_init()
918 netdev_hold(lowerdev, &vlan->dev_tracker, GFP_KERNEL); in macvlan_init()
925 struct macvlan_dev *vlan = netdev_priv(dev); in macvlan_uninit() local
926 struct macvlan_port *port = vlan->port; in macvlan_uninit()
928 free_percpu(vlan->pcpu_stats); in macvlan_uninit()
930 macvlan_flush_sources(port, vlan); in macvlan_uninit()
939 struct macvlan_dev *vlan = netdev_priv(dev); in macvlan_dev_get_stats64() local
941 if (vlan->pcpu_stats) { in macvlan_dev_get_stats64()
949 p = per_cpu_ptr(vlan->pcpu_stats, i); in macvlan_dev_get_stats64()
979 struct macvlan_dev *vlan = netdev_priv(dev); in macvlan_vlan_rx_add_vid() local
980 struct net_device *lowerdev = vlan->lowerdev; in macvlan_vlan_rx_add_vid()
988 struct macvlan_dev *vlan = netdev_priv(dev); in macvlan_vlan_rx_kill_vid() local
989 struct net_device *lowerdev = vlan->lowerdev; in macvlan_vlan_rx_kill_vid()
1001 struct macvlan_dev *vlan = netdev_priv(dev); in macvlan_fdb_add() local
1007 if (!macvlan_passthru(vlan->port) && is_unicast_ether_addr(addr)) in macvlan_fdb_add()
1026 struct macvlan_dev *vlan = netdev_priv(dev); in macvlan_fdb_del() local
1032 if (!macvlan_passthru(vlan->port) && is_unicast_ether_addr(addr)) in macvlan_fdb_del()
1053 const struct macvlan_dev *vlan = netdev_priv(dev); in macvlan_ethtool_get_link_ksettings() local
1055 return __ethtool_get_link_ksettings(vlan->lowerdev, cmd); in macvlan_ethtool_get_link_ksettings()
1081 struct macvlan_dev *vlan = netdev_priv(dev); in macvlan_fix_features() local
1082 netdev_features_t lowerdev_features = vlan->lowerdev->features; in macvlan_fix_features()
1086 features &= (vlan->set_features | ~MACVLAN_FEATURES); in macvlan_fix_features()
1105 struct macvlan_dev *vlan = netdev_priv(dev); in macvlan_dev_netpoll_setup() local
1106 struct net_device *real_dev = vlan->lowerdev; in macvlan_dev_netpoll_setup()
1121 vlan->netpoll = netpoll; in macvlan_dev_netpoll_setup()
1129 struct macvlan_dev *vlan = netdev_priv(dev); in macvlan_dev_netpoll_cleanup() local
1130 struct netpoll *netpoll = vlan->netpoll; in macvlan_dev_netpoll_cleanup()
1135 vlan->netpoll = NULL; in macvlan_dev_netpoll_cleanup()
1143 struct macvlan_dev *vlan = netdev_priv(dev); in macvlan_dev_get_iflink() local
1145 return vlan->lowerdev->ifindex; in macvlan_dev_get_iflink()
1185 struct macvlan_dev *vlan = netdev_priv(dev); in macvlan_dev_free() local
1188 netdev_put(vlan->lowerdev, &vlan->dev_tracker); in macvlan_dev_free()
1367 static int macvlan_changelink_sources(struct macvlan_dev *vlan, u32 mode, in macvlan_changelink_sources() argument
1382 return macvlan_hash_add_source(vlan, addr); in macvlan_changelink_sources()
1388 entry = macvlan_hash_lookup_source(vlan, addr); in macvlan_changelink_sources()
1391 vlan->macaddr_count--; in macvlan_changelink_sources()
1394 macvlan_flush_sources(vlan->port, vlan); in macvlan_changelink_sources()
1396 macvlan_flush_sources(vlan->port, vlan); in macvlan_changelink_sources()
1399 ret = macvlan_hash_add_source(vlan, addr); in macvlan_changelink_sources()
1412 ret = macvlan_hash_add_source(vlan, addr); in macvlan_changelink_sources()
1427 struct macvlan_dev *vlan = netdev_priv(dev); in macvlan_common_newlink() local
1476 vlan->lowerdev = lowerdev; in macvlan_common_newlink()
1477 vlan->dev = dev; in macvlan_common_newlink()
1478 vlan->port = port; in macvlan_common_newlink()
1479 vlan->set_features = MACVLAN_FEATURES; in macvlan_common_newlink()
1481 vlan->mode = MACVLAN_MODE_VEPA; in macvlan_common_newlink()
1483 vlan->mode = nla_get_u32(data[IFLA_MACVLAN_MODE]); in macvlan_common_newlink()
1486 vlan->flags = nla_get_u16(data[IFLA_MACVLAN_FLAGS]); in macvlan_common_newlink()
1488 if (vlan->mode == MACVLAN_MODE_PASSTHRU) { in macvlan_common_newlink()
1498 if (vlan->mode != MACVLAN_MODE_SOURCE) { in macvlan_common_newlink()
1503 err = macvlan_changelink_sources(vlan, macmode, data); in macvlan_common_newlink()
1508 vlan->bc_queue_len_req = MACVLAN_DEFAULT_BC_QUEUE_LEN; in macvlan_common_newlink()
1510 vlan->bc_queue_len_req = nla_get_u32(data[IFLA_MACVLAN_BC_QUEUE_LEN]); in macvlan_common_newlink()
1521 list_add_tail_rcu(&vlan->list, &port->vlans); in macvlan_common_newlink()
1522 update_port_bc_queue_len(vlan->port); in macvlan_common_newlink()
1537 macvlan_flush_sources(port, vlan); in macvlan_common_newlink()
1553 struct macvlan_dev *vlan = netdev_priv(dev); in macvlan_dellink() local
1555 if (vlan->mode == MACVLAN_MODE_SOURCE) in macvlan_dellink()
1556 macvlan_flush_sources(vlan->port, vlan); in macvlan_dellink()
1557 list_del_rcu(&vlan->list); in macvlan_dellink()
1558 update_port_bc_queue_len(vlan->port); in macvlan_dellink()
1560 netdev_upper_dev_unlink(vlan->lowerdev, dev); in macvlan_dellink()
1568 struct macvlan_dev *vlan = netdev_priv(dev); in macvlan_changelink() local
1580 (vlan->mode == MACVLAN_MODE_PASSTHRU)) in macvlan_changelink()
1582 if (vlan->mode == MACVLAN_MODE_SOURCE && in macvlan_changelink()
1583 vlan->mode != mode) in macvlan_changelink()
1584 macvlan_flush_sources(vlan->port, vlan); in macvlan_changelink()
1589 bool promisc = (flags ^ vlan->flags) & MACVLAN_FLAG_NOPROMISC; in macvlan_changelink()
1590 if (macvlan_passthru(vlan->port) && promisc) { in macvlan_changelink()
1594 err = dev_set_promiscuity(vlan->lowerdev, -1); in macvlan_changelink()
1596 err = dev_set_promiscuity(vlan->lowerdev, 1); in macvlan_changelink()
1600 vlan->flags = flags; in macvlan_changelink()
1604 vlan->bc_queue_len_req = nla_get_u32(data[IFLA_MACVLAN_BC_QUEUE_LEN]); in macvlan_changelink()
1605 update_port_bc_queue_len(vlan->port); in macvlan_changelink()
1609 vlan->mode = mode; in macvlan_changelink()
1611 if (vlan->mode != MACVLAN_MODE_SOURCE) in macvlan_changelink()
1614 ret = macvlan_changelink_sources(vlan, macmode, data); in macvlan_changelink()
1621 static size_t macvlan_get_size_mac(const struct macvlan_dev *vlan) in macvlan_get_size_mac() argument
1623 if (vlan->macaddr_count == 0) in macvlan_get_size_mac()
1626 + vlan->macaddr_count * nla_total_size(sizeof(u8) * ETH_ALEN); in macvlan_get_size_mac()
1631 struct macvlan_dev *vlan = netdev_priv(dev); in macvlan_get_size() local
1637 + macvlan_get_size_mac(vlan) /* IFLA_MACVLAN_MACADDR */ in macvlan_get_size()
1644 const struct macvlan_dev *vlan, in macvlan_fill_info_macaddr() argument
1647 struct hlist_head *h = &vlan->port->vlan_source_hash[i]; in macvlan_fill_info_macaddr()
1651 if (entry->vlan != vlan) in macvlan_fill_info_macaddr()
1662 struct macvlan_dev *vlan = netdev_priv(dev); in macvlan_fill_info() local
1663 struct macvlan_port *port = vlan->port; in macvlan_fill_info()
1667 if (nla_put_u32(skb, IFLA_MACVLAN_MODE, vlan->mode)) in macvlan_fill_info()
1669 if (nla_put_u16(skb, IFLA_MACVLAN_FLAGS, vlan->flags)) in macvlan_fill_info()
1671 if (nla_put_u32(skb, IFLA_MACVLAN_MACADDR_COUNT, vlan->macaddr_count)) in macvlan_fill_info()
1673 if (vlan->macaddr_count > 0) { in macvlan_fill_info()
1679 if (macvlan_fill_info_macaddr(skb, vlan, i)) in macvlan_fill_info()
1684 if (nla_put_u32(skb, IFLA_MACVLAN_BC_QUEUE_LEN, vlan->bc_queue_len_req)) in macvlan_fill_info()
1736 struct macvlan_dev *vlan; in update_port_bc_queue_len() local
1738 list_for_each_entry(vlan, &port->vlans, list) { in update_port_bc_queue_len()
1739 if (vlan->bc_queue_len_req > max_bc_queue_len_req) in update_port_bc_queue_len()
1740 max_bc_queue_len_req = vlan->bc_queue_len_req; in update_port_bc_queue_len()
1749 struct macvlan_dev *vlan, *next; in macvlan_device_event() local
1762 list_for_each_entry(vlan, &port->vlans, list) in macvlan_device_event()
1763 netif_stacked_transfer_operstate(vlan->lowerdev, in macvlan_device_event()
1764 vlan->dev); in macvlan_device_event()
1767 list_for_each_entry(vlan, &port->vlans, list) { in macvlan_device_event()
1768 netif_inherit_tso_max(vlan->dev, dev); in macvlan_device_event()
1769 netdev_update_features(vlan->dev); in macvlan_device_event()
1773 list_for_each_entry(vlan, &port->vlans, list) { in macvlan_device_event()
1774 if (vlan->dev->mtu <= dev->mtu) in macvlan_device_event()
1776 dev_set_mtu(vlan->dev, dev->mtu); in macvlan_device_event()
1783 vlan = list_first_entry_or_null(&port->vlans, in macvlan_device_event()
1787 if (vlan && macvlan_sync_address(vlan->dev, dev->dev_addr)) in macvlan_device_event()
1796 list_for_each_entry_safe(vlan, next, &port->vlans, list) in macvlan_device_event()
1797 vlan->dev->rtnl_link_ops->dellink(vlan->dev, &list_kill); in macvlan_device_event()
1808 list_for_each_entry(vlan, &port->vlans, list) in macvlan_device_event()
1809 call_netdevice_notifiers(event, vlan->dev); in macvlan_device_event()