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