[syslinux] [Fwd: pxelinux doesn't suppress common prefix if nothing precedes double colon]

Paul Whittaker whitpa at velocitynet.com.au
Sat Nov 17 15:25:53 PST 2007


H. Peter Anvin wrote:
> Paul Whittaker wrote:
>   
>> Just a reminder that this remains an issue up to and including the 
>> latest syslinux 3.53-pre (0x473cfc9c).
>>
>> Additional testing suggests that implicit hostname/IP has never worked, 
>> ever since the common prefix suppression feature was added in version 3.00.
>>
>> -------- Original Message --------
>> Subject: 	pxelinux doesn't suppress common prefix if nothing precedes 
>> double colon
>> Date: 	Sat, 25 Aug 2007 22:22:00 -0400
>> From: 	Paul Whittaker <whitpa at velocitynet.com.au>
>> To: 	syslinux at zytor.com
>>
>> Contrary to the pxelinux.doc documentation, the common filename prefix 
>> is only suppressed if an explicit hostname or IP address precedes the 
>> double colon, e.g. 192.168.1.1::/foobar.  A tcpdump of TFTP requests 
>> reveals that the double colon does nothing in implicit case (::/foobar 
>> is the same as /foobar, i.e. gets mapped to /pxelinux//foobar or 
>> whatever).  0.0.0.0::/foobar also does this.
>>
>> I first noticed the  problem in 3.51, and have confirmed that it still 
>> exists in the current (3.52 0x46d0cdef) git code.
>>
>> Sorry, my 80x86 assembly skills are too rusty to fix this myself, but it 
>> should be 100% reproduceable.
>>
>>     
>
> I just tested this on my own system, and I explicitly do *NOT* see this 
> problem in syslinux-3.53-pre5.  I need more details about exactly what 
> you're trying to do; in particular if you can send me a config file that 
> reproduces the problem it would help.
>
> 	-h-pa
>   

Okay - I've now found out some more about the conditions under which my 
problem occurs.  While minimalising my config file for inclusion here, I 
discovered that most of my problem is actually caused by 
[vesa]menu.c32.  When you disable the menu, it partly works.  I 
conducted the tests that follow using "PXELINUX 3.53 0x473e56dd".

The pxelinux.cfg/default file that I was working with originally looked 
something like this:

---

    prompt 0
    timeout 50
    implicit 1
    ipappend 1
    default menu.c32
    menu title Boot Image Selection

    label DIET-PC
            menu label DIET-PC
            menu default
            kernel ::/diet-pc/bzImage
            append root=/dev/ram0 rw console=tty1
    initrd=::/diet-pc/initrd.img

---

This config file results in TFTP behaviour as follows:

root at dietpc-dev-x86:/mnt/hgfs/tftpboot/pxelinux,# tcpdump dst port 
69           tcpdump: verbose output suppressed, use -v or -vv for full 
protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
17:50:35.390143 IP 192.168.1.247.2070 > gemini.mshome.net.tftp:  38 RRQ 
"/pxelinux,/pxelinux.0" octet tsize 0
17:50:35.395433 IP 192.168.1.247.2071 > gemini.mshome.net.tftp:  43 RRQ 
"/pxelinux,/pxelinux.0" octet blksize 1456
17:50:35.463612 IP 192.168.1.247.57089 > gemini.mshome.net.tftp:  90 RRQ 
"/pxelinux,/pxelinux.cfg/564db280-3aea-24e8-bd0b-0f01"   [|tftp]
17:50:35.464840 IP 192.168.1.247.57090 > gemini.mshome.net.tftp:  74 RRQ 
"/pxelinux,/pxelinux.cfg/01-00-0c-29-c9-05-19" octet t
17:50:35.467588 IP 192.168.1.247.57091 > gemini.mshome.net.tftp:  62 RRQ 
"/pxelinux,/pxelinux.cfg/C0A801F7" octet tsize 0 blksi
17:50:35.468179 IP 192.168.1.247.57092 > gemini.mshome.net.tftp:  61 RRQ 
"/pxelinux,/pxelinux.cfg/C0A801F" octet tsize 0 blksiz
17:50:35.468731 IP 192.168.1.247.57093 > gemini.mshome.net.tftp:  60 RRQ 
"/pxelinux,/pxelinux.cfg/C0A801" octet tsize 0 blksize
17:50:35.469264 IP 192.168.1.247.57094 > gemini.mshome.net.tftp:  59 RRQ 
"/pxelinux,/pxelinux.cfg/C0A80" octet tsize 0 blksize
17:50:35.470696 IP 192.168.1.247.57095 > gemini.mshome.net.tftp:  58 RRQ 
"/pxelinux,/pxelinux.cfg/C0A8" octet tsize 0 blksize 1
17:50:35.472818 IP 192.168.1.247.57096 > gemini.mshome.net.tftp:  57 RRQ 
"/pxelinux,/pxelinux.cfg/C0A" octet tsize 0 blksize 14
17:50:35.474361 IP 192.168.1.247.57097 > gemini.mshome.net.tftp:  56 RRQ 
"/pxelinux,/pxelinux.cfg/C0" octet tsize 0 blksize 140
17:50:35.475710 IP 192.168.1.247.57098 > gemini.mshome.net.tftp:  55 RRQ 
"/pxelinux,/pxelinux.cfg/C" octet tsize 0 blksize 1408
17:50:35.477101 IP 192.168.1.247.57099 > gemini.mshome.net.tftp:  61 RRQ 
"/pxelinux,/pxelinux.cfg/default" octet tsize 0 blksiz
17:50:35.478610 IP 192.168.1.247.57100 > gemini.mshome.net.tftp:  49 RRQ 
"/pxelinux,/menu.c32" octet tsize 0 blksize 1408
17:50:36.454024 IP 192.168.1.247.57101 > gemini.mshome.net.tftp:  61 RRQ 
"/pxelinux,/pxelinux.cfg/default" octet tsize 0 blksiz
17:50:37.992667 IP 192.168.1.247.57102 > gemini.mshome.net.tftp:  57 RRQ 
"/pxelinux,//diet-pc/bzImage" octet tsize 0 blksize 14

16 packets captured
16 packets received by filter
0 packets dropped by kernel

What I expect it to load is "/diet-pc/bzImage" (followed by 
/diet-pc/initrd.img), but it doesn't even attempt this.

The comma at the end of "/pxelinux," is deliberate, BTW, put there for 
obscure reasons relating to Micromonitor boot ROM behaviour.  Don't 
worry about it (see 
http://diet-pc.sourceforge.net/arm/hot-e/debian-howto.html#pxe for the 
full story if you really care).  The TFTP server is Windows 2000's (RIS) 
TFTP server, although it is actually running on Windows XP (using 
http://www.simonsen.bz/Download/TFTPDaemon_v1.1.zip, c.f. 
http://diet-pc.sourceforge.net/windows/etherboot-w2k.html#tftp).  The 
TFTP server is not on the same machine as the DHCP server (which is 
udhcpd, running on a LinkSys WRT54G).  The hardware being booted is a 
VMWare (6.0.1) virtual machine.

When I take menu.c32 out of the equation, using the config file:

---

    prompt 0
    timeout 50
    implicit 1
    ipappend 1
    default DIET-PC

    label DIET-PC
            kernel ::/diet-pc/bzImage
            append root=/dev/ram0 rw console=tty1
    initrd=::/diet-pc/initrd.img


---

... I get the following behaviour:

root at dietpc-dev-x86:/mnt/hgfs/tftpboot/pxelinux,# tcpdump dst port 69
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
18:12:51.765021 IP 192.168.1.247.2070 > gemini.mshome.net.tftp:  38 RRQ 
"/pxelinux,/pxelinux.0" octet tsize 0
18:12:51.766825 IP 192.168.1.247.2071 > gemini.mshome.net.tftp:  43 RRQ 
"/pxelinux,/pxelinux.0" octet blksize 1456
18:12:52.770531 IP 192.168.1.247.57089 > gemini.mshome.net.tftp:  90 RRQ 
"/pxelinux,/pxelinux.cfg/564db280-3aea-24e8-bd0b-0f01"   [|tftp]
18:12:52.773574 IP 192.168.1.247.57090 > gemini.mshome.net.tftp:  74 RRQ 
"/pxelinux,/pxelinux.cfg/01-00-0c-29-c9-05-19" octet t
18:12:52.774806 IP 192.168.1.247.57091 > gemini.mshome.net.tftp:  62 RRQ 
"/pxelinux,/pxelinux.cfg/C0A801F7" octet tsize 0 blksi
18:12:52.775384 IP 192.168.1.247.57092 > gemini.mshome.net.tftp:  61 RRQ 
"/pxelinux,/pxelinux.cfg/C0A801F" octet tsize 0 blksiz
18:12:52.778525 IP 192.168.1.247.57093 > gemini.mshome.net.tftp:  60 RRQ 
"/pxelinux,/pxelinux.cfg/C0A801" octet tsize 0 blksize
18:12:52.779047 IP 192.168.1.247.57094 > gemini.mshome.net.tftp:  59 RRQ 
"/pxelinux,/pxelinux.cfg/C0A80" octet tsize 0 blksize
18:12:52.782426 IP 192.168.1.247.57095 > gemini.mshome.net.tftp:  58 RRQ 
"/pxelinux,/pxelinux.cfg/C0A8" octet tsize 0 blksize 1
18:12:52.785775 IP 192.168.1.247.57096 > gemini.mshome.net.tftp:  57 RRQ 
"/pxelinux,/pxelinux.cfg/C0A" octet tsize 0 blksize 14
18:12:52.787681 IP 192.168.1.247.57097 > gemini.mshome.net.tftp:  56 RRQ 
"/pxelinux,/pxelinux.cfg/C0" octet tsize 0 blksize 140
18:12:52.789916 IP 192.168.1.247.57098 > gemini.mshome.net.tftp:  55 RRQ 
"/pxelinux,/pxelinux.cfg/C" octet tsize 0 blksize 1408
18:12:52.794284 IP 192.168.1.247.57099 > gemini.mshome.net.tftp:  61 RRQ 
"/pxelinux,/pxelinux.cfg/default" octet tsize 0 blksiz
18:12:52.797891 IP 192.168.1.247.57100 > gemini.mshome.net.tftp:  46 RRQ 
"/diet-pc/bzImage" octet tsize 0 blksize 1408
18:13:50.933504 IP 192.168.1.247.57101 > gemini.mshome.net.tftp:  60 RRQ 
"/pxelinux,//diet-pc/initrd.img" octet tsize 0 blksize
18:13:55.857478 IP 192.168.1.247.57102 > gemini.mshome.net.tftp:  46 RRQ 
"/diet-pc/bzImage" octet tsize 0 blksize 1408

16 packets captured
16 packets received by filter
0 packets dropped by kernel

As you can see, this loads the kernel (/diet-pc/bzImage) correctly, but 
fails to remove the /pxelinux,/ prefix from the initrd.  Is this simply 
because prefix suppression is not supported on initrd filenames?  The 
documentation - and a quick look at runkernel.inc - gives me no reason 
to suspect that prefix suppression is limited to kernels only.




More information about the Syslinux mailing list