Lines Matching refs:ipvlan

12 void ipvlan_adjust_mtu(struct ipvl_dev *ipvlan, struct net_device *dev)  in ipvlan_adjust_mtu()  argument
14 ipvlan->dev->mtu = dev->mtu - ipvlan->mtu_adj; in ipvlan_adjust_mtu()
19 struct ipvl_dev *ipvlan; in ipvlan_set_port_mode() local
22 list_for_each_entry(ipvlan, &port->ipvlans, pnode) { in ipvlan_set_port_mode()
24 ipvlan->dev->flags |= IFF_NOARP; in ipvlan_set_port_mode()
26 ipvlan->dev->flags &= ~IFF_NOARP; in ipvlan_set_port_mode()
109 struct ipvl_dev *ipvlan = netdev_priv(dev); in ipvlan_init() local
110 const struct net_device *phy_dev = ipvlan->phy_dev; in ipvlan_init()
121 ipvlan->pcpu_stats = alloc_percpu(struct ipvl_pcpu_stats); in ipvlan_init()
122 if (!ipvlan->pcpu_stats) in ipvlan_init()
130 struct ipvl_dev *ipvlan = netdev_priv(dev); in ipvlan_uninit() local
131 struct ipvl_port *port = ipvlan->port; in ipvlan_uninit()
133 free_percpu(ipvlan->pcpu_stats); in ipvlan_uninit()
142 struct ipvl_dev *ipvlan = netdev_priv(dev); in ipvlan_open() local
143 struct net_device *phy_dev = ipvlan->phy_dev; in ipvlan_open()
146 if (ipvlan->port->mode == IPVLAN_MODE_L3) in ipvlan_open()
151 if (ipvlan->ipv6cnt > 0 || ipvlan->ipv4cnt > 0) { in ipvlan_open()
152 list_for_each_entry(addr, &ipvlan->addrs, anode) in ipvlan_open()
153 ipvlan_ht_addr_add(ipvlan, addr); in ipvlan_open()
160 struct ipvl_dev *ipvlan = netdev_priv(dev); in ipvlan_stop() local
161 struct net_device *phy_dev = ipvlan->phy_dev; in ipvlan_stop()
169 if (ipvlan->ipv6cnt > 0 || ipvlan->ipv4cnt > 0) { in ipvlan_stop()
170 list_for_each_entry(addr, &ipvlan->addrs, anode) in ipvlan_stop()
179 const struct ipvl_dev *ipvlan = netdev_priv(dev); in ipvlan_start_xmit() local
187 pcptr = this_cpu_ptr(ipvlan->pcpu_stats); in ipvlan_start_xmit()
194 this_cpu_inc(ipvlan->pcpu_stats->tx_drps); in ipvlan_start_xmit()
202 struct ipvl_dev *ipvlan = netdev_priv(dev); in ipvlan_fix_features() local
204 return features & (ipvlan->sfeatures | ~IPVLAN_FEATURES); in ipvlan_fix_features()
209 struct ipvl_dev *ipvlan = netdev_priv(dev); in ipvlan_change_rx_flags() local
210 struct net_device *phy_dev = ipvlan->phy_dev; in ipvlan_change_rx_flags()
216 static void ipvlan_set_broadcast_mac_filter(struct ipvl_dev *ipvlan, bool set) in ipvlan_set_broadcast_mac_filter() argument
218 struct net_device *dev = ipvlan->dev; in ipvlan_set_broadcast_mac_filter()
221 if (set && !test_bit(hashbit, ipvlan->mac_filters)) in ipvlan_set_broadcast_mac_filter()
222 __set_bit(hashbit, ipvlan->mac_filters); in ipvlan_set_broadcast_mac_filter()
223 else if (!set && test_bit(hashbit, ipvlan->mac_filters)) in ipvlan_set_broadcast_mac_filter()
224 __clear_bit(hashbit, ipvlan->mac_filters); in ipvlan_set_broadcast_mac_filter()
229 struct ipvl_dev *ipvlan = netdev_priv(dev); in ipvlan_set_multicast_mac_filter() local
232 bitmap_fill(ipvlan->mac_filters, IPVLAN_MAC_FILTER_SIZE); in ipvlan_set_multicast_mac_filter()
241 bitmap_copy(ipvlan->mac_filters, mc_filters, in ipvlan_set_multicast_mac_filter()
244 dev_uc_sync(ipvlan->phy_dev, dev); in ipvlan_set_multicast_mac_filter()
245 dev_mc_sync(ipvlan->phy_dev, dev); in ipvlan_set_multicast_mac_filter()
251 struct ipvl_dev *ipvlan = netdev_priv(dev); in ipvlan_get_stats64() local
253 if (ipvlan->pcpu_stats) { in ipvlan_get_stats64()
261 pcptr = per_cpu_ptr(ipvlan->pcpu_stats, idx); in ipvlan_get_stats64()
291 struct ipvl_dev *ipvlan = netdev_priv(dev); in ipvlan_vlan_rx_add_vid() local
292 struct net_device *phy_dev = ipvlan->phy_dev; in ipvlan_vlan_rx_add_vid()
300 struct ipvl_dev *ipvlan = netdev_priv(dev); in ipvlan_vlan_rx_kill_vid() local
301 struct net_device *phy_dev = ipvlan->phy_dev; in ipvlan_vlan_rx_kill_vid()
309 struct ipvl_dev *ipvlan = netdev_priv(dev); in ipvlan_get_iflink() local
311 return ipvlan->phy_dev->ifindex; in ipvlan_get_iflink()
333 const struct ipvl_dev *ipvlan = netdev_priv(dev); in ipvlan_hard_header() local
334 struct net_device *phy_dev = ipvlan->phy_dev; in ipvlan_hard_header()
354 const struct ipvl_dev *ipvlan = netdev_priv(dev); in ipvlan_ethtool_get_settings() local
356 return __ethtool_get_settings(ipvlan->phy_dev, cmd); in ipvlan_ethtool_get_settings()
368 const struct ipvl_dev *ipvlan = netdev_priv(dev); in ipvlan_ethtool_get_msglevel() local
370 return ipvlan->msg_enable; in ipvlan_ethtool_get_msglevel()
375 struct ipvl_dev *ipvlan = netdev_priv(dev); in ipvlan_ethtool_set_msglevel() local
377 ipvlan->msg_enable = value; in ipvlan_ethtool_set_msglevel()
391 struct ipvl_dev *ipvlan = netdev_priv(dev); in ipvlan_nl_changelink() local
392 struct ipvl_port *port = ipvlan_port_get_rtnl(ipvlan->phy_dev); in ipvlan_nl_changelink()
423 struct ipvl_dev *ipvlan = netdev_priv(dev); in ipvlan_nl_fillinfo() local
424 struct ipvl_port *port = ipvlan_port_get_rtnl(ipvlan->phy_dev); in ipvlan_nl_fillinfo()
443 struct ipvl_dev *ipvlan = netdev_priv(dev); in ipvlan_link_new() local
469 ipvlan->phy_dev = phy_dev; in ipvlan_link_new()
470 ipvlan->dev = dev; in ipvlan_link_new()
471 ipvlan->port = port; in ipvlan_link_new()
472 ipvlan->sfeatures = IPVLAN_FEATURES; in ipvlan_link_new()
473 INIT_LIST_HEAD(&ipvlan->addrs); in ipvlan_link_new()
474 ipvlan->ipv4cnt = 0; in ipvlan_link_new()
475 ipvlan->ipv6cnt = 0; in ipvlan_link_new()
494 list_add_tail_rcu(&ipvlan->pnode, &port->ipvlans); in ipvlan_link_new()
508 struct ipvl_dev *ipvlan = netdev_priv(dev); in ipvlan_link_delete() local
511 if (ipvlan->ipv6cnt > 0 || ipvlan->ipv4cnt > 0) { in ipvlan_link_delete()
512 list_for_each_entry_safe(addr, next, &ipvlan->addrs, anode) { in ipvlan_link_delete()
517 list_del_rcu(&ipvlan->pnode); in ipvlan_link_delete()
519 netdev_upper_dev_unlink(ipvlan->phy_dev, dev); in ipvlan_link_delete()
565 struct ipvl_dev *ipvlan, *next; in ipvlan_device_event() local
576 list_for_each_entry(ipvlan, &port->ipvlans, pnode) in ipvlan_device_event()
577 netif_stacked_transfer_operstate(ipvlan->phy_dev, in ipvlan_device_event()
578 ipvlan->dev); in ipvlan_device_event()
585 list_for_each_entry_safe(ipvlan, next, &port->ipvlans, in ipvlan_device_event()
587 ipvlan->dev->rtnl_link_ops->dellink(ipvlan->dev, in ipvlan_device_event()
593 list_for_each_entry(ipvlan, &port->ipvlans, pnode) { in ipvlan_device_event()
594 ipvlan->dev->features = dev->features & IPVLAN_FEATURES; in ipvlan_device_event()
595 ipvlan->dev->gso_max_size = dev->gso_max_size; in ipvlan_device_event()
596 netdev_features_change(ipvlan->dev); in ipvlan_device_event()
601 list_for_each_entry(ipvlan, &port->ipvlans, pnode) in ipvlan_device_event()
602 ipvlan_adjust_mtu(ipvlan, dev); in ipvlan_device_event()
612 static int ipvlan_add_addr6(struct ipvl_dev *ipvlan, struct in6_addr *ip6_addr) in ipvlan_add_addr6() argument
616 if (ipvlan_addr_busy(ipvlan->port, ip6_addr, true)) { in ipvlan_add_addr6()
617 netif_err(ipvlan, ifup, ipvlan->dev, in ipvlan_add_addr6()
619 ip6_addr, ipvlan->dev->name); in ipvlan_add_addr6()
626 addr->master = ipvlan; in ipvlan_add_addr6()
629 list_add_tail(&addr->anode, &ipvlan->addrs); in ipvlan_add_addr6()
630 ipvlan->ipv6cnt++; in ipvlan_add_addr6()
634 if (netif_running(ipvlan->dev)) in ipvlan_add_addr6()
635 ipvlan_ht_addr_add(ipvlan, addr); in ipvlan_add_addr6()
640 static void ipvlan_del_addr6(struct ipvl_dev *ipvlan, struct in6_addr *ip6_addr) in ipvlan_del_addr6() argument
644 addr = ipvlan_find_addr(ipvlan, ip6_addr, true); in ipvlan_del_addr6()
650 ipvlan->ipv6cnt--; in ipvlan_del_addr6()
651 WARN_ON(ipvlan->ipv6cnt < 0); in ipvlan_del_addr6()
662 struct ipvl_dev *ipvlan = netdev_priv(dev); in ipvlan_addr6_event() local
667 if (!ipvlan || !ipvlan->port) in ipvlan_addr6_event()
672 if (ipvlan_add_addr6(ipvlan, &if6->addr)) in ipvlan_addr6_event()
677 ipvlan_del_addr6(ipvlan, &if6->addr); in ipvlan_addr6_event()
684 static int ipvlan_add_addr4(struct ipvl_dev *ipvlan, struct in_addr *ip4_addr) in ipvlan_add_addr4() argument
688 if (ipvlan_addr_busy(ipvlan->port, ip4_addr, false)) { in ipvlan_add_addr4()
689 netif_err(ipvlan, ifup, ipvlan->dev, in ipvlan_add_addr4()
691 ip4_addr, ipvlan->dev->name); in ipvlan_add_addr4()
698 addr->master = ipvlan; in ipvlan_add_addr4()
701 list_add_tail(&addr->anode, &ipvlan->addrs); in ipvlan_add_addr4()
702 ipvlan->ipv4cnt++; in ipvlan_add_addr4()
706 if (netif_running(ipvlan->dev)) in ipvlan_add_addr4()
707 ipvlan_ht_addr_add(ipvlan, addr); in ipvlan_add_addr4()
708 ipvlan_set_broadcast_mac_filter(ipvlan, true); in ipvlan_add_addr4()
713 static void ipvlan_del_addr4(struct ipvl_dev *ipvlan, struct in_addr *ip4_addr) in ipvlan_del_addr4() argument
717 addr = ipvlan_find_addr(ipvlan, ip4_addr, false); in ipvlan_del_addr4()
723 ipvlan->ipv4cnt--; in ipvlan_del_addr4()
724 WARN_ON(ipvlan->ipv4cnt < 0); in ipvlan_del_addr4()
725 if (!ipvlan->ipv4cnt) in ipvlan_del_addr4()
726 ipvlan_set_broadcast_mac_filter(ipvlan, false); in ipvlan_del_addr4()
737 struct ipvl_dev *ipvlan = netdev_priv(dev); in ipvlan_addr4_event() local
743 if (!ipvlan || !ipvlan->port) in ipvlan_addr4_event()
749 if (ipvlan_add_addr4(ipvlan, &ip4_addr)) in ipvlan_addr4_event()
755 ipvlan_del_addr4(ipvlan, &ip4_addr); in ipvlan_addr4_event()