Lines Matching refs:vlan
62 struct macvlan_dev __rcu *vlan; member
128 struct macvlan_dev *vlan; in macvlan_hash_lookup() local
131 hlist_for_each_entry_rcu(vlan, &port->vlan_hash[idx], hlist, in macvlan_hash_lookup()
133 if (ether_addr_equal_64bits(vlan->dev->dev_addr, addr)) in macvlan_hash_lookup()
134 return vlan; in macvlan_hash_lookup()
140 const struct macvlan_dev *vlan, in macvlan_hash_lookup_source() argument
145 struct hlist_head *h = &vlan->port->vlan_source_hash[idx]; in macvlan_hash_lookup_source()
149 rcu_access_pointer(entry->vlan) == vlan) in macvlan_hash_lookup_source()
155 static int macvlan_hash_add_source(struct macvlan_dev *vlan, in macvlan_hash_add_source() argument
158 struct macvlan_port *port = vlan->port; in macvlan_hash_add_source()
162 entry = macvlan_hash_lookup_source(vlan, addr); in macvlan_hash_add_source()
171 RCU_INIT_POINTER(entry->vlan, vlan); in macvlan_hash_add_source()
174 WRITE_ONCE(vlan->macaddr_count, vlan->macaddr_count + 1); in macvlan_hash_add_source()
179 static void macvlan_hash_add(struct macvlan_dev *vlan) in macvlan_hash_add() argument
181 struct macvlan_port *port = vlan->port; in macvlan_hash_add()
182 const unsigned char *addr = vlan->dev->dev_addr; in macvlan_hash_add()
185 hlist_add_head_rcu(&vlan->hlist, &port->vlan_hash[idx]); in macvlan_hash_add()
190 RCU_INIT_POINTER(entry->vlan, NULL); in macvlan_hash_del_source()
195 static void macvlan_hash_del(struct macvlan_dev *vlan, bool sync) in macvlan_hash_del() argument
197 hlist_del_rcu(&vlan->hlist); in macvlan_hash_del()
202 static void macvlan_hash_change_addr(struct macvlan_dev *vlan, in macvlan_hash_change_addr() argument
205 macvlan_hash_del(vlan, true); in macvlan_hash_change_addr()
209 eth_hw_addr_set(vlan->dev, addr); in macvlan_hash_change_addr()
210 macvlan_hash_add(vlan); in macvlan_hash_change_addr()
232 const struct macvlan_dev *vlan, in macvlan_broadcast_one() argument
235 struct net_device *dev = vlan->dev; in macvlan_broadcast_one()
249 static u32 macvlan_hash_mix(const struct macvlan_dev *vlan) in macvlan_hash_mix() argument
251 return (u32)(((unsigned long)vlan) >> L1_CACHE_SHIFT); in macvlan_hash_mix()
255 static unsigned int mc_hash(const struct macvlan_dev *vlan, in mc_hash() argument
260 val ^= macvlan_hash_mix(vlan); in mc_hash()
270 const struct macvlan_dev *vlan; in macvlan_broadcast() local
279 hash_for_each_rcu(port->vlan_hash, i, vlan, hlist) { in macvlan_broadcast()
280 if (vlan->dev == src || !(READ_ONCE(vlan->mode) & mode)) in macvlan_broadcast()
283 hash = mc_hash(vlan, eth->h_dest); in macvlan_broadcast()
284 if (!test_bit(hash, vlan->mc_filter)) in macvlan_broadcast()
290 err = macvlan_broadcast_one(nskb, vlan, eth, in macvlan_broadcast()
293 macvlan_count_rx(vlan, skb->len + ETH_HLEN, in macvlan_broadcast()
395 struct macvlan_dev *vlan) in macvlan_flush_sources() argument
402 if (rcu_access_pointer(entry->vlan) == vlan) in macvlan_flush_sources()
405 WRITE_ONCE(vlan->macaddr_count, 0); in macvlan_flush_sources()
409 struct macvlan_dev *vlan) in macvlan_forward_source_one() argument
416 dev = vlan->dev; in macvlan_forward_source_one()
431 macvlan_count_rx(vlan, len, ret == NET_RX_SUCCESS, false); in macvlan_forward_source_one()
445 struct macvlan_dev *vlan = rcu_dereference(entry->vlan); in macvlan_forward_source() local
447 if (!vlan) in macvlan_forward_source()
450 if (READ_ONCE(vlan->flags) & MACVLAN_FLAG_NODST) in macvlan_forward_source()
452 macvlan_forward_source_one(skb, vlan); in macvlan_forward_source()
465 const struct macvlan_dev *vlan; in macvlan_handle_frame() local
496 vlan = src; in macvlan_handle_frame()
497 ret = macvlan_broadcast_one(skb, vlan, eth, 0) ?: in macvlan_handle_frame()
518 vlan = list_first_or_null_rcu(&port->vlans, in macvlan_handle_frame()
521 vlan = macvlan_hash_lookup(port, eth->h_dest); in macvlan_handle_frame()
522 if (!vlan || READ_ONCE(vlan->mode) == MACVLAN_MODE_SOURCE) in macvlan_handle_frame()
525 dev = vlan->dev; in macvlan_handle_frame()
545 macvlan_count_rx(vlan, len, ret == NET_RX_SUCCESS, false); in macvlan_handle_frame()
551 const struct macvlan_dev *vlan = netdev_priv(dev); in macvlan_queue_xmit() local
552 const struct macvlan_port *port = vlan->port; in macvlan_queue_xmit()
555 if (READ_ONCE(vlan->mode) == MACVLAN_MODE_BRIDGE) { in macvlan_queue_xmit()
568 dev_forward_skb(vlan->lowerdev, skb); in macvlan_queue_xmit()
574 skb->dev = vlan->lowerdev; in macvlan_queue_xmit()
579 static inline netdev_tx_t macvlan_netpoll_send_skb(struct macvlan_dev *vlan, struct sk_buff *skb) in macvlan_netpoll_send_skb() argument
582 return netpoll_send_skb(vlan->netpoll, skb); in macvlan_netpoll_send_skb()
592 struct macvlan_dev *vlan = netdev_priv(dev); in macvlan_start_xmit() local
597 return macvlan_netpoll_send_skb(vlan, skb); in macvlan_start_xmit()
604 pcpu_stats = this_cpu_ptr(vlan->pcpu_stats); in macvlan_start_xmit()
610 this_cpu_inc(vlan->pcpu_stats->tx_dropped); in macvlan_start_xmit()
619 const struct macvlan_dev *vlan = netdev_priv(dev); in macvlan_hard_header() local
620 struct net_device *lowerdev = vlan->lowerdev; in macvlan_hard_header()
636 struct macvlan_dev *vlan = netdev_priv(dev); in macvlan_open() local
637 struct net_device *lowerdev = vlan->lowerdev; in macvlan_open()
640 if (macvlan_passthru(vlan->port)) { in macvlan_open()
641 if (!(vlan->flags & MACVLAN_FLAG_NOPROMISC)) { in macvlan_open()
650 if (macvlan_addr_busy(vlan->port, dev->dev_addr)) in macvlan_open()
657 vlan->accel_priv = in macvlan_open()
663 if (IS_ERR_OR_NULL(vlan->accel_priv)) { in macvlan_open()
664 vlan->accel_priv = NULL; in macvlan_open()
683 macvlan_hash_add(vlan); in macvlan_open()
690 if (vlan->accel_priv) { in macvlan_open()
692 vlan->accel_priv); in macvlan_open()
693 vlan->accel_priv = NULL; in macvlan_open()
703 struct macvlan_dev *vlan = netdev_priv(dev); in macvlan_stop() local
704 struct net_device *lowerdev = vlan->lowerdev; in macvlan_stop()
706 if (vlan->accel_priv) { in macvlan_stop()
708 vlan->accel_priv); in macvlan_stop()
709 vlan->accel_priv = NULL; in macvlan_stop()
715 if (macvlan_passthru(vlan->port)) { in macvlan_stop()
716 if (!(vlan->flags & MACVLAN_FLAG_NOPROMISC)) in macvlan_stop()
730 macvlan_hash_del(vlan, !dev->dismantle); in macvlan_stop()
737 struct macvlan_dev *vlan = netdev_priv(dev); in macvlan_sync_address() local
738 struct net_device *lowerdev = vlan->lowerdev; in macvlan_sync_address()
739 struct macvlan_port *port = vlan->port; in macvlan_sync_address()
747 if (macvlan_addr_busy(vlan->port, addr)) in macvlan_sync_address()
758 macvlan_hash_change_addr(vlan, addr); in macvlan_sync_address()
765 ether_addr_copy(vlan->port->perm_addr, in macvlan_sync_address()
774 struct macvlan_dev *vlan = netdev_priv(dev); in macvlan_set_mac_address() local
784 if (READ_ONCE(vlan->mode) == MACVLAN_MODE_PASSTHRU) { in macvlan_set_mac_address()
785 macvlan_set_addr_change(vlan->port); in macvlan_set_mac_address()
786 return dev_set_mac_address(vlan->lowerdev, addr, NULL); in macvlan_set_mac_address()
789 if (macvlan_addr_busy(vlan->port, addr->__data)) in macvlan_set_mac_address()
797 struct macvlan_dev *vlan = netdev_priv(dev); in macvlan_change_rx_flags() local
798 struct net_device *lowerdev = vlan->lowerdev; in macvlan_change_rx_flags()
803 if (!macvlan_passthru(vlan->port) && change & IFF_PROMISC) in macvlan_change_rx_flags()
812 struct macvlan_dev *vlan, int cutoff) in macvlan_compute_filter() argument
822 if (!vlan && ha->synced <= cutoff) in macvlan_compute_filter()
825 __set_bit(mc_hash(vlan, ha->addr), filter); in macvlan_compute_filter()
828 __set_bit(mc_hash(vlan, dev->broadcast), filter); in macvlan_compute_filter()
834 static void macvlan_recompute_bc_filter(struct macvlan_dev *vlan) in macvlan_recompute_bc_filter() argument
836 if (vlan->port->bc_cutoff < 0) { in macvlan_recompute_bc_filter()
837 bitmap_zero(vlan->port->bc_filter, MACVLAN_MC_FILTER_SZ); in macvlan_recompute_bc_filter()
841 macvlan_compute_filter(vlan->port->bc_filter, vlan->lowerdev, NULL, in macvlan_recompute_bc_filter()
842 vlan->port->bc_cutoff); in macvlan_recompute_bc_filter()
847 struct macvlan_dev *vlan = netdev_priv(dev); in macvlan_set_mac_lists() local
849 macvlan_compute_filter(vlan->mc_filter, dev, vlan, 0); in macvlan_set_mac_lists()
851 dev_uc_sync(vlan->lowerdev, dev); in macvlan_set_mac_lists()
852 dev_mc_sync(vlan->lowerdev, dev); in macvlan_set_mac_lists()
867 macvlan_compute_filter(vlan->port->mc_filter, vlan->lowerdev, NULL, in macvlan_set_mac_lists()
869 macvlan_recompute_bc_filter(vlan); in macvlan_set_mac_lists()
872 static void update_port_bc_cutoff(struct macvlan_dev *vlan, int cutoff) in update_port_bc_cutoff() argument
874 if (vlan->port->bc_cutoff == cutoff) in update_port_bc_cutoff()
877 WRITE_ONCE(vlan->port->bc_cutoff, cutoff); in update_port_bc_cutoff()
878 macvlan_recompute_bc_filter(vlan); in update_port_bc_cutoff()
883 struct macvlan_dev *vlan = netdev_priv(dev); in macvlan_change_mtu() local
885 if (vlan->lowerdev->mtu < new_mtu) in macvlan_change_mtu()
942 struct macvlan_dev *vlan = netdev_priv(dev); in macvlan_init() local
943 struct net_device *lowerdev = vlan->lowerdev; in macvlan_init()
944 struct macvlan_port *port = vlan->port; in macvlan_init()
961 vlan->pcpu_stats = netdev_alloc_pcpu_stats(struct vlan_pcpu_stats); in macvlan_init()
962 if (!vlan->pcpu_stats) in macvlan_init()
968 netdev_hold(lowerdev, &vlan->dev_tracker, GFP_KERNEL); in macvlan_init()
975 struct macvlan_dev *vlan = netdev_priv(dev); in macvlan_uninit() local
976 struct macvlan_port *port = vlan->port; in macvlan_uninit()
978 free_percpu(vlan->pcpu_stats); in macvlan_uninit()
980 macvlan_flush_sources(port, vlan); in macvlan_uninit()
989 struct macvlan_dev *vlan = netdev_priv(dev); in macvlan_dev_get_stats64() local
991 if (vlan->pcpu_stats) { in macvlan_dev_get_stats64()
999 p = per_cpu_ptr(vlan->pcpu_stats, i); in macvlan_dev_get_stats64()
1029 struct macvlan_dev *vlan = netdev_priv(dev); in macvlan_vlan_rx_add_vid() local
1030 struct net_device *lowerdev = vlan->lowerdev; in macvlan_vlan_rx_add_vid()
1038 struct macvlan_dev *vlan = netdev_priv(dev); in macvlan_vlan_rx_kill_vid() local
1039 struct net_device *lowerdev = vlan->lowerdev; in macvlan_vlan_rx_kill_vid()
1051 struct macvlan_dev *vlan = netdev_priv(dev); in macvlan_fdb_add() local
1057 if (!macvlan_passthru(vlan->port) && is_unicast_ether_addr(addr)) in macvlan_fdb_add()
1076 struct macvlan_dev *vlan = netdev_priv(dev); in macvlan_fdb_del() local
1082 if (!macvlan_passthru(vlan->port) && is_unicast_ether_addr(addr)) in macvlan_fdb_del()
1103 const struct macvlan_dev *vlan = netdev_priv(dev); in macvlan_ethtool_get_link_ksettings() local
1105 return __ethtool_get_link_ksettings(vlan->lowerdev, cmd); in macvlan_ethtool_get_link_ksettings()
1119 struct macvlan_dev *vlan = netdev_priv(dev); in macvlan_fix_features() local
1120 netdev_features_t lowerdev_features = vlan->lowerdev->features; in macvlan_fix_features()
1124 features &= (vlan->set_features | ~MACVLAN_FEATURES); in macvlan_fix_features()
1143 struct macvlan_dev *vlan = netdev_priv(dev); in macvlan_dev_netpoll_setup() local
1144 struct net_device *real_dev = vlan->lowerdev; in macvlan_dev_netpoll_setup()
1159 vlan->netpoll = netpoll; in macvlan_dev_netpoll_setup()
1167 struct macvlan_dev *vlan = netdev_priv(dev); in macvlan_dev_netpoll_cleanup() local
1168 struct netpoll *netpoll = vlan->netpoll; in macvlan_dev_netpoll_cleanup()
1173 vlan->netpoll = NULL; in macvlan_dev_netpoll_cleanup()
1181 struct macvlan_dev *vlan = netdev_priv(dev); in macvlan_dev_get_iflink() local
1183 return READ_ONCE(vlan->lowerdev->ifindex); in macvlan_dev_get_iflink()
1224 struct macvlan_dev *vlan = netdev_priv(dev); in macvlan_dev_free() local
1227 netdev_put(vlan->lowerdev, &vlan->dev_tracker); in macvlan_dev_free()
1417 static int macvlan_changelink_sources(struct macvlan_dev *vlan, u32 mode, in macvlan_changelink_sources() argument
1432 return macvlan_hash_add_source(vlan, addr); in macvlan_changelink_sources()
1438 entry = macvlan_hash_lookup_source(vlan, addr); in macvlan_changelink_sources()
1441 WRITE_ONCE(vlan->macaddr_count, vlan->macaddr_count - 1); in macvlan_changelink_sources()
1444 macvlan_flush_sources(vlan->port, vlan); in macvlan_changelink_sources()
1446 macvlan_flush_sources(vlan->port, vlan); in macvlan_changelink_sources()
1449 ret = macvlan_hash_add_source(vlan, addr); in macvlan_changelink_sources()
1462 ret = macvlan_hash_add_source(vlan, addr); in macvlan_changelink_sources()
1478 struct macvlan_dev *vlan = netdev_priv(dev); in macvlan_common_newlink() local
1535 vlan->lowerdev = lowerdev; in macvlan_common_newlink()
1536 vlan->dev = dev; in macvlan_common_newlink()
1537 vlan->port = port; in macvlan_common_newlink()
1538 vlan->set_features = MACVLAN_FEATURES; in macvlan_common_newlink()
1540 vlan->mode = MACVLAN_MODE_VEPA; in macvlan_common_newlink()
1542 vlan->mode = nla_get_u32(data[IFLA_MACVLAN_MODE]); in macvlan_common_newlink()
1545 vlan->flags = nla_get_u16(data[IFLA_MACVLAN_FLAGS]); in macvlan_common_newlink()
1547 if (vlan->mode == MACVLAN_MODE_PASSTHRU) { in macvlan_common_newlink()
1557 if (vlan->mode != MACVLAN_MODE_SOURCE) { in macvlan_common_newlink()
1562 err = macvlan_changelink_sources(vlan, macmode, data); in macvlan_common_newlink()
1567 vlan->bc_queue_len_req = MACVLAN_DEFAULT_BC_QUEUE_LEN; in macvlan_common_newlink()
1569 vlan->bc_queue_len_req = nla_get_u32(data[IFLA_MACVLAN_BC_QUEUE_LEN]); in macvlan_common_newlink()
1573 vlan, nla_get_s32(data[IFLA_MACVLAN_BC_CUTOFF])); in macvlan_common_newlink()
1584 list_add_tail_rcu(&vlan->list, &port->vlans); in macvlan_common_newlink()
1585 update_port_bc_queue_len(vlan->port); in macvlan_common_newlink()
1600 macvlan_flush_sources(port, vlan); in macvlan_common_newlink()
1622 struct macvlan_dev *vlan = netdev_priv(dev); in macvlan_dellink() local
1624 if (vlan->mode == MACVLAN_MODE_SOURCE) in macvlan_dellink()
1625 macvlan_flush_sources(vlan->port, vlan); in macvlan_dellink()
1626 list_del_rcu(&vlan->list); in macvlan_dellink()
1627 update_port_bc_queue_len(vlan->port); in macvlan_dellink()
1629 netdev_upper_dev_unlink(vlan->lowerdev, dev); in macvlan_dellink()
1637 struct macvlan_dev *vlan = netdev_priv(dev); in macvlan_changelink() local
1645 !rtnl_dev_link_net_capable(dev, dev_net(vlan->lowerdev))) { in macvlan_changelink()
1657 (vlan->mode == MACVLAN_MODE_PASSTHRU)) in macvlan_changelink()
1659 if (vlan->mode == MACVLAN_MODE_SOURCE && in macvlan_changelink()
1660 vlan->mode != mode) in macvlan_changelink()
1661 macvlan_flush_sources(vlan->port, vlan); in macvlan_changelink()
1666 bool promisc = (flags ^ vlan->flags) & MACVLAN_FLAG_NOPROMISC; in macvlan_changelink()
1667 if (macvlan_passthru(vlan->port) && promisc) { in macvlan_changelink()
1671 err = dev_set_promiscuity(vlan->lowerdev, -1); in macvlan_changelink()
1673 err = dev_set_promiscuity(vlan->lowerdev, 1); in macvlan_changelink()
1677 WRITE_ONCE(vlan->flags, flags); in macvlan_changelink()
1681 WRITE_ONCE(vlan->bc_queue_len_req, in macvlan_changelink()
1683 update_port_bc_queue_len(vlan->port); in macvlan_changelink()
1688 vlan, nla_get_s32(data[IFLA_MACVLAN_BC_CUTOFF])); in macvlan_changelink()
1691 WRITE_ONCE(vlan->mode, mode); in macvlan_changelink()
1693 if (vlan->mode != MACVLAN_MODE_SOURCE) in macvlan_changelink()
1696 ret = macvlan_changelink_sources(vlan, macmode, data); in macvlan_changelink()
1703 static size_t macvlan_get_size_mac(const struct macvlan_dev *vlan) in macvlan_get_size_mac() argument
1705 unsigned int macaddr_count = READ_ONCE(vlan->macaddr_count); in macvlan_get_size_mac()
1715 struct macvlan_dev *vlan = netdev_priv(dev); in macvlan_get_size() local
1721 + macvlan_get_size_mac(vlan) /* IFLA_MACVLAN_MACADDR */ in macvlan_get_size()
1729 const struct macvlan_dev *vlan, in macvlan_fill_info_macaddr() argument
1732 struct hlist_head *h = &vlan->port->vlan_source_hash[i]; in macvlan_fill_info_macaddr()
1737 if (rcu_access_pointer(entry->vlan) != vlan) in macvlan_fill_info_macaddr()
1749 const struct macvlan_dev *vlan = netdev_priv(dev); in macvlan_fill_info() local
1750 struct macvlan_port *port = vlan->port; in macvlan_fill_info()
1756 if (nla_put_u32(skb, IFLA_MACVLAN_MODE, READ_ONCE(vlan->mode))) in macvlan_fill_info()
1759 if (nla_put_u16(skb, IFLA_MACVLAN_FLAGS, READ_ONCE(vlan->flags))) in macvlan_fill_info()
1766 if (READ_ONCE(vlan->macaddr_count) > 0) { in macvlan_fill_info()
1772 cnt = macvlan_fill_info_macaddr(skb, vlan, i); in macvlan_fill_info()
1785 READ_ONCE(vlan->bc_queue_len_req))) in macvlan_fill_info()
1848 struct macvlan_dev *vlan; in update_port_bc_queue_len() local
1850 list_for_each_entry(vlan, &port->vlans, list) { in update_port_bc_queue_len()
1851 if (vlan->bc_queue_len_req > max_bc_queue_len_req) in update_port_bc_queue_len()
1852 max_bc_queue_len_req = vlan->bc_queue_len_req; in update_port_bc_queue_len()
1861 struct macvlan_dev *vlan, *next; in macvlan_device_event() local
1874 list_for_each_entry(vlan, &port->vlans, list) in macvlan_device_event()
1875 netif_stacked_transfer_operstate(vlan->lowerdev, in macvlan_device_event()
1876 vlan->dev); in macvlan_device_event()
1879 list_for_each_entry(vlan, &port->vlans, list) { in macvlan_device_event()
1880 netif_inherit_tso_max(vlan->dev, dev); in macvlan_device_event()
1881 vlan->dev->needed_headroom = dev->needed_headroom; in macvlan_device_event()
1882 vlan->dev->needed_tailroom = dev->needed_tailroom; in macvlan_device_event()
1883 netdev_update_features(vlan->dev); in macvlan_device_event()
1887 list_for_each_entry(vlan, &port->vlans, list) { in macvlan_device_event()
1888 if (vlan->dev->mtu <= dev->mtu) in macvlan_device_event()
1890 dev_set_mtu(vlan->dev, dev->mtu); in macvlan_device_event()
1897 vlan = list_first_entry_or_null(&port->vlans, in macvlan_device_event()
1901 if (vlan && macvlan_sync_address(vlan->dev, dev->dev_addr)) in macvlan_device_event()
1910 list_for_each_entry_safe(vlan, next, &port->vlans, list) in macvlan_device_event()
1911 vlan->dev->rtnl_link_ops->dellink(vlan->dev, &list_kill); in macvlan_device_event()
1922 list_for_each_entry(vlan, &port->vlans, list) in macvlan_device_event()
1923 call_netdevice_notifiers(event, vlan->dev); in macvlan_device_event()