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