The EtherDrive (R) HOWTO for users of 2.6 kernels is found at ...

  http://www.coraid.com/support/linux/EtherDrive-2.6-HOWTO.html

  It has many tips and hints!

The aoetools are userland programs that are designed to work with this
driver.  The aoetools are on sourceforge.

  http://aoetools.sourceforge.net/

The scripts in this Documentation/aoe directory are intended to
document the use of the driver and are not necessary if you install
the aoetools.


CREATING DEVICE NODES

  Users of udev should find the block device nodes created
  automatically, but to create all the necessary device nodes, use the
  udev configuration rules provided in udev.txt (in this directory).

  There is a udev-install.sh script that shows how to install these
  rules on your system.

  If you are not using udev, two scripts are provided in
  Documentation/aoe as examples of static device node creation for
  using the aoe driver.

    rm -rf /dev/etherd
    sh Documentation/aoe/mkdevs.sh /dev/etherd

  ... or to make just one shelf's worth of block device nodes ...

    sh Documentation/aoe/mkshelf.sh /dev/etherd 0

  There is also an autoload script that shows how to edit
  /etc/modprobe.conf to ensure that the aoe module is loaded when
  necessary.

USING DEVICE NODES

  "cat /dev/etherd/err" blocks, waiting for error diagnostic output,
  like any retransmitted packets.

  "echo eth2 eth4 > /dev/etherd/interfaces" tells the aoe driver to
  limit ATA over Ethernet traffic to eth2 and eth4.  AoE traffic from
  untrusted networks should be ignored as a matter of security.  See
  also the aoe_iflist driver option described below.

  "echo > /dev/etherd/discover" tells the driver to find out what AoE
  devices are available.

  These character devices may disappear and be replaced by sysfs
  counterparts.  Using the commands in aoetools insulates users from
  these implementation details.

  The block devices are named like this:

	e{shelf}.{slot}
	e{shelf}.{slot}p{part}

  ... so that "e0.2" is the third blade from the left (slot 2) in the
  first shelf (shelf address zero).  That's the whole disk.  The first
  partition on that disk would be "e0.2p1".

USING SYSFS

  Each aoe block device in /sys/block has the extra attributes of
  state, mac, and netif.  The state attribute is "up" when the device
  is ready for I/O and "down" if detected but unusable.  The
  "down,closewait" state shows that the device is still open and
  cannot come up again until it has been closed.

  The mac attribute is the ethernet address of the remote AoE device.
  The netif attribute is the network interface on the localhost
  through which we are communicating with the remote AoE device.

  There is a script in this directory that formats this information
  in a convenient way.  Users with aoetools can use the aoe-stat
  command.

  root@makki root# sh Documentation/aoe/status.sh 
     e10.0            eth3              up
     e10.1            eth3              up
     e10.2            eth3              up
     e10.3            eth3              up
     e10.4            eth3              up
     e10.5            eth3              up
     e10.6            eth3              up
     e10.7            eth3              up
     e10.8            eth3              up
     e10.9            eth3              up
      e4.0            eth1              up
      e4.1            eth1              up
      e4.2            eth1              up
      e4.3            eth1              up
      e4.4            eth1              up
      e4.5            eth1              up
      e4.6            eth1              up
      e4.7            eth1              up
      e4.8            eth1              up
      e4.9            eth1              up

  Use /sys/module/aoe/parameters/aoe_iflist (or better, the driver
  option discussed below) instead of /dev/etherd/interfaces to limit
  AoE traffic to the network interfaces in the given
  whitespace-separated list.  Unlike the old character device, the
  sysfs entry can be read from as well as written to.

  It's helpful to trigger discovery after setting the list of allowed
  interfaces.  The aoetools package provides an aoe-discover script
  for this purpose.  You can also directly use the
  /dev/etherd/discover special file described above.

DRIVER OPTIONS

  There is a boot option for the built-in aoe driver and a
  corresponding module parameter, aoe_iflist.  Without this option,
  all network interfaces may be used for ATA over Ethernet.  Here is a
  usage example for the module parameter.

    modprobe aoe_iflist="eth1 eth3"
