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