2950c3780230596270aa64d0ebac69f7c1bd3cbd
[cascardo/linux.git] / drivers / net / ipvlan / ipvlan_main.c
1 /* Copyright (c) 2014 Mahesh Bandewar <maheshb@google.com>
2  *
3  * This program is free software; you can redistribute it and/or
4  * modify it under the terms of the GNU General Public License as
5  * published by the Free Software Foundation; either version 2 of
6  * the License, or (at your option) any later version.
7  *
8  */
9
10 #include "ipvlan.h"
11
12 void ipvlan_adjust_mtu(struct ipvl_dev *ipvlan, struct net_device *dev)
13 {
14         ipvlan->dev->mtu = dev->mtu - ipvlan->mtu_adj;
15 }
16
17 void ipvlan_set_port_mode(struct ipvl_port *port, u32 nval)
18 {
19         struct ipvl_dev *ipvlan;
20
21         if (port->mode != nval) {
22                 list_for_each_entry(ipvlan, &port->ipvlans, pnode) {
23                         if (nval == IPVLAN_MODE_L3)
24                                 ipvlan->dev->flags |= IFF_NOARP;
25                         else
26                                 ipvlan->dev->flags &= ~IFF_NOARP;
27                 }
28                 port->mode = nval;
29         }
30 }
31
32 static int ipvlan_port_create(struct net_device *dev)
33 {
34         struct ipvl_port *port;
35         int err, idx;
36
37         if (dev->type != ARPHRD_ETHER || dev->flags & IFF_LOOPBACK) {
38                 netdev_err(dev, "Master is either lo or non-ether device\n");
39                 return -EINVAL;
40         }
41
42         if (netif_is_macvlan_port(dev)) {
43                 netdev_err(dev, "Master is a macvlan port.\n");
44                 return -EBUSY;
45         }
46
47         port = kzalloc(sizeof(struct ipvl_port), GFP_KERNEL);
48         if (!port)
49                 return -ENOMEM;
50
51         port->dev = dev;
52         port->mode = IPVLAN_MODE_L3;
53         INIT_LIST_HEAD(&port->ipvlans);
54         for (idx = 0; idx < IPVLAN_HASH_SIZE; idx++)
55                 INIT_HLIST_HEAD(&port->hlhead[idx]);
56
57         err = netdev_rx_handler_register(dev, ipvlan_handle_frame, port);
58         if (err)
59                 goto err;
60
61         dev->priv_flags |= IFF_IPVLAN_MASTER;
62         return 0;
63
64 err:
65         kfree_rcu(port, rcu);
66         return err;
67 }
68
69 static void ipvlan_port_destroy(struct net_device *dev)
70 {
71         struct ipvl_port *port = ipvlan_port_get_rtnl(dev);
72
73         dev->priv_flags &= ~IFF_IPVLAN_MASTER;
74         netdev_rx_handler_unregister(dev);
75         kfree_rcu(port, rcu);
76 }
77
78 /* ipvlan network devices have devices nesting below it and are a special
79  * "super class" of normal network devices; split their locks off into a
80  * separate class since they always nest.
81  */
82 static struct lock_class_key ipvlan_netdev_xmit_lock_key;
83 static struct lock_class_key ipvlan_netdev_addr_lock_key;
84
85 #define IPVLAN_FEATURES \
86         (NETIF_F_SG | NETIF_F_ALL_CSUM | NETIF_F_HIGHDMA | NETIF_F_FRAGLIST | \
87          NETIF_F_GSO | NETIF_F_TSO | NETIF_F_UFO | NETIF_F_GSO_ROBUST | \
88          NETIF_F_TSO_ECN | NETIF_F_TSO6 | NETIF_F_GRO | NETIF_F_RXCSUM | \
89          NETIF_F_HW_VLAN_CTAG_FILTER | NETIF_F_HW_VLAN_STAG_FILTER)
90
91 #define IPVLAN_STATE_MASK \
92         ((1<<__LINK_STATE_NOCARRIER) | (1<<__LINK_STATE_DORMANT))
93
94 static void ipvlan_set_lockdep_class_one(struct net_device *dev,
95                                          struct netdev_queue *txq,
96                                          void *_unused)
97 {
98         lockdep_set_class(&txq->_xmit_lock, &ipvlan_netdev_xmit_lock_key);
99 }
100
101 static void ipvlan_set_lockdep_class(struct net_device *dev)
102 {
103         lockdep_set_class(&dev->addr_list_lock, &ipvlan_netdev_addr_lock_key);
104         netdev_for_each_tx_queue(dev, ipvlan_set_lockdep_class_one, NULL);
105 }
106
107 static int ipvlan_init(struct net_device *dev)
108 {
109         struct ipvl_dev *ipvlan = netdev_priv(dev);
110         const struct net_device *phy_dev = ipvlan->phy_dev;
111
112         dev->state = (dev->state & ~IPVLAN_STATE_MASK) |
113                      (phy_dev->state & IPVLAN_STATE_MASK);
114         dev->features = phy_dev->features & IPVLAN_FEATURES;
115         dev->features |= NETIF_F_LLTX;
116         dev->gso_max_size = phy_dev->gso_max_size;
117         dev->iflink = phy_dev->ifindex;
118         dev->hard_header_len = phy_dev->hard_header_len;
119
120         ipvlan_set_lockdep_class(dev);
121
122         ipvlan->pcpu_stats = alloc_percpu(struct ipvl_pcpu_stats);
123         if (!ipvlan->pcpu_stats)
124                 return -ENOMEM;
125
126         return 0;
127 }
128
129 static void ipvlan_uninit(struct net_device *dev)
130 {
131         struct ipvl_dev *ipvlan = netdev_priv(dev);
132         struct ipvl_port *port = ipvlan->port;
133
134         free_percpu(ipvlan->pcpu_stats);
135
136         port->count -= 1;
137         if (!port->count)
138                 ipvlan_port_destroy(port->dev);
139 }
140
141 static int ipvlan_open(struct net_device *dev)
142 {
143         struct ipvl_dev *ipvlan = netdev_priv(dev);
144         struct net_device *phy_dev = ipvlan->phy_dev;
145         struct ipvl_addr *addr;
146
147         if (ipvlan->port->mode == IPVLAN_MODE_L3)
148                 dev->flags |= IFF_NOARP;
149         else
150                 dev->flags &= ~IFF_NOARP;
151
152         if (ipvlan->ipv6cnt > 0 || ipvlan->ipv4cnt > 0) {
153                 list_for_each_entry(addr, &ipvlan->addrs, anode)
154                         ipvlan_ht_addr_add(ipvlan, addr);
155         }
156         return dev_uc_add(phy_dev, phy_dev->dev_addr);
157 }
158
159 static int ipvlan_stop(struct net_device *dev)
160 {
161         struct ipvl_dev *ipvlan = netdev_priv(dev);
162         struct net_device *phy_dev = ipvlan->phy_dev;
163         struct ipvl_addr *addr;
164
165         dev_uc_unsync(phy_dev, dev);
166         dev_mc_unsync(phy_dev, dev);
167
168         dev_uc_del(phy_dev, phy_dev->dev_addr);
169
170         if (ipvlan->ipv6cnt > 0 || ipvlan->ipv4cnt > 0) {
171                 list_for_each_entry(addr, &ipvlan->addrs, anode)
172                         ipvlan_ht_addr_del(addr, !dev->dismantle);
173         }
174         return 0;
175 }
176
177 static netdev_tx_t ipvlan_start_xmit(struct sk_buff *skb,
178                                      struct net_device *dev)
179 {
180         const struct ipvl_dev *ipvlan = netdev_priv(dev);
181         int skblen = skb->len;
182         int ret;
183
184         ret = ipvlan_queue_xmit(skb, dev);
185         if (likely(ret == NET_XMIT_SUCCESS || ret == NET_XMIT_CN)) {
186                 struct ipvl_pcpu_stats *pcptr;
187
188                 pcptr = this_cpu_ptr(ipvlan->pcpu_stats);
189
190                 u64_stats_update_begin(&pcptr->syncp);
191                 pcptr->tx_pkts++;
192                 pcptr->tx_bytes += skblen;
193                 u64_stats_update_end(&pcptr->syncp);
194         } else {
195                 this_cpu_inc(ipvlan->pcpu_stats->tx_drps);
196         }
197         return ret;
198 }
199
200 static netdev_features_t ipvlan_fix_features(struct net_device *dev,
201                                              netdev_features_t features)
202 {
203         struct ipvl_dev *ipvlan = netdev_priv(dev);
204
205         return features & (ipvlan->sfeatures | ~IPVLAN_FEATURES);
206 }
207
208 static void ipvlan_change_rx_flags(struct net_device *dev, int change)
209 {
210         struct ipvl_dev *ipvlan = netdev_priv(dev);
211         struct net_device *phy_dev = ipvlan->phy_dev;
212
213         if (change & IFF_ALLMULTI)
214                 dev_set_allmulti(phy_dev, dev->flags & IFF_ALLMULTI? 1 : -1);
215 }
216
217 static void ipvlan_set_broadcast_mac_filter(struct ipvl_dev *ipvlan, bool set)
218 {
219         struct net_device *dev = ipvlan->dev;
220         unsigned int hashbit = ipvlan_mac_hash(dev->broadcast);
221
222         if (set && !test_bit(hashbit, ipvlan->mac_filters))
223                 __set_bit(hashbit, ipvlan->mac_filters);
224         else if (!set && test_bit(hashbit, ipvlan->mac_filters))
225                 __clear_bit(hashbit, ipvlan->mac_filters);
226 }
227
228 static void ipvlan_set_multicast_mac_filter(struct net_device *dev)
229 {
230         struct ipvl_dev *ipvlan = netdev_priv(dev);
231
232         if (dev->flags & (IFF_PROMISC | IFF_ALLMULTI)) {
233                 bitmap_fill(ipvlan->mac_filters, IPVLAN_MAC_FILTER_SIZE);
234         } else {
235                 struct netdev_hw_addr *ha;
236                 DECLARE_BITMAP(mc_filters, IPVLAN_MAC_FILTER_SIZE);
237
238                 bitmap_zero(mc_filters, IPVLAN_MAC_FILTER_SIZE);
239                 netdev_for_each_mc_addr(ha, dev)
240                         __set_bit(ipvlan_mac_hash(ha->addr), mc_filters);
241
242                 bitmap_copy(ipvlan->mac_filters, mc_filters,
243                             IPVLAN_MAC_FILTER_SIZE);
244         }
245         dev_uc_sync(ipvlan->phy_dev, dev);
246         dev_mc_sync(ipvlan->phy_dev, dev);
247 }
248
249 static struct rtnl_link_stats64 *ipvlan_get_stats64(struct net_device *dev,
250                                                     struct rtnl_link_stats64 *s)
251 {
252         struct ipvl_dev *ipvlan = netdev_priv(dev);
253
254         if (ipvlan->pcpu_stats) {
255                 struct ipvl_pcpu_stats *pcptr;
256                 u64 rx_pkts, rx_bytes, rx_mcast, tx_pkts, tx_bytes;
257                 u32 rx_errs = 0, tx_drps = 0;
258                 u32 strt;
259                 int idx;
260
261                 for_each_possible_cpu(idx) {
262                         pcptr = per_cpu_ptr(ipvlan->pcpu_stats, idx);
263                         do {
264                                 strt= u64_stats_fetch_begin_irq(&pcptr->syncp);
265                                 rx_pkts = pcptr->rx_pkts;
266                                 rx_bytes = pcptr->rx_bytes;
267                                 rx_mcast = pcptr->rx_mcast;
268                                 tx_pkts = pcptr->tx_pkts;
269                                 tx_bytes = pcptr->tx_bytes;
270                         } while (u64_stats_fetch_retry_irq(&pcptr->syncp,
271                                                            strt));
272
273                         s->rx_packets += rx_pkts;
274                         s->rx_bytes += rx_bytes;
275                         s->multicast += rx_mcast;
276                         s->tx_packets += tx_pkts;
277                         s->tx_bytes += tx_bytes;
278
279                         /* u32 values are updated without syncp protection. */
280                         rx_errs += pcptr->rx_errs;
281                         tx_drps += pcptr->tx_drps;
282                 }
283                 s->rx_errors = rx_errs;
284                 s->rx_dropped = rx_errs;
285                 s->tx_dropped = tx_drps;
286         }
287         return s;
288 }
289
290 static int ipvlan_vlan_rx_add_vid(struct net_device *dev, __be16 proto, u16 vid)
291 {
292         struct ipvl_dev *ipvlan = netdev_priv(dev);
293         struct net_device *phy_dev = ipvlan->phy_dev;
294
295         return vlan_vid_add(phy_dev, proto, vid);
296 }
297
298 static int ipvlan_vlan_rx_kill_vid(struct net_device *dev, __be16 proto,
299                                    u16 vid)
300 {
301         struct ipvl_dev *ipvlan = netdev_priv(dev);
302         struct net_device *phy_dev = ipvlan->phy_dev;
303
304         vlan_vid_del(phy_dev, proto, vid);
305         return 0;
306 }
307
308 static const struct net_device_ops ipvlan_netdev_ops = {
309         .ndo_init               = ipvlan_init,
310         .ndo_uninit             = ipvlan_uninit,
311         .ndo_open               = ipvlan_open,
312         .ndo_stop               = ipvlan_stop,
313         .ndo_start_xmit         = ipvlan_start_xmit,
314         .ndo_fix_features       = ipvlan_fix_features,
315         .ndo_change_rx_flags    = ipvlan_change_rx_flags,
316         .ndo_set_rx_mode        = ipvlan_set_multicast_mac_filter,
317         .ndo_get_stats64        = ipvlan_get_stats64,
318         .ndo_vlan_rx_add_vid    = ipvlan_vlan_rx_add_vid,
319         .ndo_vlan_rx_kill_vid   = ipvlan_vlan_rx_kill_vid,
320 };
321
322 static int ipvlan_hard_header(struct sk_buff *skb, struct net_device *dev,
323                               unsigned short type, const void *daddr,
324                               const void *saddr, unsigned len)
325 {
326         const struct ipvl_dev *ipvlan = netdev_priv(dev);
327         struct net_device *phy_dev = ipvlan->phy_dev;
328
329         /* TODO Probably use a different field than dev_addr so that the
330          * mac-address on the virtual device is portable and can be carried
331          * while the packets use the mac-addr on the physical device.
332          */
333         return dev_hard_header(skb, phy_dev, type, daddr,
334                                saddr ? : dev->dev_addr, len);
335 }
336
337 static const struct header_ops ipvlan_header_ops = {
338         .create         = ipvlan_hard_header,
339         .parse          = eth_header_parse,
340         .cache          = eth_header_cache,
341         .cache_update   = eth_header_cache_update,
342 };
343
344 static int ipvlan_ethtool_get_settings(struct net_device *dev,
345                                        struct ethtool_cmd *cmd)
346 {
347         const struct ipvl_dev *ipvlan = netdev_priv(dev);
348
349         return __ethtool_get_settings(ipvlan->phy_dev, cmd);
350 }
351
352 static void ipvlan_ethtool_get_drvinfo(struct net_device *dev,
353                                        struct ethtool_drvinfo *drvinfo)
354 {
355         strlcpy(drvinfo->driver, IPVLAN_DRV, sizeof(drvinfo->driver));
356         strlcpy(drvinfo->version, IPV_DRV_VER, sizeof(drvinfo->version));
357 }
358
359 static u32 ipvlan_ethtool_get_msglevel(struct net_device *dev)
360 {
361         const struct ipvl_dev *ipvlan = netdev_priv(dev);
362
363         return ipvlan->msg_enable;
364 }
365
366 static void ipvlan_ethtool_set_msglevel(struct net_device *dev, u32 value)
367 {
368         struct ipvl_dev *ipvlan = netdev_priv(dev);
369
370         ipvlan->msg_enable = value;
371 }
372
373 static const struct ethtool_ops ipvlan_ethtool_ops = {
374         .get_link       = ethtool_op_get_link,
375         .get_settings   = ipvlan_ethtool_get_settings,
376         .get_drvinfo    = ipvlan_ethtool_get_drvinfo,
377         .get_msglevel   = ipvlan_ethtool_get_msglevel,
378         .set_msglevel   = ipvlan_ethtool_set_msglevel,
379 };
380
381 static int ipvlan_nl_changelink(struct net_device *dev,
382                                 struct nlattr *tb[], struct nlattr *data[])
383 {
384         struct ipvl_dev *ipvlan = netdev_priv(dev);
385         struct ipvl_port *port = ipvlan_port_get_rtnl(ipvlan->phy_dev);
386
387         if (data && data[IFLA_IPVLAN_MODE]) {
388                 u16 nmode = nla_get_u16(data[IFLA_IPVLAN_MODE]);
389
390                 ipvlan_set_port_mode(port, nmode);
391         }
392         return 0;
393 }
394
395 static size_t ipvlan_nl_getsize(const struct net_device *dev)
396 {
397         return (0
398                 + nla_total_size(2) /* IFLA_IPVLAN_MODE */
399                 );
400 }
401
402 static int ipvlan_nl_validate(struct nlattr *tb[], struct nlattr *data[])
403 {
404         if (data && data[IFLA_IPVLAN_MODE]) {
405                 u16 mode = nla_get_u16(data[IFLA_IPVLAN_MODE]);
406
407                 if (mode < IPVLAN_MODE_L2 || mode >= IPVLAN_MODE_MAX)
408                         return -EINVAL;
409         }
410         return 0;
411 }
412
413 static int ipvlan_nl_fillinfo(struct sk_buff *skb,
414                               const struct net_device *dev)
415 {
416         struct ipvl_dev *ipvlan = netdev_priv(dev);
417         struct ipvl_port *port = ipvlan_port_get_rtnl(ipvlan->phy_dev);
418         int ret = -EINVAL;
419
420         if (!port)
421                 goto err;
422
423         ret = -EMSGSIZE;
424         if (nla_put_u16(skb, IFLA_IPVLAN_MODE, port->mode))
425                 goto err;
426
427         return 0;
428
429 err:
430         return ret;
431 }
432
433 static int ipvlan_link_new(struct net *src_net, struct net_device *dev,
434                            struct nlattr *tb[], struct nlattr *data[])
435 {
436         struct ipvl_dev *ipvlan = netdev_priv(dev);
437         struct ipvl_port *port;
438         struct net_device *phy_dev;
439         int err;
440
441         if (!tb[IFLA_LINK])
442                 return -EINVAL;
443
444         phy_dev = __dev_get_by_index(src_net, nla_get_u32(tb[IFLA_LINK]));
445         if (!phy_dev)
446                 return -ENODEV;
447
448         if (netif_is_ipvlan(phy_dev)) {
449                 struct ipvl_dev *tmp = netdev_priv(phy_dev);
450
451                 phy_dev = tmp->phy_dev;
452         } else if (!netif_is_ipvlan_port(phy_dev)) {
453                 err = ipvlan_port_create(phy_dev);
454                 if (err < 0)
455                         return err;
456         }
457
458         port = ipvlan_port_get_rtnl(phy_dev);
459         if (data && data[IFLA_IPVLAN_MODE])
460                 port->mode = nla_get_u16(data[IFLA_IPVLAN_MODE]);
461
462         ipvlan->phy_dev = phy_dev;
463         ipvlan->dev = dev;
464         ipvlan->port = port;
465         ipvlan->sfeatures = IPVLAN_FEATURES;
466         INIT_LIST_HEAD(&ipvlan->addrs);
467         ipvlan->ipv4cnt = 0;
468         ipvlan->ipv6cnt = 0;
469
470         /* TODO Probably put random address here to be presented to the
471          * world but keep using the physical-dev address for the outgoing
472          * packets.
473          */
474         memcpy(dev->dev_addr, phy_dev->dev_addr, ETH_ALEN);
475
476         dev->priv_flags |= IFF_IPVLAN_SLAVE;
477
478         port->count += 1;
479         err = register_netdevice(dev);
480         if (err < 0)
481                 goto ipvlan_destroy_port;
482
483         err = netdev_upper_dev_link(phy_dev, dev);
484         if (err)
485                 goto ipvlan_destroy_port;
486
487         list_add_tail_rcu(&ipvlan->pnode, &port->ipvlans);
488         netif_stacked_transfer_operstate(phy_dev, dev);
489         return 0;
490
491 ipvlan_destroy_port:
492         port->count -= 1;
493         if (!port->count)
494                 ipvlan_port_destroy(phy_dev);
495
496         return err;
497 }
498
499 static void ipvlan_link_delete(struct net_device *dev, struct list_head *head)
500 {
501         struct ipvl_dev *ipvlan = netdev_priv(dev);
502         struct ipvl_addr *addr, *next;
503
504         if (ipvlan->ipv6cnt > 0 || ipvlan->ipv4cnt > 0) {
505                 list_for_each_entry_safe(addr, next, &ipvlan->addrs, anode) {
506                         ipvlan_ht_addr_del(addr, !dev->dismantle);
507                         list_del_rcu(&addr->anode);
508                 }
509         }
510         list_del_rcu(&ipvlan->pnode);
511         unregister_netdevice_queue(dev, head);
512         netdev_upper_dev_unlink(ipvlan->phy_dev, dev);
513 }
514
515 static void ipvlan_link_setup(struct net_device *dev)
516 {
517         ether_setup(dev);
518
519         dev->priv_flags &= ~(IFF_XMIT_DST_RELEASE | IFF_TX_SKB_SHARING);
520         dev->priv_flags |= IFF_UNICAST_FLT;
521         dev->netdev_ops = &ipvlan_netdev_ops;
522         dev->destructor = free_netdev;
523         dev->header_ops = &ipvlan_header_ops;
524         dev->ethtool_ops = &ipvlan_ethtool_ops;
525         dev->tx_queue_len = 0;
526 }
527
528 static const struct nla_policy ipvlan_nl_policy[IFLA_IPVLAN_MAX + 1] =
529 {
530         [IFLA_IPVLAN_MODE] = { .type = NLA_U16 },
531 };
532
533 static struct rtnl_link_ops ipvlan_link_ops = {
534         .kind           = "ipvlan",
535         .priv_size      = sizeof(struct ipvl_dev),
536
537         .get_size       = ipvlan_nl_getsize,
538         .policy         = ipvlan_nl_policy,
539         .validate       = ipvlan_nl_validate,
540         .fill_info      = ipvlan_nl_fillinfo,
541         .changelink     = ipvlan_nl_changelink,
542         .maxtype        = IFLA_IPVLAN_MAX,
543
544         .setup          = ipvlan_link_setup,
545         .newlink        = ipvlan_link_new,
546         .dellink        = ipvlan_link_delete,
547 };
548
549 static int ipvlan_link_register(struct rtnl_link_ops *ops)
550 {
551         return rtnl_link_register(ops);
552 }
553
554 static int ipvlan_device_event(struct notifier_block *unused,
555                                unsigned long event, void *ptr)
556 {
557         struct net_device *dev = netdev_notifier_info_to_dev(ptr);
558         struct ipvl_dev *ipvlan, *next;
559         struct ipvl_port *port;
560         LIST_HEAD(lst_kill);
561
562         if (!netif_is_ipvlan_port(dev))
563                 return NOTIFY_DONE;
564
565         port = ipvlan_port_get_rtnl(dev);
566
567         switch (event) {
568         case NETDEV_CHANGE:
569                 list_for_each_entry(ipvlan, &port->ipvlans, pnode)
570                         netif_stacked_transfer_operstate(ipvlan->phy_dev,
571                                                          ipvlan->dev);
572                 break;
573
574         case NETDEV_UNREGISTER:
575                 if (dev->reg_state != NETREG_UNREGISTERING)
576                         break;
577
578                 list_for_each_entry_safe(ipvlan, next, &port->ipvlans,
579                                          pnode)
580                         ipvlan->dev->rtnl_link_ops->dellink(ipvlan->dev,
581                                                             &lst_kill);
582                 unregister_netdevice_many(&lst_kill);
583                 break;
584
585         case NETDEV_FEAT_CHANGE:
586                 list_for_each_entry(ipvlan, &port->ipvlans, pnode) {
587                         ipvlan->dev->features = dev->features & IPVLAN_FEATURES;
588                         ipvlan->dev->gso_max_size = dev->gso_max_size;
589                         netdev_features_change(ipvlan->dev);
590                 }
591                 break;
592
593         case NETDEV_CHANGEMTU:
594                 list_for_each_entry(ipvlan, &port->ipvlans, pnode)
595                         ipvlan_adjust_mtu(ipvlan, dev);
596                 break;
597
598         case NETDEV_PRE_TYPE_CHANGE:
599                 /* Forbid underlying device to change its type. */
600                 return NOTIFY_BAD;
601         }
602         return NOTIFY_DONE;
603 }
604
605 static int ipvlan_add_addr6(struct ipvl_dev *ipvlan, struct in6_addr *ip6_addr)
606 {
607         struct ipvl_addr *addr;
608
609         if (ipvlan_addr_busy(ipvlan, ip6_addr, true)) {
610                 netif_err(ipvlan, ifup, ipvlan->dev,
611                           "Failed to add IPv6=%pI6c addr for %s intf\n",
612                           ip6_addr, ipvlan->dev->name);
613                 return -EINVAL;
614         }
615         addr = kzalloc(sizeof(struct ipvl_addr), GFP_ATOMIC);
616         if (!addr)
617                 return -ENOMEM;
618
619         addr->master = ipvlan;
620         memcpy(&addr->ip6addr, ip6_addr, sizeof(struct in6_addr));
621         addr->atype = IPVL_IPV6;
622         list_add_tail_rcu(&addr->anode, &ipvlan->addrs);
623         ipvlan->ipv6cnt++;
624         ipvlan_ht_addr_add(ipvlan, addr);
625
626         return 0;
627 }
628
629 static void ipvlan_del_addr6(struct ipvl_dev *ipvlan, struct in6_addr *ip6_addr)
630 {
631         struct ipvl_addr *addr;
632
633         addr = ipvlan_ht_addr_lookup(ipvlan->port, ip6_addr, true);
634         if (!addr)
635                 return;
636
637         ipvlan_ht_addr_del(addr, true);
638         list_del_rcu(&addr->anode);
639         ipvlan->ipv6cnt--;
640         WARN_ON(ipvlan->ipv6cnt < 0);
641         kfree_rcu(addr, rcu);
642
643         return;
644 }
645
646 static int ipvlan_addr6_event(struct notifier_block *unused,
647                               unsigned long event, void *ptr)
648 {
649         struct inet6_ifaddr *if6 = (struct inet6_ifaddr *)ptr;
650         struct net_device *dev = (struct net_device *)if6->idev->dev;
651         struct ipvl_dev *ipvlan = netdev_priv(dev);
652
653         if (!netif_is_ipvlan(dev))
654                 return NOTIFY_DONE;
655
656         if (!ipvlan || !ipvlan->port)
657                 return NOTIFY_DONE;
658
659         switch (event) {
660         case NETDEV_UP:
661                 if (ipvlan_add_addr6(ipvlan, &if6->addr))
662                         return NOTIFY_BAD;
663                 break;
664
665         case NETDEV_DOWN:
666                 ipvlan_del_addr6(ipvlan, &if6->addr);
667                 break;
668         }
669
670         return NOTIFY_OK;
671 }
672
673 static int ipvlan_add_addr4(struct ipvl_dev *ipvlan, struct in_addr *ip4_addr)
674 {
675         struct ipvl_addr *addr;
676
677         if (ipvlan_addr_busy(ipvlan, ip4_addr, false)) {
678                 netif_err(ipvlan, ifup, ipvlan->dev,
679                           "Failed to add IPv4=%pI4 on %s intf.\n",
680                           ip4_addr, ipvlan->dev->name);
681                 return -EINVAL;
682         }
683         addr = kzalloc(sizeof(struct ipvl_addr), GFP_KERNEL);
684         if (!addr)
685                 return -ENOMEM;
686
687         addr->master = ipvlan;
688         memcpy(&addr->ip4addr, ip4_addr, sizeof(struct in_addr));
689         addr->atype = IPVL_IPV4;
690         list_add_tail_rcu(&addr->anode, &ipvlan->addrs);
691         ipvlan->ipv4cnt++;
692         ipvlan_ht_addr_add(ipvlan, addr);
693         ipvlan_set_broadcast_mac_filter(ipvlan, true);
694
695         return 0;
696 }
697
698 static void ipvlan_del_addr4(struct ipvl_dev *ipvlan, struct in_addr *ip4_addr)
699 {
700         struct ipvl_addr *addr;
701
702         addr = ipvlan_ht_addr_lookup(ipvlan->port, ip4_addr, false);
703         if (!addr)
704                 return;
705
706         ipvlan_ht_addr_del(addr, true);
707         list_del_rcu(&addr->anode);
708         ipvlan->ipv4cnt--;
709         WARN_ON(ipvlan->ipv4cnt < 0);
710         if (!ipvlan->ipv4cnt)
711             ipvlan_set_broadcast_mac_filter(ipvlan, false);
712         kfree_rcu(addr, rcu);
713
714         return;
715 }
716
717 static int ipvlan_addr4_event(struct notifier_block *unused,
718                               unsigned long event, void *ptr)
719 {
720         struct in_ifaddr *if4 = (struct in_ifaddr *)ptr;
721         struct net_device *dev = (struct net_device *)if4->ifa_dev->dev;
722         struct ipvl_dev *ipvlan = netdev_priv(dev);
723         struct in_addr ip4_addr;
724
725         if (!netif_is_ipvlan(dev))
726                 return NOTIFY_DONE;
727
728         if (!ipvlan || !ipvlan->port)
729                 return NOTIFY_DONE;
730
731         switch (event) {
732         case NETDEV_UP:
733                 ip4_addr.s_addr = if4->ifa_address;
734                 if (ipvlan_add_addr4(ipvlan, &ip4_addr))
735                         return NOTIFY_BAD;
736                 break;
737
738         case NETDEV_DOWN:
739                 ip4_addr.s_addr = if4->ifa_address;
740                 ipvlan_del_addr4(ipvlan, &ip4_addr);
741                 break;
742         }
743
744         return NOTIFY_OK;
745 }
746
747 static struct notifier_block ipvlan_addr4_notifier_block __read_mostly = {
748         .notifier_call = ipvlan_addr4_event,
749 };
750
751 static struct notifier_block ipvlan_notifier_block __read_mostly = {
752         .notifier_call = ipvlan_device_event,
753 };
754
755 static struct notifier_block ipvlan_addr6_notifier_block __read_mostly = {
756         .notifier_call = ipvlan_addr6_event,
757 };
758
759 static int __init ipvlan_init_module(void)
760 {
761         int err;
762
763         ipvlan_init_secret();
764         register_netdevice_notifier(&ipvlan_notifier_block);
765         register_inet6addr_notifier(&ipvlan_addr6_notifier_block);
766         register_inetaddr_notifier(&ipvlan_addr4_notifier_block);
767
768         err = ipvlan_link_register(&ipvlan_link_ops);
769         if (err < 0)
770                 goto error;
771
772         return 0;
773 error:
774         unregister_inetaddr_notifier(&ipvlan_addr4_notifier_block);
775         unregister_inet6addr_notifier(&ipvlan_addr6_notifier_block);
776         unregister_netdevice_notifier(&ipvlan_notifier_block);
777         return err;
778 }
779
780 static void __exit ipvlan_cleanup_module(void)
781 {
782         rtnl_link_unregister(&ipvlan_link_ops);
783         unregister_netdevice_notifier(&ipvlan_notifier_block);
784         unregister_inetaddr_notifier(&ipvlan_addr4_notifier_block);
785         unregister_inet6addr_notifier(&ipvlan_addr6_notifier_block);
786 }
787
788 module_init(ipvlan_init_module);
789 module_exit(ipvlan_cleanup_module);
790
791 MODULE_LICENSE("GPL");
792 MODULE_AUTHOR("Mahesh Bandewar <maheshb@google.com>");
793 MODULE_DESCRIPTION("Driver for L3 (IPv6/IPv4) based VLANs");
794 MODULE_ALIAS_RTNL_LINK("ipvlan");