]> git.ipfire.org Git - thirdparty/ipxe.git/log
thirdparty/ipxe.git
15 years ago[build] Use weak definitions instead of weak declarations
Joshua Oreman [Thu, 27 May 2010 00:52:44 +0000 (17:52 -0700)] 
[build] Use weak definitions instead of weak declarations

This removes the need for inline safety wrappers, marginally reducing
the size penalty of weak functions, and works around an apparent
binutils bug that causes undefined weak symbols to not actually be
NULL when compiling with -fPIE (as EFI builds do).

A bug in versions of binutils prior to 2.16 (released in 2005) will
cause same-file weak definitions to not work with those
toolchains. Update the README to reflect our new dependency on
binutils >= 2.16.

Signed-off-by: Joshua Oreman <oremanj@rwcr.net>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
15 years ago[efi] Fix link order for elf2efi
Piotr Jaroszyński [Tue, 30 Mar 2010 13:34:17 +0000 (15:34 +0200)] 
[efi] Fix link order for elf2efi

Dependencies are considered in left-to-right order so the source file
needs to come first in this case.

Signed-off-by: Piotr Jaroszyński <p.jaroszynski@gmail.com>
Signed-off-by: Joshua Oreman <oremanj@rwcr.net>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
15 years ago[build] Inhibit "skipping incompatible" message from ld
Michael Brown [Thu, 27 May 2010 08:42:53 +0000 (09:42 +0100)] 
[build] Inhibit "skipping incompatible" message from ld

On 64-bit systems with both 32-bit and 64-bit libraries installed, ld
tends to generate noisy "skipping incompatible /usr/lib/libxxx.so"
messages when building elf2efi.c.

Fix by passing --no-warn-search-mismatch to ld.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
15 years ago[efi] Verify object format support in elf2efi.c
Geoff Lywood [Thu, 27 May 2010 00:04:12 +0000 (17:04 -0700)] 
[efi] Verify object format support in elf2efi.c

Currently, if you attempt to build 64-bit EFI binaries on a 32-bit
system without a suitable cross-compiling version of libbfd, the iPXE
build will die with a segmentation fault in elf2efi64.

Fix by properly handling the return value from bfd_check_format().

Signed-off-by: Michael Brown <mcb30@ipxe.org>
15 years ago[dhcp] Honor PXEBS_SKIP option in discovery control
Joshua Oreman [Tue, 25 May 2010 20:17:40 +0000 (16:17 -0400)] 
[dhcp] Honor PXEBS_SKIP option in discovery control

It is permissible for a DHCP packet containing PXE options to specify
only "discovery control", instead of the more typical boot menu +
prompt options. This is the strategy used by older versions of
dnsmasq; by specifying the discovery control as PXEBS_SKIP, they cause
vendor PXE ROMs to ignore boot server discovery and just use the
filename and next-server options in the initial (Proxy)DHCP packet.
Modify iPXE to accept this behavior, to be more compatible with the
Intel firmware.

Signed-off-by: Joshua Oreman <oremanj@rwcr.net>
Tested-by: Kyle Kienapfel <kyle@shadowmage.org>
Modified-by: Michael Brown <mcb30@ipxe.org>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
15 years ago[wpa] Remove PMKID checking
Joshua Oreman [Wed, 19 May 2010 03:39:32 +0000 (23:39 -0400)] 
[wpa] Remove PMKID checking

PMKID checking is an additional pre-check that helps detect invalid
passphrases before going through the full handshaking procedure. It
takes up some amount of code size, and is not necessary from a
security perspective. It also is implemented improperly by some
routers, which was causing iPXE to give spurious authentication
errors. Remove it for these reasons.

Signed-off-by: Joshua Oreman <oremanj@rwcr.net>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
15 years ago[bitmap] Fix bitmaps on 64-bit
Geoff Lywood [Wed, 26 May 2010 23:39:17 +0000 (00:39 +0100)] 
[bitmap] Fix bitmaps on 64-bit

Modified-by: Michael Brown <mcb30@ipxe.org>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
15 years ago[comboot] Propagate carry flag from COMBOOT API
Stefan Hajnoczi [Sat, 8 May 2010 10:49:09 +0000 (11:49 +0100)] 
[comboot] Propagate carry flag from COMBOOT API

COMBOOT API calls set the carry flag on failure.  This was not being
propagated because the COMBOOT interrupt handler used iret to return
with EFLAGS restored from the stack.  This patch propagates CF before
returning from the interrupt.

Reported-by: Geoff Lywood <glywood@vmware.com>
Signed-off-by: Stefan Hajnoczi <stefanha@gmail.com>
Signed-off-by: Marty Connor <mdc@etherboot.org>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
15 years ago[qib7322] Add support for QLogic 7322 HCA
Michael Brown [Wed, 11 Nov 2009 00:50:34 +0000 (00:50 +0000)] 
[qib7322] Add support for QLogic 7322 HCA

Signed-off-by: Michael Brown <mcb30@ipxe.org>
15 years ago[tcp] Update received sequence number before delivering received data
Michael Brown [Fri, 21 May 2010 23:45:49 +0000 (00:45 +0100)] 
[tcp] Update received sequence number before delivering received data

iPXE currently updates the TCP sequence number after delivering the
data to the application via xfer_deliver_iob().  If the application
responds to the received data by transmitting more data, this would
result in a stale ACK number appearing in the transmitted packet,
which potentially causes retransmissions and also gives the
undesirable appearance of violating causality (by sending a response
to a message that we claim not to have yet received).

Reported-by: Guo-Fu Tseng <cooldavid@cooldavid.org>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
15 years ago[script] Accept "#!gpxe" as well as "#!ipxe" as a script magic marker
Michael Brown [Fri, 21 May 2010 23:27:10 +0000 (00:27 +0100)] 
[script] Accept "#!gpxe" as well as "#!ipxe" as a script magic marker

Signed-off-by: Michael Brown <mcb30@ipxe.org>
15 years ago[pxe] Treat PXENV_RESTART_TFTP as unreturnable
Michael Brown [Fri, 21 May 2010 02:10:03 +0000 (03:10 +0100)] 
[pxe] Treat PXENV_RESTART_TFTP as unreturnable

Microsoft WDS can end up calling PXENV_RESTART_TFTP to execute a
second-stage NBP which then exits.  Specifically, wdsnbp.com uses
PXENV_RESTART_TFTP to execute pxeboot.com, which will exit if the user
does not press F12.  iPXE currently treats PXENV_RESTART_TFTP as a
normal PXE API call, and so attempts to return to wdsnbp.com, which
has just been vaporised by pxeboot.com.

Use rmsetjmp/rmlongjmp to preserve the stack state as of the initial
NBP execution, and to restore this state immediately prior to
executing the NBP loaded via PXENV_RESTART_TFTP.  This matches the
behaviour in the PXE spec (which says that "if TFTP is restarted,
control is never returned to the caller"), and allows pxeboot.com to
exit relatively cleanly back to iPXE.

As with all usage of setjmp/longjmp, there may be subtle corner case
bugs due to not gracefully unwinding any state accumulated by the time
of the longjmp call, but this seems to be the only viable way to
provide the specified behaviour.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
15 years ago[lacp] Add simple LACP implementation
Michael Brown [Mon, 10 May 2010 15:30:10 +0000 (16:30 +0100)] 
[lacp] Add simple LACP implementation

Some switch configurations will refuse to enable our port unless we
can speak LACP to inform the switch that we are alive.  Add a very
simple passive LACP implementation that is sufficient to convince at
least Linux's bonding driver (when tested using qemu attached to a tap
device enslaved to a bond device configured as "mode=802.3ad").

Signed-off-by: Michael Brown <mcb30@ipxe.org>
15 years ago[build] Fix building with binutils 2.16
Michael Brown [Tue, 27 Apr 2010 08:52:22 +0000 (09:52 +0100)] 
[build] Fix building with binutils 2.16

Signed-off-by: Michael Brown <mcb30@ipxe.org>
15 years ago[uri] Special case NULL in churi()
Piotr Jaroszyński [Mon, 12 Apr 2010 15:37:10 +0000 (17:37 +0200)] 
[uri] Special case NULL in churi()

resolve_uri() doesn't (and probably shouldn't) handle NULL relative_uri.

Signed-off-by: Piotr Jaroszyński <p.jaroszynski@gmail.com>
Reviewed-by: Stefan Hajnoczi <stefanha@gmail.com>
Signed-off-by: Marty Connor <mdc@etherboot.org>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
15 years ago[uri] Fix NULL dereference in parse_uri()
Piotr Jaroszyński [Mon, 12 Apr 2010 15:15:44 +0000 (17:15 +0200)] 
[uri] Fix NULL dereference in parse_uri()

Don't try to parse authority if it's not there.

Modified-by: Michael Brown <mcb30@ipxe.org>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
15 years ago[romprefix] Add .mrom format, allowing loading of large ROMs
Michael Brown [Sun, 25 Apr 2010 14:57:00 +0000 (15:57 +0100)] 
[romprefix] Add .mrom format, allowing loading of large ROMs

Add an infrastructure allowing the prefix to provide an open_payload()
method for obtaining out-of-band access to the whole iPXE image.  Add
a mechanism within this infrastructure that allows raw access to the
expansion ROM BAR by temporarily borrowing an address from a suitable
memory BAR on the same PCI card.

For cards that have a memory BAR that is at least as large as their
expansion ROM BAR, this allows large iPXE ROMs to be supported even on
systems where PMM fails, or where option ROM space pressure makes it
impossible to use PMM shrinking.  The BIOS sees only a stub ROM of
approximately 3kB in size; the remainder (which can be well over 64kB)
is loaded only at the time iPXE is invoked.

As a nice side-effect, an iPXE .mrom image will continue to work even
if its PMM-allocated areas are overwritten between initialisation and
invocation.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
15 years ago[build] Replace obsolete makerom.pl with quick script using Option::ROM
Michael Brown [Sun, 25 Apr 2010 01:54:12 +0000 (02:54 +0100)] 
[build] Replace obsolete makerom.pl with quick script using Option::ROM

The only remaining useful function of makerom.pl is to correct the ROM
and PnP checksums; the PCI IDs are set at link time, and padding is
performed using padimg.pl.

Option::ROM already provides a facility for correcting the checksums,
so we may as well just use this instead.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
15 years ago[main] Match "starting execution" and "initialising devices" message style
Michael Brown [Sun, 25 Apr 2010 00:47:03 +0000 (01:47 +0100)] 
[main] Match "starting execution" and "initialising devices" message style

Add a trailing "ok" to the "initialising devices message", to match
the visual style of the "ok" now added to the "starting execution"
message.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
15 years ago[romprefix] Inhibit the use of relocation during POST
Michael Brown [Sun, 25 Apr 2010 00:37:25 +0000 (01:37 +0100)] 
[romprefix] Inhibit the use of relocation during POST

It is common for system memory maps to be grotesquely unreliable
during POST.  Many sanity checks have been added to the memory map
reading code, but these do not catch all problems.

Skip relocation entirely if called during POST.  This should avoid the
problems typically encountered, at the cost of slightly disrupting the
memory map of an operating system booted via iPXE when iPXE was
entered during POST.  Since this is a very rare special case (used,
for example, when reflashing an experimental ROM that would otherwise
prevent the system from completing POST), this is an acceptable cost.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
15 years ago[romprefix] Split PMM allocations for image source and decompression area
Michael Brown [Sat, 24 Apr 2010 21:34:28 +0000 (22:34 +0100)] 
[romprefix] Split PMM allocations for image source and decompression area

Some BIOSes (at least some AMI BIOSes) tend to refuse to allocate a
single area large enough to hold both the iPXE image source and the
temporary decompression area, despite promising a largest available
PMM memory block of several megabytes.  This causes ROM image
shrinking to fail on these BIOSes, with undesirable consequences:
other option ROMs may be disabled due to shortage of option ROM space,
and the iPXE ROM may itself be corrupted by a further BIOS bug (again,
observed on an AMI BIOS) which causes large ROMs to end up overlapping
reserved areas of memory.  This can potentially render a system
unbootable via any means.

Increase the chances of a successful PMM allocation by dropping the
alignment requirement (which is redundant now that we can enable A20
from within the prefix); this allows us to reduce the allocation size
from 2MB down to only the required size.

Increase the chances still further by using two separate allocations:
one to hold the image source (i.e. the copy of the ROM before being
shrunk) and the other to act as the decompression area.  This allows
ROM image shrinking to take place even on systems that fail to
allocate enough memory for the temporary decompression area.

Improve the behaviour of iPXE in systems with multiple iPXE ROMs by
sharing PMM allocations where possible.  Image source areas can be
shared with any iPXE ROMs with a matching build identifier, and the
temporary decompression area can be shared with any iPXE ROMs with the
same uncompressed size (rounded up to the nearest 128kB).

Signed-off-by: Michael Brown <mcb30@ipxe.org>
15 years ago[prefix] Use area at top of INT 15,88 memory map for temporary decompression
Michael Brown [Sat, 24 Apr 2010 21:22:54 +0000 (22:22 +0100)] 
[prefix] Use area at top of INT 15,88 memory map for temporary decompression

Use INT 15,88 to find a suitable temporary decompression area, rather
than a fixed address.  This hopefully gives us a better chance of not
treading on any PMM-allocated areas, in BIOSes where PMM support
exists but tends not to give us the large blocks that we ask for.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
15 years ago[pcbios] Always show INT 15,88 result under DEBUG=memmap
Michael Brown [Sat, 24 Apr 2010 20:52:48 +0000 (21:52 +0100)] 
[pcbios] Always show INT 15,88 result under DEBUG=memmap

Always call INT 15,88 even if we don't use the result.  This allows
DEBUG=memmap to show the complete result set returned by all of the
INT 15 memory-map calls.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
15 years ago[build] Generate random build identifier
Michael Brown [Sat, 24 Apr 2010 18:15:51 +0000 (19:15 +0100)] 
[build] Generate random build identifier

Randomly generate a 32-bit build identifier that can be used to
identify identical iPXE ROMs when multiple such ROMs are present in a
system (e.g. when a multi-function NIC exposes the same iPXE ROM image
via each function's expansion ROM BAR).

Signed-off-by: Michael Brown <mcb30@ipxe.org>
15 years ago[romprefix] Provide indication of successful call to install_prealloc
Michael Brown [Wed, 21 Apr 2010 12:35:31 +0000 (13:35 +0100)] 
[romprefix] Provide indication of successful call to install_prealloc

The existing "iPXE starting execution" message indicates that the BEV
(or INT19) was invoked, but gives no indication on whether or not the
iPXE source was successfully retrieved (e.g. from PMM).  Split the
"starting execution message" into "starting execution...ok"; the "ok"
indicates that the main iPXE body was successfully decompressed and
relocated.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
15 years ago[prefix] Default to 1MB mark as fallback high memory load point
Michael Brown [Tue, 20 Apr 2010 19:44:23 +0000 (20:44 +0100)] 
[prefix] Default to 1MB mark as fallback high memory load point

Now that we can use odd megabytes, there is no particular need to use
an even megabyte as the fallback temporary load point.

Note that the old warnings about avoiding 2MB pre-date our ability to
cooperate with other PXE ROMs by using PMM.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
15 years ago[relocate] Remove the even megabyte constraint
Michael Brown [Tue, 20 Apr 2010 18:33:41 +0000 (19:33 +0100)] 
[relocate] Remove the even megabyte constraint

iPXE is now capable of operating in odd megabytes of memory, so remove
the obsolete code enforcing an even-megabyte constraint.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
15 years ago[librm] Use libflat to enable A20 line on each real-to-protected transition
Michael Brown [Tue, 20 Apr 2010 18:20:26 +0000 (19:20 +0100)] 
[librm] Use libflat to enable A20 line on each real-to-protected transition

Use the shared code in libflat to perform the A20 transitions
automatically on each transition from real to protected mode.  This
allows us to remove all explicit calls to gateA20_set().

The old warnings about avoiding automatically enabling A20 are
essentially redundant; they date back to the time when we would always
start hammering the keyboard controller without first checking to see
if gate A20 was already enabled (which it almost always is).

Signed-off-by: Michael Brown <mcb30@ipxe.org>
15 years ago[prefix] Add A20-enabling code in libflat
Michael Brown [Tue, 20 Apr 2010 17:49:43 +0000 (18:49 +0100)] 
[prefix] Add A20-enabling code in libflat

iPXE currently insists on residing in an even megabyte.  This imposes
undesirably severe constraints upon our PMM allocation strategy, and
limits our options for mechanisms to access ROMs greater than 64kB in
size.

Add A20 handling code to libflat so that prefixes are able to access
memory even in odd megabytes.

The algorithms and tuning parameters in the new A20 handling code are
based upon a mixture of the existing iPXE A20 code and the A20 code
from the 2.6.32 Linux kernel.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
15 years ago[prefix] Move flatten_real_mode to libflat.S
Michael Brown [Tue, 20 Apr 2010 13:23:55 +0000 (14:23 +0100)] 
[prefix] Move flatten_real_mode to libflat.S

Signed-off-by: Michael Brown <mcb30@ipxe.org>
15 years ago[prefix] Move flatten_real_mode to .text16.early
Michael Brown [Tue, 20 Apr 2010 11:59:48 +0000 (12:59 +0100)] 
[prefix] Move flatten_real_mode to .text16.early

The flatten_real_mode routine is not needed until after decompressing
.text16.early, and currently performs various contortions to
compensate for the fact that .prefix may not be writable.  Move
flatten_real_mode to .text16.early to save on (compressed) binary size
and simplify the code.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
15 years ago[prefix] Add .text16.early section
Michael Brown [Tue, 20 Apr 2010 10:05:53 +0000 (11:05 +0100)] 
[prefix] Add .text16.early section

Add a section .text16.early which is always kept inline with the
prefix.  This will allow for some code sharing between the .prefix and
.text16 sections.

Note that the simple solution of just prepending the .prefix section
to the .text16 section will not work, because a bug in Wyse Streaming
Manager server (WLDRM13.BIN) requires us to place a dummy PXENV+ entry
point at the start of .text16.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
15 years ago[prefix] Use flat real mode for access to high memory
Michael Brown [Mon, 19 Apr 2010 21:22:11 +0000 (22:22 +0100)] 
[prefix] Use flat real mode for access to high memory

Use flat real mode rather than 16-bit protected mode for access to
high memory during installation.  This simplifies the code by reducing
the number of CPU modes we need to think about, and also increases the
amount of code in common between the normal and (somewhat
hypothetical) KEEP_IT_REAL methods of operation.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
15 years ago[prefix] Use flat real mode instead of real mode
Michael Brown [Mon, 19 Apr 2010 20:53:36 +0000 (21:53 +0100)] 
[prefix] Use flat real mode instead of real mode

When returning to real mode, set 4GB segment limits instead of 64kB
limits.  This change improves our chances of successfully returning to
a PMM-capable BIOS aftering entering iPXE during POST; the BIOS will
have set up flat real mode before calling our initialisation point,
and may be disconcerted if we then return in genuine real mode.

This change is unlikely to break anything, since any code that might
potentially access beyond 64kB must use addr32 prefixes to do so; if
this is the case then it is almost certainly code written to expect
flat real mode anyway.

Note that it is not possible to restore the real-mode segment limits
to their original values, since it is not possible to know which
protected-mode segment descriptor was originally used to initialise
the limit portion of the segment register.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
15 years ago[romprefix] Remove .hrom prefix
Michael Brown [Mon, 19 Apr 2010 19:38:35 +0000 (20:38 +0100)] 
[romprefix] Remove .hrom prefix

The .hrom prefix provides an experimental mechanism for reducing
option ROM space usage on systems where PMM allocation fails, by
pretending that PMM allocation succeeded and gave us an address fixed
at compilation time.  This is unreliable, and potentially dangerous.
In particular, when multiple gPXE ROMs are present in a system, each
gPXE ROM will assume ownership of the same fixed address, resulting in
undefined behaviour.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
15 years ago[romprefix] Remove .xrom prefix
Michael Brown [Mon, 19 Apr 2010 19:32:25 +0000 (20:32 +0100)] 
[romprefix] Remove .xrom prefix

The .xrom prefix provides an experimental mechanism for loading ROM
images greater than 64kB in size by mapping the expansion ROM BAR in
at a hopefully-unused address.  This is unreliable, and potentially
dangerous.  In particular, there is no guarantee that any PCI bridges
between the CPU and the device will respond to accesses for the
"unused" memory region that is chosen, and it is possible that the
process of scanning for the "unused" memory region may end up issuing
reads to other PCI devices.  If this ends up trampling on a register
with read side-effects belonging to an unrelated PCI device, this may
cause undefined behaviour.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
15 years ago[build] Rename gPXE to iPXE
Michael Brown [Mon, 19 Apr 2010 19:16:01 +0000 (20:16 +0100)] 
[build] Rename gPXE to iPXE

Access to the gpxe.org and etherboot.org domains and associated
resources has been revoked by the registrant of the domain.  Work
around this problem by renaming project from gPXE to iPXE, and
updating URLs to match.

Also update README, LOG and COPYRIGHTS to remove obsolete information.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
15 years ago[eepro100] Remove link-state checking
Thomas Miletich [Fri, 16 Apr 2010 16:11:39 +0000 (18:11 +0200)] 
[eepro100] Remove link-state checking

Christopher Armenio reported link detection problems with an
integrated eepro100 NIC.  Thomas Miletich removed link detection code
from the eepro100 driver and verified that the driver continued to
function.  Christopher verified Thomas' patch on his integrated
eepro100 NIC.

Reported-by: Christopher Armenio <christopher.armenio@resquared.com>
Signed-off-by: Thomas Miletich <thomas.miletich@gmail.com>
Signed-off-by: Marty Connor <mdc@etherboot.org>
15 years ago[util] Hide an expected error from the 'which' command
Piotr Jaroszyński [Mon, 29 Mar 2010 00:15:03 +0000 (02:15 +0200)] 
[util] Hide an expected error from the 'which' command

Signed-off-by: Piotr Jaroszyński <p.jaroszynski@gmail.com>
Signed-off-by: Marty Connor <mdc@etherboot.org>
15 years ago[build] Look for isolinux.bin in more places
Piotr Jaroszyński [Mon, 29 Mar 2010 00:12:06 +0000 (02:12 +0200)] 
[build] Look for isolinux.bin in more places

Signed-off-by: Piotr Jaroszyński <p.jaroszynski@gmail.com>
Signed-off-by: Marty Connor <mdc@etherboot.org>
15 years ago[drivers] Fix warnings identified by gcc 4.5
Bruce Rogers [Sat, 3 Apr 2010 00:16:38 +0000 (18:16 -0600)] 
[drivers] Fix warnings identified by gcc 4.5

In building gpxe for openSUSE Factory (part of kvm package), there were
a few problems identified by the compiler.  This patch addresses them.

Signed-off-by: Bruce Rogers <brogers@novell.com>
Signed-off-by: Stefan Hajnoczi <stefanha@gmail.com>
Signed-off-by: Marty Connor <mdc@etherboot.org>
15 years ago[build] Add support for local configuration files
Piotr Jaroszyński [Mon, 22 Mar 2010 22:19:00 +0000 (23:19 +0100)] 
[build] Add support for local configuration files

Include config/local/$file in config/$file where it makes sense and
create empty local configs during build if not present.

Modified-by: Michael Brown <mcb30@etherboot.org>
Signed-off-by: Michael Brown <mcb30@etherboot.org>
15 years ago[pxe] Remove pxe_set_cached_filename()
Michael Brown [Fri, 26 Mar 2010 17:53:24 +0000 (17:53 +0000)] 
[pxe] Remove pxe_set_cached_filename()

gPXE currently overwrites the filename stored in the cached DHCP
packets when a call to PXENV_TFTP_READ_FILE or PXENV_RESTART_TFTP is
made.  This code has existed for many years as a workaround for RIS,
which seemed to require that this be done.

pxe_set_cached_filename() causes problems with the Bootix NBP, and a
recent test demonstrates that RIS will complete successfully even with
pxe_set_cached_filename() removed.  There have been many changes to
the DHCP and PXE logic since this code was first added, and it is
quite plausible that it was masking a bug that no longer exists.

Reported-by: Alex Zeffertt <alex.zeffertt@eu.citrix.com>
Debugged-by: Shao Miller <Shao.Miller@yrdsb.edu.on.ca>
Signed-off-by: Michael Brown <mcb30@etherboot.org>
15 years ago[pxe] Avoid potential interrupt storms when using shared interrupts
Michael Brown [Tue, 23 Mar 2010 00:58:52 +0000 (00:58 +0000)] 
[pxe] Avoid potential interrupt storms when using shared interrupts

Current gPXE code always returns "OURS" in response to
PXENV_UNDI_ISR:START.  This is harmless for non-shared interrupt
lines, and avoids the complexity of trying to determine whether or not
we really did cause the interrupt.  (This is a non-trivial
determination; some drivers don't have interrupt support and hook the
system timer interrupt instead, for example.)

A problem occurs when we have a shared interrupt line, the other
device asserts an interrupt, and the controlling ISR does not chain to
the other device's ISR when we return "OURS".  Under these
circumstances, the other device's ISR never executes, and so the
interrupt remains asserted, causing an interrupt storm.

Work around this by returning "OURS" if and only if our net device's
interrupt is currently recorded as being enabled.  Since we always
disable interrupts as a result of a call to PXENV_UNDI_ISR:START, this
guarantees that we will eventually (on the second call) return "NOT
OURS", allowing the other ISR to be called.  Under normal operation,
including a non-shared interrupt situation, this change will make no
difference since PXENV_UNDI_ISR:START would be called only when
interrupts were enabled anyway.

Signed-off-by: Michael Brown <mcb30@etherboot.org>
15 years ago[netdevice] Record whether or not interrupts are currently enabled
Michael Brown [Tue, 23 Mar 2010 00:55:19 +0000 (00:55 +0000)] 
[netdevice] Record whether or not interrupts are currently enabled

Signed-off-by: Michael Brown <mcb30@etherboot.org>
15 years ago[netdevice] Add netdev_is_open() wrapper function
Michael Brown [Tue, 23 Mar 2010 00:46:23 +0000 (00:46 +0000)] 
[netdevice] Add netdev_is_open() wrapper function

Signed-off-by: Michael Brown <mcb30@etherboot.org>
15 years ago[phantom] Update interrupt support to match current firmware
Michael Brown [Sat, 20 Mar 2010 03:11:03 +0000 (03:11 +0000)] 
[phantom] Update interrupt support to match current firmware

The interrupt control mechanism on Phantom cards has changed
substantially since the driver was initially written.  This updates
the code to match the mechanism used in production firmware.

This is sufficient to allow DOS wget to function successfully using
the 3Com UNDI/NDIS, Intel UNDI/NDIS, and UNDIPD.COM UNDI/PD stacks.

Signed-off-by: Michael Brown <mcb30@etherboot.org>
15 years ago[igb] Add igb driver
Marty Connor [Wed, 17 Mar 2010 07:44:27 +0000 (03:44 -0400)] 
[igb] Add igb driver

This commit adds an igb (Intel GigaBit) driver based on Intel source
code available at:

    http://sourceforge.net/projects/e1000/

which is upstream source for the Linux kernel e1000 drivers, and
should support some PCIe e1000 variants.

Signed-off-by: Marty Connor <mdc@etherboot.org>
15 years ago[e1000e] Add e1000e driver
Marty Connor [Wed, 17 Mar 2010 07:18:46 +0000 (03:18 -0400)] 
[e1000e] Add e1000e driver

This commit adds an e1000e driver based on Intel source code
available at:

    http://sourceforge.net/projects/e1000/

which is upstream source for the Linux kernel e1000 drivers, and
should support many PCIe e1000 variants.

Signed-off-by: Marty Connor <mdc@etherboot.org>
15 years ago[e1000] Update e1000 driver
Marty Connor [Wed, 17 Mar 2010 07:02:32 +0000 (03:02 -0400)] 
[e1000] Update e1000 driver

This commit replaces the current gPXE e1000 driver with one ported
from Intel source code available at

    http://sourceforge.net/projects/e1000/

which is upstream source for the Linux kernel e1000 drivers, and
should support most if not all PCI e1000 variants.

Signed-off-by: Marty Connor <mdc@etherboot.org>
15 years ago[iscsi] Disambiguate some common authentication errors
Michael Brown [Wed, 17 Mar 2010 02:23:17 +0000 (02:23 +0000)] 
[iscsi] Disambiguate some common authentication errors

Signed-off-by: Michael Brown <mcb30@etherboot.org>
15 years ago[vxge] Add stub vxge.c file so bin/vxge.usb can be built
Stefan Hajnoczi [Thu, 4 Mar 2010 08:05:01 +0000 (08:05 +0000)] 
[vxge] Add stub vxge.c file so bin/vxge.usb can be built

The vxge driver code is split over several files, including vxge_main.c.
This causes the build system and ROM-o-matic to see the driver as
"vxge_main".

This patch adds a stub vxge.c which takes up no space but gives the
driver its proper name, "vxge".

Signed-off-by: Stefan Hajnoczi <stefanha@gmail.com>
Signed-off-by: Marty Connor <mdc@etherboot.org>
15 years ago[fnrec] Add function recorder for debugging
Stefan Hajnoczi [Fri, 5 Feb 2010 22:15:18 +0000 (22:15 +0000)] 
[fnrec] Add function recorder for debugging

The function recorder is a crash and hang debugging tool.  It logs each
function call into a memory buffer while gPXE runs.  After the machine
is reset, and if the contents of memory have not been overwritten, gPXE
will detect the memory buffer and print out its contents.

This allows developers to see a trace of the last functions called
before a crash or hang.  The util/fnrec.sh script can be used to convert
the function addresses back into symbol names.

To build with fnrec:

    make FNREC=1

Signed-off-by: Stefan Hajnoczi <stefanha@gmail.com>
Signed-off-by: Marty Connor <mdc@etherboot.org>
15 years ago[build] Disable ccache for embedded.o
Stefan Hajnoczi [Mon, 1 Mar 2010 20:34:47 +0000 (20:34 +0000)] 
[build] Disable ccache for embedded.o

Embedded image support uses .incbin in inline assembly to include binary
files.  The file dependency is not spotted by ccache when deciding
whether or not to rebuild embedded.o.  This results in builds that
contain an outdated version of the embedded image when ccache is used.

Reported-by: Tim 'Shaggy' Bielawa <tbielawa@jabber.org>
Reported-by: Matt Domsch <Matt_Domsch@dell.com>
Signed-off-by: Stefan Hajnoczi <stefanha@gmail.com>
Signed-off-by: Marty Connor <mdc@etherboot.org>
15 years ago[misc] Remove accidentally commited .dotest directory
Marty Connor [Thu, 4 Mar 2010 16:09:56 +0000 (11:09 -0500)] 
[misc] Remove accidentally commited .dotest directory

Signed-off-by: Marty Connor <mdc@etherboot.org>
15 years ago[build] Disable ccache for embedded.o
Stefan Hajnoczi [Mon, 1 Mar 2010 20:34:47 +0000 (20:34 +0000)] 
[build] Disable ccache for embedded.o

Embedded image support uses .incbin in inline assembly to include binary
files.  The file dependency is not spotted by ccache when deciding
whether or not to rebuild embedded.o.  This results in builds that
contain an outdated version of the embedded image when ccache is used.

Reported-by: Tim 'Shaggy' Bielawa <tbielawa@jabber.org>
Reported-by: Matt Domsch <Matt_Domsch@dell.com>
Signed-off-by: Stefan Hajnoczi <stefanha@gmail.com>
Signed-off-by: Marty Connor <mdc@etherboot.org>
15 years ago[comboot] Match version strings to SYSLINUX style
Daniel Verkamp [Mon, 1 Mar 2010 01:55:13 +0000 (01:55 +0000)] 
[comboot] Match version strings to SYSLINUX style

In the actual SYSLINUX suite's comboot implementation, the version
string is prefixed by CR LF, and the copyright string has a leading
space.  Some tools (specifically HDT) assume these padding characters
exist, so we should probably return strings in a similar format.

Signed-off-by: Michael Brown <mcb30@etherboot.org>
15 years ago[vxge] Add support for X3100 series 10GbE Server/Storage Adapter
Masroor Vettuparambil [Tue, 2 Feb 2010 09:42:36 +0000 (09:42 +0000)] 
[vxge] Add support for X3100 series 10GbE Server/Storage Adapter

Signed-off-by: Sivakumar Subramani <sivakumar.subramani@neterion.com>
Signed-off-by: Masroor Vettuparambil <masroor.vettuparambil@neterion.com>
Signed-off-by: Stefan Hajnoczi <stefanha@gmail.com>
Signed-off-by: Marty Connor <mdc@etherboot.org>
15 years ago[undi] Ensure only one UNDI instance is loaded
Stefan Hajnoczi [Fri, 12 Feb 2010 18:06:34 +0000 (18:06 +0000)] 
[undi] Ensure only one UNDI instance is loaded

Loading multiple UNDI instances would be useful in systems that have
several network cards with vendor PXE ROMs.  However, we cannot rely on
UNDI ROMs working correctly with multiple instances loaded
simultaneously.

The gPXE UNDI driver supports the following multi-NIC configurations:
1. Chainloading undionly.kpxe on a specific NIC.
2. Loading the UNDI driver for the first probed device and ignoring all
   other UNDI devices in the system.

This patch refuses to probe additional UNDI devices so there can never
be multiple instances of UNDI loaded.

Signed-off-by: Stefan Hajnoczi <stefanha@gmail.com>
Signed-off-by: Marty Connor <mdc@etherboot.org>
15 years ago[iscsi] Fix interoperability with QNAP TS-639Pro
Danny Volkind [Mon, 22 Feb 2010 04:51:46 +0000 (04:51 +0000)] 
[iscsi] Fix interoperability with QNAP TS-639Pro

Modified-by: Michael Brown <mcb30@etherboot.org>
Signed-off-by: Michael Brown <mcb30@etherboot.org>
15 years ago[util] Detect genisoimage as mkisofs replacement
Stefan Hajnoczi [Sat, 13 Feb 2010 17:00:42 +0000 (17:00 +0000)] 
[util] Detect genisoimage as mkisofs replacement

Debian based systems may have genisoimage(1) instead of mkisofs(1).
They are command-line compatible so the util/geniso script should be
able to choose either one.

This patch also changes the use of the mkisofs quiet (-q) flag to its
long form (-quiet).  This should be compatible with more versions of
cdrtools and cdrkit.

Signed-off-by: Stefan Hajnoczi <stefanha@gmail.com>
Signed-off-by: Marty Connor <mdc@etherboot.org>
15 years ago[hermon] Change hermon_alloc_icm() to conform to ConnectX2 requirements
Itay Gazit [Wed, 25 Nov 2009 18:42:12 +0000 (20:42 +0200)] 
[hermon] Change hermon_alloc_icm() to conform to ConnectX2 requirements

Align each ICM member alloc to the member size instead of page size.
Increase multicast table size to 128.

Signed-off-by: Itay Gazit <itaygazit@gmail.com>
Signed-off-by: Marty Connor <mdc@etherboot.org>
15 years ago[shell_banner] Avoid printing Ctrl-B prompt if BANNER_TIMEOUT <= 0
Marty Connor [Thu, 4 Feb 2010 00:14:35 +0000 (19:14 -0500)] 
[shell_banner] Avoid printing Ctrl-B prompt if BANNER_TIMEOUT <= 0

Signed-off-by: Marty Connor <mdc@etherboot.org>
15 years ago[release] Update version to 1.0.0+ post release
Marty Connor [Tue, 2 Feb 2010 16:26:30 +0000 (11:26 -0500)] 
[release] Update version to 1.0.0+ post release

Signed-off-by: Marty Connor <mdc@etherboot.org>
15 years ago[release] Update version to 1.0.0 for release v1.0.0
Marty Connor [Tue, 2 Feb 2010 16:12:44 +0000 (11:12 -0500)] 
[release] Update version to 1.0.0 for release

Signed-off-by: Marty Connor <mdc@etherboot.org>
15 years ago[proto] Remove unsupported NMB protocol
Stefan Hajnoczi [Sat, 30 Jan 2010 09:57:32 +0000 (09:57 +0000)] 
[proto] Remove unsupported NMB protocol

The NMB protocol code came from legacy Etherboot and was never updated
to work as a gPXE protocol.  There has been no demand for this protocol,
so this patch removes it.

Signed-off-by: Stefan Hajnoczi <stefanha@gmail.com>
Signed-off-by: Marty Connor <mdc@etherboot.org>
15 years ago[proto] Remove unsupported IGMP protocol
Stefan Hajnoczi [Sat, 30 Jan 2010 09:55:37 +0000 (09:55 +0000)] 
[proto] Remove unsupported IGMP protocol

The IGMP code came from legacy Etherboot and was never updated to work
as a gPXE protocol.  There has been no demand for this protocol, so this
patch removes it.

Signed-off-by: Stefan Hajnoczi <stefanha@gmail.com>
Signed-off-by: Marty Connor <mdc@etherboot.org>
15 years ago[proto] Remove unsupported NFS protocol
Stefan Hajnoczi [Sat, 30 Jan 2010 09:48:21 +0000 (09:48 +0000)] 
[proto] Remove unsupported NFS protocol

The NFS protocol code came from legacy Etherboot and was never updated
to work as a gPXE protocol.  There has been no demand for this protocol,
so this patch removes it.

I have an unfinished NFSv3 over TCP implementation for gPXE that can be
used as the base for new work, should we want to resurrect this
protocol.

Signed-off-by: Stefan Hajnoczi <stefanha@gmail.com>
Signed-off-by: Marty Connor <mdc@etherboot.org>
15 years ago[proto] Remove unsupported FSP protocol
Stefan Hajnoczi [Sat, 30 Jan 2010 09:28:52 +0000 (09:28 +0000)] 
[proto] Remove unsupported FSP protocol

The FSP protocol code came from legacy Etherboot and was never updated
to work as a gPXE protocol.  There has been no demand for this protocol,
so this patch removes it.

Signed-off-by: Stefan Hajnoczi <stefanha@gmail.com>
Signed-off-by: Marty Connor <mdc@etherboot.org>
15 years ago[prefix] Remove unsupported ELF prefices
Stefan Hajnoczi [Fri, 29 Jan 2010 18:33:08 +0000 (18:33 +0000)] 
[prefix] Remove unsupported ELF prefices

The .elf, .elfd, .lmelf, and .lmelfd prefices were brought over from
legacy Etherboot and they do not build in gPXE.  This patch removes the
ELF prefices.

Signed-off-by: Stefan Hajnoczi <stefanha@gmail.com>
Signed-off-by: Marty Connor <mdc@etherboot.org>
15 years ago[prefix] Remove unsupported .exe prefix
Stefan Hajnoczi [Fri, 29 Jan 2010 18:25:21 +0000 (18:25 +0000)] 
[prefix] Remove unsupported .exe prefix

The unfinished .exe prefix was brought over from legacy Etherboot.
There has been no demand for .exe images so this patch removes the
prefix.

Signed-off-by: Stefan Hajnoczi <stefanha@gmail.com>
Signed-off-by: Marty Connor <mdc@etherboot.org>
15 years ago[prefix] Remove unsupported .com prefix
Stefan Hajnoczi [Fri, 29 Jan 2010 18:20:21 +0000 (18:20 +0000)] 
[prefix] Remove unsupported .com prefix

The DOS .com prefix was brought over from legacy Etherboot but does not
build.  There has been no demand for .com images so this patch removes
the prefix.

Signed-off-by: Stefan Hajnoczi <stefanha@gmail.com>
Signed-off-by: Marty Connor <mdc@etherboot.org>
15 years ago[prefix] Remove .bImage in favor of .lkrn
Stefan Hajnoczi [Fri, 29 Jan 2010 18:14:38 +0000 (18:14 +0000)] 
[prefix] Remove .bImage in favor of .lkrn

The .lkrn prefix allows gPXE to be loaded as a Linux bzImage.  The
bImage prefix was carried over from legacy Etherboot and does not build.
This patch removes the .bImage prefix, use .lkrn instead.

Signed-off-by: Stefan Hajnoczi <stefanha@gmail.com>
Signed-off-by: Marty Connor <mdc@etherboot.org>
15 years ago[http] GET / if URI doesn't contain a path
Joshua Oreman [Wed, 27 Jan 2010 04:56:42 +0000 (23:56 -0500)] 
[http] GET / if URI doesn't contain a path

Commit 3d9dd93 introduced a regression in HTTP: if a URI without a
path is specified (e.g. http://netboot.me), we send the empty string
as our GET request. Reintroduce an extra slash when uri->path is NULL,
to turn this into the expected GET /.

Reported-by: Kyle Kienapfel <doctor.whom@gmail.com>
Signed-off-by: Joshua Oreman <oremanj@rwcr.net>
Signed-off-by: Marty Connor <mdc@etherboot.org>
15 years ago[uri] Handle an empty unparse_uri() result properly
Joshua Oreman [Wed, 27 Jan 2010 04:55:23 +0000 (23:55 -0500)] 
[uri] Handle an empty unparse_uri() result properly

Previously, if none of the URI parts requested existed in the passed
URI, unparse_uri() would not touch the destination buffer at all; this
could lead to use of uninitialized data. Fix by setting buf[0] = '\0'
before unparsing whenever we have room to do so.

Signed-off-by: Joshua Oreman <oremanj@rwcr.net>
Signed-off-by: Marty Connor <mdc@etherboot.org>
15 years ago[release] Update version to 1.0.0-rc1+ post release
Marty Connor [Tue, 26 Jan 2010 20:00:32 +0000 (15:00 -0500)] 
[release] Update version to 1.0.0-rc1+ post release

15 years ago[release] Update version to 1.0.0-rc1 for release v1.0.0-rc1
Marty Connor [Tue, 26 Jan 2010 19:40:57 +0000 (14:40 -0500)] 
[release] Update version to 1.0.0-rc1 for release

15 years ago[rtl818x] Remove broken mmio register support
Stefan Hajnoczi [Fri, 22 Jan 2010 18:12:48 +0000 (18:12 +0000)] 
[rtl818x] Remove broken mmio register support

The rtl818x driver uses programmed I/O but has a fallback to
memory-mapped I/O registers.  The fallback currently will not work since
the registers are accessed using inl()/outl() programmed I/O functions
in the driver.  This patch removes the fallback to we fail cleanly when
programmed I/O is not possible.

Signed-off-by: Stefan Hajnoczi <stefanha@gmail.com>
Signed-off-by: Joshua Oreman <oremanj@rwcr.net>
Signed-off-by: Marty Connor <mdc@etherboot.org>
15 years ago[natsemi] Convert stray mmio readl() to pio inl()
Stefan Hajnoczi [Mon, 25 Jan 2010 08:28:37 +0000 (08:28 +0000)] 
[natsemi] Convert stray mmio readl() to pio inl()

This driver uses programmed I/O to access hardware registers.  There is
a stray memory-mapped I/O read on a programmed I/O address.  Perhaps
this is an artifact of porting the driver.  Fix this by converting it to
programmed I/O.

Signed-off-by: Stefan Hajnoczi <stefanha@gmail.com>
Signed-off-by: Marty Connor <mdc@etherboot.org>
15 years ago[pxe] Introduce PXE exit hook for NBP chaining
Shao Miller [Sun, 24 Jan 2010 03:12:27 +0000 (22:12 -0500)] 
[pxe] Introduce PXE exit hook for NBP chaining

It might be the case that we wish to chain to an NBP without
being "in the way".  We now implement a hook in our exit path
for gPXE *.*pxe build targets.  The hook is a pointer to a
SEG16:OFF16 which we try to jump to during exit.  By default,
this pointer results in the usual exit path.

We also implement the "pxenv_file_exit_hook" PXE API routine
to allow the user to specify an alternate SEG16:OFF16 to jump
to during exit.

Unfortunately, this additional PXE extension has a cost
in code size.  Fortunately, a look at the size difference
for a gPXE .rom build target shows zero size difference
after compression.

The routine is documented in doc/pxe_extensions as follows:

FILE EXIT HOOK

Op-Code: PXENV_FILE_EXIT_HOOK (00e7h)

Input: Far pointer to a t_PXENV_FILE_EXIT_HOOK parameter
structure that has been initialized by the caller.

Output: PXENV_EXIT_SUCCESS or PXENV_EXIT_FAILURE must be
returned in AX.  The Status field in the parameter
structure must be set to one of the values represented
by the PXENV_STATUS_xxx constants.

Description:Modify the exit path to jump to the specified code.
Only valid for pxeprefix-based builds.

typedef struct s_PXENV_FILE_EXIT_HOOK {
        PXENV_STATUS_t Status;
        SEGOFF16_t Hook;
} t_PXENV_FILE_EXIT_HOOK;

Set before calling API service:

Hook: The SEG16:OFF16 of the code to jump to.

Returned from API service:

Status: See PXENV_STATUS_xxx constants.

Requested-by: H. Peter Anvin <hpa@zytor.com>
Signed-off-by: Shao Miller <shao.miller@yrdsb.edu.on.ca>
Signed-off-by: Marty Connor <mdc@etherboot.org>
15 years ago[dhcp] Keep multiple DHCP offers received, and use them intelligently
Joshua Oreman [Tue, 3 Nov 2009 18:45:58 +0000 (13:45 -0500)] 
[dhcp] Keep multiple DHCP offers received, and use them intelligently

Instead of keeping only the best IP and PXE offers, store all of them,
and pick the best to use just before a request is sent. This allows
priority differentiation to work even when lower-priority offers
provide PXE options, and improves robustness at sites with broken PXE
servers intermingled with working ones: when a ProxyDHCP request times
out, instead of giving up, we try the next PXE offer we've received.
It also allows us to avoid breaking up combined IP+PXE offers, which
can be important with some firewall configurations. This behavior
matches that of most vendor PXE ROMs.

Store a reference to the DHCPOFFER packet in the offer structure, so
that when registering settings after a successful ACK we can register
the proxy PXE settings we originally received; this removes the need
for a nonstandard duplicate REQUEST/ACK to port 67 of proxy servers
like dnsmasq that provide PXE options in the OFFER.

Total cost: 450 bytes uncompressed.

Signed-off-by: Marty Connor <mdc@etherboot.org>
15 years ago[pci] Save and restore PCI command register
Bernhard Kohl [Thu, 21 Jan 2010 23:13:48 +0000 (18:13 -0500)] 
[pci] Save and restore PCI command register

This seems to be necessary for some types of PCI devices. We had
problems when using gPXE in KVM virtual machines with direct
PCI device access.

Signed-off-by: Bernhard Kohl <bernhard.kohl@nsn.com>
Signed-off-by: Shao Miller <shao.miller@yrdsb.edu.on.ca>
Modified-by: Marty Connor <mdc@etherboot.org>
Signed-off-by: Marty Connor <mdc@etherboot.org>
15 years ago[ftp] User and password URI support for the FTP protocol
gL2n30Y06arv2 [Tue, 29 Dec 2009 17:49:28 +0000 (17:49 +0000)] 
[ftp] User and password URI support for the FTP protocol

The default user and password are used for anonymous FTP by default.
This patch adds support for an explicit user name and password in an FTP
URI:

    imgfetch ftp://user:password@server.com/path/to/file

Edited-by: Stefan Hajnoczi <stefanha@gmail.com>. Bugs are my fault.
Signed-off-by: Marty Connor <mdc@etherboot.org>
15 years ago[uri] Decode/encode URIs when parsing/unparsing
Joshua Oreman [Wed, 30 Dec 2009 03:36:04 +0000 (22:36 -0500)] 
[uri] Decode/encode URIs when parsing/unparsing

Currently, handling of URI escapes is ad-hoc; escaped strings are
stored as-is in the URI structure, and it is up to the individual
protocol to unescape as necessary. This is error-prone and expensive
in terms of code size. Modify this behavior by unescaping in
parse_uri() and escaping in unparse_uri() those fields that typically
handle URI escapes (hostname, user, password, path, query, fragment),
and allowing unparse_uri() to accept a subset of fields to print so
it can be easily used to generate e.g. the escaped HTTP path?query
request.

Signed-off-by: Joshua Oreman <oremanj@rwcr.net>
Signed-off-by: Marty Connor <mdc@etherboot.org>
15 years ago[settings] Add automagic "netX" settings block for last opened netdev
Joshua Oreman [Thu, 22 Oct 2009 04:55:08 +0000 (00:55 -0400)] 
[settings] Add automagic "netX" settings block for last opened netdev

A script loaded via autoboot may want to get some of the settings (MAC
address, IP address, et cetera) for the interface via which it was
loaded, in order to pass them to the operating system. Previously such
a script had no way to determine what to put in the X of ${netX/foo}.

Solve this problem by transparently forwarding accesses to the real
settings associated with the most recently opened network device,
so scripts in this situation can say literally ${netX/foo} and get
the foo setting they want.

Signed-off-by: Marty Connor <mdc@etherboot.org>
15 years ago[prefix] Add .xrom prefix for a ROM that loads itself by PCI accesses
Joshua Oreman [Sun, 18 Oct 2009 20:12:51 +0000 (16:12 -0400)] 
[prefix] Add .xrom prefix for a ROM that loads itself by PCI accesses

The standard option ROM format provides a header indicating the size
of the entire ROM, which the BIOS will reserve space for, load, and
call as necessary. However, this space is strictly limited to 128k for
all ROMs. gPXE ameliorates this somewhat by reserving space for itself
in high memory and relocating the majority of its code there, but on
systems prior to PCI3 enough space must still be present to load the
ROM in the first place. Even on PCI3 systems, the BIOS often limits the
size of ROM it will load to a bit over 64kB.

These space problems can be solved by providing an artificially small
size in the ROM header: just enough to let the prefix code (at the
beginning of the ROM image) be loaded by the BIOS. To the BIOS, the
gPXE ROM will appear to be only a few kilobytes; it can then load
the rest of itself by accessing the ROM directly using the PCI
interface reserved for that task.

There are a few problems with this approach. First, gPXE needs to find
an unmapped region in memory to map the ROM so it can read from it;
this is done using the crude but effective approach of scanning high
memory (over 0xF0000000) for a sufficiently large region of all-ones
(0xFF) reads. (In x86 architecture, all-ones is returned for accesses
to memory regions that no mapped device can satisfy.) This is not
provably valid in all situations, but has worked well in practice.
More importantly, this type of ROM access can only work if the PCI ROM
BAR exists at all. NICs on physical add-in PCI cards generally must
have the BAR in order for the BIOS to be able to load their ROM, but
ISA cards and LAN-on-Motherboard cards will both fail to load gPXE
using this scheme.

Due to these uncertainties, it is recommended that .xrom only be used
when a regular .rom image is infeasible due to crowded option ROM
space. However, when it works it could allow loading gPXE images
as large as a flash chip one could find - 128kB or even higher.

Signed-off-by: Marty Connor <mdc@etherboot.org>
15 years ago[config] Make PXE stack a compile-time option
Joshua Oreman [Tue, 6 Oct 2009 23:15:06 +0000 (19:15 -0400)] 
[config] Make PXE stack a compile-time option

For extremely tight space requirements and specific applications, it is
sometimes desirable to create gPXE images that cannot provide the PXE API
functionality to client programs. Add a configuration header option,
PXE_STACK, that can be removed to remove this stack. Also add PXE_MENU
to control the PXE boot menu, which most uses of gPXE do not need.

Signed-off-by: Marty Connor <mdc@etherboot.org>
15 years ago[pxe] Support cached DHCP packets in .kkpxe images
Joshua Oreman [Tue, 8 Dec 2009 08:48:15 +0000 (03:48 -0500)] 
[pxe] Support cached DHCP packets in .kkpxe images

If we don't unload the PXE stack before executing gPXE, automatically
take advantage of the cached DHCPACK that the underlying/parent PXE
stack can provide. If that cached DHCPACK contains option 175.178, or
the user sets the use-cached setting before invoking DHCP, the real
DHCP request will be skipped and the cached DHCPACK will be used for
network configuration. Otherwise, the cached settings block is thrown
away as soon as a fresh one is acquired.

Signed-off-by: Marty Connor <mdc@etherboot.org>
15 years ago[dhcp] Add generic facility for using cached network settings
Joshua Oreman [Tue, 8 Dec 2009 08:40:50 +0000 (03:40 -0500)] 
[dhcp] Add generic facility for using cached network settings

When a DHCP session is started (using autoboot or a command-line `dhcp
net0'), check whether the new setting use-cached (DHCP option 175.178)
is TRUE; if so, skip DHCP and rely on currently registered
settings. This lets one combine a static IP with autoboot.

Before checking the use-cached setting, call a weak
get_cached_dhcpack() hook that can be implemented by particular builds
of gPXE supporting some fashion of retrieving a cached DHCPACK packet.
If one is available, it is registered as an options source, and then
either that packet's option 175.178 or the user's prior manual
use-cached setting can allow skipping duplicate DHCP.

Using cached packets is not the default because DHCP servers are often
configured to give gPXE different options than they give a vendor PXE
client; in order to break the infinite loop of PXE chaining, one would
need to load a gPXE with an embedded image that does something more
than autoboot.

Signed-off-by: Marty Connor <mdc@etherboot.org>
15 years ago[pxe] Separate parent PXE API caller from UNDINET driver
Joshua Oreman [Tue, 8 Dec 2009 08:38:50 +0000 (03:38 -0500)] 
[pxe] Separate parent PXE API caller from UNDINET driver

Calling the parent PXE stack (the stack that loaded us, for
undionly.kkpxe) can be useful for more than UNDI calls; for instance,
it lets us get cached DHCP packets to avoid re-DHCP when working with
embedded images.

Signed-off-by: Marty Connor <mdc@etherboot.org>
15 years ago[linker] Add safe weak symbol macros
Joshua Oreman [Thu, 26 Nov 2009 02:10:05 +0000 (18:10 -0800)] 
[linker] Add safe weak symbol macros

Weak symbols are a useful tool in eliminating unnecessary dependencies
between object files, but they are somewhat dangerous because one must
remember to test the weak symbol against NULL before using it. To
rectify that, add macros for declaring weak functions that will return
a default value inline if the file defining them is not available at
link time.

Signed-off-by: Marty Connor <mdc@etherboot.org>
15 years ago[contrib] Add README file to rom-o-matic
Marty Connor [Tue, 19 Jan 2010 02:37:14 +0000 (21:37 -0500)] 
[contrib] Add README file to rom-o-matic

Signed-off-by: Marty Connor <mdc@etherboot.org>
15 years ago[tftp] Abort requests with error code 0
Stefan Hajnoczi [Mon, 18 Jan 2010 20:53:20 +0000 (20:53 +0000)] 
[tftp] Abort requests with error code 0

There is no defined error code for aborting a request but 0 is commonly
used.  This patch switches the abort request error code from
TFTP_ERR_UNKNOWN_TID (5) to 0.

Signed-off-by: Stefan Hajnoczi <stefanha@gmail.com>
Signed-off-by: Marty Connor <mdc@etherboot.org>
15 years ago[tftp] Make TFTP size requests abort transfer with an error
Thomas Horsten [Thu, 7 Jan 2010 17:02:13 +0000 (17:02 +0000)] 
[tftp] Make TFTP size requests abort transfer with an error

pxenv_tftp_get_fsize is an API call that PXE clients can call to
obtain the size of a remote file. It is implemented by starting a TFTP
transfer with pxe_tftp_open, waiting for the response and then
stopping the transfer with pxe_tftp_close(). This leaves the session
hanging on the TFTP server and it will try to resend the packet
repeatedly (verified with tftpd-hpa) until it times out.

This patch adds a method "tftpsize" that will abort the transfer after
the first packet is received from the server. This will terminate the
session on the server and is the same behaviour as Intel's PXE ROM
exhibits.

Together with a qemu patch to handle the ERROR packet (submitted to
qemu's mailing list), this resolves a specific issue where booting
pxegrub with qemu's TFTP server would be slow or hang.

I've tested this against qemu's tftp server and against my normal boot
infrastructure (tftpd-hpa). Booting pxegrub and loading extra files
now produces a trace similar to Intel's PXE client and there are no
spurious retransmits from tftpd any more.

Signed-off-by: Thomas Horsten <thomas@horsten.com>
Signed-off-by: Milan Plzik <milan.plzik@gmail.com>
Signed-off-by: Stefan Hajnoczi <stefanha@gmail.com>
Signed-off-by: Marty Connor <mdc@etherboot.org>
15 years ago[contrib] Add .hrom format to rom-o-matic
Marty Connor [Sun, 17 Jan 2010 19:11:52 +0000 (14:11 -0500)] 
[contrib] Add .hrom format to rom-o-matic

Signed-off-by: Marty Connor <mdc@etherboot.org>
15 years ago[contrib] Add rom-o-matic to contrib
Marty Connor [Sun, 17 Jan 2010 03:23:45 +0000 (22:23 -0500)] 
[contrib] Add rom-o-matic to contrib

15 years ago[contrib] Move most contrib content to a separate repository
Marty Connor [Sun, 17 Jan 2010 02:47:39 +0000 (21:47 -0500)] 
[contrib] Move most contrib content to a separate repository

Most of the content that was previously in this directory has been
moved to a separate git repository:

    http://git.etherboot.org/?p=contrib.git;a=summary

or the Etherboot Project wiki:

    http://etherboot.org/

15 years ago[sanboot] Prevent leaking a stack reference for "keep-san" AoE
Stefan Hajnoczi [Tue, 5 Jan 2010 08:05:32 +0000 (08:05 +0000)] 
[sanboot] Prevent leaking a stack reference for "keep-san" AoE

When the "keep-san" option is used, the function is exited without
unregistering the stack allocated int13h drive.  To prevent a dangling
pointer to the stack, these structs should be heap allocated.

Signed-off-by: Stefan Hajnoczi <stefanha@gmail.com>
Signed-off-by: Marty Connor <mdc@etherboot.org>
15 years ago[tftp] Remove unnecessary delay when opening a connection
Stefan Hajnoczi [Wed, 13 Jan 2010 17:57:41 +0000 (17:57 +0000)] 
[tftp] Remove unnecessary delay when opening a connection

The retry timer is used to retransmit TFTP packets lost on the network,
and to start a new connection.  There is an unnecessary delay while
waiting for name resolution because the timer period is fixed and cannot
be shortened when name resolution completes.  This patch keeps the timer
period at zero while name resolution takes place so that no time is lost
once before sending the first packet.

Reported-by: Thomas Horsten <thomas@horsten.com>
Signed-off-by: Stefan Hajnoczi <stefanha@gmail.com>
Signed-off-by: Marty Connor <mdc@etherboot.org>
15 years ago[tftp] Allow fetching larger files by wrapping block number
Stefan Hajnoczi [Sun, 10 Jan 2010 19:05:17 +0000 (19:05 +0000)] 
[tftp] Allow fetching larger files by wrapping block number

This patch adds TFTP support for files larger than 65535 blocks by
wrapping the 16-bit block number.

Reported-by: Mark Johnson <johnson.nh@gmail.com>
Signed-off-by: Stefan Hajnoczi <stefanha@gmail.com>
Signed-off-by: Marty Connor <mdc@etherboot.org>