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 */ 54 static 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 82 static 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 101 static 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 148 err_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 */ 154 static 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 */ 166 static 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 */ 201 static 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 247 err_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 252 out: 253 rtnl_unlock(); 254 return ret; 255 } 256 257 static 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 */ 264 static 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 274 static 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 } 301 static 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 */ 307 static 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 318 static 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 } 340 static 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 */ 346 static 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 357 static 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; 390 out: 391 rtnl_unlock(); 392 393 return ret; 394 } 395 396 static 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 */ 401 static 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 412 static 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 434 static 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 */ 441 static 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 452 static 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 482 out: 483 rtnl_unlock(); 484 return ret; 485 } 486 487 static 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 */ 496 static 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 505 static 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 } 565 out: 566 rtnl_unlock(); 567 return ret; 568 } 569 static 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 */ 575 static 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 592 static 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 if (!in4_pton(buf + 1, -1, (u8 *)&newtarget, -1, NULL) || 608 IS_IP_TARGET_UNUSABLE_ADDRESS(newtarget)) { 609 pr_err("%s: invalid ARP target %pI4 specified for addition\n", 610 bond->dev->name, &newtarget); 611 goto out; 612 } 613 /* look for adds */ 614 if (buf[0] == '+') { 615 if (bond_get_targets_ip(targets, newtarget) != -1) { /* dup */ 616 pr_err("%s: ARP target %pI4 is already present\n", 617 bond->dev->name, &newtarget); 618 goto out; 619 } 620 621 ind = bond_get_targets_ip(targets, 0); /* first free slot */ 622 if (ind == -1) { 623 pr_err("%s: ARP target table is full!\n", 624 bond->dev->name); 625 goto out; 626 } 627 628 pr_info("%s: adding ARP target %pI4.\n", bond->dev->name, 629 &newtarget); 630 /* not to race with bond_arp_rcv */ 631 write_lock_bh(&bond->lock); 632 bond_for_each_slave(bond, slave, iter) 633 slave->target_last_arp_rx[ind] = jiffies; 634 targets[ind] = newtarget; 635 write_unlock_bh(&bond->lock); 636 } else if (buf[0] == '-') { 637 ind = bond_get_targets_ip(targets, newtarget); 638 if (ind == -1) { 639 pr_err("%s: unable to remove nonexistent ARP target %pI4.\n", 640 bond->dev->name, &newtarget); 641 goto out; 642 } 643 644 if (ind == 0 && !targets[1] && bond->params.arp_interval) 645 pr_warn("%s: removing last arp target with arp_interval on\n", 646 bond->dev->name); 647 648 pr_info("%s: removing ARP target %pI4.\n", bond->dev->name, 649 &newtarget); 650 651 write_lock_bh(&bond->lock); 652 bond_for_each_slave(bond, slave, iter) { 653 targets_rx = slave->target_last_arp_rx; 654 j = ind; 655 for (; (j < BOND_MAX_ARP_TARGETS-1) && targets[j+1]; j++) 656 targets_rx[j] = targets_rx[j+1]; 657 targets_rx[j] = 0; 658 } 659 for (i = ind; (i < BOND_MAX_ARP_TARGETS-1) && targets[i+1]; i++) 660 targets[i] = targets[i+1]; 661 targets[i] = 0; 662 write_unlock_bh(&bond->lock); 663 } else { 664 pr_err("no command found in arp_ip_targets file for bond %s. Use +<addr> or -<addr>.\n", 665 bond->dev->name); 666 ret = -EPERM; 667 goto out; 668 } 669 670 ret = count; 671 out: 672 rtnl_unlock(); 673 return ret; 674 } 675 static DEVICE_ATTR(arp_ip_target, S_IRUGO | S_IWUSR , bonding_show_arp_targets, bonding_store_arp_targets); 676 677 /* 678 * Show and set the up and down delays. These must be multiples of the 679 * MII monitoring value, and are stored internally as the multiplier. 680 * Thus, we must translate to MS for the real world. 681 */ 682 static ssize_t bonding_show_downdelay(struct device *d, 683 struct device_attribute *attr, 684 char *buf) 685 { 686 struct bonding *bond = to_bond(d); 687 688 return sprintf(buf, "%d\n", bond->params.downdelay * bond->params.miimon); 689 } 690 691 static ssize_t bonding_store_downdelay(struct device *d, 692 struct device_attribute *attr, 693 const char *buf, size_t count) 694 { 695 int new_value, ret = count; 696 struct bonding *bond = to_bond(d); 697 698 if (!rtnl_trylock()) 699 return restart_syscall(); 700 if (!(bond->params.miimon)) { 701 pr_err("%s: Unable to set down delay as MII monitoring is disabled\n", 702 bond->dev->name); 703 ret = -EPERM; 704 goto out; 705 } 706 707 if (sscanf(buf, "%d", &new_value) != 1) { 708 pr_err("%s: no down delay value specified.\n", bond->dev->name); 709 ret = -EINVAL; 710 goto out; 711 } 712 if (new_value < 0) { 713 pr_err("%s: Invalid down delay value %d not in range %d-%d; rejected.\n", 714 bond->dev->name, new_value, 0, INT_MAX); 715 ret = -EINVAL; 716 goto out; 717 } else { 718 if ((new_value % bond->params.miimon) != 0) { 719 pr_warning("%s: Warning: down delay (%d) is not a multiple of miimon (%d), delay rounded to %d ms\n", 720 bond->dev->name, new_value, 721 bond->params.miimon, 722 (new_value / bond->params.miimon) * 723 bond->params.miimon); 724 } 725 bond->params.downdelay = new_value / bond->params.miimon; 726 pr_info("%s: Setting down delay to %d.\n", 727 bond->dev->name, 728 bond->params.downdelay * bond->params.miimon); 729 730 } 731 732 out: 733 rtnl_unlock(); 734 return ret; 735 } 736 static DEVICE_ATTR(downdelay, S_IRUGO | S_IWUSR, 737 bonding_show_downdelay, bonding_store_downdelay); 738 739 static ssize_t bonding_show_updelay(struct device *d, 740 struct device_attribute *attr, 741 char *buf) 742 { 743 struct bonding *bond = to_bond(d); 744 745 return sprintf(buf, "%d\n", bond->params.updelay * bond->params.miimon); 746 747 } 748 749 static ssize_t bonding_store_updelay(struct device *d, 750 struct device_attribute *attr, 751 const char *buf, size_t count) 752 { 753 int new_value, ret = count; 754 struct bonding *bond = to_bond(d); 755 756 if (!rtnl_trylock()) 757 return restart_syscall(); 758 if (!(bond->params.miimon)) { 759 pr_err("%s: Unable to set up delay as MII monitoring is disabled\n", 760 bond->dev->name); 761 ret = -EPERM; 762 goto out; 763 } 764 765 if (sscanf(buf, "%d", &new_value) != 1) { 766 pr_err("%s: no up delay value specified.\n", 767 bond->dev->name); 768 ret = -EINVAL; 769 goto out; 770 } 771 if (new_value < 0) { 772 pr_err("%s: Invalid up delay value %d not in range %d-%d; rejected.\n", 773 bond->dev->name, new_value, 0, INT_MAX); 774 ret = -EINVAL; 775 goto out; 776 } else { 777 if ((new_value % bond->params.miimon) != 0) { 778 pr_warning("%s: Warning: up delay (%d) is not a multiple of miimon (%d), updelay rounded to %d ms\n", 779 bond->dev->name, new_value, 780 bond->params.miimon, 781 (new_value / bond->params.miimon) * 782 bond->params.miimon); 783 } 784 bond->params.updelay = new_value / bond->params.miimon; 785 pr_info("%s: Setting up delay to %d.\n", 786 bond->dev->name, 787 bond->params.updelay * bond->params.miimon); 788 } 789 790 out: 791 rtnl_unlock(); 792 return ret; 793 } 794 static DEVICE_ATTR(updelay, S_IRUGO | S_IWUSR, 795 bonding_show_updelay, bonding_store_updelay); 796 797 /* 798 * Show and set the LACP interval. Interface must be down, and the mode 799 * must be set to 802.3ad mode. 800 */ 801 static ssize_t bonding_show_lacp(struct device *d, 802 struct device_attribute *attr, 803 char *buf) 804 { 805 struct bonding *bond = to_bond(d); 806 807 return sprintf(buf, "%s %d\n", 808 bond_lacp_tbl[bond->params.lacp_fast].modename, 809 bond->params.lacp_fast); 810 } 811 812 static ssize_t bonding_store_lacp(struct device *d, 813 struct device_attribute *attr, 814 const char *buf, size_t count) 815 { 816 struct bonding *bond = to_bond(d); 817 int new_value, ret = count; 818 819 if (!rtnl_trylock()) 820 return restart_syscall(); 821 822 if (bond->dev->flags & IFF_UP) { 823 pr_err("%s: Unable to update LACP rate because interface is up.\n", 824 bond->dev->name); 825 ret = -EPERM; 826 goto out; 827 } 828 829 if (bond->params.mode != BOND_MODE_8023AD) { 830 pr_err("%s: Unable to update LACP rate because bond is not in 802.3ad mode.\n", 831 bond->dev->name); 832 ret = -EPERM; 833 goto out; 834 } 835 836 new_value = bond_parse_parm(buf, bond_lacp_tbl); 837 838 if ((new_value == 1) || (new_value == 0)) { 839 bond->params.lacp_fast = new_value; 840 bond_3ad_update_lacp_rate(bond); 841 pr_info("%s: Setting LACP rate to %s (%d).\n", 842 bond->dev->name, bond_lacp_tbl[new_value].modename, 843 new_value); 844 } else { 845 pr_err("%s: Ignoring invalid LACP rate value %.*s.\n", 846 bond->dev->name, (int)strlen(buf) - 1, buf); 847 ret = -EINVAL; 848 } 849 out: 850 rtnl_unlock(); 851 852 return ret; 853 } 854 static DEVICE_ATTR(lacp_rate, S_IRUGO | S_IWUSR, 855 bonding_show_lacp, bonding_store_lacp); 856 857 static ssize_t bonding_show_min_links(struct device *d, 858 struct device_attribute *attr, 859 char *buf) 860 { 861 struct bonding *bond = to_bond(d); 862 863 return sprintf(buf, "%d\n", bond->params.min_links); 864 } 865 866 static ssize_t bonding_store_min_links(struct device *d, 867 struct device_attribute *attr, 868 const char *buf, size_t count) 869 { 870 struct bonding *bond = to_bond(d); 871 int ret; 872 unsigned int new_value; 873 874 ret = kstrtouint(buf, 0, &new_value); 875 if (ret < 0) { 876 pr_err("%s: Ignoring invalid min links value %s.\n", 877 bond->dev->name, buf); 878 return ret; 879 } 880 881 pr_info("%s: Setting min links value to %u\n", 882 bond->dev->name, new_value); 883 bond->params.min_links = new_value; 884 return count; 885 } 886 static DEVICE_ATTR(min_links, S_IRUGO | S_IWUSR, 887 bonding_show_min_links, bonding_store_min_links); 888 889 static ssize_t bonding_show_ad_select(struct device *d, 890 struct device_attribute *attr, 891 char *buf) 892 { 893 struct bonding *bond = to_bond(d); 894 895 return sprintf(buf, "%s %d\n", 896 ad_select_tbl[bond->params.ad_select].modename, 897 bond->params.ad_select); 898 } 899 900 901 static ssize_t bonding_store_ad_select(struct device *d, 902 struct device_attribute *attr, 903 const char *buf, size_t count) 904 { 905 int new_value, ret = count; 906 struct bonding *bond = to_bond(d); 907 908 if (bond->dev->flags & IFF_UP) { 909 pr_err("%s: Unable to update ad_select because interface is up.\n", 910 bond->dev->name); 911 ret = -EPERM; 912 goto out; 913 } 914 915 new_value = bond_parse_parm(buf, ad_select_tbl); 916 917 if (new_value != -1) { 918 bond->params.ad_select = new_value; 919 pr_info("%s: Setting ad_select to %s (%d).\n", 920 bond->dev->name, ad_select_tbl[new_value].modename, 921 new_value); 922 } else { 923 pr_err("%s: Ignoring invalid ad_select value %.*s.\n", 924 bond->dev->name, (int)strlen(buf) - 1, buf); 925 ret = -EINVAL; 926 } 927 out: 928 return ret; 929 } 930 static DEVICE_ATTR(ad_select, S_IRUGO | S_IWUSR, 931 bonding_show_ad_select, bonding_store_ad_select); 932 933 /* 934 * Show and set the number of peer notifications to send after a failover event. 935 */ 936 static ssize_t bonding_show_num_peer_notif(struct device *d, 937 struct device_attribute *attr, 938 char *buf) 939 { 940 struct bonding *bond = to_bond(d); 941 return sprintf(buf, "%d\n", bond->params.num_peer_notif); 942 } 943 944 static ssize_t bonding_store_num_peer_notif(struct device *d, 945 struct device_attribute *attr, 946 const char *buf, size_t count) 947 { 948 struct bonding *bond = to_bond(d); 949 int err = kstrtou8(buf, 10, &bond->params.num_peer_notif); 950 return err ? err : count; 951 } 952 static DEVICE_ATTR(num_grat_arp, S_IRUGO | S_IWUSR, 953 bonding_show_num_peer_notif, bonding_store_num_peer_notif); 954 static DEVICE_ATTR(num_unsol_na, S_IRUGO | S_IWUSR, 955 bonding_show_num_peer_notif, bonding_store_num_peer_notif); 956 957 /* 958 * Show and set the MII monitor interval. There are two tricky bits 959 * here. First, if MII monitoring is activated, then we must disable 960 * ARP monitoring. Second, if the timer isn't running, we must 961 * start it. 962 */ 963 static ssize_t bonding_show_miimon(struct device *d, 964 struct device_attribute *attr, 965 char *buf) 966 { 967 struct bonding *bond = to_bond(d); 968 969 return sprintf(buf, "%d\n", bond->params.miimon); 970 } 971 972 static ssize_t bonding_store_miimon(struct device *d, 973 struct device_attribute *attr, 974 const char *buf, size_t count) 975 { 976 int new_value, ret = count; 977 struct bonding *bond = to_bond(d); 978 979 if (!rtnl_trylock()) 980 return restart_syscall(); 981 if (sscanf(buf, "%d", &new_value) != 1) { 982 pr_err("%s: no miimon value specified.\n", 983 bond->dev->name); 984 ret = -EINVAL; 985 goto out; 986 } 987 if (new_value < 0) { 988 pr_err("%s: Invalid miimon value %d not in range %d-%d; rejected.\n", 989 bond->dev->name, new_value, 0, INT_MAX); 990 ret = -EINVAL; 991 goto out; 992 } 993 pr_info("%s: Setting MII monitoring interval to %d.\n", 994 bond->dev->name, new_value); 995 bond->params.miimon = new_value; 996 if (bond->params.updelay) 997 pr_info("%s: Note: Updating updelay (to %d) since it is a multiple of the miimon value.\n", 998 bond->dev->name, 999 bond->params.updelay * bond->params.miimon); 1000 if (bond->params.downdelay) 1001 pr_info("%s: Note: Updating downdelay (to %d) since it is a multiple of the miimon value.\n", 1002 bond->dev->name, 1003 bond->params.downdelay * bond->params.miimon); 1004 if (new_value && bond->params.arp_interval) { 1005 pr_info("%s: MII monitoring cannot be used with ARP monitoring. Disabling ARP monitoring...\n", 1006 bond->dev->name); 1007 bond->params.arp_interval = 0; 1008 if (bond->params.arp_validate) 1009 bond->params.arp_validate = BOND_ARP_VALIDATE_NONE; 1010 } 1011 if (bond->dev->flags & IFF_UP) { 1012 /* If the interface is up, we may need to fire off 1013 * the MII timer. If the interface is down, the 1014 * timer will get fired off when the open function 1015 * is called. 1016 */ 1017 if (!new_value) { 1018 cancel_delayed_work_sync(&bond->mii_work); 1019 } else { 1020 cancel_delayed_work_sync(&bond->arp_work); 1021 queue_delayed_work(bond->wq, &bond->mii_work, 0); 1022 } 1023 } 1024 out: 1025 rtnl_unlock(); 1026 return ret; 1027 } 1028 static DEVICE_ATTR(miimon, S_IRUGO | S_IWUSR, 1029 bonding_show_miimon, bonding_store_miimon); 1030 1031 /* 1032 * Show and set the primary slave. The store function is much 1033 * simpler than bonding_store_slaves function because it only needs to 1034 * handle one interface name. 1035 * The bond must be a mode that supports a primary for this be 1036 * set. 1037 */ 1038 static ssize_t bonding_show_primary(struct device *d, 1039 struct device_attribute *attr, 1040 char *buf) 1041 { 1042 int count = 0; 1043 struct bonding *bond = to_bond(d); 1044 1045 if (bond->primary_slave) 1046 count = sprintf(buf, "%s\n", bond->primary_slave->dev->name); 1047 1048 return count; 1049 } 1050 1051 static ssize_t bonding_store_primary(struct device *d, 1052 struct device_attribute *attr, 1053 const char *buf, size_t count) 1054 { 1055 struct bonding *bond = to_bond(d); 1056 struct list_head *iter; 1057 char ifname[IFNAMSIZ]; 1058 struct slave *slave; 1059 1060 if (!rtnl_trylock()) 1061 return restart_syscall(); 1062 block_netpoll_tx(); 1063 read_lock(&bond->lock); 1064 write_lock_bh(&bond->curr_slave_lock); 1065 1066 if (!USES_PRIMARY(bond->params.mode)) { 1067 pr_info("%s: Unable to set primary slave; %s is in mode %d\n", 1068 bond->dev->name, bond->dev->name, bond->params.mode); 1069 goto out; 1070 } 1071 1072 sscanf(buf, "%15s", ifname); /* IFNAMSIZ */ 1073 1074 /* check to see if we are clearing primary */ 1075 if (!strlen(ifname) || buf[0] == '\n') { 1076 pr_info("%s: Setting primary slave to None.\n", 1077 bond->dev->name); 1078 bond->primary_slave = NULL; 1079 memset(bond->params.primary, 0, sizeof(bond->params.primary)); 1080 bond_select_active_slave(bond); 1081 goto out; 1082 } 1083 1084 bond_for_each_slave(bond, slave, iter) { 1085 if (strncmp(slave->dev->name, ifname, IFNAMSIZ) == 0) { 1086 pr_info("%s: Setting %s as primary slave.\n", 1087 bond->dev->name, slave->dev->name); 1088 bond->primary_slave = slave; 1089 strcpy(bond->params.primary, slave->dev->name); 1090 bond_select_active_slave(bond); 1091 goto out; 1092 } 1093 } 1094 1095 strncpy(bond->params.primary, ifname, IFNAMSIZ); 1096 bond->params.primary[IFNAMSIZ - 1] = 0; 1097 1098 pr_info("%s: Recording %s as primary, " 1099 "but it has not been enslaved to %s yet.\n", 1100 bond->dev->name, ifname, bond->dev->name); 1101 out: 1102 write_unlock_bh(&bond->curr_slave_lock); 1103 read_unlock(&bond->lock); 1104 unblock_netpoll_tx(); 1105 rtnl_unlock(); 1106 1107 return count; 1108 } 1109 static DEVICE_ATTR(primary, S_IRUGO | S_IWUSR, 1110 bonding_show_primary, bonding_store_primary); 1111 1112 /* 1113 * Show and set the primary_reselect flag. 1114 */ 1115 static ssize_t bonding_show_primary_reselect(struct device *d, 1116 struct device_attribute *attr, 1117 char *buf) 1118 { 1119 struct bonding *bond = to_bond(d); 1120 1121 return sprintf(buf, "%s %d\n", 1122 pri_reselect_tbl[bond->params.primary_reselect].modename, 1123 bond->params.primary_reselect); 1124 } 1125 1126 static ssize_t bonding_store_primary_reselect(struct device *d, 1127 struct device_attribute *attr, 1128 const char *buf, size_t count) 1129 { 1130 int new_value, ret = count; 1131 struct bonding *bond = to_bond(d); 1132 1133 if (!rtnl_trylock()) 1134 return restart_syscall(); 1135 1136 new_value = bond_parse_parm(buf, pri_reselect_tbl); 1137 if (new_value < 0) { 1138 pr_err("%s: Ignoring invalid primary_reselect value %.*s.\n", 1139 bond->dev->name, 1140 (int) strlen(buf) - 1, buf); 1141 ret = -EINVAL; 1142 goto out; 1143 } 1144 1145 bond->params.primary_reselect = new_value; 1146 pr_info("%s: setting primary_reselect to %s (%d).\n", 1147 bond->dev->name, pri_reselect_tbl[new_value].modename, 1148 new_value); 1149 1150 block_netpoll_tx(); 1151 read_lock(&bond->lock); 1152 write_lock_bh(&bond->curr_slave_lock); 1153 bond_select_active_slave(bond); 1154 write_unlock_bh(&bond->curr_slave_lock); 1155 read_unlock(&bond->lock); 1156 unblock_netpoll_tx(); 1157 out: 1158 rtnl_unlock(); 1159 return ret; 1160 } 1161 static DEVICE_ATTR(primary_reselect, S_IRUGO | S_IWUSR, 1162 bonding_show_primary_reselect, 1163 bonding_store_primary_reselect); 1164 1165 /* 1166 * Show and set the use_carrier flag. 1167 */ 1168 static ssize_t bonding_show_carrier(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.use_carrier); 1175 } 1176 1177 static ssize_t bonding_store_carrier(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 1185 if (sscanf(buf, "%d", &new_value) != 1) { 1186 pr_err("%s: no use_carrier value specified.\n", 1187 bond->dev->name); 1188 ret = -EINVAL; 1189 goto out; 1190 } 1191 if ((new_value == 0) || (new_value == 1)) { 1192 bond->params.use_carrier = new_value; 1193 pr_info("%s: Setting use_carrier to %d.\n", 1194 bond->dev->name, new_value); 1195 } else { 1196 pr_info("%s: Ignoring invalid use_carrier value %d.\n", 1197 bond->dev->name, new_value); 1198 } 1199 out: 1200 return ret; 1201 } 1202 static DEVICE_ATTR(use_carrier, S_IRUGO | S_IWUSR, 1203 bonding_show_carrier, bonding_store_carrier); 1204 1205 1206 /* 1207 * Show and set currently active_slave. 1208 */ 1209 static ssize_t bonding_show_active_slave(struct device *d, 1210 struct device_attribute *attr, 1211 char *buf) 1212 { 1213 struct bonding *bond = to_bond(d); 1214 struct net_device *slave_dev; 1215 int count = 0; 1216 1217 rcu_read_lock(); 1218 slave_dev = bond_option_active_slave_get_rcu(bond); 1219 if (slave_dev) 1220 count = sprintf(buf, "%s\n", slave_dev->name); 1221 rcu_read_unlock(); 1222 1223 return count; 1224 } 1225 1226 static ssize_t bonding_store_active_slave(struct device *d, 1227 struct device_attribute *attr, 1228 const char *buf, size_t count) 1229 { 1230 int ret; 1231 struct bonding *bond = to_bond(d); 1232 char ifname[IFNAMSIZ]; 1233 struct net_device *dev; 1234 1235 if (!rtnl_trylock()) 1236 return restart_syscall(); 1237 1238 sscanf(buf, "%15s", ifname); /* IFNAMSIZ */ 1239 if (!strlen(ifname) || buf[0] == '\n') { 1240 dev = NULL; 1241 } else { 1242 dev = __dev_get_by_name(dev_net(bond->dev), ifname); 1243 if (!dev) { 1244 ret = -ENODEV; 1245 goto out; 1246 } 1247 } 1248 1249 ret = bond_option_active_slave_set(bond, dev); 1250 if (!ret) 1251 ret = count; 1252 1253 out: 1254 rtnl_unlock(); 1255 1256 return ret; 1257 1258 } 1259 static DEVICE_ATTR(active_slave, S_IRUGO | S_IWUSR, 1260 bonding_show_active_slave, bonding_store_active_slave); 1261 1262 1263 /* 1264 * Show link status of the bond interface. 1265 */ 1266 static ssize_t bonding_show_mii_status(struct device *d, 1267 struct device_attribute *attr, 1268 char *buf) 1269 { 1270 struct bonding *bond = to_bond(d); 1271 1272 return sprintf(buf, "%s\n", bond->curr_active_slave ? "up" : "down"); 1273 } 1274 static DEVICE_ATTR(mii_status, S_IRUGO, bonding_show_mii_status, NULL); 1275 1276 /* 1277 * Show current 802.3ad aggregator ID. 1278 */ 1279 static ssize_t bonding_show_ad_aggregator(struct device *d, 1280 struct device_attribute *attr, 1281 char *buf) 1282 { 1283 int count = 0; 1284 struct bonding *bond = to_bond(d); 1285 1286 if (bond->params.mode == BOND_MODE_8023AD) { 1287 struct ad_info ad_info; 1288 count = sprintf(buf, "%d\n", 1289 bond_3ad_get_active_agg_info(bond, &ad_info) 1290 ? 0 : ad_info.aggregator_id); 1291 } 1292 1293 return count; 1294 } 1295 static DEVICE_ATTR(ad_aggregator, S_IRUGO, bonding_show_ad_aggregator, NULL); 1296 1297 1298 /* 1299 * Show number of active 802.3ad ports. 1300 */ 1301 static ssize_t bonding_show_ad_num_ports(struct device *d, 1302 struct device_attribute *attr, 1303 char *buf) 1304 { 1305 int count = 0; 1306 struct bonding *bond = to_bond(d); 1307 1308 if (bond->params.mode == BOND_MODE_8023AD) { 1309 struct ad_info ad_info; 1310 count = sprintf(buf, "%d\n", 1311 bond_3ad_get_active_agg_info(bond, &ad_info) 1312 ? 0 : ad_info.ports); 1313 } 1314 1315 return count; 1316 } 1317 static DEVICE_ATTR(ad_num_ports, S_IRUGO, bonding_show_ad_num_ports, NULL); 1318 1319 1320 /* 1321 * Show current 802.3ad actor key. 1322 */ 1323 static ssize_t bonding_show_ad_actor_key(struct device *d, 1324 struct device_attribute *attr, 1325 char *buf) 1326 { 1327 int count = 0; 1328 struct bonding *bond = to_bond(d); 1329 1330 if (bond->params.mode == BOND_MODE_8023AD) { 1331 struct ad_info ad_info; 1332 count = sprintf(buf, "%d\n", 1333 bond_3ad_get_active_agg_info(bond, &ad_info) 1334 ? 0 : ad_info.actor_key); 1335 } 1336 1337 return count; 1338 } 1339 static DEVICE_ATTR(ad_actor_key, S_IRUGO, bonding_show_ad_actor_key, NULL); 1340 1341 1342 /* 1343 * Show current 802.3ad partner key. 1344 */ 1345 static ssize_t bonding_show_ad_partner_key(struct device *d, 1346 struct device_attribute *attr, 1347 char *buf) 1348 { 1349 int count = 0; 1350 struct bonding *bond = to_bond(d); 1351 1352 if (bond->params.mode == BOND_MODE_8023AD) { 1353 struct ad_info ad_info; 1354 count = sprintf(buf, "%d\n", 1355 bond_3ad_get_active_agg_info(bond, &ad_info) 1356 ? 0 : ad_info.partner_key); 1357 } 1358 1359 return count; 1360 } 1361 static DEVICE_ATTR(ad_partner_key, S_IRUGO, bonding_show_ad_partner_key, NULL); 1362 1363 1364 /* 1365 * Show current 802.3ad partner mac. 1366 */ 1367 static ssize_t bonding_show_ad_partner_mac(struct device *d, 1368 struct device_attribute *attr, 1369 char *buf) 1370 { 1371 int count = 0; 1372 struct bonding *bond = to_bond(d); 1373 1374 if (bond->params.mode == BOND_MODE_8023AD) { 1375 struct ad_info ad_info; 1376 if (!bond_3ad_get_active_agg_info(bond, &ad_info)) 1377 count = sprintf(buf, "%pM\n", ad_info.partner_system); 1378 } 1379 1380 return count; 1381 } 1382 static DEVICE_ATTR(ad_partner_mac, S_IRUGO, bonding_show_ad_partner_mac, NULL); 1383 1384 /* 1385 * Show the queue_ids of the slaves in the current bond. 1386 */ 1387 static ssize_t bonding_show_queue_id(struct device *d, 1388 struct device_attribute *attr, 1389 char *buf) 1390 { 1391 struct bonding *bond = to_bond(d); 1392 struct list_head *iter; 1393 struct slave *slave; 1394 int res = 0; 1395 1396 if (!rtnl_trylock()) 1397 return restart_syscall(); 1398 1399 bond_for_each_slave(bond, slave, iter) { 1400 if (res > (PAGE_SIZE - IFNAMSIZ - 6)) { 1401 /* not enough space for another interface_name:queue_id pair */ 1402 if ((PAGE_SIZE - res) > 10) 1403 res = PAGE_SIZE - 10; 1404 res += sprintf(buf + res, "++more++ "); 1405 break; 1406 } 1407 res += sprintf(buf + res, "%s:%d ", 1408 slave->dev->name, slave->queue_id); 1409 } 1410 if (res) 1411 buf[res-1] = '\n'; /* eat the leftover space */ 1412 1413 rtnl_unlock(); 1414 1415 return res; 1416 } 1417 1418 /* 1419 * Set the queue_ids of the slaves in the current bond. The bond 1420 * interface must be enslaved for this to work. 1421 */ 1422 static ssize_t bonding_store_queue_id(struct device *d, 1423 struct device_attribute *attr, 1424 const char *buffer, size_t count) 1425 { 1426 struct slave *slave, *update_slave; 1427 struct bonding *bond = to_bond(d); 1428 struct list_head *iter; 1429 u16 qid; 1430 int ret = count; 1431 char *delim; 1432 struct net_device *sdev = NULL; 1433 1434 if (!rtnl_trylock()) 1435 return restart_syscall(); 1436 1437 /* delim will point to queue id if successful */ 1438 delim = strchr(buffer, ':'); 1439 if (!delim) 1440 goto err_no_cmd; 1441 1442 /* 1443 * Terminate string that points to device name and bump it 1444 * up one, so we can read the queue id there. 1445 */ 1446 *delim = '\0'; 1447 if (sscanf(++delim, "%hd\n", &qid) != 1) 1448 goto err_no_cmd; 1449 1450 /* Check buffer length, valid ifname and queue id */ 1451 if (strlen(buffer) > IFNAMSIZ || 1452 !dev_valid_name(buffer) || 1453 qid > bond->dev->real_num_tx_queues) 1454 goto err_no_cmd; 1455 1456 /* Get the pointer to that interface if it exists */ 1457 sdev = __dev_get_by_name(dev_net(bond->dev), buffer); 1458 if (!sdev) 1459 goto err_no_cmd; 1460 1461 /* Search for thes slave and check for duplicate qids */ 1462 update_slave = NULL; 1463 bond_for_each_slave(bond, slave, iter) { 1464 if (sdev == slave->dev) 1465 /* 1466 * We don't need to check the matching 1467 * slave for dups, since we're overwriting it 1468 */ 1469 update_slave = slave; 1470 else if (qid && qid == slave->queue_id) { 1471 goto err_no_cmd; 1472 } 1473 } 1474 1475 if (!update_slave) 1476 goto err_no_cmd; 1477 1478 /* Actually set the qids for the slave */ 1479 update_slave->queue_id = qid; 1480 1481 out: 1482 rtnl_unlock(); 1483 return ret; 1484 1485 err_no_cmd: 1486 pr_info("invalid input for queue_id set for %s.\n", 1487 bond->dev->name); 1488 ret = -EPERM; 1489 goto out; 1490 } 1491 1492 static DEVICE_ATTR(queue_id, S_IRUGO | S_IWUSR, bonding_show_queue_id, 1493 bonding_store_queue_id); 1494 1495 1496 /* 1497 * Show and set the all_slaves_active flag. 1498 */ 1499 static ssize_t bonding_show_slaves_active(struct device *d, 1500 struct device_attribute *attr, 1501 char *buf) 1502 { 1503 struct bonding *bond = to_bond(d); 1504 1505 return sprintf(buf, "%d\n", bond->params.all_slaves_active); 1506 } 1507 1508 static ssize_t bonding_store_slaves_active(struct device *d, 1509 struct device_attribute *attr, 1510 const char *buf, size_t count) 1511 { 1512 struct bonding *bond = to_bond(d); 1513 int new_value, ret = count; 1514 struct list_head *iter; 1515 struct slave *slave; 1516 1517 if (!rtnl_trylock()) 1518 return restart_syscall(); 1519 1520 if (sscanf(buf, "%d", &new_value) != 1) { 1521 pr_err("%s: no all_slaves_active value specified.\n", 1522 bond->dev->name); 1523 ret = -EINVAL; 1524 goto out; 1525 } 1526 1527 if (new_value == bond->params.all_slaves_active) 1528 goto out; 1529 1530 if ((new_value == 0) || (new_value == 1)) { 1531 bond->params.all_slaves_active = new_value; 1532 } else { 1533 pr_info("%s: Ignoring invalid all_slaves_active value %d.\n", 1534 bond->dev->name, new_value); 1535 ret = -EINVAL; 1536 goto out; 1537 } 1538 1539 bond_for_each_slave(bond, slave, iter) { 1540 if (!bond_is_active_slave(slave)) { 1541 if (new_value) 1542 slave->inactive = 0; 1543 else 1544 slave->inactive = 1; 1545 } 1546 } 1547 out: 1548 rtnl_unlock(); 1549 return ret; 1550 } 1551 static DEVICE_ATTR(all_slaves_active, S_IRUGO | S_IWUSR, 1552 bonding_show_slaves_active, bonding_store_slaves_active); 1553 1554 /* 1555 * Show and set the number of IGMP membership reports to send on link failure 1556 */ 1557 static ssize_t bonding_show_resend_igmp(struct device *d, 1558 struct device_attribute *attr, 1559 char *buf) 1560 { 1561 struct bonding *bond = to_bond(d); 1562 1563 return sprintf(buf, "%d\n", bond->params.resend_igmp); 1564 } 1565 1566 static ssize_t bonding_store_resend_igmp(struct device *d, 1567 struct device_attribute *attr, 1568 const char *buf, size_t count) 1569 { 1570 int new_value, ret = count; 1571 struct bonding *bond = to_bond(d); 1572 1573 if (sscanf(buf, "%d", &new_value) != 1) { 1574 pr_err("%s: no resend_igmp value specified.\n", 1575 bond->dev->name); 1576 ret = -EINVAL; 1577 goto out; 1578 } 1579 1580 if (new_value < 0 || new_value > 255) { 1581 pr_err("%s: Invalid resend_igmp value %d not in range 0-255; rejected.\n", 1582 bond->dev->name, new_value); 1583 ret = -EINVAL; 1584 goto out; 1585 } 1586 1587 pr_info("%s: Setting resend_igmp to %d.\n", 1588 bond->dev->name, new_value); 1589 bond->params.resend_igmp = new_value; 1590 out: 1591 return ret; 1592 } 1593 1594 static DEVICE_ATTR(resend_igmp, S_IRUGO | S_IWUSR, 1595 bonding_show_resend_igmp, bonding_store_resend_igmp); 1596 1597 1598 static ssize_t bonding_show_lp_interval(struct device *d, 1599 struct device_attribute *attr, 1600 char *buf) 1601 { 1602 struct bonding *bond = to_bond(d); 1603 return sprintf(buf, "%d\n", bond->params.lp_interval); 1604 } 1605 1606 static ssize_t bonding_store_lp_interval(struct device *d, 1607 struct device_attribute *attr, 1608 const char *buf, size_t count) 1609 { 1610 struct bonding *bond = to_bond(d); 1611 int new_value, ret = count; 1612 1613 if (sscanf(buf, "%d", &new_value) != 1) { 1614 pr_err("%s: no lp interval value specified.\n", 1615 bond->dev->name); 1616 ret = -EINVAL; 1617 goto out; 1618 } 1619 1620 if (new_value <= 0) { 1621 pr_err ("%s: lp_interval must be between 1 and %d\n", 1622 bond->dev->name, INT_MAX); 1623 ret = -EINVAL; 1624 goto out; 1625 } 1626 1627 bond->params.lp_interval = new_value; 1628 out: 1629 return ret; 1630 } 1631 1632 static DEVICE_ATTR(lp_interval, S_IRUGO | S_IWUSR, 1633 bonding_show_lp_interval, bonding_store_lp_interval); 1634 1635 static ssize_t bonding_show_packets_per_slave(struct device *d, 1636 struct device_attribute *attr, 1637 char *buf) 1638 { 1639 struct bonding *bond = to_bond(d); 1640 int packets_per_slave = bond->params.packets_per_slave; 1641 1642 if (packets_per_slave > 1) 1643 packets_per_slave = reciprocal_value(packets_per_slave); 1644 1645 return sprintf(buf, "%d\n", packets_per_slave); 1646 } 1647 1648 static ssize_t bonding_store_packets_per_slave(struct device *d, 1649 struct device_attribute *attr, 1650 const char *buf, size_t count) 1651 { 1652 struct bonding *bond = to_bond(d); 1653 int new_value, ret = count; 1654 1655 if (sscanf(buf, "%d", &new_value) != 1) { 1656 pr_err("%s: no packets_per_slave value specified.\n", 1657 bond->dev->name); 1658 ret = -EINVAL; 1659 goto out; 1660 } 1661 if (new_value < 0 || new_value > USHRT_MAX) { 1662 pr_err("%s: packets_per_slave must be between 0 and %u\n", 1663 bond->dev->name, USHRT_MAX); 1664 ret = -EINVAL; 1665 goto out; 1666 } 1667 if (bond->params.mode != BOND_MODE_ROUNDROBIN) 1668 pr_warn("%s: Warning: packets_per_slave has effect only in balance-rr mode\n", 1669 bond->dev->name); 1670 if (new_value > 1) 1671 bond->params.packets_per_slave = reciprocal_value(new_value); 1672 else 1673 bond->params.packets_per_slave = new_value; 1674 out: 1675 return ret; 1676 } 1677 1678 static DEVICE_ATTR(packets_per_slave, S_IRUGO | S_IWUSR, 1679 bonding_show_packets_per_slave, 1680 bonding_store_packets_per_slave); 1681 1682 static struct attribute *per_bond_attrs[] = { 1683 &dev_attr_slaves.attr, 1684 &dev_attr_mode.attr, 1685 &dev_attr_fail_over_mac.attr, 1686 &dev_attr_arp_validate.attr, 1687 &dev_attr_arp_all_targets.attr, 1688 &dev_attr_arp_interval.attr, 1689 &dev_attr_arp_ip_target.attr, 1690 &dev_attr_downdelay.attr, 1691 &dev_attr_updelay.attr, 1692 &dev_attr_lacp_rate.attr, 1693 &dev_attr_ad_select.attr, 1694 &dev_attr_xmit_hash_policy.attr, 1695 &dev_attr_num_grat_arp.attr, 1696 &dev_attr_num_unsol_na.attr, 1697 &dev_attr_miimon.attr, 1698 &dev_attr_primary.attr, 1699 &dev_attr_primary_reselect.attr, 1700 &dev_attr_use_carrier.attr, 1701 &dev_attr_active_slave.attr, 1702 &dev_attr_mii_status.attr, 1703 &dev_attr_ad_aggregator.attr, 1704 &dev_attr_ad_num_ports.attr, 1705 &dev_attr_ad_actor_key.attr, 1706 &dev_attr_ad_partner_key.attr, 1707 &dev_attr_ad_partner_mac.attr, 1708 &dev_attr_queue_id.attr, 1709 &dev_attr_all_slaves_active.attr, 1710 &dev_attr_resend_igmp.attr, 1711 &dev_attr_min_links.attr, 1712 &dev_attr_lp_interval.attr, 1713 &dev_attr_packets_per_slave.attr, 1714 NULL, 1715 }; 1716 1717 static struct attribute_group bonding_group = { 1718 .name = "bonding", 1719 .attrs = per_bond_attrs, 1720 }; 1721 1722 /* 1723 * Initialize sysfs. This sets up the bonding_masters file in 1724 * /sys/class/net. 1725 */ 1726 int bond_create_sysfs(struct bond_net *bn) 1727 { 1728 int ret; 1729 1730 bn->class_attr_bonding_masters = class_attr_bonding_masters; 1731 sysfs_attr_init(&bn->class_attr_bonding_masters.attr); 1732 1733 ret = netdev_class_create_file_ns(&bn->class_attr_bonding_masters, 1734 bn->net); 1735 /* 1736 * Permit multiple loads of the module by ignoring failures to 1737 * create the bonding_masters sysfs file. Bonding devices 1738 * created by second or subsequent loads of the module will 1739 * not be listed in, or controllable by, bonding_masters, but 1740 * will have the usual "bonding" sysfs directory. 1741 * 1742 * This is done to preserve backwards compatibility for 1743 * initscripts/sysconfig, which load bonding multiple times to 1744 * configure multiple bonding devices. 1745 */ 1746 if (ret == -EEXIST) { 1747 /* Is someone being kinky and naming a device bonding_master? */ 1748 if (__dev_get_by_name(bn->net, 1749 class_attr_bonding_masters.attr.name)) 1750 pr_err("network device named %s already exists in sysfs", 1751 class_attr_bonding_masters.attr.name); 1752 ret = 0; 1753 } 1754 1755 return ret; 1756 1757 } 1758 1759 /* 1760 * Remove /sys/class/net/bonding_masters. 1761 */ 1762 void bond_destroy_sysfs(struct bond_net *bn) 1763 { 1764 netdev_class_remove_file_ns(&bn->class_attr_bonding_masters, bn->net); 1765 } 1766 1767 /* 1768 * Initialize sysfs for each bond. This sets up and registers 1769 * the 'bondctl' directory for each individual bond under /sys/class/net. 1770 */ 1771 void bond_prepare_sysfs_group(struct bonding *bond) 1772 { 1773 bond->dev->sysfs_groups[0] = &bonding_group; 1774 } 1775 1776