1/*
2 *	Bridge netlink control interface
3 *
4 *	Authors:
5 *	Stephen Hemminger		<shemminger@osdl.org>
6 *
7 *	This program is free software; you can redistribute it and/or
8 *	modify it under the terms of the GNU General Public License
9 *	as published by the Free Software Foundation; either version
10 *	2 of the License, or (at your option) any later version.
11 */
12
13#include <linux/kernel.h>
14#include <linux/slab.h>
15#include <linux/etherdevice.h>
16#include <net/rtnetlink.h>
17#include <net/net_namespace.h>
18#include <net/sock.h>
19#include <net/switchdev.h>
20#include <uapi/linux/if_bridge.h>
21
22#include "br_private.h"
23#include "br_private_stp.h"
24
25static int br_get_num_vlan_infos(const struct net_port_vlans *pv,
26				 u32 filter_mask)
27{
28	u16 vid_range_start = 0, vid_range_end = 0;
29	u16 vid_range_flags = 0;
30	u16 pvid, vid, flags;
31	int num_vlans = 0;
32
33	if (filter_mask & RTEXT_FILTER_BRVLAN)
34		return pv->num_vlans;
35
36	if (!(filter_mask & RTEXT_FILTER_BRVLAN_COMPRESSED))
37		return 0;
38
39	/* Count number of vlan info's
40	 */
41	pvid = br_get_pvid(pv);
42	for_each_set_bit(vid, pv->vlan_bitmap, VLAN_N_VID) {
43		flags = 0;
44		if (vid == pvid)
45			flags |= BRIDGE_VLAN_INFO_PVID;
46
47		if (test_bit(vid, pv->untagged_bitmap))
48			flags |= BRIDGE_VLAN_INFO_UNTAGGED;
49
50		if (vid_range_start == 0) {
51			goto initvars;
52		} else if ((vid - vid_range_end) == 1 &&
53			flags == vid_range_flags) {
54			vid_range_end = vid;
55			continue;
56		} else {
57			if ((vid_range_end - vid_range_start) > 0)
58				num_vlans += 2;
59			else
60				num_vlans += 1;
61		}
62initvars:
63		vid_range_start = vid;
64		vid_range_end = vid;
65		vid_range_flags = flags;
66	}
67
68	if (vid_range_start != 0) {
69		if ((vid_range_end - vid_range_start) > 0)
70			num_vlans += 2;
71		else
72			num_vlans += 1;
73	}
74
75	return num_vlans;
76}
77
78static size_t br_get_link_af_size_filtered(const struct net_device *dev,
79					   u32 filter_mask)
80{
81	struct net_port_vlans *pv;
82	int num_vlan_infos;
83
84	rcu_read_lock();
85	if (br_port_exists(dev))
86		pv = nbp_get_vlan_info(br_port_get_rcu(dev));
87	else if (dev->priv_flags & IFF_EBRIDGE)
88		pv = br_get_vlan_info((struct net_bridge *)netdev_priv(dev));
89	else
90		pv = NULL;
91	if (pv)
92		num_vlan_infos = br_get_num_vlan_infos(pv, filter_mask);
93	else
94		num_vlan_infos = 0;
95	rcu_read_unlock();
96
97	if (!num_vlan_infos)
98		return 0;
99
100	/* Each VLAN is returned in bridge_vlan_info along with flags */
101	return num_vlan_infos * nla_total_size(sizeof(struct bridge_vlan_info));
102}
103
104static inline size_t br_port_info_size(void)
105{
106	return nla_total_size(1)	/* IFLA_BRPORT_STATE  */
107		+ nla_total_size(2)	/* IFLA_BRPORT_PRIORITY */
108		+ nla_total_size(4)	/* IFLA_BRPORT_COST */
109		+ nla_total_size(1)	/* IFLA_BRPORT_MODE */
110		+ nla_total_size(1)	/* IFLA_BRPORT_GUARD */
111		+ nla_total_size(1)	/* IFLA_BRPORT_PROTECT */
112		+ nla_total_size(1)	/* IFLA_BRPORT_FAST_LEAVE */
113		+ nla_total_size(1)	/* IFLA_BRPORT_LEARNING */
114		+ nla_total_size(1)	/* IFLA_BRPORT_UNICAST_FLOOD */
115		+ nla_total_size(1)	/* IFLA_BRPORT_PROXYARP */
116		+ nla_total_size(1)	/* IFLA_BRPORT_PROXYARP_WIFI */
117		+ 0;
118}
119
120static inline size_t br_nlmsg_size(struct net_device *dev, u32 filter_mask)
121{
122	return NLMSG_ALIGN(sizeof(struct ifinfomsg))
123		+ nla_total_size(IFNAMSIZ) /* IFLA_IFNAME */
124		+ nla_total_size(MAX_ADDR_LEN) /* IFLA_ADDRESS */
125		+ nla_total_size(4) /* IFLA_MASTER */
126		+ nla_total_size(4) /* IFLA_MTU */
127		+ nla_total_size(4) /* IFLA_LINK */
128		+ nla_total_size(1) /* IFLA_OPERSTATE */
129		+ nla_total_size(br_port_info_size()) /* IFLA_PROTINFO */
130		+ nla_total_size(br_get_link_af_size_filtered(dev,
131				 filter_mask)); /* IFLA_AF_SPEC */
132}
133
134static int br_port_fill_attrs(struct sk_buff *skb,
135			      const struct net_bridge_port *p)
136{
137	u8 mode = !!(p->flags & BR_HAIRPIN_MODE);
138
139	if (nla_put_u8(skb, IFLA_BRPORT_STATE, p->state) ||
140	    nla_put_u16(skb, IFLA_BRPORT_PRIORITY, p->priority) ||
141	    nla_put_u32(skb, IFLA_BRPORT_COST, p->path_cost) ||
142	    nla_put_u8(skb, IFLA_BRPORT_MODE, mode) ||
143	    nla_put_u8(skb, IFLA_BRPORT_GUARD, !!(p->flags & BR_BPDU_GUARD)) ||
144	    nla_put_u8(skb, IFLA_BRPORT_PROTECT, !!(p->flags & BR_ROOT_BLOCK)) ||
145	    nla_put_u8(skb, IFLA_BRPORT_FAST_LEAVE, !!(p->flags & BR_MULTICAST_FAST_LEAVE)) ||
146	    nla_put_u8(skb, IFLA_BRPORT_LEARNING, !!(p->flags & BR_LEARNING)) ||
147	    nla_put_u8(skb, IFLA_BRPORT_UNICAST_FLOOD, !!(p->flags & BR_FLOOD)) ||
148	    nla_put_u8(skb, IFLA_BRPORT_PROXYARP, !!(p->flags & BR_PROXYARP)) ||
149	    nla_put_u8(skb, IFLA_BRPORT_PROXYARP_WIFI,
150		       !!(p->flags & BR_PROXYARP_WIFI)))
151		return -EMSGSIZE;
152
153	return 0;
154}
155
156static int br_fill_ifvlaninfo_range(struct sk_buff *skb, u16 vid_start,
157				    u16 vid_end, u16 flags)
158{
159	struct  bridge_vlan_info vinfo;
160
161	if ((vid_end - vid_start) > 0) {
162		/* add range to skb */
163		vinfo.vid = vid_start;
164		vinfo.flags = flags | BRIDGE_VLAN_INFO_RANGE_BEGIN;
165		if (nla_put(skb, IFLA_BRIDGE_VLAN_INFO,
166			    sizeof(vinfo), &vinfo))
167			goto nla_put_failure;
168
169		vinfo.flags &= ~BRIDGE_VLAN_INFO_RANGE_BEGIN;
170
171		vinfo.vid = vid_end;
172		vinfo.flags = flags | BRIDGE_VLAN_INFO_RANGE_END;
173		if (nla_put(skb, IFLA_BRIDGE_VLAN_INFO,
174			    sizeof(vinfo), &vinfo))
175			goto nla_put_failure;
176	} else {
177		vinfo.vid = vid_start;
178		vinfo.flags = flags;
179		if (nla_put(skb, IFLA_BRIDGE_VLAN_INFO,
180			    sizeof(vinfo), &vinfo))
181			goto nla_put_failure;
182	}
183
184	return 0;
185
186nla_put_failure:
187	return -EMSGSIZE;
188}
189
190static int br_fill_ifvlaninfo_compressed(struct sk_buff *skb,
191					 const struct net_port_vlans *pv)
192{
193	u16 vid_range_start = 0, vid_range_end = 0;
194	u16 vid_range_flags = 0;
195	u16 pvid, vid, flags;
196	int err = 0;
197
198	/* Pack IFLA_BRIDGE_VLAN_INFO's for every vlan
199	 * and mark vlan info with begin and end flags
200	 * if vlaninfo represents a range
201	 */
202	pvid = br_get_pvid(pv);
203	for_each_set_bit(vid, pv->vlan_bitmap, VLAN_N_VID) {
204		flags = 0;
205		if (vid == pvid)
206			flags |= BRIDGE_VLAN_INFO_PVID;
207
208		if (test_bit(vid, pv->untagged_bitmap))
209			flags |= BRIDGE_VLAN_INFO_UNTAGGED;
210
211		if (vid_range_start == 0) {
212			goto initvars;
213		} else if ((vid - vid_range_end) == 1 &&
214			flags == vid_range_flags) {
215			vid_range_end = vid;
216			continue;
217		} else {
218			err = br_fill_ifvlaninfo_range(skb, vid_range_start,
219						       vid_range_end,
220						       vid_range_flags);
221			if (err)
222				return err;
223		}
224
225initvars:
226		vid_range_start = vid;
227		vid_range_end = vid;
228		vid_range_flags = flags;
229	}
230
231	if (vid_range_start != 0) {
232		/* Call it once more to send any left over vlans */
233		err = br_fill_ifvlaninfo_range(skb, vid_range_start,
234					       vid_range_end,
235					       vid_range_flags);
236		if (err)
237			return err;
238	}
239
240	return 0;
241}
242
243static int br_fill_ifvlaninfo(struct sk_buff *skb,
244			      const struct net_port_vlans *pv)
245{
246	struct bridge_vlan_info vinfo;
247	u16 pvid, vid;
248
249	pvid = br_get_pvid(pv);
250	for_each_set_bit(vid, pv->vlan_bitmap, VLAN_N_VID) {
251		vinfo.vid = vid;
252		vinfo.flags = 0;
253		if (vid == pvid)
254			vinfo.flags |= BRIDGE_VLAN_INFO_PVID;
255
256		if (test_bit(vid, pv->untagged_bitmap))
257			vinfo.flags |= BRIDGE_VLAN_INFO_UNTAGGED;
258
259		if (nla_put(skb, IFLA_BRIDGE_VLAN_INFO,
260			    sizeof(vinfo), &vinfo))
261			goto nla_put_failure;
262	}
263
264	return 0;
265
266nla_put_failure:
267	return -EMSGSIZE;
268}
269
270/*
271 * Create one netlink message for one interface
272 * Contains port and master info as well as carrier and bridge state.
273 */
274static int br_fill_ifinfo(struct sk_buff *skb,
275			  const struct net_bridge_port *port,
276			  u32 pid, u32 seq, int event, unsigned int flags,
277			  u32 filter_mask, const struct net_device *dev)
278{
279	const struct net_bridge *br;
280	struct ifinfomsg *hdr;
281	struct nlmsghdr *nlh;
282	u8 operstate = netif_running(dev) ? dev->operstate : IF_OPER_DOWN;
283
284	if (port)
285		br = port->br;
286	else
287		br = netdev_priv(dev);
288
289	br_debug(br, "br_fill_info event %d port %s master %s\n",
290		     event, dev->name, br->dev->name);
291
292	nlh = nlmsg_put(skb, pid, seq, event, sizeof(*hdr), flags);
293	if (nlh == NULL)
294		return -EMSGSIZE;
295
296	hdr = nlmsg_data(nlh);
297	hdr->ifi_family = AF_BRIDGE;
298	hdr->__ifi_pad = 0;
299	hdr->ifi_type = dev->type;
300	hdr->ifi_index = dev->ifindex;
301	hdr->ifi_flags = dev_get_flags(dev);
302	hdr->ifi_change = 0;
303
304	if (nla_put_string(skb, IFLA_IFNAME, dev->name) ||
305	    nla_put_u32(skb, IFLA_MASTER, br->dev->ifindex) ||
306	    nla_put_u32(skb, IFLA_MTU, dev->mtu) ||
307	    nla_put_u8(skb, IFLA_OPERSTATE, operstate) ||
308	    (dev->addr_len &&
309	     nla_put(skb, IFLA_ADDRESS, dev->addr_len, dev->dev_addr)) ||
310	    (dev->ifindex != dev_get_iflink(dev) &&
311	     nla_put_u32(skb, IFLA_LINK, dev_get_iflink(dev))))
312		goto nla_put_failure;
313
314	if (event == RTM_NEWLINK && port) {
315		struct nlattr *nest
316			= nla_nest_start(skb, IFLA_PROTINFO | NLA_F_NESTED);
317
318		if (nest == NULL || br_port_fill_attrs(skb, port) < 0)
319			goto nla_put_failure;
320		nla_nest_end(skb, nest);
321	}
322
323	/* Check if  the VID information is requested */
324	if ((filter_mask & RTEXT_FILTER_BRVLAN) ||
325	    (filter_mask & RTEXT_FILTER_BRVLAN_COMPRESSED)) {
326		const struct net_port_vlans *pv;
327		struct nlattr *af;
328		int err;
329
330		if (port)
331			pv = nbp_get_vlan_info(port);
332		else
333			pv = br_get_vlan_info(br);
334
335		if (!pv || bitmap_empty(pv->vlan_bitmap, VLAN_N_VID))
336			goto done;
337
338		af = nla_nest_start(skb, IFLA_AF_SPEC);
339		if (!af)
340			goto nla_put_failure;
341
342		if (filter_mask & RTEXT_FILTER_BRVLAN_COMPRESSED)
343			err = br_fill_ifvlaninfo_compressed(skb, pv);
344		else
345			err = br_fill_ifvlaninfo(skb, pv);
346		if (err)
347			goto nla_put_failure;
348		nla_nest_end(skb, af);
349	}
350
351done:
352	nlmsg_end(skb, nlh);
353	return 0;
354
355nla_put_failure:
356	nlmsg_cancel(skb, nlh);
357	return -EMSGSIZE;
358}
359
360/*
361 * Notify listeners of a change in port information
362 */
363void br_ifinfo_notify(int event, struct net_bridge_port *port)
364{
365	struct net *net;
366	struct sk_buff *skb;
367	int err = -ENOBUFS;
368	u32 filter = RTEXT_FILTER_BRVLAN_COMPRESSED;
369
370	if (!port)
371		return;
372
373	net = dev_net(port->dev);
374	br_debug(port->br, "port %u(%s) event %d\n",
375		 (unsigned int)port->port_no, port->dev->name, event);
376
377	skb = nlmsg_new(br_nlmsg_size(port->dev, filter), GFP_ATOMIC);
378	if (skb == NULL)
379		goto errout;
380
381	err = br_fill_ifinfo(skb, port, 0, 0, event, 0, filter, port->dev);
382	if (err < 0) {
383		/* -EMSGSIZE implies BUG in br_nlmsg_size() */
384		WARN_ON(err == -EMSGSIZE);
385		kfree_skb(skb);
386		goto errout;
387	}
388	rtnl_notify(skb, net, 0, RTNLGRP_LINK, NULL, GFP_ATOMIC);
389	return;
390errout:
391	rtnl_set_sk_err(net, RTNLGRP_LINK, err);
392}
393
394
395/*
396 * Dump information about all ports, in response to GETLINK
397 */
398int br_getlink(struct sk_buff *skb, u32 pid, u32 seq,
399	       struct net_device *dev, u32 filter_mask, int nlflags)
400{
401	struct net_bridge_port *port = br_port_get_rtnl(dev);
402
403	if (!port && !(filter_mask & RTEXT_FILTER_BRVLAN) &&
404	    !(filter_mask & RTEXT_FILTER_BRVLAN_COMPRESSED))
405		return 0;
406
407	return br_fill_ifinfo(skb, port, pid, seq, RTM_NEWLINK, nlflags,
408			      filter_mask, dev);
409}
410
411static int br_vlan_info(struct net_bridge *br, struct net_bridge_port *p,
412			int cmd, struct bridge_vlan_info *vinfo)
413{
414	int err = 0;
415
416	switch (cmd) {
417	case RTM_SETLINK:
418		if (p) {
419			err = nbp_vlan_add(p, vinfo->vid, vinfo->flags);
420			if (err)
421				break;
422
423			if (vinfo->flags & BRIDGE_VLAN_INFO_MASTER)
424				err = br_vlan_add(p->br, vinfo->vid,
425						  vinfo->flags);
426		} else {
427			err = br_vlan_add(br, vinfo->vid, vinfo->flags);
428		}
429		break;
430
431	case RTM_DELLINK:
432		if (p) {
433			nbp_vlan_delete(p, vinfo->vid);
434			if (vinfo->flags & BRIDGE_VLAN_INFO_MASTER)
435				br_vlan_delete(p->br, vinfo->vid);
436		} else {
437			br_vlan_delete(br, vinfo->vid);
438		}
439		break;
440	}
441
442	return err;
443}
444
445static int br_afspec(struct net_bridge *br,
446		     struct net_bridge_port *p,
447		     struct nlattr *af_spec,
448		     int cmd)
449{
450	struct bridge_vlan_info *vinfo_start = NULL;
451	struct bridge_vlan_info *vinfo = NULL;
452	struct nlattr *attr;
453	int err = 0;
454	int rem;
455
456	nla_for_each_nested(attr, af_spec, rem) {
457		if (nla_type(attr) != IFLA_BRIDGE_VLAN_INFO)
458			continue;
459		if (nla_len(attr) != sizeof(struct bridge_vlan_info))
460			return -EINVAL;
461		vinfo = nla_data(attr);
462		if (vinfo->flags & BRIDGE_VLAN_INFO_RANGE_BEGIN) {
463			if (vinfo_start)
464				return -EINVAL;
465			vinfo_start = vinfo;
466			continue;
467		}
468
469		if (vinfo_start) {
470			struct bridge_vlan_info tmp_vinfo;
471			int v;
472
473			if (!(vinfo->flags & BRIDGE_VLAN_INFO_RANGE_END))
474				return -EINVAL;
475
476			if (vinfo->vid <= vinfo_start->vid)
477				return -EINVAL;
478
479			memcpy(&tmp_vinfo, vinfo_start,
480			       sizeof(struct bridge_vlan_info));
481
482			for (v = vinfo_start->vid; v <= vinfo->vid; v++) {
483				tmp_vinfo.vid = v;
484				err = br_vlan_info(br, p, cmd, &tmp_vinfo);
485				if (err)
486					break;
487			}
488			vinfo_start = NULL;
489		} else {
490			err = br_vlan_info(br, p, cmd, vinfo);
491		}
492		if (err)
493			break;
494	}
495
496	return err;
497}
498
499static const struct nla_policy br_port_policy[IFLA_BRPORT_MAX + 1] = {
500	[IFLA_BRPORT_STATE]	= { .type = NLA_U8 },
501	[IFLA_BRPORT_COST]	= { .type = NLA_U32 },
502	[IFLA_BRPORT_PRIORITY]	= { .type = NLA_U16 },
503	[IFLA_BRPORT_MODE]	= { .type = NLA_U8 },
504	[IFLA_BRPORT_GUARD]	= { .type = NLA_U8 },
505	[IFLA_BRPORT_PROTECT]	= { .type = NLA_U8 },
506	[IFLA_BRPORT_FAST_LEAVE]= { .type = NLA_U8 },
507	[IFLA_BRPORT_LEARNING]	= { .type = NLA_U8 },
508	[IFLA_BRPORT_UNICAST_FLOOD] = { .type = NLA_U8 },
509	[IFLA_BRPORT_PROXYARP]	= { .type = NLA_U8 },
510	[IFLA_BRPORT_PROXYARP_WIFI] = { .type = NLA_U8 },
511};
512
513/* Change the state of the port and notify spanning tree */
514static int br_set_port_state(struct net_bridge_port *p, u8 state)
515{
516	if (state > BR_STATE_BLOCKING)
517		return -EINVAL;
518
519	/* if kernel STP is running, don't allow changes */
520	if (p->br->stp_enabled == BR_KERNEL_STP)
521		return -EBUSY;
522
523	/* if device is not up, change is not allowed
524	 * if link is not present, only allowable state is disabled
525	 */
526	if (!netif_running(p->dev) ||
527	    (!netif_oper_up(p->dev) && state != BR_STATE_DISABLED))
528		return -ENETDOWN;
529
530	br_set_state(p, state);
531	br_log_state(p);
532	br_port_state_selection(p->br);
533	return 0;
534}
535
536/* Set/clear or port flags based on attribute */
537static void br_set_port_flag(struct net_bridge_port *p, struct nlattr *tb[],
538			   int attrtype, unsigned long mask)
539{
540	if (tb[attrtype]) {
541		u8 flag = nla_get_u8(tb[attrtype]);
542		if (flag)
543			p->flags |= mask;
544		else
545			p->flags &= ~mask;
546	}
547}
548
549/* Process bridge protocol info on port */
550static int br_setport(struct net_bridge_port *p, struct nlattr *tb[])
551{
552	int err;
553	unsigned long old_flags = p->flags;
554
555	br_set_port_flag(p, tb, IFLA_BRPORT_MODE, BR_HAIRPIN_MODE);
556	br_set_port_flag(p, tb, IFLA_BRPORT_GUARD, BR_BPDU_GUARD);
557	br_set_port_flag(p, tb, IFLA_BRPORT_FAST_LEAVE, BR_MULTICAST_FAST_LEAVE);
558	br_set_port_flag(p, tb, IFLA_BRPORT_PROTECT, BR_ROOT_BLOCK);
559	br_set_port_flag(p, tb, IFLA_BRPORT_LEARNING, BR_LEARNING);
560	br_set_port_flag(p, tb, IFLA_BRPORT_UNICAST_FLOOD, BR_FLOOD);
561	br_set_port_flag(p, tb, IFLA_BRPORT_PROXYARP, BR_PROXYARP);
562	br_set_port_flag(p, tb, IFLA_BRPORT_PROXYARP_WIFI, BR_PROXYARP_WIFI);
563
564	if (tb[IFLA_BRPORT_COST]) {
565		err = br_stp_set_path_cost(p, nla_get_u32(tb[IFLA_BRPORT_COST]));
566		if (err)
567			return err;
568	}
569
570	if (tb[IFLA_BRPORT_PRIORITY]) {
571		err = br_stp_set_port_priority(p, nla_get_u16(tb[IFLA_BRPORT_PRIORITY]));
572		if (err)
573			return err;
574	}
575
576	if (tb[IFLA_BRPORT_STATE]) {
577		err = br_set_port_state(p, nla_get_u8(tb[IFLA_BRPORT_STATE]));
578		if (err)
579			return err;
580	}
581
582	br_port_flags_change(p, old_flags ^ p->flags);
583	return 0;
584}
585
586/* Change state and parameters on port. */
587int br_setlink(struct net_device *dev, struct nlmsghdr *nlh, u16 flags)
588{
589	struct nlattr *protinfo;
590	struct nlattr *afspec;
591	struct net_bridge_port *p;
592	struct nlattr *tb[IFLA_BRPORT_MAX + 1];
593	int err = 0, ret_offload = 0;
594
595	protinfo = nlmsg_find_attr(nlh, sizeof(struct ifinfomsg), IFLA_PROTINFO);
596	afspec = nlmsg_find_attr(nlh, sizeof(struct ifinfomsg), IFLA_AF_SPEC);
597	if (!protinfo && !afspec)
598		return 0;
599
600	p = br_port_get_rtnl(dev);
601	/* We want to accept dev as bridge itself if the AF_SPEC
602	 * is set to see if someone is setting vlan info on the bridge
603	 */
604	if (!p && !afspec)
605		return -EINVAL;
606
607	if (p && protinfo) {
608		if (protinfo->nla_type & NLA_F_NESTED) {
609			err = nla_parse_nested(tb, IFLA_BRPORT_MAX,
610					       protinfo, br_port_policy);
611			if (err)
612				return err;
613
614			spin_lock_bh(&p->br->lock);
615			err = br_setport(p, tb);
616			spin_unlock_bh(&p->br->lock);
617		} else {
618			/* Binary compatibility with old RSTP */
619			if (nla_len(protinfo) < sizeof(u8))
620				return -EINVAL;
621
622			spin_lock_bh(&p->br->lock);
623			err = br_set_port_state(p, nla_get_u8(protinfo));
624			spin_unlock_bh(&p->br->lock);
625		}
626		if (err)
627			goto out;
628	}
629
630	if (afspec) {
631		err = br_afspec((struct net_bridge *)netdev_priv(dev), p,
632				afspec, RTM_SETLINK);
633	}
634
635	if (p && !(flags & BRIDGE_FLAGS_SELF)) {
636		/* set bridge attributes in hardware if supported
637		 */
638		ret_offload = netdev_switch_port_bridge_setlink(dev, nlh,
639								flags);
640		if (ret_offload && ret_offload != -EOPNOTSUPP)
641			br_warn(p->br, "error setting attrs on port %u(%s)\n",
642				(unsigned int)p->port_no, p->dev->name);
643	}
644
645	if (err == 0)
646		br_ifinfo_notify(RTM_NEWLINK, p);
647out:
648	return err;
649}
650
651/* Delete port information */
652int br_dellink(struct net_device *dev, struct nlmsghdr *nlh, u16 flags)
653{
654	struct nlattr *afspec;
655	struct net_bridge_port *p;
656	int err = 0, ret_offload = 0;
657
658	afspec = nlmsg_find_attr(nlh, sizeof(struct ifinfomsg), IFLA_AF_SPEC);
659	if (!afspec)
660		return 0;
661
662	p = br_port_get_rtnl(dev);
663	/* We want to accept dev as bridge itself as well */
664	if (!p && !(dev->priv_flags & IFF_EBRIDGE))
665		return -EINVAL;
666
667	err = br_afspec((struct net_bridge *)netdev_priv(dev), p,
668			afspec, RTM_DELLINK);
669	if (err == 0)
670		/* Send RTM_NEWLINK because userspace
671		 * expects RTM_NEWLINK for vlan dels
672		 */
673		br_ifinfo_notify(RTM_NEWLINK, p);
674
675	if (p && !(flags & BRIDGE_FLAGS_SELF)) {
676		/* del bridge attributes in hardware
677		 */
678		ret_offload = netdev_switch_port_bridge_dellink(dev, nlh,
679								flags);
680		if (ret_offload && ret_offload != -EOPNOTSUPP)
681			br_warn(p->br, "error deleting attrs on port %u (%s)\n",
682				(unsigned int)p->port_no, p->dev->name);
683	}
684
685	return err;
686}
687static int br_validate(struct nlattr *tb[], struct nlattr *data[])
688{
689	if (tb[IFLA_ADDRESS]) {
690		if (nla_len(tb[IFLA_ADDRESS]) != ETH_ALEN)
691			return -EINVAL;
692		if (!is_valid_ether_addr(nla_data(tb[IFLA_ADDRESS])))
693			return -EADDRNOTAVAIL;
694	}
695
696	return 0;
697}
698
699static int br_dev_newlink(struct net *src_net, struct net_device *dev,
700			  struct nlattr *tb[], struct nlattr *data[])
701{
702	struct net_bridge *br = netdev_priv(dev);
703
704	if (tb[IFLA_ADDRESS]) {
705		spin_lock_bh(&br->lock);
706		br_stp_change_bridge_id(br, nla_data(tb[IFLA_ADDRESS]));
707		spin_unlock_bh(&br->lock);
708	}
709
710	return register_netdevice(dev);
711}
712
713static int br_port_slave_changelink(struct net_device *brdev,
714				    struct net_device *dev,
715				    struct nlattr *tb[],
716				    struct nlattr *data[])
717{
718	struct net_bridge *br = netdev_priv(brdev);
719	int ret;
720
721	if (!data)
722		return 0;
723
724	spin_lock_bh(&br->lock);
725	ret = br_setport(br_port_get_rtnl(dev), data);
726	spin_unlock_bh(&br->lock);
727
728	return ret;
729}
730
731static int br_port_fill_slave_info(struct sk_buff *skb,
732				   const struct net_device *brdev,
733				   const struct net_device *dev)
734{
735	return br_port_fill_attrs(skb, br_port_get_rtnl(dev));
736}
737
738static size_t br_port_get_slave_size(const struct net_device *brdev,
739				     const struct net_device *dev)
740{
741	return br_port_info_size();
742}
743
744static const struct nla_policy br_policy[IFLA_BR_MAX + 1] = {
745	[IFLA_BR_FORWARD_DELAY]	= { .type = NLA_U32 },
746	[IFLA_BR_HELLO_TIME]	= { .type = NLA_U32 },
747	[IFLA_BR_MAX_AGE]	= { .type = NLA_U32 },
748	[IFLA_BR_AGEING_TIME] = { .type = NLA_U32 },
749	[IFLA_BR_STP_STATE] = { .type = NLA_U32 },
750	[IFLA_BR_PRIORITY] = { .type = NLA_U16 },
751};
752
753static int br_changelink(struct net_device *brdev, struct nlattr *tb[],
754			 struct nlattr *data[])
755{
756	struct net_bridge *br = netdev_priv(brdev);
757	int err;
758
759	if (!data)
760		return 0;
761
762	if (data[IFLA_BR_FORWARD_DELAY]) {
763		err = br_set_forward_delay(br, nla_get_u32(data[IFLA_BR_FORWARD_DELAY]));
764		if (err)
765			return err;
766	}
767
768	if (data[IFLA_BR_HELLO_TIME]) {
769		err = br_set_hello_time(br, nla_get_u32(data[IFLA_BR_HELLO_TIME]));
770		if (err)
771			return err;
772	}
773
774	if (data[IFLA_BR_MAX_AGE]) {
775		err = br_set_max_age(br, nla_get_u32(data[IFLA_BR_MAX_AGE]));
776		if (err)
777			return err;
778	}
779
780	if (data[IFLA_BR_AGEING_TIME]) {
781		u32 ageing_time = nla_get_u32(data[IFLA_BR_AGEING_TIME]);
782
783		br->ageing_time = clock_t_to_jiffies(ageing_time);
784	}
785
786	if (data[IFLA_BR_STP_STATE]) {
787		u32 stp_enabled = nla_get_u32(data[IFLA_BR_STP_STATE]);
788
789		br_stp_set_enabled(br, stp_enabled);
790	}
791
792	if (data[IFLA_BR_PRIORITY]) {
793		u32 priority = nla_get_u16(data[IFLA_BR_PRIORITY]);
794
795		br_stp_set_bridge_priority(br, priority);
796	}
797
798	return 0;
799}
800
801static size_t br_get_size(const struct net_device *brdev)
802{
803	return nla_total_size(sizeof(u32)) +	/* IFLA_BR_FORWARD_DELAY  */
804	       nla_total_size(sizeof(u32)) +	/* IFLA_BR_HELLO_TIME */
805	       nla_total_size(sizeof(u32)) +	/* IFLA_BR_MAX_AGE */
806	       nla_total_size(sizeof(u32)) +    /* IFLA_BR_AGEING_TIME */
807	       nla_total_size(sizeof(u32)) +    /* IFLA_BR_STP_STATE */
808	       nla_total_size(sizeof(u16)) +    /* IFLA_BR_PRIORITY */
809	       0;
810}
811
812static int br_fill_info(struct sk_buff *skb, const struct net_device *brdev)
813{
814	struct net_bridge *br = netdev_priv(brdev);
815	u32 forward_delay = jiffies_to_clock_t(br->forward_delay);
816	u32 hello_time = jiffies_to_clock_t(br->hello_time);
817	u32 age_time = jiffies_to_clock_t(br->max_age);
818	u32 ageing_time = jiffies_to_clock_t(br->ageing_time);
819	u32 stp_enabled = br->stp_enabled;
820	u16 priority = (br->bridge_id.prio[0] << 8) | br->bridge_id.prio[1];
821
822	if (nla_put_u32(skb, IFLA_BR_FORWARD_DELAY, forward_delay) ||
823	    nla_put_u32(skb, IFLA_BR_HELLO_TIME, hello_time) ||
824	    nla_put_u32(skb, IFLA_BR_MAX_AGE, age_time) ||
825	    nla_put_u32(skb, IFLA_BR_AGEING_TIME, ageing_time) ||
826	    nla_put_u32(skb, IFLA_BR_STP_STATE, stp_enabled) ||
827	    nla_put_u16(skb, IFLA_BR_PRIORITY, priority))
828		return -EMSGSIZE;
829
830	return 0;
831}
832
833static size_t br_get_link_af_size(const struct net_device *dev)
834{
835	struct net_port_vlans *pv;
836
837	if (br_port_exists(dev))
838		pv = nbp_get_vlan_info(br_port_get_rtnl(dev));
839	else if (dev->priv_flags & IFF_EBRIDGE)
840		pv = br_get_vlan_info((struct net_bridge *)netdev_priv(dev));
841	else
842		return 0;
843
844	if (!pv)
845		return 0;
846
847	/* Each VLAN is returned in bridge_vlan_info along with flags */
848	return pv->num_vlans * nla_total_size(sizeof(struct bridge_vlan_info));
849}
850
851static struct rtnl_af_ops br_af_ops __read_mostly = {
852	.family			= AF_BRIDGE,
853	.get_link_af_size	= br_get_link_af_size,
854};
855
856struct rtnl_link_ops br_link_ops __read_mostly = {
857	.kind			= "bridge",
858	.priv_size		= sizeof(struct net_bridge),
859	.setup			= br_dev_setup,
860	.maxtype		= IFLA_BRPORT_MAX,
861	.policy			= br_policy,
862	.validate		= br_validate,
863	.newlink		= br_dev_newlink,
864	.changelink		= br_changelink,
865	.dellink		= br_dev_delete,
866	.get_size		= br_get_size,
867	.fill_info		= br_fill_info,
868
869	.slave_maxtype		= IFLA_BRPORT_MAX,
870	.slave_policy		= br_port_policy,
871	.slave_changelink	= br_port_slave_changelink,
872	.get_slave_size		= br_port_get_slave_size,
873	.fill_slave_info	= br_port_fill_slave_info,
874};
875
876int __init br_netlink_init(void)
877{
878	int err;
879
880	br_mdb_init();
881	rtnl_af_register(&br_af_ops);
882
883	err = rtnl_link_register(&br_link_ops);
884	if (err)
885		goto out_af;
886
887	return 0;
888
889out_af:
890	rtnl_af_unregister(&br_af_ops);
891	br_mdb_uninit();
892	return err;
893}
894
895void br_netlink_fini(void)
896{
897	br_mdb_uninit();
898	rtnl_af_unregister(&br_af_ops);
899	rtnl_link_unregister(&br_link_ops);
900}
901