[syslinux] comboot+PXE stack
Pawel Oleksik
oleksik at nospam.awa.mat.agh.edu.pl
Tue Dec 7 05:01:04 PST 2004
Hi,
I've carried out some experiments using PXE stack in comboot32 environment.
Results show that I still have problems with it.
I would appreciate if you tell me how to solve them.
1) getting syslinux info (int 0x22, AX=0x000A) results in reasonable values:
AL==0x0032 and ES:BX converted to char* points to memory area that starts with
"!PXE".
2) GET CACHED INFO fails when called with structure address:
t_PXENV_GET_CACHED_INFO * p = __com32.cs_bounce;
BOOTPLAYER * q = p + 16*(sizeof(t_PXENV_GET_CACHED_INFO)/16 + 1)
p->PacketType = 2;
p->BufferSize = sizeof(BOOTPLAYER);
p->Buffer.seg = SEG(q);
p->Buffer.offs = OFFS(q);
then
memset(&inreg,0,sizeof inreg);
inreg.eax = 0x00000009;
inreg.ebx = 0x00000071;
inreg.es = SEG(p);
inreg.edi.w[0] = OFFS(p);
__com32.cs_intcall(0x22,&inreg,&outreg);
fails with results:
outreg.eax == 0x00000001
outreg.eflags == 0x00000002
p->Status == 0x01 (this is not a very helpful information)
3) however, GET CACHED INFO can be called without sending pointers:
p->PacketType = 2;
p->BufferSize = p->Buffer.seg = p->Buffer.offs = 0;
then calling int 0x22 with inreg as above succeeds and p->Buffer (after
conversion) points to memory area containing correct information.
So, I could stand with it, but UPD OPEN does not work either
4)
t_PXENV_UDP_OPEN * p = __com32.cs_bounce;
p->Status = 0x00;
p->Src_ip = _my_ip_; //previously copied from GET CACHED INFO results
memset(&inreg,0,sizeof inreg);
inreg.eax = 0x00000009;
inreg.ebx = 0x00000030;
inreg.es = SEG(p);
inreg.edi.w[0] = OFFS(p);
__com32.cs_intcall(0x22,&inreg,&outreg);
gives values as above:
outreg.eax == 0x00000001
outreg.eflags == 0x00000002
p->Status == 0x01
Please, pay some attention and help me.
with best regards
p.o.
More information about the Syslinux
mailing list