block.qubes 921 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. #!/bin/bash
  2. hd_arr[10]=a
  3. hd_arr[11]=b
  4. hd_arr[12]=c
  5. hd_arr[13]=d
  6. hd_arr[14]=e
  7. hd_arr[15]=f
  8. hexdigit()
  9. {
  10. if [ $1 -lt 10 ] ; then
  11. RET=$1
  12. else
  13. RET=${hd_arr[$1]}
  14. fi
  15. }
  16. hexnumber()
  17. {
  18. hexdigit $(($1/16))
  19. ret2=$RET
  20. hexdigit $(($1%16))
  21. HEXNUMBER="$ret2"$RET
  22. }
  23. process()
  24. {
  25. if ! [ "x""$1" = "xfile" ] ; then
  26. exec /etc/xen/scripts/block "$@"
  27. fi
  28. while true ; do
  29. dev=$(losetup -f --show $2)
  30. if [ -n "$dev" ] ; then break ; fi
  31. done
  32. hexnumber ${dev:9:70}
  33. xenstore-write "$XENBUS_PATH/node" "$dev" \
  34. "$XENBUS_PATH/physical-device" "7:"$HEXNUMBER \
  35. "$XENBUS_PATH/hotplug-status" connected
  36. }
  37. #exec 2>>/tmp/block.$$
  38. #set -x
  39. export PATH="/sbin:/bin:/usr/bin:/usr/sbin:$PATH"
  40. XENBUS_PATH="${XENBUS_PATH:?}"
  41. if ! [ "$1" = "add" ] || ! [ -f /var/run/qubes/fast_block_attach ] ; then
  42. exec /etc/xen/scripts/block "$@"
  43. fi
  44. vars=$(xenstore-read "$XENBUS_PATH/type" "$XENBUS_PATH/params")
  45. process $vars
  46. exit 0