[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