bonding: convert ad_select to use the new option API
[cascardo/linux.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, see <http://www.gnu.org/licenses/>.
16  *
17  * The full GNU General Public License is included in this distribution in the
18  * file called LICENSE.
19  *
20  */
21
22 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
23
24 #include <linux/kernel.h>
25 #include <linux/module.h>
26 #include <linux/device.h>
27 #include <linux/sched.h>
28 #include <linux/fs.h>
29 #include <linux/types.h>
30 #include <linux/string.h>
31 #include <linux/netdevice.h>
32 #include <linux/inetdevice.h>
33 #include <linux/in.h>
34 #include <linux/sysfs.h>
35 #include <linux/ctype.h>
36 #include <linux/inet.h>
37 #include <linux/rtnetlink.h>
38 #include <linux/etherdevice.h>
39 #include <net/net_namespace.h>
40 #include <net/netns/generic.h>
41 #include <linux/nsproxy.h>
42
43 #include "bonding.h"
44
45 #define to_dev(obj)     container_of(obj, struct device, kobj)
46 #define to_bond(cd)     ((struct bonding *)(netdev_priv(to_net_dev(cd))))
47
48 /*
49  * "show" function for the bond_masters attribute.
50  * The class parameter is ignored.
51  */
52 static ssize_t bonding_show_bonds(struct class *cls,
53                                   struct class_attribute *attr,
54                                   char *buf)
55 {
56         struct bond_net *bn =
57                 container_of(attr, struct bond_net, class_attr_bonding_masters);
58         int res = 0;
59         struct bonding *bond;
60
61         rtnl_lock();
62
63         list_for_each_entry(bond, &bn->dev_list, bond_list) {
64                 if (res > (PAGE_SIZE - IFNAMSIZ)) {
65                         /* not enough space for another interface name */
66                         if ((PAGE_SIZE - res) > 10)
67                                 res = PAGE_SIZE - 10;
68                         res += sprintf(buf + res, "++more++ ");
69                         break;
70                 }
71                 res += sprintf(buf + res, "%s ", bond->dev->name);
72         }
73         if (res)
74                 buf[res-1] = '\n'; /* eat the leftover space */
75
76         rtnl_unlock();
77         return res;
78 }
79
80 static struct net_device *bond_get_by_name(struct bond_net *bn, const char *ifname)
81 {
82         struct bonding *bond;
83
84         list_for_each_entry(bond, &bn->dev_list, bond_list) {
85                 if (strncmp(bond->dev->name, ifname, IFNAMSIZ) == 0)
86                         return bond->dev;
87         }
88         return NULL;
89 }
90
91 /*
92  * "store" function for the bond_masters attribute.  This is what
93  * creates and deletes entire bonds.
94  *
95  * The class parameter is ignored.
96  *
97  */
98
99 static ssize_t bonding_store_bonds(struct class *cls,
100                                    struct class_attribute *attr,
101                                    const char *buffer, size_t count)
102 {
103         struct bond_net *bn =
104                 container_of(attr, struct bond_net, class_attr_bonding_masters);
105         char command[IFNAMSIZ + 1] = {0, };
106         char *ifname;
107         int rv, res = count;
108
109         sscanf(buffer, "%16s", command); /* IFNAMSIZ*/
110         ifname = command + 1;
111         if ((strlen(command) <= 1) ||
112             !dev_valid_name(ifname))
113                 goto err_no_cmd;
114
115         if (command[0] == '+') {
116                 pr_info("%s is being created...\n", ifname);
117                 rv = bond_create(bn->net, ifname);
118                 if (rv) {
119                         if (rv == -EEXIST)
120                                 pr_info("%s already exists.\n", ifname);
121                         else
122                                 pr_info("%s creation failed.\n", ifname);
123                         res = rv;
124                 }
125         } else if (command[0] == '-') {
126                 struct net_device *bond_dev;
127
128                 rtnl_lock();
129                 bond_dev = bond_get_by_name(bn, ifname);
130                 if (bond_dev) {
131                         pr_info("%s is being deleted...\n", ifname);
132                         unregister_netdevice(bond_dev);
133                 } else {
134                         pr_err("unable to delete non-existent %s\n", ifname);
135                         res = -ENODEV;
136                 }
137                 rtnl_unlock();
138         } else
139                 goto err_no_cmd;
140
141         /* Always return either count or an error.  If you return 0, you'll
142          * get called forever, which is bad.
143          */
144         return res;
145
146 err_no_cmd:
147         pr_err("no command found in bonding_masters. Use +ifname or -ifname.\n");
148         return -EPERM;
149 }
150
151 /* class attribute for bond_masters file.  This ends up in /sys/class/net */
152 static const struct class_attribute class_attr_bonding_masters = {
153         .attr = {
154                 .name = "bonding_masters",
155                 .mode = S_IWUSR | S_IRUGO,
156         },
157         .show = bonding_show_bonds,
158         .store = bonding_store_bonds,
159 };
160
161 /*
162  * Show the slaves in the current bond.
163  */
164 static ssize_t bonding_show_slaves(struct device *d,
165                                    struct device_attribute *attr, char *buf)
166 {
167         struct bonding *bond = to_bond(d);
168         struct list_head *iter;
169         struct slave *slave;
170         int res = 0;
171
172         if (!rtnl_trylock())
173                 return restart_syscall();
174
175         bond_for_each_slave(bond, slave, iter) {
176                 if (res > (PAGE_SIZE - IFNAMSIZ)) {
177                         /* not enough space for another interface name */
178                         if ((PAGE_SIZE - res) > 10)
179                                 res = PAGE_SIZE - 10;
180                         res += sprintf(buf + res, "++more++ ");
181                         break;
182                 }
183                 res += sprintf(buf + res, "%s ", slave->dev->name);
184         }
185
186         rtnl_unlock();
187
188         if (res)
189                 buf[res-1] = '\n'; /* eat the leftover space */
190
191         return res;
192 }
193
194 /*
195  * Set the slaves in the current bond.
196  * This is supposed to be only thin wrapper for bond_enslave and bond_release.
197  * All hard work should be done there.
198  */
199 static ssize_t bonding_store_slaves(struct device *d,
200                                     struct device_attribute *attr,
201                                     const char *buffer, size_t count)
202 {
203         char command[IFNAMSIZ + 1] = { 0, };
204         char *ifname;
205         int res, ret = count;
206         struct net_device *dev;
207         struct bonding *bond = to_bond(d);
208
209         if (!rtnl_trylock())
210                 return restart_syscall();
211
212         sscanf(buffer, "%16s", command); /* IFNAMSIZ*/
213         ifname = command + 1;
214         if ((strlen(command) <= 1) ||
215             !dev_valid_name(ifname))
216                 goto err_no_cmd;
217
218         dev = __dev_get_by_name(dev_net(bond->dev), ifname);
219         if (!dev) {
220                 pr_info("%s: Interface %s does not exist!\n",
221                         bond->dev->name, ifname);
222                 ret = -ENODEV;
223                 goto out;
224         }
225
226         switch (command[0]) {
227         case '+':
228                 pr_info("%s: Adding slave %s.\n", bond->dev->name, dev->name);
229                 res = bond_enslave(bond->dev, dev);
230                 break;
231
232         case '-':
233                 pr_info("%s: Removing slave %s.\n", bond->dev->name, dev->name);
234                 res = bond_release(bond->dev, dev);
235                 break;
236
237         default:
238                 goto err_no_cmd;
239         }
240
241         if (res)
242                 ret = res;
243         goto out;
244
245 err_no_cmd:
246         pr_err("no command found in slaves file for bond %s. Use +ifname or -ifname.\n",
247                bond->dev->name);
248         ret = -EPERM;
249
250 out:
251         rtnl_unlock();
252         return ret;
253 }
254
255 static DEVICE_ATTR(slaves, S_IRUGO | S_IWUSR, bonding_show_slaves,
256                    bonding_store_slaves);
257
258 /*
259  * Show and set the bonding mode.  The bond interface must be down to
260  * change the mode.
261  */
262 static ssize_t bonding_show_mode(struct device *d,
263                                  struct device_attribute *attr, char *buf)
264 {
265         struct bonding *bond = to_bond(d);
266         struct bond_opt_value *val;
267
268         val = bond_opt_get_val(BOND_OPT_MODE, bond->params.mode);
269
270         return sprintf(buf, "%s %d\n", val->string, bond->params.mode);
271 }
272
273 static ssize_t bonding_store_mode(struct device *d,
274                                   struct device_attribute *attr,
275                                   const char *buf, size_t count)
276 {
277         struct bonding *bond = to_bond(d);
278         int ret;
279
280         ret = bond_opt_tryset_rtnl(bond, BOND_OPT_MODE, (char *)buf);
281         if (!ret)
282                 ret = count;
283
284         return ret;
285 }
286 static DEVICE_ATTR(mode, S_IRUGO | S_IWUSR,
287                    bonding_show_mode, bonding_store_mode);
288
289 /*
290  * Show and set the bonding transmit hash method.
291  */
292 static ssize_t bonding_show_xmit_hash(struct device *d,
293                                       struct device_attribute *attr,
294                                       char *buf)
295 {
296         struct bonding *bond = to_bond(d);
297         struct bond_opt_value *val;
298
299         val = bond_opt_get_val(BOND_OPT_XMIT_HASH, bond->params.xmit_policy);
300
301         return sprintf(buf, "%s %d\n", val->string, bond->params.xmit_policy);
302 }
303
304 static ssize_t bonding_store_xmit_hash(struct device *d,
305                                        struct device_attribute *attr,
306                                        const char *buf, size_t count)
307 {
308         struct bonding *bond = to_bond(d);
309         int ret;
310
311         ret = bond_opt_tryset_rtnl(bond, BOND_OPT_XMIT_HASH, (char *)buf);
312         if (!ret)
313                 ret = count;
314
315         return ret;
316 }
317 static DEVICE_ATTR(xmit_hash_policy, S_IRUGO | S_IWUSR,
318                    bonding_show_xmit_hash, bonding_store_xmit_hash);
319
320 /*
321  * Show and set arp_validate.
322  */
323 static ssize_t bonding_show_arp_validate(struct device *d,
324                                          struct device_attribute *attr,
325                                          char *buf)
326 {
327         struct bonding *bond = to_bond(d);
328         struct bond_opt_value *val;
329
330         val = bond_opt_get_val(BOND_OPT_ARP_VALIDATE,
331                                bond->params.arp_validate);
332
333         return sprintf(buf, "%s %d\n", val->string, bond->params.arp_validate);
334 }
335
336 static ssize_t bonding_store_arp_validate(struct device *d,
337                                           struct device_attribute *attr,
338                                           const char *buf, size_t count)
339 {
340         struct bonding *bond = to_bond(d);
341         int ret;
342
343         ret = bond_opt_tryset_rtnl(bond, BOND_OPT_ARP_VALIDATE, (char *)buf);
344         if (!ret)
345                 ret = count;
346
347         return ret;
348 }
349
350 static DEVICE_ATTR(arp_validate, S_IRUGO | S_IWUSR, bonding_show_arp_validate,
351                    bonding_store_arp_validate);
352 /*
353  * Show and set arp_all_targets.
354  */
355 static ssize_t bonding_show_arp_all_targets(struct device *d,
356                                          struct device_attribute *attr,
357                                          char *buf)
358 {
359         struct bonding *bond = to_bond(d);
360         struct bond_opt_value *val;
361
362         val = bond_opt_get_val(BOND_OPT_ARP_ALL_TARGETS,
363                                bond->params.arp_all_targets);
364         return sprintf(buf, "%s %d\n",
365                        val->string, bond->params.arp_all_targets);
366 }
367
368 static ssize_t bonding_store_arp_all_targets(struct device *d,
369                                           struct device_attribute *attr,
370                                           const char *buf, size_t count)
371 {
372         struct bonding *bond = to_bond(d);
373         int ret;
374
375         ret = bond_opt_tryset_rtnl(bond, BOND_OPT_ARP_ALL_TARGETS, (char *)buf);
376         if (!ret)
377                 ret = count;
378
379         return ret;
380 }
381
382 static DEVICE_ATTR(arp_all_targets, S_IRUGO | S_IWUSR,
383                    bonding_show_arp_all_targets, bonding_store_arp_all_targets);
384
385 /*
386  * Show and store fail_over_mac.  User only allowed to change the
387  * value when there are no slaves.
388  */
389 static ssize_t bonding_show_fail_over_mac(struct device *d,
390                                           struct device_attribute *attr,
391                                           char *buf)
392 {
393         struct bonding *bond = to_bond(d);
394         struct bond_opt_value *val;
395
396         val = bond_opt_get_val(BOND_OPT_FAIL_OVER_MAC,
397                                bond->params.fail_over_mac);
398
399         return sprintf(buf, "%s %d\n", val->string, bond->params.fail_over_mac);
400 }
401
402 static ssize_t bonding_store_fail_over_mac(struct device *d,
403                                            struct device_attribute *attr,
404                                            const char *buf, size_t count)
405 {
406         struct bonding *bond = to_bond(d);
407         int ret;
408
409         ret = bond_opt_tryset_rtnl(bond, BOND_OPT_FAIL_OVER_MAC, (char *)buf);
410         if (!ret)
411                 ret = count;
412
413         return ret;
414 }
415
416 static DEVICE_ATTR(fail_over_mac, S_IRUGO | S_IWUSR,
417                    bonding_show_fail_over_mac, bonding_store_fail_over_mac);
418
419 /*
420  * Show and set the arp timer interval.  There are two tricky bits
421  * here.  First, if ARP monitoring is activated, then we must disable
422  * MII monitoring.  Second, if the ARP timer isn't running, we must
423  * start it.
424  */
425 static ssize_t bonding_show_arp_interval(struct device *d,
426                                          struct device_attribute *attr,
427                                          char *buf)
428 {
429         struct bonding *bond = to_bond(d);
430
431         return sprintf(buf, "%d\n", bond->params.arp_interval);
432 }
433
434 static ssize_t bonding_store_arp_interval(struct device *d,
435                                           struct device_attribute *attr,
436                                           const char *buf, size_t count)
437 {
438         struct bonding *bond = to_bond(d);
439         int ret;
440
441         ret = bond_opt_tryset_rtnl(bond, BOND_OPT_ARP_INTERVAL, (char *)buf);
442         if (!ret)
443                 ret = count;
444
445         return ret;
446 }
447 static DEVICE_ATTR(arp_interval, S_IRUGO | S_IWUSR,
448                    bonding_show_arp_interval, bonding_store_arp_interval);
449
450 /*
451  * Show and set the arp targets.
452  */
453 static ssize_t bonding_show_arp_targets(struct device *d,
454                                         struct device_attribute *attr,
455                                         char *buf)
456 {
457         struct bonding *bond = to_bond(d);
458         int i, res = 0;
459
460         for (i = 0; i < BOND_MAX_ARP_TARGETS; i++) {
461                 if (bond->params.arp_targets[i])
462                         res += sprintf(buf + res, "%pI4 ",
463                                        &bond->params.arp_targets[i]);
464         }
465         if (res)
466                 buf[res-1] = '\n'; /* eat the leftover space */
467
468         return res;
469 }
470
471 static ssize_t bonding_store_arp_targets(struct device *d,
472                                          struct device_attribute *attr,
473                                          const char *buf, size_t count)
474 {
475         struct bonding *bond = to_bond(d);
476         int ret;
477
478         ret = bond_opt_tryset_rtnl(bond, BOND_OPT_ARP_TARGETS, (char *)buf);
479         if (!ret)
480                 ret = count;
481
482         return ret;
483 }
484 static DEVICE_ATTR(arp_ip_target, S_IRUGO | S_IWUSR , bonding_show_arp_targets, bonding_store_arp_targets);
485
486 /*
487  * Show and set the up and down delays.  These must be multiples of the
488  * MII monitoring value, and are stored internally as the multiplier.
489  * Thus, we must translate to MS for the real world.
490  */
491 static ssize_t bonding_show_downdelay(struct device *d,
492                                       struct device_attribute *attr,
493                                       char *buf)
494 {
495         struct bonding *bond = to_bond(d);
496
497         return sprintf(buf, "%d\n", bond->params.downdelay * bond->params.miimon);
498 }
499
500 static ssize_t bonding_store_downdelay(struct device *d,
501                                        struct device_attribute *attr,
502                                        const char *buf, size_t count)
503 {
504         struct bonding *bond = to_bond(d);
505         int ret;
506
507         ret = bond_opt_tryset_rtnl(bond, BOND_OPT_DOWNDELAY, (char *)buf);
508         if (!ret)
509                 ret = count;
510
511         return ret;
512 }
513 static DEVICE_ATTR(downdelay, S_IRUGO | S_IWUSR,
514                    bonding_show_downdelay, bonding_store_downdelay);
515
516 static ssize_t bonding_show_updelay(struct device *d,
517                                     struct device_attribute *attr,
518                                     char *buf)
519 {
520         struct bonding *bond = to_bond(d);
521
522         return sprintf(buf, "%d\n", bond->params.updelay * bond->params.miimon);
523
524 }
525
526 static ssize_t bonding_store_updelay(struct device *d,
527                                      struct device_attribute *attr,
528                                      const char *buf, size_t count)
529 {
530         struct bonding *bond = to_bond(d);
531         int ret;
532
533         ret = bond_opt_tryset_rtnl(bond, BOND_OPT_UPDELAY, (char *)buf);
534         if (!ret)
535                 ret = count;
536
537         return ret;
538 }
539 static DEVICE_ATTR(updelay, S_IRUGO | S_IWUSR,
540                    bonding_show_updelay, bonding_store_updelay);
541
542 /*
543  * Show and set the LACP interval.  Interface must be down, and the mode
544  * must be set to 802.3ad mode.
545  */
546 static ssize_t bonding_show_lacp(struct device *d,
547                                  struct device_attribute *attr,
548                                  char *buf)
549 {
550         struct bonding *bond = to_bond(d);
551         struct bond_opt_value *val;
552
553         val = bond_opt_get_val(BOND_OPT_LACP_RATE, bond->params.lacp_fast);
554
555         return sprintf(buf, "%s %d\n", val->string, bond->params.lacp_fast);
556 }
557
558 static ssize_t bonding_store_lacp(struct device *d,
559                                   struct device_attribute *attr,
560                                   const char *buf, size_t count)
561 {
562         struct bonding *bond = to_bond(d);
563         int ret;
564
565         ret = bond_opt_tryset_rtnl(bond, BOND_OPT_LACP_RATE, (char *)buf);
566         if (!ret)
567                 ret = count;
568
569         return ret;
570 }
571 static DEVICE_ATTR(lacp_rate, S_IRUGO | S_IWUSR,
572                    bonding_show_lacp, bonding_store_lacp);
573
574 static ssize_t bonding_show_min_links(struct device *d,
575                                       struct device_attribute *attr,
576                                       char *buf)
577 {
578         struct bonding *bond = to_bond(d);
579
580         return sprintf(buf, "%d\n", bond->params.min_links);
581 }
582
583 static ssize_t bonding_store_min_links(struct device *d,
584                                        struct device_attribute *attr,
585                                        const char *buf, size_t count)
586 {
587         struct bonding *bond = to_bond(d);
588         int ret;
589
590         ret = bond_opt_tryset_rtnl(bond, BOND_OPT_MINLINKS, (char *)buf);
591         if (!ret)
592                 ret = count;
593
594         return ret;
595 }
596 static DEVICE_ATTR(min_links, S_IRUGO | S_IWUSR,
597                    bonding_show_min_links, bonding_store_min_links);
598
599 static ssize_t bonding_show_ad_select(struct device *d,
600                                       struct device_attribute *attr,
601                                       char *buf)
602 {
603         struct bonding *bond = to_bond(d);
604         struct bond_opt_value *val;
605
606         val = bond_opt_get_val(BOND_OPT_AD_SELECT, bond->params.ad_select);
607
608         return sprintf(buf, "%s %d\n", val->string, bond->params.ad_select);
609 }
610
611
612 static ssize_t bonding_store_ad_select(struct device *d,
613                                        struct device_attribute *attr,
614                                        const char *buf, size_t count)
615 {
616         struct bonding *bond = to_bond(d);
617         int ret;
618
619         ret = bond_opt_tryset_rtnl(bond, BOND_OPT_AD_SELECT, (char *)buf);
620         if (!ret)
621                 ret = count;
622
623         return ret;
624 }
625 static DEVICE_ATTR(ad_select, S_IRUGO | S_IWUSR,
626                    bonding_show_ad_select, bonding_store_ad_select);
627
628 /*
629  * Show and set the number of peer notifications to send after a failover event.
630  */
631 static ssize_t bonding_show_num_peer_notif(struct device *d,
632                                            struct device_attribute *attr,
633                                            char *buf)
634 {
635         struct bonding *bond = to_bond(d);
636         return sprintf(buf, "%d\n", bond->params.num_peer_notif);
637 }
638
639 static ssize_t bonding_store_num_peer_notif(struct device *d,
640                                             struct device_attribute *attr,
641                                             const char *buf, size_t count)
642 {
643         struct bonding *bond = to_bond(d);
644         u8 new_value;
645         int ret;
646
647         ret = kstrtou8(buf, 10, &new_value);
648         if (ret) {
649                 pr_err("%s: invalid value %s specified.\n",
650                        bond->dev->name, buf);
651                 return ret;
652         }
653
654         if (!rtnl_trylock())
655                 return restart_syscall();
656
657         ret = bond_option_num_peer_notif_set(bond, new_value);
658         if (!ret)
659                 ret = count;
660
661         rtnl_unlock();
662         return ret;
663 }
664 static DEVICE_ATTR(num_grat_arp, S_IRUGO | S_IWUSR,
665                    bonding_show_num_peer_notif, bonding_store_num_peer_notif);
666 static DEVICE_ATTR(num_unsol_na, S_IRUGO | S_IWUSR,
667                    bonding_show_num_peer_notif, bonding_store_num_peer_notif);
668
669 /*
670  * Show and set the MII monitor interval.  There are two tricky bits
671  * here.  First, if MII monitoring is activated, then we must disable
672  * ARP monitoring.  Second, if the timer isn't running, we must
673  * start it.
674  */
675 static ssize_t bonding_show_miimon(struct device *d,
676                                    struct device_attribute *attr,
677                                    char *buf)
678 {
679         struct bonding *bond = to_bond(d);
680
681         return sprintf(buf, "%d\n", bond->params.miimon);
682 }
683
684 static ssize_t bonding_store_miimon(struct device *d,
685                                     struct device_attribute *attr,
686                                     const char *buf, size_t count)
687 {
688         int new_value, ret;
689         struct bonding *bond = to_bond(d);
690
691         if (sscanf(buf, "%d", &new_value) != 1) {
692                 pr_err("%s: no miimon value specified.\n",
693                        bond->dev->name);
694                 return -EINVAL;
695         }
696
697         if (!rtnl_trylock())
698                 return restart_syscall();
699
700         ret = bond_option_miimon_set(bond, new_value);
701         if (!ret)
702                 ret = count;
703
704         rtnl_unlock();
705         return ret;
706 }
707 static DEVICE_ATTR(miimon, S_IRUGO | S_IWUSR,
708                    bonding_show_miimon, bonding_store_miimon);
709
710 /*
711  * Show and set the primary slave.  The store function is much
712  * simpler than bonding_store_slaves function because it only needs to
713  * handle one interface name.
714  * The bond must be a mode that supports a primary for this be
715  * set.
716  */
717 static ssize_t bonding_show_primary(struct device *d,
718                                     struct device_attribute *attr,
719                                     char *buf)
720 {
721         int count = 0;
722         struct bonding *bond = to_bond(d);
723
724         if (bond->primary_slave)
725                 count = sprintf(buf, "%s\n", bond->primary_slave->dev->name);
726
727         return count;
728 }
729
730 static ssize_t bonding_store_primary(struct device *d,
731                                      struct device_attribute *attr,
732                                      const char *buf, size_t count)
733 {
734         struct bonding *bond = to_bond(d);
735         char ifname[IFNAMSIZ];
736         int ret;
737
738         sscanf(buf, "%15s", ifname); /* IFNAMSIZ */
739         if (ifname[0] == '\n')
740                 ifname[0] = '\0';
741
742         if (!rtnl_trylock())
743                 return restart_syscall();
744
745         ret = bond_option_primary_set(bond, ifname);
746         if (!ret)
747                 ret = count;
748
749         rtnl_unlock();
750         return ret;
751 }
752 static DEVICE_ATTR(primary, S_IRUGO | S_IWUSR,
753                    bonding_show_primary, bonding_store_primary);
754
755 /*
756  * Show and set the primary_reselect flag.
757  */
758 static ssize_t bonding_show_primary_reselect(struct device *d,
759                                              struct device_attribute *attr,
760                                              char *buf)
761 {
762         struct bonding *bond = to_bond(d);
763
764         return sprintf(buf, "%s %d\n",
765                        pri_reselect_tbl[bond->params.primary_reselect].modename,
766                        bond->params.primary_reselect);
767 }
768
769 static ssize_t bonding_store_primary_reselect(struct device *d,
770                                               struct device_attribute *attr,
771                                               const char *buf, size_t count)
772 {
773         int new_value, ret;
774         struct bonding *bond = to_bond(d);
775
776         new_value = bond_parse_parm(buf, pri_reselect_tbl);
777         if (new_value < 0)  {
778                 pr_err("%s: Ignoring invalid primary_reselect value %.*s.\n",
779                        bond->dev->name,
780                        (int) strlen(buf) - 1, buf);
781                 return -EINVAL;
782         }
783
784         if (!rtnl_trylock())
785                 return restart_syscall();
786
787         ret = bond_option_primary_reselect_set(bond, new_value);
788         if (!ret)
789                 ret = count;
790
791         rtnl_unlock();
792         return ret;
793 }
794 static DEVICE_ATTR(primary_reselect, S_IRUGO | S_IWUSR,
795                    bonding_show_primary_reselect,
796                    bonding_store_primary_reselect);
797
798 /*
799  * Show and set the use_carrier flag.
800  */
801 static ssize_t bonding_show_carrier(struct device *d,
802                                     struct device_attribute *attr,
803                                     char *buf)
804 {
805         struct bonding *bond = to_bond(d);
806
807         return sprintf(buf, "%d\n", bond->params.use_carrier);
808 }
809
810 static ssize_t bonding_store_carrier(struct device *d,
811                                      struct device_attribute *attr,
812                                      const char *buf, size_t count)
813 {
814         int new_value, ret;
815         struct bonding *bond = to_bond(d);
816
817         if (sscanf(buf, "%d", &new_value) != 1) {
818                 pr_err("%s: no use_carrier value specified.\n",
819                        bond->dev->name);
820                 return -EINVAL;
821         }
822
823         if (!rtnl_trylock())
824                 return restart_syscall();
825
826         ret = bond_option_use_carrier_set(bond, new_value);
827         if (!ret)
828                 ret = count;
829
830         rtnl_unlock();
831         return ret;
832 }
833 static DEVICE_ATTR(use_carrier, S_IRUGO | S_IWUSR,
834                    bonding_show_carrier, bonding_store_carrier);
835
836
837 /*
838  * Show and set currently active_slave.
839  */
840 static ssize_t bonding_show_active_slave(struct device *d,
841                                          struct device_attribute *attr,
842                                          char *buf)
843 {
844         struct bonding *bond = to_bond(d);
845         struct net_device *slave_dev;
846         int count = 0;
847
848         rcu_read_lock();
849         slave_dev = bond_option_active_slave_get_rcu(bond);
850         if (slave_dev)
851                 count = sprintf(buf, "%s\n", slave_dev->name);
852         rcu_read_unlock();
853
854         return count;
855 }
856
857 static ssize_t bonding_store_active_slave(struct device *d,
858                                           struct device_attribute *attr,
859                                           const char *buf, size_t count)
860 {
861         int ret;
862         struct bonding *bond = to_bond(d);
863         char ifname[IFNAMSIZ];
864         struct net_device *dev;
865
866         if (!rtnl_trylock())
867                 return restart_syscall();
868
869         sscanf(buf, "%15s", ifname); /* IFNAMSIZ */
870         if (!strlen(ifname) || buf[0] == '\n') {
871                 dev = NULL;
872         } else {
873                 dev = __dev_get_by_name(dev_net(bond->dev), ifname);
874                 if (!dev) {
875                         ret = -ENODEV;
876                         goto out;
877                 }
878         }
879
880         ret = bond_option_active_slave_set(bond, dev);
881         if (!ret)
882                 ret = count;
883
884  out:
885         rtnl_unlock();
886
887         return ret;
888
889 }
890 static DEVICE_ATTR(active_slave, S_IRUGO | S_IWUSR,
891                    bonding_show_active_slave, bonding_store_active_slave);
892
893
894 /*
895  * Show link status of the bond interface.
896  */
897 static ssize_t bonding_show_mii_status(struct device *d,
898                                        struct device_attribute *attr,
899                                        char *buf)
900 {
901         struct bonding *bond = to_bond(d);
902
903         return sprintf(buf, "%s\n", bond->curr_active_slave ? "up" : "down");
904 }
905 static DEVICE_ATTR(mii_status, S_IRUGO, bonding_show_mii_status, NULL);
906
907 /*
908  * Show current 802.3ad aggregator ID.
909  */
910 static ssize_t bonding_show_ad_aggregator(struct device *d,
911                                           struct device_attribute *attr,
912                                           char *buf)
913 {
914         int count = 0;
915         struct bonding *bond = to_bond(d);
916
917         if (bond->params.mode == BOND_MODE_8023AD) {
918                 struct ad_info ad_info;
919                 count = sprintf(buf, "%d\n",
920                                 bond_3ad_get_active_agg_info(bond, &ad_info)
921                                 ?  0 : ad_info.aggregator_id);
922         }
923
924         return count;
925 }
926 static DEVICE_ATTR(ad_aggregator, S_IRUGO, bonding_show_ad_aggregator, NULL);
927
928
929 /*
930  * Show number of active 802.3ad ports.
931  */
932 static ssize_t bonding_show_ad_num_ports(struct device *d,
933                                          struct device_attribute *attr,
934                                          char *buf)
935 {
936         int count = 0;
937         struct bonding *bond = to_bond(d);
938
939         if (bond->params.mode == BOND_MODE_8023AD) {
940                 struct ad_info ad_info;
941                 count = sprintf(buf, "%d\n",
942                                 bond_3ad_get_active_agg_info(bond, &ad_info)
943                                 ?  0 : ad_info.ports);
944         }
945
946         return count;
947 }
948 static DEVICE_ATTR(ad_num_ports, S_IRUGO, bonding_show_ad_num_ports, NULL);
949
950
951 /*
952  * Show current 802.3ad actor key.
953  */
954 static ssize_t bonding_show_ad_actor_key(struct device *d,
955                                          struct device_attribute *attr,
956                                          char *buf)
957 {
958         int count = 0;
959         struct bonding *bond = to_bond(d);
960
961         if (bond->params.mode == BOND_MODE_8023AD) {
962                 struct ad_info ad_info;
963                 count = sprintf(buf, "%d\n",
964                                 bond_3ad_get_active_agg_info(bond, &ad_info)
965                                 ?  0 : ad_info.actor_key);
966         }
967
968         return count;
969 }
970 static DEVICE_ATTR(ad_actor_key, S_IRUGO, bonding_show_ad_actor_key, NULL);
971
972
973 /*
974  * Show current 802.3ad partner key.
975  */
976 static ssize_t bonding_show_ad_partner_key(struct device *d,
977                                            struct device_attribute *attr,
978                                            char *buf)
979 {
980         int count = 0;
981         struct bonding *bond = to_bond(d);
982
983         if (bond->params.mode == BOND_MODE_8023AD) {
984                 struct ad_info ad_info;
985                 count = sprintf(buf, "%d\n",
986                                 bond_3ad_get_active_agg_info(bond, &ad_info)
987                                 ?  0 : ad_info.partner_key);
988         }
989
990         return count;
991 }
992 static DEVICE_ATTR(ad_partner_key, S_IRUGO, bonding_show_ad_partner_key, NULL);
993
994
995 /*
996  * Show current 802.3ad partner mac.
997  */
998 static ssize_t bonding_show_ad_partner_mac(struct device *d,
999                                            struct device_attribute *attr,
1000                                            char *buf)
1001 {
1002         int count = 0;
1003         struct bonding *bond = to_bond(d);
1004
1005         if (bond->params.mode == BOND_MODE_8023AD) {
1006                 struct ad_info ad_info;
1007                 if (!bond_3ad_get_active_agg_info(bond, &ad_info))
1008                         count = sprintf(buf, "%pM\n", ad_info.partner_system);
1009         }
1010
1011         return count;
1012 }
1013 static DEVICE_ATTR(ad_partner_mac, S_IRUGO, bonding_show_ad_partner_mac, NULL);
1014
1015 /*
1016  * Show the queue_ids of the slaves in the current bond.
1017  */
1018 static ssize_t bonding_show_queue_id(struct device *d,
1019                                      struct device_attribute *attr,
1020                                      char *buf)
1021 {
1022         struct bonding *bond = to_bond(d);
1023         struct list_head *iter;
1024         struct slave *slave;
1025         int res = 0;
1026
1027         if (!rtnl_trylock())
1028                 return restart_syscall();
1029
1030         bond_for_each_slave(bond, slave, iter) {
1031                 if (res > (PAGE_SIZE - IFNAMSIZ - 6)) {
1032                         /* not enough space for another interface_name:queue_id pair */
1033                         if ((PAGE_SIZE - res) > 10)
1034                                 res = PAGE_SIZE - 10;
1035                         res += sprintf(buf + res, "++more++ ");
1036                         break;
1037                 }
1038                 res += sprintf(buf + res, "%s:%d ",
1039                                slave->dev->name, slave->queue_id);
1040         }
1041         if (res)
1042                 buf[res-1] = '\n'; /* eat the leftover space */
1043
1044         rtnl_unlock();
1045
1046         return res;
1047 }
1048
1049 /*
1050  * Set the queue_ids of the  slaves in the current bond.  The bond
1051  * interface must be enslaved for this to work.
1052  */
1053 static ssize_t bonding_store_queue_id(struct device *d,
1054                                       struct device_attribute *attr,
1055                                       const char *buffer, size_t count)
1056 {
1057         struct slave *slave, *update_slave;
1058         struct bonding *bond = to_bond(d);
1059         struct list_head *iter;
1060         u16 qid;
1061         int ret = count;
1062         char *delim;
1063         struct net_device *sdev = NULL;
1064
1065         if (!rtnl_trylock())
1066                 return restart_syscall();
1067
1068         /* delim will point to queue id if successful */
1069         delim = strchr(buffer, ':');
1070         if (!delim)
1071                 goto err_no_cmd;
1072
1073         /*
1074          * Terminate string that points to device name and bump it
1075          * up one, so we can read the queue id there.
1076          */
1077         *delim = '\0';
1078         if (sscanf(++delim, "%hd\n", &qid) != 1)
1079                 goto err_no_cmd;
1080
1081         /* Check buffer length, valid ifname and queue id */
1082         if (strlen(buffer) > IFNAMSIZ ||
1083             !dev_valid_name(buffer) ||
1084             qid > bond->dev->real_num_tx_queues)
1085                 goto err_no_cmd;
1086
1087         /* Get the pointer to that interface if it exists */
1088         sdev = __dev_get_by_name(dev_net(bond->dev), buffer);
1089         if (!sdev)
1090                 goto err_no_cmd;
1091
1092         /* Search for thes slave and check for duplicate qids */
1093         update_slave = NULL;
1094         bond_for_each_slave(bond, slave, iter) {
1095                 if (sdev == slave->dev)
1096                         /*
1097                          * We don't need to check the matching
1098                          * slave for dups, since we're overwriting it
1099                          */
1100                         update_slave = slave;
1101                 else if (qid && qid == slave->queue_id) {
1102                         goto err_no_cmd;
1103                 }
1104         }
1105
1106         if (!update_slave)
1107                 goto err_no_cmd;
1108
1109         /* Actually set the qids for the slave */
1110         update_slave->queue_id = qid;
1111
1112 out:
1113         rtnl_unlock();
1114         return ret;
1115
1116 err_no_cmd:
1117         pr_info("invalid input for queue_id set for %s.\n",
1118                 bond->dev->name);
1119         ret = -EPERM;
1120         goto out;
1121 }
1122
1123 static DEVICE_ATTR(queue_id, S_IRUGO | S_IWUSR, bonding_show_queue_id,
1124                    bonding_store_queue_id);
1125
1126
1127 /*
1128  * Show and set the all_slaves_active flag.
1129  */
1130 static ssize_t bonding_show_slaves_active(struct device *d,
1131                                           struct device_attribute *attr,
1132                                           char *buf)
1133 {
1134         struct bonding *bond = to_bond(d);
1135
1136         return sprintf(buf, "%d\n", bond->params.all_slaves_active);
1137 }
1138
1139 static ssize_t bonding_store_slaves_active(struct device *d,
1140                                            struct device_attribute *attr,
1141                                            const char *buf, size_t count)
1142 {
1143         struct bonding *bond = to_bond(d);
1144         int new_value, ret;
1145
1146         if (sscanf(buf, "%d", &new_value) != 1) {
1147                 pr_err("%s: no all_slaves_active value specified.\n",
1148                        bond->dev->name);
1149                 return -EINVAL;
1150         }
1151
1152         if (!rtnl_trylock())
1153                 return restart_syscall();
1154
1155         ret = bond_option_all_slaves_active_set(bond, new_value);
1156         if (!ret)
1157                 ret = count;
1158
1159         rtnl_unlock();
1160         return ret;
1161 }
1162 static DEVICE_ATTR(all_slaves_active, S_IRUGO | S_IWUSR,
1163                    bonding_show_slaves_active, bonding_store_slaves_active);
1164
1165 /*
1166  * Show and set the number of IGMP membership reports to send on link failure
1167  */
1168 static ssize_t bonding_show_resend_igmp(struct device *d,
1169                                         struct device_attribute *attr,
1170                                         char *buf)
1171 {
1172         struct bonding *bond = to_bond(d);
1173
1174         return sprintf(buf, "%d\n", bond->params.resend_igmp);
1175 }
1176
1177 static ssize_t bonding_store_resend_igmp(struct device *d,
1178                                          struct device_attribute *attr,
1179                                          const char *buf, size_t count)
1180 {
1181         int new_value, ret = count;
1182         struct bonding *bond = to_bond(d);
1183
1184         if (sscanf(buf, "%d", &new_value) != 1) {
1185                 pr_err("%s: no resend_igmp value specified.\n",
1186                        bond->dev->name);
1187                 return -EINVAL;
1188         }
1189
1190         if (!rtnl_trylock())
1191                 return restart_syscall();
1192
1193         ret = bond_option_resend_igmp_set(bond, new_value);
1194         if (!ret)
1195                 ret = count;
1196
1197         rtnl_unlock();
1198         return ret;
1199 }
1200
1201 static DEVICE_ATTR(resend_igmp, S_IRUGO | S_IWUSR,
1202                    bonding_show_resend_igmp, bonding_store_resend_igmp);
1203
1204
1205 static ssize_t bonding_show_lp_interval(struct device *d,
1206                                         struct device_attribute *attr,
1207                                         char *buf)
1208 {
1209         struct bonding *bond = to_bond(d);
1210         return sprintf(buf, "%d\n", bond->params.lp_interval);
1211 }
1212
1213 static ssize_t bonding_store_lp_interval(struct device *d,
1214                                          struct device_attribute *attr,
1215                                          const char *buf, size_t count)
1216 {
1217         struct bonding *bond = to_bond(d);
1218         int new_value, ret;
1219
1220         if (sscanf(buf, "%d", &new_value) != 1) {
1221                 pr_err("%s: no lp interval value specified.\n",
1222                         bond->dev->name);
1223                 return -EINVAL;
1224         }
1225
1226         if (!rtnl_trylock())
1227                 return restart_syscall();
1228
1229         ret = bond_option_lp_interval_set(bond, new_value);
1230         if (!ret)
1231                 ret = count;
1232
1233         rtnl_unlock();
1234         return ret;
1235 }
1236
1237 static DEVICE_ATTR(lp_interval, S_IRUGO | S_IWUSR,
1238                    bonding_show_lp_interval, bonding_store_lp_interval);
1239
1240 static ssize_t bonding_show_packets_per_slave(struct device *d,
1241                                               struct device_attribute *attr,
1242                                               char *buf)
1243 {
1244         struct bonding *bond = to_bond(d);
1245         unsigned int packets_per_slave = bond->params.packets_per_slave;
1246         return sprintf(buf, "%u\n", packets_per_slave);
1247 }
1248
1249 static ssize_t bonding_store_packets_per_slave(struct device *d,
1250                                                struct device_attribute *attr,
1251                                                const char *buf, size_t count)
1252 {
1253         struct bonding *bond = to_bond(d);
1254         int ret;
1255
1256         ret = bond_opt_tryset_rtnl(bond, BOND_OPT_PACKETS_PER_SLAVE,
1257                                    (char *)buf);
1258         if (!ret)
1259                 ret = count;
1260
1261         return ret;
1262 }
1263
1264 static DEVICE_ATTR(packets_per_slave, S_IRUGO | S_IWUSR,
1265                    bonding_show_packets_per_slave,
1266                    bonding_store_packets_per_slave);
1267
1268 static struct attribute *per_bond_attrs[] = {
1269         &dev_attr_slaves.attr,
1270         &dev_attr_mode.attr,
1271         &dev_attr_fail_over_mac.attr,
1272         &dev_attr_arp_validate.attr,
1273         &dev_attr_arp_all_targets.attr,
1274         &dev_attr_arp_interval.attr,
1275         &dev_attr_arp_ip_target.attr,
1276         &dev_attr_downdelay.attr,
1277         &dev_attr_updelay.attr,
1278         &dev_attr_lacp_rate.attr,
1279         &dev_attr_ad_select.attr,
1280         &dev_attr_xmit_hash_policy.attr,
1281         &dev_attr_num_grat_arp.attr,
1282         &dev_attr_num_unsol_na.attr,
1283         &dev_attr_miimon.attr,
1284         &dev_attr_primary.attr,
1285         &dev_attr_primary_reselect.attr,
1286         &dev_attr_use_carrier.attr,
1287         &dev_attr_active_slave.attr,
1288         &dev_attr_mii_status.attr,
1289         &dev_attr_ad_aggregator.attr,
1290         &dev_attr_ad_num_ports.attr,
1291         &dev_attr_ad_actor_key.attr,
1292         &dev_attr_ad_partner_key.attr,
1293         &dev_attr_ad_partner_mac.attr,
1294         &dev_attr_queue_id.attr,
1295         &dev_attr_all_slaves_active.attr,
1296         &dev_attr_resend_igmp.attr,
1297         &dev_attr_min_links.attr,
1298         &dev_attr_lp_interval.attr,
1299         &dev_attr_packets_per_slave.attr,
1300         NULL,
1301 };
1302
1303 static struct attribute_group bonding_group = {
1304         .name = "bonding",
1305         .attrs = per_bond_attrs,
1306 };
1307
1308 /*
1309  * Initialize sysfs.  This sets up the bonding_masters file in
1310  * /sys/class/net.
1311  */
1312 int bond_create_sysfs(struct bond_net *bn)
1313 {
1314         int ret;
1315
1316         bn->class_attr_bonding_masters = class_attr_bonding_masters;
1317         sysfs_attr_init(&bn->class_attr_bonding_masters.attr);
1318
1319         ret = netdev_class_create_file_ns(&bn->class_attr_bonding_masters,
1320                                           bn->net);
1321         /*
1322          * Permit multiple loads of the module by ignoring failures to
1323          * create the bonding_masters sysfs file.  Bonding devices
1324          * created by second or subsequent loads of the module will
1325          * not be listed in, or controllable by, bonding_masters, but
1326          * will have the usual "bonding" sysfs directory.
1327          *
1328          * This is done to preserve backwards compatibility for
1329          * initscripts/sysconfig, which load bonding multiple times to
1330          * configure multiple bonding devices.
1331          */
1332         if (ret == -EEXIST) {
1333                 /* Is someone being kinky and naming a device bonding_master? */
1334                 if (__dev_get_by_name(bn->net,
1335                                       class_attr_bonding_masters.attr.name))
1336                         pr_err("network device named %s already exists in sysfs",
1337                                class_attr_bonding_masters.attr.name);
1338                 ret = 0;
1339         }
1340
1341         return ret;
1342
1343 }
1344
1345 /*
1346  * Remove /sys/class/net/bonding_masters.
1347  */
1348 void bond_destroy_sysfs(struct bond_net *bn)
1349 {
1350         netdev_class_remove_file_ns(&bn->class_attr_bonding_masters, bn->net);
1351 }
1352
1353 /*
1354  * Initialize sysfs for each bond.  This sets up and registers
1355  * the 'bondctl' directory for each individual bond under /sys/class/net.
1356  */
1357 void bond_prepare_sysfs_group(struct bonding *bond)
1358 {
1359         bond->dev->sysfs_groups[0] = &bonding_group;
1360 }
1361