Lines Matching refs:vlan
56 struct macvlan_dev *vlan; member
98 struct macvlan_dev *vlan; in macvlan_hash_lookup() local
101 hlist_for_each_entry_rcu(vlan, &port->vlan_hash[idx], hlist) { in macvlan_hash_lookup()
102 if (ether_addr_equal_64bits(vlan->dev->dev_addr, addr)) in macvlan_hash_lookup()
103 return vlan; in macvlan_hash_lookup()
109 const struct macvlan_dev *vlan, in macvlan_hash_lookup_source() argument
114 struct hlist_head *h = &vlan->port->vlan_source_hash[idx]; in macvlan_hash_lookup_source()
118 entry->vlan == vlan) in macvlan_hash_lookup_source()
124 static int macvlan_hash_add_source(struct macvlan_dev *vlan, in macvlan_hash_add_source() argument
127 struct macvlan_port *port = vlan->port; in macvlan_hash_add_source()
131 entry = macvlan_hash_lookup_source(vlan, addr); in macvlan_hash_add_source()
140 entry->vlan = vlan; in macvlan_hash_add_source()
143 vlan->macaddr_count++; in macvlan_hash_add_source()
148 static void macvlan_hash_add(struct macvlan_dev *vlan) in macvlan_hash_add() argument
150 struct macvlan_port *port = vlan->port; in macvlan_hash_add()
151 const unsigned char *addr = vlan->dev->dev_addr; in macvlan_hash_add()
154 hlist_add_head_rcu(&vlan->hlist, &port->vlan_hash[idx]); in macvlan_hash_add()
163 static void macvlan_hash_del(struct macvlan_dev *vlan, bool sync) in macvlan_hash_del() argument
165 hlist_del_rcu(&vlan->hlist); in macvlan_hash_del()
170 static void macvlan_hash_change_addr(struct macvlan_dev *vlan, in macvlan_hash_change_addr() argument
173 macvlan_hash_del(vlan, true); in macvlan_hash_change_addr()
177 memcpy(vlan->dev->dev_addr, addr, ETH_ALEN); in macvlan_hash_change_addr()
178 macvlan_hash_add(vlan); in macvlan_hash_change_addr()
199 const struct macvlan_dev *vlan, in macvlan_broadcast_one() argument
202 struct net_device *dev = vlan->dev; in macvlan_broadcast_one()
216 static u32 macvlan_hash_mix(const struct macvlan_dev *vlan) in macvlan_hash_mix() argument
218 return (u32)(((unsigned long)vlan) >> L1_CACHE_SHIFT); in macvlan_hash_mix()
222 static unsigned int mc_hash(const struct macvlan_dev *vlan, in mc_hash() argument
227 val ^= macvlan_hash_mix(vlan); in mc_hash()
237 const struct macvlan_dev *vlan; in macvlan_broadcast() local
247 hlist_for_each_entry_rcu(vlan, &port->vlan_hash[i], hlist) { in macvlan_broadcast()
248 if (vlan->dev == src || !(vlan->mode & mode)) in macvlan_broadcast()
251 hash = mc_hash(vlan, eth->h_dest); in macvlan_broadcast()
252 if (!test_bit(hash, vlan->mc_filter)) in macvlan_broadcast()
259 nskb, vlan, eth, in macvlan_broadcast()
262 macvlan_count_rx(vlan, skb->len + ETH_HLEN, in macvlan_broadcast()
342 struct macvlan_dev *vlan) in macvlan_flush_sources() argument
354 if (entry->vlan == vlan) in macvlan_flush_sources()
358 vlan->macaddr_count = 0; in macvlan_flush_sources()
362 struct macvlan_dev *vlan) in macvlan_forward_source_one() argument
369 dev = vlan->dev; in macvlan_forward_source_one()
382 macvlan_count_rx(vlan, len, ret == NET_RX_SUCCESS, false); in macvlan_forward_source_one()
395 if (entry->vlan->dev->flags & IFF_UP) in macvlan_forward_source()
396 macvlan_forward_source_one(skb, entry->vlan); in macvlan_forward_source()
406 const struct macvlan_dev *vlan; in macvlan_handle_frame() local
424 vlan = src; in macvlan_handle_frame()
425 ret = macvlan_broadcast_one(skb, vlan, eth, 0) ?: in macvlan_handle_frame()
439 vlan = list_first_or_null_rcu(&port->vlans, in macvlan_handle_frame()
442 vlan = macvlan_hash_lookup(port, eth->h_dest); in macvlan_handle_frame()
443 if (vlan == NULL) in macvlan_handle_frame()
446 dev = vlan->dev; in macvlan_handle_frame()
465 macvlan_count_rx(vlan, len, ret == NET_RX_SUCCESS, false); in macvlan_handle_frame()
471 const struct macvlan_dev *vlan = netdev_priv(dev); in macvlan_queue_xmit() local
472 const struct macvlan_port *port = vlan->port; in macvlan_queue_xmit()
475 if (vlan->mode == MACVLAN_MODE_BRIDGE) { in macvlan_queue_xmit()
487 dev_forward_skb(vlan->lowerdev, skb); in macvlan_queue_xmit()
494 skb->dev = vlan->lowerdev; in macvlan_queue_xmit()
498 static inline netdev_tx_t macvlan_netpoll_send_skb(struct macvlan_dev *vlan, struct sk_buff *skb) in macvlan_netpoll_send_skb() argument
501 if (vlan->netpoll) in macvlan_netpoll_send_skb()
502 netpoll_send_skb(vlan->netpoll, skb); in macvlan_netpoll_send_skb()
514 struct macvlan_dev *vlan = netdev_priv(dev); in macvlan_start_xmit() local
517 return macvlan_netpoll_send_skb(vlan, skb); in macvlan_start_xmit()
519 if (vlan->fwd_priv) { in macvlan_start_xmit()
520 skb->dev = vlan->lowerdev; in macvlan_start_xmit()
521 ret = dev_queue_xmit_accel(skb, vlan->fwd_priv); in macvlan_start_xmit()
529 pcpu_stats = this_cpu_ptr(vlan->pcpu_stats); in macvlan_start_xmit()
535 this_cpu_inc(vlan->pcpu_stats->tx_dropped); in macvlan_start_xmit()
544 const struct macvlan_dev *vlan = netdev_priv(dev); in macvlan_hard_header() local
545 struct net_device *lowerdev = vlan->lowerdev; in macvlan_hard_header()
562 struct macvlan_dev *vlan = netdev_priv(dev); in macvlan_open() local
563 struct net_device *lowerdev = vlan->lowerdev; in macvlan_open()
566 if (vlan->port->passthru) { in macvlan_open()
567 if (!(vlan->flags & MACVLAN_FLAG_NOPROMISC)) { in macvlan_open()
577 vlan->fwd_priv = in macvlan_open()
583 if (IS_ERR_OR_NULL(vlan->fwd_priv)) { in macvlan_open()
584 vlan->fwd_priv = NULL; in macvlan_open()
590 if (macvlan_addr_busy(vlan->port, dev->dev_addr)) in macvlan_open()
609 macvlan_hash_add(vlan); in macvlan_open()
617 if (vlan->fwd_priv) { in macvlan_open()
619 vlan->fwd_priv); in macvlan_open()
620 vlan->fwd_priv = NULL; in macvlan_open()
627 struct macvlan_dev *vlan = netdev_priv(dev); in macvlan_stop() local
628 struct net_device *lowerdev = vlan->lowerdev; in macvlan_stop()
630 if (vlan->fwd_priv) { in macvlan_stop()
632 vlan->fwd_priv); in macvlan_stop()
633 vlan->fwd_priv = NULL; in macvlan_stop()
640 if (vlan->port->passthru) { in macvlan_stop()
641 if (!(vlan->flags & MACVLAN_FLAG_NOPROMISC)) in macvlan_stop()
655 macvlan_hash_del(vlan, !dev->dismantle); in macvlan_stop()
661 struct macvlan_dev *vlan = netdev_priv(dev); in macvlan_sync_address() local
662 struct net_device *lowerdev = vlan->lowerdev; in macvlan_sync_address()
670 if (macvlan_addr_busy(vlan->port, addr)) in macvlan_sync_address()
673 if (!vlan->port->passthru) { in macvlan_sync_address()
681 macvlan_hash_change_addr(vlan, addr); in macvlan_sync_address()
688 struct macvlan_dev *vlan = netdev_priv(dev); in macvlan_set_mac_address() local
694 if (vlan->mode == MACVLAN_MODE_PASSTHRU) { in macvlan_set_mac_address()
695 dev_set_mac_address(vlan->lowerdev, addr); in macvlan_set_mac_address()
704 struct macvlan_dev *vlan = netdev_priv(dev); in macvlan_change_rx_flags() local
705 struct net_device *lowerdev = vlan->lowerdev; in macvlan_change_rx_flags()
719 struct macvlan_dev *vlan = netdev_priv(dev); in macvlan_set_mac_lists() local
722 bitmap_fill(vlan->mc_filter, MACVLAN_MC_FILTER_SZ); in macvlan_set_mac_lists()
729 __set_bit(mc_hash(vlan, ha->addr), filter); in macvlan_set_mac_lists()
732 __set_bit(mc_hash(vlan, dev->broadcast), filter); in macvlan_set_mac_lists()
734 bitmap_copy(vlan->mc_filter, filter, MACVLAN_MC_FILTER_SZ); in macvlan_set_mac_lists()
736 dev_uc_sync(vlan->lowerdev, dev); in macvlan_set_mac_lists()
737 dev_mc_sync(vlan->lowerdev, dev); in macvlan_set_mac_lists()
742 struct macvlan_dev *vlan = netdev_priv(dev); in macvlan_change_mtu() local
744 if (new_mtu < 68 || vlan->lowerdev->mtu < new_mtu) in macvlan_change_mtu()
794 struct macvlan_dev *vlan = netdev_priv(dev); in macvlan_init() local
795 const struct net_device *lowerdev = vlan->lowerdev; in macvlan_init()
808 vlan->pcpu_stats = netdev_alloc_pcpu_stats(struct vlan_pcpu_stats); in macvlan_init()
809 if (!vlan->pcpu_stats) in macvlan_init()
817 struct macvlan_dev *vlan = netdev_priv(dev); in macvlan_uninit() local
818 struct macvlan_port *port = vlan->port; in macvlan_uninit()
820 free_percpu(vlan->pcpu_stats); in macvlan_uninit()
822 macvlan_flush_sources(port, vlan); in macvlan_uninit()
831 struct macvlan_dev *vlan = netdev_priv(dev); in macvlan_dev_get_stats64() local
833 if (vlan->pcpu_stats) { in macvlan_dev_get_stats64()
841 p = per_cpu_ptr(vlan->pcpu_stats, i); in macvlan_dev_get_stats64()
872 struct macvlan_dev *vlan = netdev_priv(dev); in macvlan_vlan_rx_add_vid() local
873 struct net_device *lowerdev = vlan->lowerdev; in macvlan_vlan_rx_add_vid()
881 struct macvlan_dev *vlan = netdev_priv(dev); in macvlan_vlan_rx_kill_vid() local
882 struct net_device *lowerdev = vlan->lowerdev; in macvlan_vlan_rx_kill_vid()
893 struct macvlan_dev *vlan = netdev_priv(dev); in macvlan_fdb_add() local
899 if (!vlan->port->passthru && is_unicast_ether_addr(addr)) in macvlan_fdb_add()
917 struct macvlan_dev *vlan = netdev_priv(dev); in macvlan_fdb_del() local
923 if (!vlan->port->passthru && is_unicast_ether_addr(addr)) in macvlan_fdb_del()
944 const struct macvlan_dev *vlan = netdev_priv(dev); in macvlan_ethtool_get_settings() local
946 return __ethtool_get_settings(vlan->lowerdev, cmd); in macvlan_ethtool_get_settings()
952 struct macvlan_dev *vlan = netdev_priv(dev); in macvlan_fix_features() local
953 netdev_features_t lowerdev_features = vlan->lowerdev->features; in macvlan_fix_features()
957 features &= (vlan->set_features | ~MACVLAN_FEATURES); in macvlan_fix_features()
976 struct macvlan_dev *vlan = netdev_priv(dev); in macvlan_dev_netpoll_setup() local
977 struct net_device *real_dev = vlan->lowerdev; in macvlan_dev_netpoll_setup()
992 vlan->netpoll = netpoll; in macvlan_dev_netpoll_setup()
1000 struct macvlan_dev *vlan = netdev_priv(dev); in macvlan_dev_netpoll_cleanup() local
1001 struct netpoll *netpoll = vlan->netpoll; in macvlan_dev_netpoll_cleanup()
1006 vlan->netpoll = NULL; in macvlan_dev_netpoll_cleanup()
1014 struct macvlan_dev *vlan = netdev_priv(dev); in macvlan_dev_get_iflink() local
1016 return vlan->lowerdev->ifindex; in macvlan_dev_get_iflink()
1181 static int macvlan_changelink_sources(struct macvlan_dev *vlan, u32 mode, in macvlan_changelink_sources() argument
1196 return macvlan_hash_add_source(vlan, addr); in macvlan_changelink_sources()
1202 entry = macvlan_hash_lookup_source(vlan, addr); in macvlan_changelink_sources()
1205 vlan->macaddr_count--; in macvlan_changelink_sources()
1208 macvlan_flush_sources(vlan->port, vlan); in macvlan_changelink_sources()
1210 macvlan_flush_sources(vlan->port, vlan); in macvlan_changelink_sources()
1213 ret = macvlan_hash_add_source(vlan, addr); in macvlan_changelink_sources()
1230 ret = macvlan_hash_add_source(vlan, addr); in macvlan_changelink_sources()
1244 struct macvlan_dev *vlan = netdev_priv(dev); in macvlan_common_newlink() local
1282 vlan->lowerdev = lowerdev; in macvlan_common_newlink()
1283 vlan->dev = dev; in macvlan_common_newlink()
1284 vlan->port = port; in macvlan_common_newlink()
1285 vlan->set_features = MACVLAN_FEATURES; in macvlan_common_newlink()
1286 vlan->nest_level = dev_get_nest_level(lowerdev, netif_is_macvlan) + 1; in macvlan_common_newlink()
1288 vlan->mode = MACVLAN_MODE_VEPA; in macvlan_common_newlink()
1290 vlan->mode = nla_get_u32(data[IFLA_MACVLAN_MODE]); in macvlan_common_newlink()
1293 vlan->flags = nla_get_u16(data[IFLA_MACVLAN_FLAGS]); in macvlan_common_newlink()
1295 if (vlan->mode == MACVLAN_MODE_PASSTHRU) { in macvlan_common_newlink()
1303 if (vlan->mode != MACVLAN_MODE_SOURCE) in macvlan_common_newlink()
1306 err = macvlan_changelink_sources(vlan, macmode, data); in macvlan_common_newlink()
1321 list_add_tail_rcu(&vlan->list, &port->vlans); in macvlan_common_newlink()
1345 struct macvlan_dev *vlan = netdev_priv(dev); in macvlan_dellink() local
1347 if (vlan->mode == MACVLAN_MODE_SOURCE) in macvlan_dellink()
1348 macvlan_flush_sources(vlan->port, vlan); in macvlan_dellink()
1349 list_del_rcu(&vlan->list); in macvlan_dellink()
1351 netdev_upper_dev_unlink(vlan->lowerdev, dev); in macvlan_dellink()
1358 struct macvlan_dev *vlan = netdev_priv(dev); in macvlan_changelink() local
1370 (vlan->mode == MACVLAN_MODE_PASSTHRU)) in macvlan_changelink()
1372 if (vlan->mode == MACVLAN_MODE_SOURCE && in macvlan_changelink()
1373 vlan->mode != mode) in macvlan_changelink()
1374 macvlan_flush_sources(vlan->port, vlan); in macvlan_changelink()
1379 bool promisc = (flags ^ vlan->flags) & MACVLAN_FLAG_NOPROMISC; in macvlan_changelink()
1380 if (vlan->port->passthru && promisc) { in macvlan_changelink()
1384 err = dev_set_promiscuity(vlan->lowerdev, -1); in macvlan_changelink()
1386 err = dev_set_promiscuity(vlan->lowerdev, 1); in macvlan_changelink()
1390 vlan->flags = flags; in macvlan_changelink()
1393 vlan->mode = mode; in macvlan_changelink()
1395 if (vlan->mode != MACVLAN_MODE_SOURCE) in macvlan_changelink()
1398 ret = macvlan_changelink_sources(vlan, macmode, data); in macvlan_changelink()
1405 static size_t macvlan_get_size_mac(const struct macvlan_dev *vlan) in macvlan_get_size_mac() argument
1407 if (vlan->macaddr_count == 0) in macvlan_get_size_mac()
1410 + vlan->macaddr_count * nla_total_size(sizeof(u8) * ETH_ALEN); in macvlan_get_size_mac()
1415 struct macvlan_dev *vlan = netdev_priv(dev); in macvlan_get_size() local
1421 + macvlan_get_size_mac(vlan) /* IFLA_MACVLAN_MACADDR */ in macvlan_get_size()
1426 const struct macvlan_dev *vlan, in macvlan_fill_info_macaddr() argument
1429 struct hlist_head *h = &vlan->port->vlan_source_hash[i]; in macvlan_fill_info_macaddr()
1433 if (entry->vlan != vlan) in macvlan_fill_info_macaddr()
1444 struct macvlan_dev *vlan = netdev_priv(dev); in macvlan_fill_info() local
1448 if (nla_put_u32(skb, IFLA_MACVLAN_MODE, vlan->mode)) in macvlan_fill_info()
1450 if (nla_put_u16(skb, IFLA_MACVLAN_FLAGS, vlan->flags)) in macvlan_fill_info()
1452 if (nla_put_u32(skb, IFLA_MACVLAN_MACADDR_COUNT, vlan->macaddr_count)) in macvlan_fill_info()
1454 if (vlan->macaddr_count > 0) { in macvlan_fill_info()
1460 if (macvlan_fill_info_macaddr(skb, vlan, i)) in macvlan_fill_info()
1512 struct macvlan_dev *vlan, *next; in macvlan_device_event() local
1523 list_for_each_entry(vlan, &port->vlans, list) in macvlan_device_event()
1524 netif_stacked_transfer_operstate(vlan->lowerdev, in macvlan_device_event()
1525 vlan->dev); in macvlan_device_event()
1528 list_for_each_entry(vlan, &port->vlans, list) { in macvlan_device_event()
1529 vlan->dev->gso_max_size = dev->gso_max_size; in macvlan_device_event()
1530 netdev_update_features(vlan->dev); in macvlan_device_event()
1534 list_for_each_entry(vlan, &port->vlans, list) { in macvlan_device_event()
1535 if (vlan->dev->mtu <= dev->mtu) in macvlan_device_event()
1537 dev_set_mtu(vlan->dev, dev->mtu); in macvlan_device_event()
1544 vlan = list_first_entry_or_null(&port->vlans, in macvlan_device_event()
1548 if (macvlan_sync_address(vlan->dev, dev->dev_addr)) in macvlan_device_event()
1557 list_for_each_entry_safe(vlan, next, &port->vlans, list) in macvlan_device_event()
1558 vlan->dev->rtnl_link_ops->dellink(vlan->dev, &list_kill); in macvlan_device_event()
1569 list_for_each_entry(vlan, &port->vlans, list) in macvlan_device_event()
1570 call_netdevice_notifiers(event, vlan->dev); in macvlan_device_event()