Commit 03c41c434775c52092d17a5031ad8ebaaf555bc4

Authored by Ed L Cashin
Committed by Greg KH
1 parent 8800cea620

[PATCH] aoe: improve allowed interfaces configuration

improve allowed interfaces configuration

Signed-off-by: Ed L. Cashin <ecashin@coraid.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

diff -uprN a/Documentation/aoe/aoe.txt b/Documentation/aoe/aoe.txt

Showing 2 changed files with 39 additions and 1 deletions Side-by-side Diff

Documentation/aoe/aoe.txt
... ... @@ -33,6 +33,9 @@
33 33 "cat /dev/etherd/err" blocks, waiting for error diagnostic output,
34 34 like any retransmitted packets.
35 35  
  36 + The /dev/etherd/interfaces special file is obsoleted by the
  37 + aoe_iflist boot option and module option (and its sysfs entry
  38 + described in the next section).
36 39 "echo eth2 eth4 > /dev/etherd/interfaces" tells the aoe driver to
37 40 limit ATA over Ethernet traffic to eth2 and eth4. AoE traffic from
38 41 untrusted networks should be ignored as a matter of security.
... ... @@ -89,4 +92,24 @@
89 92 e4.7 eth1 up
90 93 e4.8 eth1 up
91 94 e4.9 eth1 up
  95 +
  96 + Use /sys/module/aoe/parameters/aoe_iflist (or better, the driver
  97 + option discussed below) instead of /dev/etherd/interfaces to limit
  98 + AoE traffic to the network interfaces in the given
  99 + whitespace-separated list. Unlike the old character device, the
  100 + sysfs entry can be read from as well as written to.
  101 +
  102 + It's helpful to trigger discovery after setting the list of allowed
  103 + interfaces. If your distro provides an aoe-discover script, you can
  104 + use that. Otherwise, you can directly use the /dev/etherd/discover
  105 + file described above.
  106 +
  107 +DRIVER OPTIONS
  108 +
  109 + There is a boot option for the built-in aoe driver and a
  110 + corresponding module parameter, aoe_iflist. Without this option,
  111 + all network interfaces may be used for ATA over Ethernet. Here is a
  112 + usage example for the module parameter.
  113 +
  114 + modprobe aoe_iflist="eth1 eth3"
drivers/block/aoe/aoenet.c
... ... @@ -7,6 +7,7 @@
7 7 #include <linux/hdreg.h>
8 8 #include <linux/blkdev.h>
9 9 #include <linux/netdevice.h>
  10 +#include <linux/moduleparam.h>
10 11 #include "aoe.h"
11 12  
12 13 #define NECODES 5
13 14  
... ... @@ -26,7 +27,20 @@
26 27 };
27 28  
28 29 static char aoe_iflist[IFLISTSZ];
  30 +module_param_string(aoe_iflist, aoe_iflist, IFLISTSZ, 0600);
  31 +MODULE_PARM_DESC(aoe_iflist, "aoe_iflist=\"dev1 [dev2 ...]\"\n");
29 32  
  33 +#ifndef MODULE
  34 +static int __init aoe_iflist_setup(char *str)
  35 +{
  36 + strncpy(aoe_iflist, str, IFLISTSZ);
  37 + aoe_iflist[IFLISTSZ - 1] = '\0';
  38 + return 1;
  39 +}
  40 +
  41 +__setup("aoe_iflist=", aoe_iflist_setup);
  42 +#endif
  43 +
30 44 int
31 45 is_aoe_netif(struct net_device *ifp)
32 46 {
... ... @@ -36,7 +50,8 @@
36 50 if (aoe_iflist[0] == '\0')
37 51 return 1;
38 52  
39   - for (p = aoe_iflist; *p; p = q + strspn(q, WHITESPACE)) {
  53 + p = aoe_iflist + strspn(aoe_iflist, WHITESPACE);
  54 + for (; *p; p = q + strspn(q, WHITESPACE)) {
40 55 q = p + strcspn(p, WHITESPACE);
41 56 if (q != p)
42 57 len = q - p;