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