#!/bin/sh

# Usage: block-enbd [bind server ctl_port |unbind node]
#
# The file argument to the bind command is the file we are to bind to a
# loop device.
#
# The node argument to unbind is the name of the device node we are to
# unbind.
#
# This assumes you're running a correctly configured server at the other end!

set -e

#echo "block-enbd: $@" | logger -t xen

case $1 in
  bind)
    for dev in /dev/nbd*; do
      if nbd-client $2 $3 $dev; then
        major=$(stat -L -c %t "$dev")
        minor=$(stat -L -c %T "$dev")
        pdev=$(printf "0x%02x%02x" 0x$major 0x$minor)
        xenstore-write "$XENBUS_PATH"/physical-device $pdev \
          "$XENBUS_PATH"/node $dev
        exit 0
      fi
    done
    exit 1
    ;;
  unbind)
    nbd-client -d $2
    exit 0
    ;;
esac
