
1 the config string was grabbed Aoehsz too far into the packet due to using the wrong pointer to start. 2 never accept a response with tag Tmgmt or Tfree. 3 defend against "malicious" responses; ones with a response Aoehdr.type != request Aoehdr.type. this previously could cause the initiator to crash. 4 vendor commands were improperly filtered out.
124 lines
1.5 KiB
C
124 lines
1.5 KiB
C
enum {
|
|
ACata,
|
|
ACconfig,
|
|
ACmask,
|
|
ACres,
|
|
};
|
|
|
|
enum {
|
|
AQCread,
|
|
AQCtest,
|
|
AQCprefix,
|
|
AQCset,
|
|
AQCfset,
|
|
};
|
|
|
|
enum {
|
|
AEunk,
|
|
AEcmd, /* bad command */
|
|
AEarg, /* bad argument */
|
|
AEoff, /* device offline */
|
|
AEcfg, /* config string already set */
|
|
AEver, /* unsupported version */
|
|
AEres, /* target reserved */
|
|
};
|
|
|
|
enum {
|
|
/* mask commands */
|
|
Mread = 0,
|
|
Medit,
|
|
|
|
/* mask directives */
|
|
MDnop = 0,
|
|
MDadd,
|
|
MDdel,
|
|
|
|
/* mask errors */
|
|
MEunk = 1,
|
|
MEbad,
|
|
MEfull,
|
|
|
|
/* reserve / release */
|
|
Rrread = 0,
|
|
Rrset,
|
|
Rrforce,
|
|
};
|
|
|
|
enum {
|
|
Aoetype = 0x88a2,
|
|
Aoesectsz = 512,
|
|
Aoemaxcfg = 1024,
|
|
|
|
Aoehsz = 24,
|
|
Aoeatasz = 12,
|
|
Aoecfgsz = 8,
|
|
Aoerrsz = 2,
|
|
Aoemsz = 4,
|
|
Aoemdsz = 8,
|
|
|
|
Aoever = 1,
|
|
|
|
AFerr = 1<<2,
|
|
AFrsp = 1<<3,
|
|
|
|
AAFwrite = 1,
|
|
AAFext = 1<<6,
|
|
};
|
|
|
|
typedef struct Aoehdr Aoehdr;
|
|
typedef struct Aoeata Aoeata;
|
|
typedef struct Aoecfg Aoecfg;
|
|
typedef struct Aoemd Aoemd;
|
|
typedef struct Aoem Aoem;
|
|
typedef struct Aoerr Aoerr;
|
|
|
|
struct Aoehdr {
|
|
uchar dst[Eaddrlen];
|
|
uchar src[Eaddrlen];
|
|
uchar type[2];
|
|
uchar verflag;
|
|
uchar error;
|
|
uchar major[2];
|
|
uchar minor;
|
|
uchar cmd;
|
|
uchar tag[4];
|
|
};
|
|
|
|
struct Aoeata {
|
|
uchar aflag;
|
|
uchar errfeat;
|
|
uchar scnt;
|
|
uchar cmdstat;
|
|
uchar lba[6];
|
|
uchar res[2];
|
|
};
|
|
|
|
struct Aoecfg {
|
|
uchar bufcnt[2];
|
|
uchar fwver[2];
|
|
uchar scnt;
|
|
uchar verccmd;
|
|
uchar cslen[2];
|
|
};
|
|
|
|
struct Aoemd {
|
|
uchar dres;
|
|
uchar dcmd;
|
|
uchar ea[Eaddrlen];
|
|
};
|
|
|
|
struct Aoem {
|
|
uchar mres;
|
|
uchar mcmd;
|
|
uchar merr;
|
|
uchar mcnt;
|
|
};
|
|
|
|
typedef struct Aoerr {
|
|
uchar rcmd;
|
|
uchar nea;
|
|
uchar ea0[];
|
|
};
|
|
|
|
extern char Echange[];
|
|
extern char Enotup[];
|