vblade: fix code so #pragma pack isnt needed
This commit is contained in:
parent
6379939642
commit
ffe862c543
2 changed files with 35 additions and 36 deletions
|
@ -40,8 +40,6 @@ enum{
|
||||||
AAFext = 1<<6,
|
AAFext = 1<<6,
|
||||||
};
|
};
|
||||||
|
|
||||||
#pragma pack on
|
|
||||||
|
|
||||||
typedef struct{
|
typedef struct{
|
||||||
uchar dst[Eaddrlen];
|
uchar dst[Eaddrlen];
|
||||||
uchar src[Eaddrlen];
|
uchar src[Eaddrlen];
|
||||||
|
@ -55,7 +53,6 @@ typedef struct{
|
||||||
}Aoehdr;
|
}Aoehdr;
|
||||||
|
|
||||||
typedef struct{
|
typedef struct{
|
||||||
Aoehdr;
|
|
||||||
uchar aflag;
|
uchar aflag;
|
||||||
uchar errfeat;
|
uchar errfeat;
|
||||||
uchar scnt;
|
uchar scnt;
|
||||||
|
@ -65,7 +62,6 @@ typedef struct{
|
||||||
}Aoeata;
|
}Aoeata;
|
||||||
|
|
||||||
typedef struct{
|
typedef struct{
|
||||||
Aoehdr;
|
|
||||||
uchar bufcnt[2];
|
uchar bufcnt[2];
|
||||||
uchar fwver[2];
|
uchar fwver[2];
|
||||||
uchar scnt;
|
uchar scnt;
|
||||||
|
|
|
@ -83,7 +83,7 @@ getmtu(char *p)
|
||||||
return 2;
|
return 2;
|
||||||
close(fd);
|
close(fd);
|
||||||
buf[36] = 0;
|
buf[36] = 0;
|
||||||
mtu = strtoul(buf+12, 0, 0)-sizeof(Aoehdr);
|
mtu = strtoul(buf+12, 0, 0)-Aoehsz;
|
||||||
return mtu>>9;
|
return mtu>>9;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -238,18 +238,20 @@ replyhdr(Aoehdr *h, Vblade *vblade)
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
serveconfig(Aoeqc *q, Vblade *vb, int mtu)
|
serveconfig(Aoehdr *h, Vblade *vb, int mtu)
|
||||||
{
|
{
|
||||||
int cmd, reqlen, len;
|
int cmd, reqlen, len;
|
||||||
char *cfg;
|
char *cfg;
|
||||||
|
Aoeqc *q;
|
||||||
|
|
||||||
if(memcmp(q->src, q->dst, Eaddrlen) == 0)
|
if(memcmp(h->src, h->dst, Eaddrlen) == 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
|
q = (Aoeqc*)((char*)h + Aoehsz);
|
||||||
reqlen = nhgets(q->cslen);
|
reqlen = nhgets(q->cslen);
|
||||||
len = vb->clen;
|
len = vb->clen;
|
||||||
cmd = q->verccmd&0xf;
|
cmd = q->verccmd&0xf;
|
||||||
cfg = (char*)(q+1);
|
cfg = (char*)q + Aoecfgsz;
|
||||||
|
|
||||||
switch(cmd){
|
switch(cmd){
|
||||||
case AQCtest:
|
case AQCtest:
|
||||||
|
@ -264,14 +266,14 @@ serveconfig(Aoeqc *q, Vblade *vb, int mtu)
|
||||||
break;
|
break;
|
||||||
case AQCset:
|
case AQCset:
|
||||||
if(len && len != reqlen || memcmp(vb->hdr.config, cfg, reqlen) != 0){
|
if(len && len != reqlen || memcmp(vb->hdr.config, cfg, reqlen) != 0){
|
||||||
q->verflag |= AFerr;
|
h->verflag |= AFerr;
|
||||||
q->error = AEcfg;
|
h->error = AEcfg;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case AQCfset:
|
case AQCfset:
|
||||||
if(reqlen > Conflen){
|
if(reqlen > Conflen){
|
||||||
q->verflag |= AFerr;
|
h->verflag |= AFerr;
|
||||||
q->error = AEarg;
|
h->error = AEarg;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
memset(vb->hdr.config, 0, sizeof vb->hdr.config);
|
memset(vb->hdr.config, 0, sizeof vb->hdr.config);
|
||||||
|
@ -280,8 +282,8 @@ serveconfig(Aoeqc *q, Vblade *vb, int mtu)
|
||||||
savevblade(vb->fd, vb);
|
savevblade(vb->fd, vb);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
q->verflag |= AFerr;
|
h->verflag |= AFerr;
|
||||||
q->error = AEarg;
|
h->error = AEarg;
|
||||||
}
|
}
|
||||||
|
|
||||||
memmove(cfg, vb->hdr.config, len);
|
memmove(cfg, vb->hdr.config, len);
|
||||||
|
@ -291,7 +293,7 @@ serveconfig(Aoeqc *q, Vblade *vb, int mtu)
|
||||||
hnputs(q->fwver, 2323);
|
hnputs(q->fwver, 2323);
|
||||||
q->verccmd = Aoever<<4 | cmd;
|
q->verccmd = Aoever<<4 | cmd;
|
||||||
|
|
||||||
return len+sizeof *q;
|
return Aoehsz+Aoecfgsz + len;
|
||||||
}
|
}
|
||||||
|
|
||||||
static ushort ident[256] = {
|
static ushort ident[256] = {
|
||||||
|
@ -368,29 +370,32 @@ putlba(uchar *p, vlong lba)
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
serveata(Aoeata *a, Vblade *vb, int mtu)
|
serveata(Aoehdr *h, Vblade *vb, int mtu)
|
||||||
{
|
{
|
||||||
|
Aoeata *a;
|
||||||
char *buf;
|
char *buf;
|
||||||
int rbytes, bytes, len;
|
int rbytes, bytes, len;
|
||||||
vlong lba, off;
|
vlong lba, off;
|
||||||
|
|
||||||
buf = (char*)(a+1);
|
a = (Aoeata*)((char*)h + Aoehsz);
|
||||||
|
buf = (char*)a + Aoeatasz;
|
||||||
lba = getlba(a->lba);
|
lba = getlba(a->lba);
|
||||||
len = a->scnt<<9;
|
len = a->scnt<<9;
|
||||||
off = lba+vb->hdrsz<<9;
|
off = lba+vb->hdrsz<<9;
|
||||||
|
|
||||||
|
rbytes = 0;
|
||||||
if(a->scnt > mtu || a->scnt == 0){
|
if(a->scnt > mtu || a->scnt == 0){
|
||||||
a->verflag |= AFerr;
|
h->verflag |= AFerr;
|
||||||
a->cmdstat = ASdrdy|ASerr;
|
a->cmdstat = ASdrdy|ASerr;
|
||||||
a->error = AEarg;
|
h->error = AEarg;
|
||||||
return 0;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(a->cmdstat != Cid)
|
if(a->cmdstat != Cid)
|
||||||
if(lba+a->scnt > vb->maxlba){
|
if(lba+a->scnt > vb->maxlba){
|
||||||
a->errfeat = Eidnf;
|
a->errfeat = Eidnf;
|
||||||
a->cmdstat = ASdrdy|ASerr;
|
a->cmdstat = ASdrdy|ASerr;
|
||||||
return 0;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(a->cmdstat&0xf0 == 0x20)
|
if(a->cmdstat&0xf0 == 0x20)
|
||||||
|
@ -399,7 +404,7 @@ serveata(Aoeata *a, Vblade *vb, int mtu)
|
||||||
default:
|
default:
|
||||||
a->errfeat = Eabrt;
|
a->errfeat = Eabrt;
|
||||||
a->cmdstat = ASdrdy|ASerr;
|
a->cmdstat = ASdrdy|ASerr;
|
||||||
return 0;
|
goto out;
|
||||||
case Cid:
|
case Cid:
|
||||||
memmove(buf, ident, sizeof ident);
|
memmove(buf, ident, sizeof ident);
|
||||||
idmoveto(buf, 27, 40, "Plan 9 Vblade");
|
idmoveto(buf, 27, 40, "Plan 9 Vblade");
|
||||||
|
@ -408,8 +413,8 @@ serveata(Aoeata *a, Vblade *vb, int mtu)
|
||||||
lbamoveto(buf, 60, 4, vb->maxlba);
|
lbamoveto(buf, 60, 4, vb->maxlba);
|
||||||
lbamoveto(buf, 100, 8, vb->maxlba);
|
lbamoveto(buf, 100, 8, vb->maxlba);
|
||||||
a->cmdstat = ASdrdy;
|
a->cmdstat = ASdrdy;
|
||||||
return 512;
|
rbytes = 512;
|
||||||
break;
|
goto out;
|
||||||
case Crd:
|
case Crd:
|
||||||
case Crdext:
|
case Crdext:
|
||||||
bytes = pread(vb->fd, buf, len, off);
|
bytes = pread(vb->fd, buf, len, off);
|
||||||
|
@ -418,22 +423,22 @@ serveata(Aoeata *a, Vblade *vb, int mtu)
|
||||||
case Cwr:
|
case Cwr:
|
||||||
case Cwrext:
|
case Cwrext:
|
||||||
bytes = pwrite(vb->fd, buf, len, off);
|
bytes = pwrite(vb->fd, buf, len, off);
|
||||||
rbytes = 0;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if(bytes != len){
|
if(bytes != len){
|
||||||
a->errfeat = Eabrt;
|
a->errfeat = Eabrt;
|
||||||
a->cmdstat = ASdf|ASerr;
|
a->cmdstat = ASdf|ASerr;
|
||||||
putlba(a->lba, lba+(len-bytes)>>9);
|
putlba(a->lba, lba+(len-bytes)>>9);
|
||||||
return 0;
|
rbytes = 0;
|
||||||
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
putlba(a->lba, lba+a->scnt);
|
putlba(a->lba, lba+a->scnt);
|
||||||
a->scnt = 0;
|
a->scnt = 0;
|
||||||
a->errfeat = 0;
|
a->errfeat = 0;
|
||||||
a->cmdstat = ASdrdy;
|
a->cmdstat = ASdrdy;
|
||||||
|
out:
|
||||||
return rbytes;
|
return Aoehsz+Aoeatasz + rbytes;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
@ -451,8 +456,8 @@ myea(uchar ea[6], char *p)
|
||||||
return parseether(ea, buf);
|
return parseether(ea, buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static void
|
||||||
bcastpkt(Aoeqc *h, uint shelf, uint slot, int i)
|
bcastpkt(Aoehdr *h, uint shelf, uint slot, int i)
|
||||||
{
|
{
|
||||||
myea(h->dst, ethertab[i]);
|
myea(h->dst, ethertab[i]);
|
||||||
memset(h->src, 0xff, Eaddrlen);
|
memset(h->src, 0xff, Eaddrlen);
|
||||||
|
@ -460,8 +465,7 @@ bcastpkt(Aoeqc *h, uint shelf, uint slot, int i)
|
||||||
hnputs(h->major, shelf);
|
hnputs(h->major, shelf);
|
||||||
h->minor = slot;
|
h->minor = slot;
|
||||||
h->cmd = ACconfig;
|
h->cmd = ACconfig;
|
||||||
*(u32int*)h->tag = 0;
|
h->tag[0] = h->tag[1] = h->tag[2] = h->tag[3] = 0;
|
||||||
return Aoehsz + Aoecfgsz;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
|
@ -473,11 +477,10 @@ bladereply(Vblade *v, int i, int fd, char *pkt)
|
||||||
h = (Aoehdr*)pkt;
|
h = (Aoehdr*)pkt;
|
||||||
switch(h->cmd){
|
switch(h->cmd){
|
||||||
case ACata:
|
case ACata:
|
||||||
n = serveata((Aoeata*)h, v, mtutab[i]);
|
n = serveata(h, v, mtutab[i]);
|
||||||
n += sizeof(Aoeata);
|
|
||||||
break;
|
break;
|
||||||
case ACconfig:
|
case ACconfig:
|
||||||
n = serveconfig((Aoeqc*)h, v, mtutab[i]);
|
n = serveconfig(h, v, mtutab[i]);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
n = -1;
|
n = -1;
|
||||||
|
@ -513,7 +516,7 @@ fmtinstall('E', eipfmt);
|
||||||
|
|
||||||
n = 60;
|
n = 60;
|
||||||
h = (Aoehdr*)pkt;
|
h = (Aoehdr*)pkt;
|
||||||
bcastpkt((Aoeqc*)pkt, 0xffff, 0xff, i);
|
bcastpkt(h, 0xffff, 0xff, i);
|
||||||
goto start;
|
goto start;
|
||||||
|
|
||||||
for(;;){
|
for(;;){
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue