Folks, I've just released the first prelease for the 5.10 series. The intention is to leave 5.02-pre3 where it is and move to 5.10-pre1. The only difference between 5.02-pre3 and 5.10-pre1 is the merge of the lwip branch (and a single commit to fixup the -DDEBUG=2 build), which warranted a bump in the version minor number. See the shortlog below for details of the differences between 5.02-pre3 and 5.10-pre1. I don't expect people to be crying out for a 5.02 final release, but if that is something that people want we can always do it retroactively at any time. That isn't a problem. With Syslinux-5.10-pre1 we've now got two network stacks; the old legacy stack which is a very thin layer around the PXE interface, and the new lwIP TCP/IP stack. The easiest way to include both of these stacks in Syslinux was to build two separate .0 files, pxelinux.0 for the legacy stack and lpxelinux.0 for the lwIP stack. Note there are no plans to make the new http/ftp code work with the legacy stack, it's mainly being kept around as a known reference point for when bugs are suspected in lpxelinux.0 and because it is known to work with some rather quirky PXE implementations. --- Eric W. Biederman (51): core: Makefile don't worry about how deep the files are lwip: Import lwip version 1.3.2 lwip: Delete the ipv6 support and the tests. lwip: Minimal configuration to get lwip building in syslinux core: declare jiffies_t and mstime_t and use them. core: thread: Add a global errno variable to support lwip core thread: Rename timeouts pvt to better reflect it's use. core: Move kaboom into it's own header. lwip: Use kaboom.h core: Move timer functions into timer.h core thread: Don't include core.h from thread.h core: Make the core malloc and free thread safe. lwip: Enable thread support core: pxe: pm_return Use jiffies_t pxe: Statically initialize pxe_receive_thread_sem pxe: Add methods to abstract out the connection type. pxe: Move the tftp implementation into it's own file pxe: Move the gpxe url reading code into it's own file. pxe: hook up the interrupt routine and the lwip receive routine core thread: Make the code a little clearer. core: pxeisr.inc: The name of the globals is pxe_irq_vector not pxe_irq_num core pxe: Switch threads if more than one runnable. core pxe: Ensure all parameters in pxe_get_cached_info are initialized. lwip: In mem.h define mem_realloc as static inline lwip: Disable lwip's malloc routines undiif: Fix weird include order madness. core pxe: Cleanup the call to pxe_isr_init core: factor out byteswap.h from netinet/in.h lwip: Use byteswap.h to define htons and friends pxe: Send tftp acks after we reach our timeout core pxe: Use the lwip dns resolver core: pxe: Add a netconn socket to the pxe private inode core: pxe: Rewrite the tftp implementation to use lwip core: pxe: Factor out pxe_poll from pxe_receive_thread core: Add isspace to ctype.h lwip: Rename mem_init lwip_mem_init to remove a namespace conflict. lwip: Tune memory management for performance core: pxe: Add general support for pluggable url handlers. core: pxe Add native support for http urls lwip: Explicitly enable udp,tcp,icmp, and receive timeouts. core: pxe: Improve the situation with installing and uninstalling irq handlers core: pxe: Cleanup properly when using undi. lwip: Update the undi driver so it handles (in theory) all network types supported by undi lwip: Allow up to 20 byte hardware address to support infiniband. lwip: Clean up the initialization sequence pxe: Remove the lwip_test code undiif: Theoretical support for infiniband. core: thread: Implement polling for wakeups. pxe: Cleanup interrupt handling making it reliabe and in spec pxe: Neuter pxe_idle_init undiif: Unneeded debugging functions. Gene Cumm (13): lwip: undiif: Fix #error typo lwip: undiif: Fix debug option addressing in update_arp_entry() lwip:undiif: Use tcpip_input() rather than ethernet_input()/ip_input() lwip:undiif: Add interface with tcpip_input() callback cptime.c32: Simple module to test download rates prdhcp.c32: Print DHCP packets cptime.c32: Move to modules; include in Makefile cptime.txt: AsciiDoc manpage for cptime.c32 prdhcp.c32: Add to Makefile prdhcp.c32: Fix what is retrieved. core/lwip: update to lwIP-1.4.0 core/pxe: lwip changes to netconn_recv core/pxe: lwip semaphore changes H. Peter Anvin (159): stddef.h: add container_of() core: simple thread library core: thread: have start_thread() allocate memory dynamically core: thread: add option to not wait on a semaphore at all core: add simple mailbox library core: thread: merge mbox_post() and mbox_trypost() core: thread: move most thread state to stack; task switch errno core: thread: add a "timeouts" pointer to the thread structure thread: add support for locking the scheduler core: thread: add static declaration of semaphores core: thread: add a name field core: pxe: real-mode interrupt service routine core: add a way to invoke a function on return to protmode core: pxe: pm return hook to examine timer ticks and PXE ISR status core: pxeisr.inc: fix compatibility with older versions of NASM core: add .stack to layout.inc so it gets the proper flags core: add .stack16 to layout.inc lwip: undiif - initial cut at a UNDI Ethernet-only driver lwip: fix conflict with <netinet/in.h> pxe: lwip: update data pointer after getting a secondary fragment pxe: lwip: busy-wait if transmit is blocked for buffers core: pxe: don't switch to the PXE stack if we're on it... core: thread: return 0 from sem_down() if we didn't have to wait core: pxe: additional work on the lwip port lwip: Allow clearing a dns server lwip: now to the point we can make a TCP connection... lwip: better test case core: lwip: tune parameters for performance Make sure TCP_WND is < 64K-TCP_MSS lwip: better speed test core: lwipopts: additional fine-tuning lwip: fix timestamps, statistics functions lwip: show stats when displaying speedtest results pxe: fix gcc 4.6 problems pxe: isr: fix formatting Merge branch 'master' into lwip-threads version: call this branch 4.10 NEWS: document lwIP thread: thread-switch the real-mode stack, too lwip: handle UNDI stacks which need to be polled thread: free(NULL) is safe, lmalloc() always return para-aligned pxe: put a semaphore around PXE calls pxe: Add a much more general URL-parsing framework pxe: urlparse: add comments pxe: use the unified URL parsing framework pxe: move operations common to TCP-based protocols to a common file pxe: make tftp_pktbuf a dynamic buffer pxe: tcp: always call the close method urlparse: fix url_unescape() pxe: more verbose lwIP asserts pxe: tcp: close the connection before freeing the buffers pxe: add support for FTP pxe: move redirect processing to the URL-parsing level pxe: make url_set_ip() static pxe: continue to bounce URLs with unknown schemes to gPXE pxe: allow an empty input to dns_resolv() pxe: make lwip use IANA-blessed local port numbers pxe, ftp: remove a bogus include pxe, tftp: let lwIP manage port numbers pxe, tftp: unbreak the TFTP state machine idle.c: remove -*- fundamental -*- tag pxe: use a separate poll thread instead of using an idle thread hook NEWS: document FTP PXE Cleanups, allow for 128 open files core: layout.inc: remove duplicate .stack segment definition core: dynamically size the heap core, diskio: allocate the disk cache from the heap core: remove the .hugebss section Merge remote-tracking branch 'origin/master' into lwip pxe: remove non-lwIP definition of DNS_MAX_SERVERS Merge remote-tracking branch 'origin/master' into lwip Generalize ipappend handling as "sysappend", and move to PM code pxe, http: send the sysappend/ipappend strings as cookies Merge remote-tracking branch 'origin/master' into lwip Additional sysappend strings from DMI; pre-bake the http cookies menu: mangle whitespace in ipappend/sysappend strings pxe, undiif: install the gateway properly pxe, http: correct the header overflow test dmi: strip whitespace from DMI strings pxe, http: Use Syslinux/<version> as the User-agent: menu: need to advance the pointer, once again... dmi: add additional strings dmi: fix incorrect pointer subtraction, add sanity checks dmi: fix more pointer subtraction bugs pxe, http: simplify cookie generation, fix boundary conditions pxe: start the poll thread when we would have started the ISR pxe: minor initialization cleanups dmi: actually advance the end pointer properly dmi: separate the SYS* and MB* defines as their own strings Add documentation about the new features thread: make kill_thread() actually do its job dmi: Add a few more DMI strings Create a sysappend string with some very minimal CPU information exit_thread: make sure we don't run under scheduler lock exit_thread: easier form of the same test... thread: simplify the scheduler fcntl.h: add O_DIRECTORY pxe, http: Remove unused variable thread: fix warnings dmi: remove unused variable Merge remote-tracking branch 'origin/master' into lwip core: pass the file flags down through the stack pxe: push the open flags down into individual methods pxe: move the per-connection-type operations into a structure pxe: remove a stray inline pxe, tftp: remove global buffers, double buffering pxe: fix the flags test pxe, http: support readdir (ls) over http pxe, ftp: support readdir for FTP pxe, ftp: correct the handling of continuation lines NEWS: ls is now supported over FTP as well pxe, undiif: print UNDI information during initialization pxe, dns: add the local domain to unqualified hostnames pxe, ftp: handle some DOS FTP stacks correctly pxe: try to mimic the policy of iPXE with respect to interrupts Merge remote-tracking branch 'origin/master' into lwip pxe: when hooking an interrupt, explicitly enable it at the PIC pxe: fix the cleanup routine pxe: be more verbose on unload failure Merge commit 'syslinux-4.05-pre2' into lwip sysappend: advance pointer core: Add "dprint" facility to assembly Merge branch 'master' into lwip core/debug.c: don't error out on !DEBUG Merge remote-tracking branch 'origin/master' into lwip Merge branch 'master' into lwip Merge branch 'lwip' of ssh://terminus.zytor.com/pub/git/syslinux/syslinux into lwip Merge remote-tracking branch 'origin/master' into lwip undiif: correct bogus dprintf() statement thread: allow marking invalid; allow for static mboxes Merge remote-tracking branch 'origin/master' into lwip Merge remote-tracking branch 'genec/com32-cptime-for-hpa' into lwip Merge remote-tracking branch 'genec/com32-prdhcp-for-hpa' into lwip Merge commit 'syslinux-4.05' into lwip Merge branch 'lwip' of ssh://terminus.zytor.com/pub/git/syslinux/syslinux into lwip sys/cpu.h: add barriers idle_thread: safer interrupt handling pxe: Unmask the cascade if applicable, handle bad IRQ numbers lwipopts.h: Bump the priority of the tcpip_thread pxeisr: Use nonspecific EOI; add pxe_poll routine; CLD thread: Add magic number, debugging code, min stack size pxe: Fix interrupt unmasking pxe: Make the ISR poll routine a bit saner Merge remote-tracking branch 'origin/master' into lwip Merge remote-tracking branch 'genec/com32-cptime-upd-for-hpa' into lwip Merge remote-tracking branch 'origin/master' into lwip lwipopts: increase the number of netbufs pxe, tftp: Unify UDP send and use pbuf memory pxe, tftp: make TimeoutTable static pxe, tftp: Handle block number wraparound pxe: Remove stray debugging message lwip: Add return address to LWIP_PLATFORM_ASSERT() pxe, ftp: Change anonymous password to syslinux@ Merge remote-tracking branch 'genec/lwip-1.4.0-test-2' into lwip pxe: Add code to detect a struck interrupt line and disable (go to poll) pxe: drop the maximum spurious interrupt to 100 in a timer tick pxe: always start the idle thread, in case we need it pxe: force polling on if we receive no interrupts pxe: use core for atomic modification of certain volatiles Matt Fleming (6): Merge branch 'lwip' into elflink pxe: Handle closing file with NULL ->inode lwip: Fix use-after-free memory corruption shuffle: syslinux_dump_movelist() only takes 1 argument net: Return of the legacy network stack Merge branch 'lwip-merge' into elflink Sebastian Herbszt (2): thread: free curr->rmstack core: fix pc_setint16 and pc_setint32 -- Matt Fleming, Intel Open Source Technology Center
Tobias Göbel
2013-Mar-07 12:32 UTC
[syslinux] Syslinux-5.10-pre1 looks for ldlinux.c32 in TFTP instead of HTTP
Hi, got some problems. I'm trying to use Syslinux 5.10-pre1 to see if it fixes a problem described earlier. First of a litle description how my System boots pxelinux. DHCP Server looks if iPXE is allready loaded, and if not loads ipxe.kkpxe (because of the cached DHCP reply) from TFTP. When iPXE boots it's useing the cached DHCP request and boots pxelinux.0 from HTTP server. Here is where the problem occours. pxelinux.0 get's loaded from HTTP with no problems, but then pxelinux.0 tries to load the missing modules (in this case ldlinux.c32), but it doesn't even try to load it from the HTTP server, but tries the TFTP server where the iPXE gets chainloaded from. Here is the config file embedded into iPXE: #!ipxe prompt --key 0x02 --timeout 1000 Press Ctrl-B for the iPXE command line... && shell || set use-cached 1 dhcp net0 set 209:string http://***.***.***.187/pxelinux.cfg/default set 210:string http://***.***.***.187/ set filename http://***.***.***.187/pxelinux.0 chain ${filename} || echo Netboot failed. Dropping to Shell... shell As you can see, everything is set to HTTP and i have no clue, why pxelinux.0 tries to load it from TFTP anyways. -------------- n?chster Teil -------------- Ein Dateianhang mit Bin?rdaten wurde abgetrennt... Dateiname : smime.p7s Dateityp : application/pkcs7-signature Dateigr??e : 4477 bytes Beschreibung: S/MIME Kryptografische Unterschrift URL : <http://www.zytor.com/pipermail/syslinux/attachments/20130307/bed4480d/attachment.p7s>
Matt Fleming
2013-Mar-07 12:51 UTC
[syslinux] Syslinux-5.10-pre1 looks for ldlinux.c32 in TFTP instead of HTTP
On Thu, 2013-03-07 at 13:32 +0100, Tobias G?bel wrote:> As you can see, everything is set to HTTP and i have no clue, why > pxelinux.0 tries to load it from TFTP anyways.The lwIP PXE stack is called lpxelinux.0 in 5.10-pre1, not pxelinux.0. pxelinux.0 is the legacy code. -- Matt Fleming, Intel Open Source Technology Center
Tobias Göbel
2013-Mar-07 13:21 UTC
[syslinux] Syslinux-5.10-pre1 looks for ldlinux.c32 in TFTP instead of HTTP
Am Donnerstag, 07.03.2013 13:51, schrieb Matt Fleming:> On Thu, 2013-03-07 at 13:32 +0100, Tobias G?bel wrote: >> As you can see, everything is set to HTTP and i have no clue, why >> pxelinux.0 tries to load it from TFTP anyways. > The lwIP PXE stack is called lpxelinux.0 in 5.10-pre1, not pxelinux.0. > pxelinux.0 is the legacy code. >Oh sorry, forgot to mention this. I just renamed lpxelinux.0 to pxelinux.0 because i was to lazy to recompile iPXE. But i tired if the nameing makes any difference. No effect sadly. Here is a log from the TFTP Server and the HTTP server. Seems like pxelinux.0 tries to search the http path in the tftp server oO TFTP: Mar 7 13:56:12 dvzis-pxe in.tftpd[18299]: RRQ from ***.***.***.29 filename /pxelinux/ipxe.kkpxe Mar 7 13:56:12 dvzis-pxe in.tftpd[18299]: tftp: client does not accept options Mar 7 13:56:12 dvzis-pxe in.tftpd[18301]: RRQ from ***.***.***.29 filename /pxelinux/ipxe.kkpxe Mar 7 13:56:14 dvzis-pxe in.tftpd[18304]: RRQ from ***.***.***.29 filename http://***.***.***.187/ldlinux.c32 Mar 7 13:56:14 dvzis-pxe in.tftpd[18305]: RRQ from ***.***.***.29 filename http://***.***.***.187//ldlinux.c32 Mar 7 13:56:14 dvzis-pxe in.tftpd[18306]: RRQ from ***.***.***.29 filename http://***.***.***.187//boot/isolinux/ldlinux.c32 Mar 7 13:56:14 dvzis-pxe in.tftpd[18307]: RRQ from ***.***.***.29 filename http://***.***.***.187//isolinux/ldlinux.c32 Mar 7 13:56:14 dvzis-pxe in.tftpd[18308]: RRQ from ***.***.***.29 filename http://***.***.***.187//boot/syslinux/ldlinux.c32 Mar 7 13:56:14 dvzis-pxe in.tftpd[18309]: RRQ from ***.***.***.29 filename http://***.***.***.187//syslinux/ldlinux.c32 Mar 7 13:56:14 dvzis-pxe in.tftpd[18310]: RRQ from ***.***.***.29 filename http://***.***.***.187//ldlinux.c32 HTTP: ***.***.***.29 - - [07/Mar/2013:13:56:14 +0100] "GET /lpxelinux.0 HTTP/1.1" 200 81391 "-" "iPXE/1.0.0+ (09c5)" -------------- n?chster Teil -------------- Ein Dateianhang mit Bin?rdaten wurde abgetrennt... Dateiname : smime.p7s Dateityp : application/pkcs7-signature Dateigr??e : 4477 bytes Beschreibung: S/MIME Kryptografische Unterschrift URL : <http://www.zytor.com/pipermail/syslinux/attachments/20130307/74882ca3/attachment.p7s>
On 03/07/2013 02:04 AM, Matt Fleming wrote:> Note there are no plans to make the new http/ftp > code work with the legacy stackEven more so, it is simply not possible, as the legacy stack runs the PXE stack in UDP mode. That means only UDP packets are available, not TCP, and not even raw IP packets on which one can build a TCP stack. We could do something better than TFTP, but it would have to be a new protocol run on top of UDP. Looking forward, however: EFI *does* provide a TCP stack, and so the high-level protocols introduced in this release can be used on top of the EFI stack directly. -hpa