aoe.h 1000 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. /*
  2. * ATA-over-Ethernet (AoE) protocol
  3. */
  4. enum {
  5. ACata,
  6. ACconfig,
  7. };
  8. enum {
  9. AQCread,
  10. AQCtest,
  11. AQCprefix,
  12. AQCset,
  13. AQCfset,
  14. };
  15. enum {
  16. AEcmd = 1,
  17. AEarg,
  18. AEdev,
  19. AEcfg,
  20. AEver,
  21. };
  22. enum {
  23. Aoetype = 0x88a2,
  24. Aoesectsz = 512, /* standard sector size */
  25. Aoever = 1,
  26. AFerr = 1<<2,
  27. AFrsp = 1<<3,
  28. AAFwrite= 1,
  29. AAFext = 1<<6,
  30. };
  31. typedef struct {
  32. uchar dst[Eaddrlen];
  33. uchar src[Eaddrlen];
  34. uchar type[2];
  35. uchar verflag;
  36. uchar error;
  37. uchar major[2];
  38. uchar minor;
  39. uchar cmd;
  40. uchar tag[4];
  41. uchar payload[];
  42. } Aoehdr;
  43. #define AOEHDRSZ offsetof(Aoehdr, payload[0])
  44. typedef struct {
  45. Aoehdr;
  46. uchar aflag;
  47. uchar errfeat;
  48. uchar scnt;
  49. uchar cmdstat;
  50. uchar lba[6];
  51. uchar res[2];
  52. uchar payload[];
  53. } Aoeata;
  54. #define AOEATASZ offsetof(Aoeata, payload[0])
  55. typedef struct {
  56. Aoehdr;
  57. uchar bufcnt[2];
  58. uchar fwver[2];
  59. uchar scnt;
  60. uchar verccmd;
  61. uchar cslen[2];
  62. uchar payload[];
  63. } Aoeqc;
  64. #define AOEQCSZ offsetof(Aoeqc, payload[0])
  65. extern char Echange[];
  66. extern char Enotup[];