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!

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.

  "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, so distribution maintainers are encouraged to create
  scripts that use these devices.

  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.

  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
