xref: /linux/drivers/net/bonding/bond_sysfs.c (revision f8324e20f8289dffc646d64366332e05eaacab25)
1 /*
2  * Copyright(c) 2004-2005 Intel Corporation. All rights reserved.
3  *
4  * This program is free software; you can redistribute it and/or modify it
5  * under the terms of the GNU General Public License as published by the
6  * Free Software Foundation; either version 2 of the License, or
7  * (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful, but
10  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
11  * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12  * for more details.
13  *
14  * You should have received a copy of the GNU General Public License along
15  * with this program; if not, write to the Free Software Foundation, Inc.,
16  * 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
17  *
18  * The full GNU General Public License is included in this distribution in the
19  * file called LICENSE.
20  *
21  */
22 
23 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
24 
25 #include <linux/kernel.h>
26 #include <linux/module.h>
27 #include <linux/device.h>
28 #include <linux/sched.h>
29 #include <linux/sysdev.h>
30 #include <linux/fs.h>
31 #include <linux/types.h>
32 #include <linux/string.h>
33 #include <linux/netdevice.h>
34 #include <linux/inetdevice.h>
35 #include <linux/in.h>
36 #include <linux/sysfs.h>
37 #include <linux/ctype.h>
38 #include <linux/inet.h>
39 #include <linux/rtnetlink.h>
40 #include <linux/etherdevice.h>
41 #include <net/net_namespace.h>
42 #include <net/netns/generic.h>
43 #include <linux/nsproxy.h>
44 
45 #include "bonding.h"
46 
47 #define to_dev(obj)	container_of(obj, struct device, kobj)
48 #define to_bond(cd)	((struct bonding *)(netdev_priv(to_net_dev(cd))))
49 
50 /*
51  * "show" function for the bond_masters attribute.
52  * The class parameter is ignored.
53  */
54 static ssize_t bonding_show_bonds(struct class *cls,
55 				  struct class_attribute *attr,
56 				  char *buf)
57 {
58 	struct net *net = current->nsproxy->net_ns;
59 	struct bond_net *bn = net_generic(net, bond_net_id);
60 	int res = 0;
61 	struct bonding *bond;
62 
63 	rtnl_lock();
64 
65 	list_for_each_entry(bond, &bn->dev_list, bond_list) {
66 		if (res > (PAGE_SIZE - IFNAMSIZ)) {
67 			/* not enough space for another interface name */
68 			if ((PAGE_SIZE - res) > 10)
69 				res = PAGE_SIZE - 10;
70 			res += sprintf(buf + res, "++more++ ");
71 			break;
72 		}
73 		res += sprintf(buf + res, "%s ", bond->dev->name);
74 	}
75 	if (res)
76 		buf[res-1] = '\n'; /* eat the leftover space */
77 
78 	rtnl_unlock();
79 	return res;
80 }
81 
82 static struct net_device *bond_get_by_name(struct net *net, const char *ifname)
83 {
84 	struct bond_net *bn = net_generic(net, bond_net_id);
85 	struct bonding *bond;
86 
87 	list_for_each_entry(bond, &bn->dev_list, bond_list) {
88 		if (strncmp(bond->dev->name, ifname, IFNAMSIZ) == 0)
89 			return bond->dev;
90 	}
91 	return NULL;
92 }
93 
94 /*
95  * "store" function for the bond_masters attribute.  This is what
96  * creates and deletes entire bonds.
97  *
98  * The class parameter is ignored.
99  *
100  */
101 
102 static ssize_t bonding_store_bonds(struct class *cls,
103 				   struct class_attribute *attr,
104 				   const char *buffer, size_t count)
105 {
106 	struct net *net = current->nsproxy->net_ns;
107 	char command[IFNAMSIZ + 1] = {0, };
108 	char *ifname;
109 	int rv, res = count;
110 
111 	sscanf(buffer, "%16s", command); /* IFNAMSIZ*/
112 	ifname = command + 1;
113 	if ((strlen(command) <= 1) ||
114 	    !dev_valid_name(ifname))
115 		goto err_no_cmd;
116 
117 	if (command[0] == '+') {
118 		pr_info("%s is being created...\n", ifname);
119 		rv = bond_create(net, ifname);
120 		if (rv) {
121 			pr_info("Bond creation failed.\n");
122 			res = rv;
123 		}
124 	} else if (command[0] == '-') {
125 		struct net_device *bond_dev;
126 
127 		rtnl_lock();
128 		bond_dev = bond_get_by_name(net, ifname);
129 		if (bond_dev) {
130 			pr_info("%s is being deleted...\n", ifname);
131 			unregister_netdevice(bond_dev);
132 		} else {
133 			pr_err("unable to delete non-existent %s\n", ifname);
134 			res = -ENODEV;
135 		}
136 		rtnl_unlock();
137 	} else
138 		goto err_no_cmd;
139 
140 	/* Always return either count or an error.  If you return 0, you'll
141 	 * get called forever, which is bad.
142 	 */
143 	return res;
144 
145 err_no_cmd:
146 	pr_err("no command found in bonding_masters. Use +ifname or -ifname.\n");
147 	return -EPERM;
148 }
149 
150 /* class attribute for bond_masters file.  This ends up in /sys/class/net */
151 static CLASS_ATTR(bonding_masters,  S_IWUSR | S_IRUGO,
152 		  bonding_show_bonds, bonding_store_bonds);
153 
154 int bond_create_slave_symlinks(struct net_device *master,
155 			       struct net_device *slave)
156 {
157 	char linkname[IFNAMSIZ+7];
158 	int ret = 0;
159 
160 	/* first, create a link from the slave back to the master */
161 	ret = sysfs_create_link(&(slave->dev.kobj), &(master->dev.kobj),
162 				"master");
163 	if (ret)
164 		return ret;
165 	/* next, create a link from the master to the slave */
166 	sprintf(linkname, "slave_%s", slave->name);
167 	ret = sysfs_create_link(&(master->dev.kobj), &(slave->dev.kobj),
168 				linkname);
169 	return ret;
170 
171 }
172 
173 void bond_destroy_slave_symlinks(struct net_device *master,
174 				 struct net_device *slave)
175 {
176 	char linkname[IFNAMSIZ+7];
177 
178 	sysfs_remove_link(&(slave->dev.kobj), "master");
179 	sprintf(linkname, "slave_%s", slave->name);
180 	sysfs_remove_link(&(master->dev.kobj), linkname);
181 }
182 
183 
184 /*
185  * Show the slaves in the current bond.
186  */
187 static ssize_t bonding_show_slaves(struct device *d,
188 				   struct device_attribute *attr, char *buf)
189 {
190 	struct slave *slave;
191 	int i, res = 0;
192 	struct bonding *bond = to_bond(d);
193 
194 	read_lock(&bond->lock);
195 	bond_for_each_slave(bond, slave, i) {
196 		if (res > (PAGE_SIZE - IFNAMSIZ)) {
197 			/* not enough space for another interface name */
198 			if ((PAGE_SIZE - res) > 10)
199 				res = PAGE_SIZE - 10;
200 			res += sprintf(buf + res, "++more++ ");
201 			break;
202 		}
203 		res += sprintf(buf + res, "%s ", slave->dev->name);
204 	}
205 	read_unlock(&bond->lock);
206 	if (res)
207 		buf[res-1] = '\n'; /* eat the leftover space */
208 	return res;
209 }
210 
211 /*
212  * Set the slaves in the current bond.  The bond interface must be
213  * up for this to succeed.
214  * This function is largely the same flow as bonding_update_bonds().
215  */
216 static ssize_t bonding_store_slaves(struct device *d,
217 				    struct device_attribute *attr,
218 				    const char *buffer, size_t count)
219 {
220 	char command[IFNAMSIZ + 1] = { 0, };
221 	char *ifname;
222 	int i, res, found, ret = count;
223 	u32 original_mtu;
224 	struct slave *slave;
225 	struct net_device *dev = NULL;
226 	struct bonding *bond = to_bond(d);
227 
228 	/* Quick sanity check -- is the bond interface up? */
229 	if (!(bond->dev->flags & IFF_UP)) {
230 		pr_warning("%s: doing slave updates when interface is down.\n",
231 			   bond->dev->name);
232 	}
233 
234 	/* Note:  We can't hold bond->lock here, as bond_create grabs it. */
235 
236 	if (!rtnl_trylock())
237 		return restart_syscall();
238 
239 	sscanf(buffer, "%16s", command); /* IFNAMSIZ*/
240 	ifname = command + 1;
241 	if ((strlen(command) <= 1) ||
242 	    !dev_valid_name(ifname))
243 		goto err_no_cmd;
244 
245 	if (command[0] == '+') {
246 
247 		/* Got a slave name in ifname.  Is it already in the list? */
248 		found = 0;
249 
250 		dev = __dev_get_by_name(dev_net(bond->dev), ifname);
251 		if (!dev) {
252 			pr_info("%s: Interface %s does not exist!\n",
253 				bond->dev->name, ifname);
254 			ret = -ENODEV;
255 			goto out;
256 		}
257 
258 		if (dev->flags & IFF_UP) {
259 			pr_err("%s: Error: Unable to enslave %s because it is already up.\n",
260 			       bond->dev->name, dev->name);
261 			ret = -EPERM;
262 			goto out;
263 		}
264 
265 		read_lock(&bond->lock);
266 		bond_for_each_slave(bond, slave, i)
267 			if (slave->dev == dev) {
268 				pr_err("%s: Interface %s is already enslaved!\n",
269 				       bond->dev->name, ifname);
270 				ret = -EPERM;
271 				read_unlock(&bond->lock);
272 				goto out;
273 			}
274 		read_unlock(&bond->lock);
275 
276 		pr_info("%s: Adding slave %s.\n", bond->dev->name, ifname);
277 
278 		/* If this is the first slave, then we need to set
279 		   the master's hardware address to be the same as the
280 		   slave's. */
281 		if (is_zero_ether_addr(bond->dev->dev_addr))
282 			memcpy(bond->dev->dev_addr, dev->dev_addr,
283 			       dev->addr_len);
284 
285 		/* Set the slave's MTU to match the bond */
286 		original_mtu = dev->mtu;
287 		res = dev_set_mtu(dev, bond->dev->mtu);
288 		if (res) {
289 			ret = res;
290 			goto out;
291 		}
292 
293 		res = bond_enslave(bond->dev, dev);
294 		bond_for_each_slave(bond, slave, i)
295 			if (strnicmp(slave->dev->name, ifname, IFNAMSIZ) == 0)
296 				slave->original_mtu = original_mtu;
297 		if (res)
298 			ret = res;
299 
300 		goto out;
301 	}
302 
303 	if (command[0] == '-') {
304 		dev = NULL;
305 		original_mtu = 0;
306 		bond_for_each_slave(bond, slave, i)
307 			if (strnicmp(slave->dev->name, ifname, IFNAMSIZ) == 0) {
308 				dev = slave->dev;
309 				original_mtu = slave->original_mtu;
310 				break;
311 			}
312 		if (dev) {
313 			pr_info("%s: Removing slave %s\n",
314 				bond->dev->name, dev->name);
315 				res = bond_release(bond->dev, dev);
316 			if (res) {
317 				ret = res;
318 				goto out;
319 			}
320 			/* set the slave MTU to the default */
321 			dev_set_mtu(dev, original_mtu);
322 		} else {
323 			pr_err("unable to remove non-existent slave %s for bond %s.\n",
324 			       ifname, bond->dev->name);
325 			ret = -ENODEV;
326 		}
327 		goto out;
328 	}
329 
330 err_no_cmd:
331 	pr_err("no command found in slaves file for bond %s. Use +ifname or -ifname.\n",
332 	       bond->dev->name);
333 	ret = -EPERM;
334 
335 out:
336 	rtnl_unlock();
337 	return ret;
338 }
339 
340 static DEVICE_ATTR(slaves, S_IRUGO | S_IWUSR, bonding_show_slaves,
341 		   bonding_store_slaves);
342 
343 /*
344  * Show and set the bonding mode.  The bond interface must be down to
345  * change the mode.
346  */
347 static ssize_t bonding_show_mode(struct device *d,
348 				 struct device_attribute *attr, char *buf)
349 {
350 	struct bonding *bond = to_bond(d);
351 
352 	return sprintf(buf, "%s %d\n",
353 			bond_mode_tbl[bond->params.mode].modename,
354 			bond->params.mode);
355 }
356 
357 static ssize_t bonding_store_mode(struct device *d,
358 				  struct device_attribute *attr,
359 				  const char *buf, size_t count)
360 {
361 	int new_value, ret = count;
362 	struct bonding *bond = to_bond(d);
363 
364 	if (bond->dev->flags & IFF_UP) {
365 		pr_err("unable to update mode of %s because interface is up.\n",
366 		       bond->dev->name);
367 		ret = -EPERM;
368 		goto out;
369 	}
370 
371 	new_value = bond_parse_parm(buf, bond_mode_tbl);
372 	if (new_value < 0)  {
373 		pr_err("%s: Ignoring invalid mode value %.*s.\n",
374 		       bond->dev->name, (int)strlen(buf) - 1, buf);
375 		ret = -EINVAL;
376 		goto out;
377 	} else {
378 		if (bond->params.mode == BOND_MODE_8023AD)
379 			bond_unset_master_3ad_flags(bond);
380 
381 		if (bond->params.mode == BOND_MODE_ALB)
382 			bond_unset_master_alb_flags(bond);
383 
384 		bond->params.mode = new_value;
385 		bond_set_mode_ops(bond, bond->params.mode);
386 		pr_info("%s: setting mode to %s (%d).\n",
387 			bond->dev->name, bond_mode_tbl[new_value].modename,
388 		       new_value);
389 	}
390 out:
391 	return ret;
392 }
393 static DEVICE_ATTR(mode, S_IRUGO | S_IWUSR,
394 		   bonding_show_mode, bonding_store_mode);
395 
396 /*
397  * Show and set the bonding transmit hash method.
398  * The bond interface must be down to change the xmit hash policy.
399  */
400 static ssize_t bonding_show_xmit_hash(struct device *d,
401 				      struct device_attribute *attr,
402 				      char *buf)
403 {
404 	struct bonding *bond = to_bond(d);
405 
406 	return sprintf(buf, "%s %d\n",
407 		       xmit_hashtype_tbl[bond->params.xmit_policy].modename,
408 		       bond->params.xmit_policy);
409 }
410 
411 static ssize_t bonding_store_xmit_hash(struct device *d,
412 				       struct device_attribute *attr,
413 				       const char *buf, size_t count)
414 {
415 	int new_value, ret = count;
416 	struct bonding *bond = to_bond(d);
417 
418 	if (bond->dev->flags & IFF_UP) {
419 		pr_err("%s: Interface is up. Unable to update xmit policy.\n",
420 		       bond->dev->name);
421 		ret = -EPERM;
422 		goto out;
423 	}
424 
425 	new_value = bond_parse_parm(buf, xmit_hashtype_tbl);
426 	if (new_value < 0)  {
427 		pr_err("%s: Ignoring invalid xmit hash policy value %.*s.\n",
428 		       bond->dev->name,
429 		       (int)strlen(buf) - 1, buf);
430 		ret = -EINVAL;
431 		goto out;
432 	} else {
433 		bond->params.xmit_policy = new_value;
434 		bond_set_mode_ops(bond, bond->params.mode);
435 		pr_info("%s: setting xmit hash policy to %s (%d).\n",
436 			bond->dev->name,
437 			xmit_hashtype_tbl[new_value].modename, new_value);
438 	}
439 out:
440 	return ret;
441 }
442 static DEVICE_ATTR(xmit_hash_policy, S_IRUGO | S_IWUSR,
443 		   bonding_show_xmit_hash, bonding_store_xmit_hash);
444 
445 /*
446  * Show and set arp_validate.
447  */
448 static ssize_t bonding_show_arp_validate(struct device *d,
449 					 struct device_attribute *attr,
450 					 char *buf)
451 {
452 	struct bonding *bond = to_bond(d);
453 
454 	return sprintf(buf, "%s %d\n",
455 		       arp_validate_tbl[bond->params.arp_validate].modename,
456 		       bond->params.arp_validate);
457 }
458 
459 static ssize_t bonding_store_arp_validate(struct device *d,
460 					  struct device_attribute *attr,
461 					  const char *buf, size_t count)
462 {
463 	int new_value;
464 	struct bonding *bond = to_bond(d);
465 
466 	new_value = bond_parse_parm(buf, arp_validate_tbl);
467 	if (new_value < 0) {
468 		pr_err("%s: Ignoring invalid arp_validate value %s\n",
469 		       bond->dev->name, buf);
470 		return -EINVAL;
471 	}
472 	if (new_value && (bond->params.mode != BOND_MODE_ACTIVEBACKUP)) {
473 		pr_err("%s: arp_validate only supported in active-backup mode.\n",
474 		       bond->dev->name);
475 		return -EINVAL;
476 	}
477 	pr_info("%s: setting arp_validate to %s (%d).\n",
478 		bond->dev->name, arp_validate_tbl[new_value].modename,
479 		new_value);
480 
481 	if (!bond->params.arp_validate && new_value)
482 		bond_register_arp(bond);
483 	else if (bond->params.arp_validate && !new_value)
484 		bond_unregister_arp(bond);
485 
486 	bond->params.arp_validate = new_value;
487 
488 	return count;
489 }
490 
491 static DEVICE_ATTR(arp_validate, S_IRUGO | S_IWUSR, bonding_show_arp_validate,
492 		   bonding_store_arp_validate);
493 
494 /*
495  * Show and store fail_over_mac.  User only allowed to change the
496  * value when there are no slaves.
497  */
498 static ssize_t bonding_show_fail_over_mac(struct device *d,
499 					  struct device_attribute *attr,
500 					  char *buf)
501 {
502 	struct bonding *bond = to_bond(d);
503 
504 	return sprintf(buf, "%s %d\n",
505 		       fail_over_mac_tbl[bond->params.fail_over_mac].modename,
506 		       bond->params.fail_over_mac);
507 }
508 
509 static ssize_t bonding_store_fail_over_mac(struct device *d,
510 					   struct device_attribute *attr,
511 					   const char *buf, size_t count)
512 {
513 	int new_value;
514 	struct bonding *bond = to_bond(d);
515 
516 	if (bond->slave_cnt != 0) {
517 		pr_err("%s: Can't alter fail_over_mac with slaves in bond.\n",
518 		       bond->dev->name);
519 		return -EPERM;
520 	}
521 
522 	new_value = bond_parse_parm(buf, fail_over_mac_tbl);
523 	if (new_value < 0) {
524 		pr_err("%s: Ignoring invalid fail_over_mac value %s.\n",
525 		       bond->dev->name, buf);
526 		return -EINVAL;
527 	}
528 
529 	bond->params.fail_over_mac = new_value;
530 	pr_info("%s: Setting fail_over_mac to %s (%d).\n",
531 		bond->dev->name, fail_over_mac_tbl[new_value].modename,
532 		new_value);
533 
534 	return count;
535 }
536 
537 static DEVICE_ATTR(fail_over_mac, S_IRUGO | S_IWUSR,
538 		   bonding_show_fail_over_mac, bonding_store_fail_over_mac);
539 
540 /*
541  * Show and set the arp timer interval.  There are two tricky bits
542  * here.  First, if ARP monitoring is activated, then we must disable
543  * MII monitoring.  Second, if the ARP timer isn't running, we must
544  * start it.
545  */
546 static ssize_t bonding_show_arp_interval(struct device *d,
547 					 struct device_attribute *attr,
548 					 char *buf)
549 {
550 	struct bonding *bond = to_bond(d);
551 
552 	return sprintf(buf, "%d\n", bond->params.arp_interval);
553 }
554 
555 static ssize_t bonding_store_arp_interval(struct device *d,
556 					  struct device_attribute *attr,
557 					  const char *buf, size_t count)
558 {
559 	int new_value, ret = count;
560 	struct bonding *bond = to_bond(d);
561 
562 	if (sscanf(buf, "%d", &new_value) != 1) {
563 		pr_err("%s: no arp_interval value specified.\n",
564 		       bond->dev->name);
565 		ret = -EINVAL;
566 		goto out;
567 	}
568 	if (new_value < 0) {
569 		pr_err("%s: Invalid arp_interval value %d not in range 1-%d; rejected.\n",
570 		       bond->dev->name, new_value, INT_MAX);
571 		ret = -EINVAL;
572 		goto out;
573 	}
574 
575 	pr_info("%s: Setting ARP monitoring interval to %d.\n",
576 		bond->dev->name, new_value);
577 	bond->params.arp_interval = new_value;
578 	if (bond->params.arp_interval)
579 		bond->dev->priv_flags |= IFF_MASTER_ARPMON;
580 	if (bond->params.miimon) {
581 		pr_info("%s: ARP monitoring cannot be used with MII monitoring. %s Disabling MII monitoring.\n",
582 			bond->dev->name, bond->dev->name);
583 		bond->params.miimon = 0;
584 		if (delayed_work_pending(&bond->mii_work)) {
585 			cancel_delayed_work(&bond->mii_work);
586 			flush_workqueue(bond->wq);
587 		}
588 	}
589 	if (!bond->params.arp_targets[0]) {
590 		pr_info("%s: ARP monitoring has been set up, but no ARP targets have been specified.\n",
591 			bond->dev->name);
592 	}
593 	if (bond->dev->flags & IFF_UP) {
594 		/* If the interface is up, we may need to fire off
595 		 * the ARP timer.  If the interface is down, the
596 		 * timer will get fired off when the open function
597 		 * is called.
598 		 */
599 		if (!delayed_work_pending(&bond->arp_work)) {
600 			if (bond->params.mode == BOND_MODE_ACTIVEBACKUP)
601 				INIT_DELAYED_WORK(&bond->arp_work,
602 						  bond_activebackup_arp_mon);
603 			else
604 				INIT_DELAYED_WORK(&bond->arp_work,
605 						  bond_loadbalance_arp_mon);
606 
607 			queue_delayed_work(bond->wq, &bond->arp_work, 0);
608 		}
609 	}
610 
611 out:
612 	return ret;
613 }
614 static DEVICE_ATTR(arp_interval, S_IRUGO | S_IWUSR,
615 		   bonding_show_arp_interval, bonding_store_arp_interval);
616 
617 /*
618  * Show and set the arp targets.
619  */
620 static ssize_t bonding_show_arp_targets(struct device *d,
621 					struct device_attribute *attr,
622 					char *buf)
623 {
624 	int i, res = 0;
625 	struct bonding *bond = to_bond(d);
626 
627 	for (i = 0; i < BOND_MAX_ARP_TARGETS; i++) {
628 		if (bond->params.arp_targets[i])
629 			res += sprintf(buf + res, "%pI4 ",
630 				       &bond->params.arp_targets[i]);
631 	}
632 	if (res)
633 		buf[res-1] = '\n'; /* eat the leftover space */
634 	return res;
635 }
636 
637 static ssize_t bonding_store_arp_targets(struct device *d,
638 					 struct device_attribute *attr,
639 					 const char *buf, size_t count)
640 {
641 	__be32 newtarget;
642 	int i = 0, done = 0, ret = count;
643 	struct bonding *bond = to_bond(d);
644 	__be32 *targets;
645 
646 	targets = bond->params.arp_targets;
647 	newtarget = in_aton(buf + 1);
648 	/* look for adds */
649 	if (buf[0] == '+') {
650 		if ((newtarget == 0) || (newtarget == htonl(INADDR_BROADCAST))) {
651 			pr_err("%s: invalid ARP target %pI4 specified for addition\n",
652 			       bond->dev->name, &newtarget);
653 			ret = -EINVAL;
654 			goto out;
655 		}
656 		/* look for an empty slot to put the target in, and check for dupes */
657 		for (i = 0; (i < BOND_MAX_ARP_TARGETS) && !done; i++) {
658 			if (targets[i] == newtarget) { /* duplicate */
659 				pr_err("%s: ARP target %pI4 is already present\n",
660 				       bond->dev->name, &newtarget);
661 				ret = -EINVAL;
662 				goto out;
663 			}
664 			if (targets[i] == 0) {
665 				pr_info("%s: adding ARP target %pI4.\n",
666 					bond->dev->name, &newtarget);
667 				done = 1;
668 				targets[i] = newtarget;
669 			}
670 		}
671 		if (!done) {
672 			pr_err("%s: ARP target table is full!\n",
673 			       bond->dev->name);
674 			ret = -EINVAL;
675 			goto out;
676 		}
677 
678 	} else if (buf[0] == '-')	{
679 		if ((newtarget == 0) || (newtarget == htonl(INADDR_BROADCAST))) {
680 			pr_err("%s: invalid ARP target %pI4 specified for removal\n",
681 			       bond->dev->name, &newtarget);
682 			ret = -EINVAL;
683 			goto out;
684 		}
685 
686 		for (i = 0; (i < BOND_MAX_ARP_TARGETS) && !done; i++) {
687 			if (targets[i] == newtarget) {
688 				int j;
689 				pr_info("%s: removing ARP target %pI4.\n",
690 					bond->dev->name, &newtarget);
691 				for (j = i; (j < (BOND_MAX_ARP_TARGETS-1)) && targets[j+1]; j++)
692 					targets[j] = targets[j+1];
693 
694 				targets[j] = 0;
695 				done = 1;
696 			}
697 		}
698 		if (!done) {
699 			pr_info("%s: unable to remove nonexistent ARP target %pI4.\n",
700 				bond->dev->name, &newtarget);
701 			ret = -EINVAL;
702 			goto out;
703 		}
704 	} else {
705 		pr_err("no command found in arp_ip_targets file for bond %s. Use +<addr> or -<addr>.\n",
706 		       bond->dev->name);
707 		ret = -EPERM;
708 		goto out;
709 	}
710 
711 out:
712 	return ret;
713 }
714 static DEVICE_ATTR(arp_ip_target, S_IRUGO | S_IWUSR , bonding_show_arp_targets, bonding_store_arp_targets);
715 
716 /*
717  * Show and set the up and down delays.  These must be multiples of the
718  * MII monitoring value, and are stored internally as the multiplier.
719  * Thus, we must translate to MS for the real world.
720  */
721 static ssize_t bonding_show_downdelay(struct device *d,
722 				      struct device_attribute *attr,
723 				      char *buf)
724 {
725 	struct bonding *bond = to_bond(d);
726 
727 	return sprintf(buf, "%d\n", bond->params.downdelay * bond->params.miimon);
728 }
729 
730 static ssize_t bonding_store_downdelay(struct device *d,
731 				       struct device_attribute *attr,
732 				       const char *buf, size_t count)
733 {
734 	int new_value, ret = count;
735 	struct bonding *bond = to_bond(d);
736 
737 	if (!(bond->params.miimon)) {
738 		pr_err("%s: Unable to set down delay as MII monitoring is disabled\n",
739 		       bond->dev->name);
740 		ret = -EPERM;
741 		goto out;
742 	}
743 
744 	if (sscanf(buf, "%d", &new_value) != 1) {
745 		pr_err("%s: no down delay value specified.\n", bond->dev->name);
746 		ret = -EINVAL;
747 		goto out;
748 	}
749 	if (new_value < 0) {
750 		pr_err("%s: Invalid down delay value %d not in range %d-%d; rejected.\n",
751 		       bond->dev->name, new_value, 1, INT_MAX);
752 		ret = -EINVAL;
753 		goto out;
754 	} else {
755 		if ((new_value % bond->params.miimon) != 0) {
756 			pr_warning("%s: Warning: down delay (%d) is not a multiple of miimon (%d), delay rounded to %d ms\n",
757 				   bond->dev->name, new_value,
758 				   bond->params.miimon,
759 				   (new_value / bond->params.miimon) *
760 				   bond->params.miimon);
761 		}
762 		bond->params.downdelay = new_value / bond->params.miimon;
763 		pr_info("%s: Setting down delay to %d.\n",
764 			bond->dev->name,
765 			bond->params.downdelay * bond->params.miimon);
766 
767 	}
768 
769 out:
770 	return ret;
771 }
772 static DEVICE_ATTR(downdelay, S_IRUGO | S_IWUSR,
773 		   bonding_show_downdelay, bonding_store_downdelay);
774 
775 static ssize_t bonding_show_updelay(struct device *d,
776 				    struct device_attribute *attr,
777 				    char *buf)
778 {
779 	struct bonding *bond = to_bond(d);
780 
781 	return sprintf(buf, "%d\n", bond->params.updelay * bond->params.miimon);
782 
783 }
784 
785 static ssize_t bonding_store_updelay(struct device *d,
786 				     struct device_attribute *attr,
787 				     const char *buf, size_t count)
788 {
789 	int new_value, ret = count;
790 	struct bonding *bond = to_bond(d);
791 
792 	if (!(bond->params.miimon)) {
793 		pr_err("%s: Unable to set up delay as MII monitoring is disabled\n",
794 		       bond->dev->name);
795 		ret = -EPERM;
796 		goto out;
797 	}
798 
799 	if (sscanf(buf, "%d", &new_value) != 1) {
800 		pr_err("%s: no up delay value specified.\n",
801 		       bond->dev->name);
802 		ret = -EINVAL;
803 		goto out;
804 	}
805 	if (new_value < 0) {
806 		pr_err("%s: Invalid down delay value %d not in range %d-%d; rejected.\n",
807 		       bond->dev->name, new_value, 1, INT_MAX);
808 		ret = -EINVAL;
809 		goto out;
810 	} else {
811 		if ((new_value % bond->params.miimon) != 0) {
812 			pr_warning("%s: Warning: up delay (%d) is not a multiple of miimon (%d), updelay rounded to %d ms\n",
813 				   bond->dev->name, new_value,
814 				   bond->params.miimon,
815 				   (new_value / bond->params.miimon) *
816 				   bond->params.miimon);
817 		}
818 		bond->params.updelay = new_value / bond->params.miimon;
819 		pr_info("%s: Setting up delay to %d.\n",
820 			bond->dev->name,
821 			bond->params.updelay * bond->params.miimon);
822 	}
823 
824 out:
825 	return ret;
826 }
827 static DEVICE_ATTR(updelay, S_IRUGO | S_IWUSR,
828 		   bonding_show_updelay, bonding_store_updelay);
829 
830 /*
831  * Show and set the LACP interval.  Interface must be down, and the mode
832  * must be set to 802.3ad mode.
833  */
834 static ssize_t bonding_show_lacp(struct device *d,
835 				 struct device_attribute *attr,
836 				 char *buf)
837 {
838 	struct bonding *bond = to_bond(d);
839 
840 	return sprintf(buf, "%s %d\n",
841 		bond_lacp_tbl[bond->params.lacp_fast].modename,
842 		bond->params.lacp_fast);
843 }
844 
845 static ssize_t bonding_store_lacp(struct device *d,
846 				  struct device_attribute *attr,
847 				  const char *buf, size_t count)
848 {
849 	int new_value, ret = count;
850 	struct bonding *bond = to_bond(d);
851 
852 	if (bond->dev->flags & IFF_UP) {
853 		pr_err("%s: Unable to update LACP rate because interface is up.\n",
854 		       bond->dev->name);
855 		ret = -EPERM;
856 		goto out;
857 	}
858 
859 	if (bond->params.mode != BOND_MODE_8023AD) {
860 		pr_err("%s: Unable to update LACP rate because bond is not in 802.3ad mode.\n",
861 		       bond->dev->name);
862 		ret = -EPERM;
863 		goto out;
864 	}
865 
866 	new_value = bond_parse_parm(buf, bond_lacp_tbl);
867 
868 	if ((new_value == 1) || (new_value == 0)) {
869 		bond->params.lacp_fast = new_value;
870 		pr_info("%s: Setting LACP rate to %s (%d).\n",
871 			bond->dev->name, bond_lacp_tbl[new_value].modename,
872 			new_value);
873 	} else {
874 		pr_err("%s: Ignoring invalid LACP rate value %.*s.\n",
875 		       bond->dev->name, (int)strlen(buf) - 1, buf);
876 		ret = -EINVAL;
877 	}
878 out:
879 	return ret;
880 }
881 static DEVICE_ATTR(lacp_rate, S_IRUGO | S_IWUSR,
882 		   bonding_show_lacp, bonding_store_lacp);
883 
884 static ssize_t bonding_show_ad_select(struct device *d,
885 				      struct device_attribute *attr,
886 				      char *buf)
887 {
888 	struct bonding *bond = to_bond(d);
889 
890 	return sprintf(buf, "%s %d\n",
891 		ad_select_tbl[bond->params.ad_select].modename,
892 		bond->params.ad_select);
893 }
894 
895 
896 static ssize_t bonding_store_ad_select(struct device *d,
897 				       struct device_attribute *attr,
898 				       const char *buf, size_t count)
899 {
900 	int new_value, ret = count;
901 	struct bonding *bond = to_bond(d);
902 
903 	if (bond->dev->flags & IFF_UP) {
904 		pr_err("%s: Unable to update ad_select because interface is up.\n",
905 		       bond->dev->name);
906 		ret = -EPERM;
907 		goto out;
908 	}
909 
910 	new_value = bond_parse_parm(buf, ad_select_tbl);
911 
912 	if (new_value != -1) {
913 		bond->params.ad_select = new_value;
914 		pr_info("%s: Setting ad_select to %s (%d).\n",
915 			bond->dev->name, ad_select_tbl[new_value].modename,
916 			new_value);
917 	} else {
918 		pr_err("%s: Ignoring invalid ad_select value %.*s.\n",
919 		       bond->dev->name, (int)strlen(buf) - 1, buf);
920 		ret = -EINVAL;
921 	}
922 out:
923 	return ret;
924 }
925 static DEVICE_ATTR(ad_select, S_IRUGO | S_IWUSR,
926 		   bonding_show_ad_select, bonding_store_ad_select);
927 
928 /*
929  * Show and set the number of grat ARP to send after a failover event.
930  */
931 static ssize_t bonding_show_n_grat_arp(struct device *d,
932 				   struct device_attribute *attr,
933 				   char *buf)
934 {
935 	struct bonding *bond = to_bond(d);
936 
937 	return sprintf(buf, "%d\n", bond->params.num_grat_arp);
938 }
939 
940 static ssize_t bonding_store_n_grat_arp(struct device *d,
941 				    struct device_attribute *attr,
942 				    const char *buf, size_t count)
943 {
944 	int new_value, ret = count;
945 	struct bonding *bond = to_bond(d);
946 
947 	if (sscanf(buf, "%d", &new_value) != 1) {
948 		pr_err("%s: no num_grat_arp value specified.\n",
949 		       bond->dev->name);
950 		ret = -EINVAL;
951 		goto out;
952 	}
953 	if (new_value < 0 || new_value > 255) {
954 		pr_err("%s: Invalid num_grat_arp value %d not in range 0-255; rejected.\n",
955 		       bond->dev->name, new_value);
956 		ret = -EINVAL;
957 		goto out;
958 	} else {
959 		bond->params.num_grat_arp = new_value;
960 	}
961 out:
962 	return ret;
963 }
964 static DEVICE_ATTR(num_grat_arp, S_IRUGO | S_IWUSR,
965 		   bonding_show_n_grat_arp, bonding_store_n_grat_arp);
966 
967 /*
968  * Show and set the number of unsolicited NA's to send after a failover event.
969  */
970 static ssize_t bonding_show_n_unsol_na(struct device *d,
971 				       struct device_attribute *attr,
972 				       char *buf)
973 {
974 	struct bonding *bond = to_bond(d);
975 
976 	return sprintf(buf, "%d\n", bond->params.num_unsol_na);
977 }
978 
979 static ssize_t bonding_store_n_unsol_na(struct device *d,
980 					struct device_attribute *attr,
981 					const char *buf, size_t count)
982 {
983 	int new_value, ret = count;
984 	struct bonding *bond = to_bond(d);
985 
986 	if (sscanf(buf, "%d", &new_value) != 1) {
987 		pr_err("%s: no num_unsol_na value specified.\n",
988 		       bond->dev->name);
989 		ret = -EINVAL;
990 		goto out;
991 	}
992 
993 	if (new_value < 0 || new_value > 255) {
994 		pr_err("%s: Invalid num_unsol_na value %d not in range 0-255; rejected.\n",
995 		       bond->dev->name, new_value);
996 		ret = -EINVAL;
997 		goto out;
998 	} else
999 		bond->params.num_unsol_na = new_value;
1000 out:
1001 	return ret;
1002 }
1003 static DEVICE_ATTR(num_unsol_na, S_IRUGO | S_IWUSR,
1004 		   bonding_show_n_unsol_na, bonding_store_n_unsol_na);
1005 
1006 /*
1007  * Show and set the MII monitor interval.  There are two tricky bits
1008  * here.  First, if MII monitoring is activated, then we must disable
1009  * ARP monitoring.  Second, if the timer isn't running, we must
1010  * start it.
1011  */
1012 static ssize_t bonding_show_miimon(struct device *d,
1013 				   struct device_attribute *attr,
1014 				   char *buf)
1015 {
1016 	struct bonding *bond = to_bond(d);
1017 
1018 	return sprintf(buf, "%d\n", bond->params.miimon);
1019 }
1020 
1021 static ssize_t bonding_store_miimon(struct device *d,
1022 				    struct device_attribute *attr,
1023 				    const char *buf, size_t count)
1024 {
1025 	int new_value, ret = count;
1026 	struct bonding *bond = to_bond(d);
1027 
1028 	if (sscanf(buf, "%d", &new_value) != 1) {
1029 		pr_err("%s: no miimon value specified.\n",
1030 		       bond->dev->name);
1031 		ret = -EINVAL;
1032 		goto out;
1033 	}
1034 	if (new_value < 0) {
1035 		pr_err("%s: Invalid miimon value %d not in range %d-%d; rejected.\n",
1036 		       bond->dev->name, new_value, 1, INT_MAX);
1037 		ret = -EINVAL;
1038 		goto out;
1039 	} else {
1040 		pr_info("%s: Setting MII monitoring interval to %d.\n",
1041 			bond->dev->name, new_value);
1042 		bond->params.miimon = new_value;
1043 		if (bond->params.updelay)
1044 			pr_info("%s: Note: Updating updelay (to %d) since it is a multiple of the miimon value.\n",
1045 				bond->dev->name,
1046 				bond->params.updelay * bond->params.miimon);
1047 		if (bond->params.downdelay)
1048 			pr_info("%s: Note: Updating downdelay (to %d) since it is a multiple of the miimon value.\n",
1049 				bond->dev->name,
1050 				bond->params.downdelay * bond->params.miimon);
1051 		if (bond->params.arp_interval) {
1052 			pr_info("%s: MII monitoring cannot be used with ARP monitoring. Disabling ARP monitoring...\n",
1053 				bond->dev->name);
1054 			bond->params.arp_interval = 0;
1055 			bond->dev->priv_flags &= ~IFF_MASTER_ARPMON;
1056 			if (bond->params.arp_validate) {
1057 				bond_unregister_arp(bond);
1058 				bond->params.arp_validate =
1059 					BOND_ARP_VALIDATE_NONE;
1060 			}
1061 			if (delayed_work_pending(&bond->arp_work)) {
1062 				cancel_delayed_work(&bond->arp_work);
1063 				flush_workqueue(bond->wq);
1064 			}
1065 		}
1066 
1067 		if (bond->dev->flags & IFF_UP) {
1068 			/* If the interface is up, we may need to fire off
1069 			 * the MII timer. If the interface is down, the
1070 			 * timer will get fired off when the open function
1071 			 * is called.
1072 			 */
1073 			if (!delayed_work_pending(&bond->mii_work)) {
1074 				INIT_DELAYED_WORK(&bond->mii_work,
1075 						  bond_mii_monitor);
1076 				queue_delayed_work(bond->wq,
1077 						   &bond->mii_work, 0);
1078 			}
1079 		}
1080 	}
1081 out:
1082 	return ret;
1083 }
1084 static DEVICE_ATTR(miimon, S_IRUGO | S_IWUSR,
1085 		   bonding_show_miimon, bonding_store_miimon);
1086 
1087 /*
1088  * Show and set the primary slave.  The store function is much
1089  * simpler than bonding_store_slaves function because it only needs to
1090  * handle one interface name.
1091  * The bond must be a mode that supports a primary for this be
1092  * set.
1093  */
1094 static ssize_t bonding_show_primary(struct device *d,
1095 				    struct device_attribute *attr,
1096 				    char *buf)
1097 {
1098 	int count = 0;
1099 	struct bonding *bond = to_bond(d);
1100 
1101 	if (bond->primary_slave)
1102 		count = sprintf(buf, "%s\n", bond->primary_slave->dev->name);
1103 
1104 	return count;
1105 }
1106 
1107 static ssize_t bonding_store_primary(struct device *d,
1108 				     struct device_attribute *attr,
1109 				     const char *buf, size_t count)
1110 {
1111 	int i;
1112 	struct slave *slave;
1113 	struct bonding *bond = to_bond(d);
1114 
1115 	if (!rtnl_trylock())
1116 		return restart_syscall();
1117 	read_lock(&bond->lock);
1118 	write_lock_bh(&bond->curr_slave_lock);
1119 
1120 	if (!USES_PRIMARY(bond->params.mode)) {
1121 		pr_info("%s: Unable to set primary slave; %s is in mode %d\n",
1122 			bond->dev->name, bond->dev->name, bond->params.mode);
1123 	} else {
1124 		bond_for_each_slave(bond, slave, i) {
1125 			if (strnicmp
1126 			    (slave->dev->name, buf,
1127 			     strlen(slave->dev->name)) == 0) {
1128 				pr_info("%s: Setting %s as primary slave.\n",
1129 					bond->dev->name, slave->dev->name);
1130 				bond->primary_slave = slave;
1131 				strcpy(bond->params.primary, slave->dev->name);
1132 				bond_select_active_slave(bond);
1133 				goto out;
1134 			}
1135 		}
1136 
1137 		/* if we got here, then we didn't match the name of any slave */
1138 
1139 		if (strlen(buf) == 0 || buf[0] == '\n') {
1140 			pr_info("%s: Setting primary slave to None.\n",
1141 				bond->dev->name);
1142 			bond->primary_slave = NULL;
1143 				bond_select_active_slave(bond);
1144 		} else {
1145 			pr_info("%s: Unable to set %.*s as primary slave as it is not a slave.\n",
1146 				bond->dev->name, (int)strlen(buf) - 1, buf);
1147 		}
1148 	}
1149 out:
1150 	write_unlock_bh(&bond->curr_slave_lock);
1151 	read_unlock(&bond->lock);
1152 	rtnl_unlock();
1153 
1154 	return count;
1155 }
1156 static DEVICE_ATTR(primary, S_IRUGO | S_IWUSR,
1157 		   bonding_show_primary, bonding_store_primary);
1158 
1159 /*
1160  * Show and set the primary_reselect flag.
1161  */
1162 static ssize_t bonding_show_primary_reselect(struct device *d,
1163 					     struct device_attribute *attr,
1164 					     char *buf)
1165 {
1166 	struct bonding *bond = to_bond(d);
1167 
1168 	return sprintf(buf, "%s %d\n",
1169 		       pri_reselect_tbl[bond->params.primary_reselect].modename,
1170 		       bond->params.primary_reselect);
1171 }
1172 
1173 static ssize_t bonding_store_primary_reselect(struct device *d,
1174 					      struct device_attribute *attr,
1175 					      const char *buf, size_t count)
1176 {
1177 	int new_value, ret = count;
1178 	struct bonding *bond = to_bond(d);
1179 
1180 	if (!rtnl_trylock())
1181 		return restart_syscall();
1182 
1183 	new_value = bond_parse_parm(buf, pri_reselect_tbl);
1184 	if (new_value < 0)  {
1185 		pr_err("%s: Ignoring invalid primary_reselect value %.*s.\n",
1186 		       bond->dev->name,
1187 		       (int) strlen(buf) - 1, buf);
1188 		ret = -EINVAL;
1189 		goto out;
1190 	}
1191 
1192 	bond->params.primary_reselect = new_value;
1193 	pr_info("%s: setting primary_reselect to %s (%d).\n",
1194 		bond->dev->name, pri_reselect_tbl[new_value].modename,
1195 		new_value);
1196 
1197 	read_lock(&bond->lock);
1198 	write_lock_bh(&bond->curr_slave_lock);
1199 	bond_select_active_slave(bond);
1200 	write_unlock_bh(&bond->curr_slave_lock);
1201 	read_unlock(&bond->lock);
1202 out:
1203 	rtnl_unlock();
1204 	return ret;
1205 }
1206 static DEVICE_ATTR(primary_reselect, S_IRUGO | S_IWUSR,
1207 		   bonding_show_primary_reselect,
1208 		   bonding_store_primary_reselect);
1209 
1210 /*
1211  * Show and set the use_carrier flag.
1212  */
1213 static ssize_t bonding_show_carrier(struct device *d,
1214 				    struct device_attribute *attr,
1215 				    char *buf)
1216 {
1217 	struct bonding *bond = to_bond(d);
1218 
1219 	return sprintf(buf, "%d\n", bond->params.use_carrier);
1220 }
1221 
1222 static ssize_t bonding_store_carrier(struct device *d,
1223 				     struct device_attribute *attr,
1224 				     const char *buf, size_t count)
1225 {
1226 	int new_value, ret = count;
1227 	struct bonding *bond = to_bond(d);
1228 
1229 
1230 	if (sscanf(buf, "%d", &new_value) != 1) {
1231 		pr_err("%s: no use_carrier value specified.\n",
1232 		       bond->dev->name);
1233 		ret = -EINVAL;
1234 		goto out;
1235 	}
1236 	if ((new_value == 0) || (new_value == 1)) {
1237 		bond->params.use_carrier = new_value;
1238 		pr_info("%s: Setting use_carrier to %d.\n",
1239 			bond->dev->name, new_value);
1240 	} else {
1241 		pr_info("%s: Ignoring invalid use_carrier value %d.\n",
1242 			bond->dev->name, new_value);
1243 	}
1244 out:
1245 	return count;
1246 }
1247 static DEVICE_ATTR(use_carrier, S_IRUGO | S_IWUSR,
1248 		   bonding_show_carrier, bonding_store_carrier);
1249 
1250 
1251 /*
1252  * Show and set currently active_slave.
1253  */
1254 static ssize_t bonding_show_active_slave(struct device *d,
1255 					 struct device_attribute *attr,
1256 					 char *buf)
1257 {
1258 	struct slave *curr;
1259 	struct bonding *bond = to_bond(d);
1260 	int count = 0;
1261 
1262 	read_lock(&bond->curr_slave_lock);
1263 	curr = bond->curr_active_slave;
1264 	read_unlock(&bond->curr_slave_lock);
1265 
1266 	if (USES_PRIMARY(bond->params.mode) && curr)
1267 		count = sprintf(buf, "%s\n", curr->dev->name);
1268 	return count;
1269 }
1270 
1271 static ssize_t bonding_store_active_slave(struct device *d,
1272 					  struct device_attribute *attr,
1273 					  const char *buf, size_t count)
1274 {
1275 	int i;
1276 	struct slave *slave;
1277 	struct slave *old_active = NULL;
1278 	struct slave *new_active = NULL;
1279 	struct bonding *bond = to_bond(d);
1280 
1281 	if (!rtnl_trylock())
1282 		return restart_syscall();
1283 	read_lock(&bond->lock);
1284 	write_lock_bh(&bond->curr_slave_lock);
1285 
1286 	if (!USES_PRIMARY(bond->params.mode))
1287 		pr_info("%s: Unable to change active slave; %s is in mode %d\n",
1288 			bond->dev->name, bond->dev->name, bond->params.mode);
1289 	else {
1290 		bond_for_each_slave(bond, slave, i) {
1291 			if (strnicmp
1292 			    (slave->dev->name, buf,
1293 			     strlen(slave->dev->name)) == 0) {
1294         			old_active = bond->curr_active_slave;
1295         			new_active = slave;
1296         			if (new_active == old_active) {
1297 					/* do nothing */
1298 					pr_info("%s: %s is already the current active slave.\n",
1299 						bond->dev->name,
1300 						slave->dev->name);
1301 					goto out;
1302 				}
1303 				else {
1304         				if ((new_active) &&
1305             				    (old_active) &&
1306 				            (new_active->link == BOND_LINK_UP) &&
1307 				            IS_UP(new_active->dev)) {
1308 						pr_info("%s: Setting %s as active slave.\n",
1309 							bond->dev->name,
1310 							slave->dev->name);
1311 							bond_change_active_slave(bond, new_active);
1312         				}
1313 					else {
1314 						pr_info("%s: Could not set %s as active slave; either %s is down or the link is down.\n",
1315 							bond->dev->name,
1316 							slave->dev->name,
1317 							slave->dev->name);
1318 					}
1319 					goto out;
1320 				}
1321 			}
1322 		}
1323 
1324 		/* if we got here, then we didn't match the name of any slave */
1325 
1326 		if (strlen(buf) == 0 || buf[0] == '\n') {
1327 			pr_info("%s: Setting active slave to None.\n",
1328 				bond->dev->name);
1329 			bond->primary_slave = NULL;
1330 			bond_select_active_slave(bond);
1331 		} else {
1332 			pr_info("%s: Unable to set %.*s as active slave as it is not a slave.\n",
1333 				bond->dev->name, (int)strlen(buf) - 1, buf);
1334 		}
1335 	}
1336  out:
1337 	write_unlock_bh(&bond->curr_slave_lock);
1338 	read_unlock(&bond->lock);
1339 	rtnl_unlock();
1340 
1341 	return count;
1342 
1343 }
1344 static DEVICE_ATTR(active_slave, S_IRUGO | S_IWUSR,
1345 		   bonding_show_active_slave, bonding_store_active_slave);
1346 
1347 
1348 /*
1349  * Show link status of the bond interface.
1350  */
1351 static ssize_t bonding_show_mii_status(struct device *d,
1352 				       struct device_attribute *attr,
1353 				       char *buf)
1354 {
1355 	struct slave *curr;
1356 	struct bonding *bond = to_bond(d);
1357 
1358 	read_lock(&bond->curr_slave_lock);
1359 	curr = bond->curr_active_slave;
1360 	read_unlock(&bond->curr_slave_lock);
1361 
1362 	return sprintf(buf, "%s\n", curr ? "up" : "down");
1363 }
1364 static DEVICE_ATTR(mii_status, S_IRUGO, bonding_show_mii_status, NULL);
1365 
1366 
1367 /*
1368  * Show current 802.3ad aggregator ID.
1369  */
1370 static ssize_t bonding_show_ad_aggregator(struct device *d,
1371 					  struct device_attribute *attr,
1372 					  char *buf)
1373 {
1374 	int count = 0;
1375 	struct bonding *bond = to_bond(d);
1376 
1377 	if (bond->params.mode == BOND_MODE_8023AD) {
1378 		struct ad_info ad_info;
1379 		count = sprintf(buf, "%d\n",
1380 				(bond_3ad_get_active_agg_info(bond, &ad_info))
1381 				?  0 : ad_info.aggregator_id);
1382 	}
1383 
1384 	return count;
1385 }
1386 static DEVICE_ATTR(ad_aggregator, S_IRUGO, bonding_show_ad_aggregator, NULL);
1387 
1388 
1389 /*
1390  * Show number of active 802.3ad ports.
1391  */
1392 static ssize_t bonding_show_ad_num_ports(struct device *d,
1393 					 struct device_attribute *attr,
1394 					 char *buf)
1395 {
1396 	int count = 0;
1397 	struct bonding *bond = to_bond(d);
1398 
1399 	if (bond->params.mode == BOND_MODE_8023AD) {
1400 		struct ad_info ad_info;
1401 		count = sprintf(buf, "%d\n",
1402 				(bond_3ad_get_active_agg_info(bond, &ad_info))
1403 				?  0 : ad_info.ports);
1404 	}
1405 
1406 	return count;
1407 }
1408 static DEVICE_ATTR(ad_num_ports, S_IRUGO, bonding_show_ad_num_ports, NULL);
1409 
1410 
1411 /*
1412  * Show current 802.3ad actor key.
1413  */
1414 static ssize_t bonding_show_ad_actor_key(struct device *d,
1415 					 struct device_attribute *attr,
1416 					 char *buf)
1417 {
1418 	int count = 0;
1419 	struct bonding *bond = to_bond(d);
1420 
1421 	if (bond->params.mode == BOND_MODE_8023AD) {
1422 		struct ad_info ad_info;
1423 		count = sprintf(buf, "%d\n",
1424 				(bond_3ad_get_active_agg_info(bond, &ad_info))
1425 				?  0 : ad_info.actor_key);
1426 	}
1427 
1428 	return count;
1429 }
1430 static DEVICE_ATTR(ad_actor_key, S_IRUGO, bonding_show_ad_actor_key, NULL);
1431 
1432 
1433 /*
1434  * Show current 802.3ad partner key.
1435  */
1436 static ssize_t bonding_show_ad_partner_key(struct device *d,
1437 					   struct device_attribute *attr,
1438 					   char *buf)
1439 {
1440 	int count = 0;
1441 	struct bonding *bond = to_bond(d);
1442 
1443 	if (bond->params.mode == BOND_MODE_8023AD) {
1444 		struct ad_info ad_info;
1445 		count = sprintf(buf, "%d\n",
1446 				(bond_3ad_get_active_agg_info(bond, &ad_info))
1447 				?  0 : ad_info.partner_key);
1448 	}
1449 
1450 	return count;
1451 }
1452 static DEVICE_ATTR(ad_partner_key, S_IRUGO, bonding_show_ad_partner_key, NULL);
1453 
1454 
1455 /*
1456  * Show current 802.3ad partner mac.
1457  */
1458 static ssize_t bonding_show_ad_partner_mac(struct device *d,
1459 					   struct device_attribute *attr,
1460 					   char *buf)
1461 {
1462 	int count = 0;
1463 	struct bonding *bond = to_bond(d);
1464 
1465 	if (bond->params.mode == BOND_MODE_8023AD) {
1466 		struct ad_info ad_info;
1467 		if (!bond_3ad_get_active_agg_info(bond, &ad_info))
1468 			count = sprintf(buf, "%pM\n", ad_info.partner_system);
1469 	}
1470 
1471 	return count;
1472 }
1473 static DEVICE_ATTR(ad_partner_mac, S_IRUGO, bonding_show_ad_partner_mac, NULL);
1474 
1475 
1476 
1477 static struct attribute *per_bond_attrs[] = {
1478 	&dev_attr_slaves.attr,
1479 	&dev_attr_mode.attr,
1480 	&dev_attr_fail_over_mac.attr,
1481 	&dev_attr_arp_validate.attr,
1482 	&dev_attr_arp_interval.attr,
1483 	&dev_attr_arp_ip_target.attr,
1484 	&dev_attr_downdelay.attr,
1485 	&dev_attr_updelay.attr,
1486 	&dev_attr_lacp_rate.attr,
1487 	&dev_attr_ad_select.attr,
1488 	&dev_attr_xmit_hash_policy.attr,
1489 	&dev_attr_num_grat_arp.attr,
1490 	&dev_attr_num_unsol_na.attr,
1491 	&dev_attr_miimon.attr,
1492 	&dev_attr_primary.attr,
1493 	&dev_attr_primary_reselect.attr,
1494 	&dev_attr_use_carrier.attr,
1495 	&dev_attr_active_slave.attr,
1496 	&dev_attr_mii_status.attr,
1497 	&dev_attr_ad_aggregator.attr,
1498 	&dev_attr_ad_num_ports.attr,
1499 	&dev_attr_ad_actor_key.attr,
1500 	&dev_attr_ad_partner_key.attr,
1501 	&dev_attr_ad_partner_mac.attr,
1502 	NULL,
1503 };
1504 
1505 static struct attribute_group bonding_group = {
1506 	.name = "bonding",
1507 	.attrs = per_bond_attrs,
1508 };
1509 
1510 /*
1511  * Initialize sysfs.  This sets up the bonding_masters file in
1512  * /sys/class/net.
1513  */
1514 int bond_create_sysfs(void)
1515 {
1516 	int ret;
1517 
1518 	ret = netdev_class_create_file(&class_attr_bonding_masters);
1519 	/*
1520 	 * Permit multiple loads of the module by ignoring failures to
1521 	 * create the bonding_masters sysfs file.  Bonding devices
1522 	 * created by second or subsequent loads of the module will
1523 	 * not be listed in, or controllable by, bonding_masters, but
1524 	 * will have the usual "bonding" sysfs directory.
1525 	 *
1526 	 * This is done to preserve backwards compatibility for
1527 	 * initscripts/sysconfig, which load bonding multiple times to
1528 	 * configure multiple bonding devices.
1529 	 */
1530 	if (ret == -EEXIST) {
1531 		/* Is someone being kinky and naming a device bonding_master? */
1532 		if (__dev_get_by_name(&init_net,
1533 				      class_attr_bonding_masters.attr.name))
1534 			pr_err("network device named %s already exists in sysfs",
1535 			       class_attr_bonding_masters.attr.name);
1536 		ret = 0;
1537 	}
1538 
1539 	return ret;
1540 
1541 }
1542 
1543 /*
1544  * Remove /sys/class/net/bonding_masters.
1545  */
1546 void bond_destroy_sysfs(void)
1547 {
1548 	netdev_class_remove_file(&class_attr_bonding_masters);
1549 }
1550 
1551 /*
1552  * Initialize sysfs for each bond.  This sets up and registers
1553  * the 'bondctl' directory for each individual bond under /sys/class/net.
1554  */
1555 void bond_prepare_sysfs_group(struct bonding *bond)
1556 {
1557 	bond->dev->sysfs_groups[0] = &bonding_group;
1558 }
1559 
1560