david/ipxe
Archived
1
0
Commit Graph

1607 Commits

Author SHA1 Message Date
Michael Brown
a525fb7782 [legal] Add mechanism for explicit per-file licence declarations
For partly historical reasons, various files in the gPXE source tree
are licensed under different, though compatible, terms.  Most of the
code is licensed under GPLv2 with the "or later" clause, but there are
exceptions such as:

  The string.h file, which derives from Linux and is licensed as
  Public Domain.

  The EFI header files, which are taken from the EDK2 source tree and
  are licensed under BSD.

  The 3c90x driver, which has a custom GPL-like licence text.

Introduce a FILE_LICENCE() macro to make licensing more explicit.
This macro should be applied exactly once to each source (.c, .S or
.h) file.  It will cause a corresponding zero-sized common symbol to
be added to any .o files generated from that source file (and hence to
any final gPXE binaries generated from that source file).  Determining
the applicable licences to generated files can then be done using e.g.

  $ objdump -t bin/process.o | grep __licence
  00000000       O *COM*  00000001 .hidden __licence_gpl2_or_later

indicating that bin/process.o is covered entirely by the GPLv2
with the "or later" clause, or

  $ objdump -t bin/rtl8139.dsk.tmp | grep __licence
  00033e8c g     O .bss.textdata  00000000 .hidden __licence_gpl2_only
  00033e8c g     O .bss.textdata  00000000 .hidden __licence_gpl2_or_later
  00033e8c g     O .bss.textdata  00000000 .hidden __licence_public_domain

indicating that bin/rtl8139.dsk includes both code licensed under
GPLv2 (both with and without the "or later" clause) and code licensed
as Public Domain.

Determining the result of licence combinations is currently left as an
exercise for the reader.
2009-05-18 08:26:08 +01:00
Michael Brown
a13fc96cb3 [legacy] Remove long-obsolete old dhcp.h file 2009-05-18 08:24:45 +01:00
Michael Brown
7c47ebd65c [build] Add {PROVIDE,REQUIRE}_SYMBOL macros and tidy up compiler.h 2009-04-27 14:04:35 +01:00
Timothy Stack
cc4363acca [smbios] Add asset tag setting
Add SMBIOS asset tag as a named setting.

Signed-off-by: Michael Brown <mcb30@etherboot.org>
2009-04-15 17:23:18 +01:00
Michael Brown
7266aceb39 [efi] Fix compilation on Mac OS X.
The Mac compiler treats "#pragma pack()" as gcc's "#pragma pack(pop)",
and so dies if the pragma pack stack is empty.  Adding a "#pragma
pack(1)" immediately beforehand is enough to keep the Mac compiler
happy.

The combination of "#pragma pack(1)", "#pragma pack()" won't actually
achieve anything on a Mac, but it will at least build.  (With gcc, the
"#pragma pack()" overrides any previous pragmas, so is still useful.)

Suggested-by: Joshua Oreman <oremanj@rwcr.net>
2009-03-31 07:39:20 +01:00
Joshua Oreman
820b11dc0a [build] Use __SIZE_TYPE__ macro in definition of size_t
This is required in order to build on Mac OS X.

Modified-by: Michael Brown <mcb30@etherboot.org>
Signed-off-by: Michael Brown <mcb30@etherboot.org>
2009-03-31 07:21:07 +01:00
Michael Brown
323cdf8c4c [xfer] Implement xfer_vreopen() to properly handle redirections
When handling a redirection event, we need to close the existing
connection before opening the new connection.
2009-03-30 13:24:56 +01:00
Thomas Miletich
3da6f1c7bd [pci] Add driver_data field to struct pci_device_id
Modified-by: Michael Brown <mcb30@etherboot.org>
Signed-off-by: Michael Brown <mcb30@etherboot.org>
2009-03-26 10:22:15 +00:00
Michael Brown
1c67623e37 [build] Enable building with the Intel C compiler (icc) 2009-03-26 07:27:19 +00:00
Michael Brown
3c68ff99ea [tables] Incorporate table data type information into table definition
Eliminate the potential for mismatches between table names and the
table entry data type by incorporating the data type into the
definition of the table, rather than specifying it explicitly in each
table accessor method.
2009-03-13 02:10:21 +00:00
Michael Brown
1266d7902b [tables] Redefine methods for accessing linker tables
Intel's C compiler (icc) chokes on the zero-length arrays that we
currently use as part of the mechanism for accessing linker table
entries.  Abstract away the zero-length arrays, to make a port to icc
easier.

Introduce macros such as for_each_table_entry() to simplify the common
case of iterating over all entries in a linker table.

Represent table names as #defined string constants rather than
unquoted literals; this avoids visual confusion between table names
and C variable or type names, and also allows us to force a
compilation error in the event of incorrect table names.
2009-03-13 02:06:30 +00:00
Michael Brown
ec24672db7 [settings] Allow for autovivification of settings blocks
Allow for settings blocks to be created on demand.  This allows for
constructions such as

  set defaults/filename http://bootserver/bootfile
  set defaults/priority 0xff
  dhcp net0
  chain ${filename}

which will boot from the DHCP-provided filename, or from
"http://bootserver/bootfile" if the DHCP server does not provide a
filename.

(Note that "priority" gets interpreted as a signed integer, so setting
"defaults/priority" to 0xff will cause the "defaults" settings block
to have an effective priority of -1.)
2009-03-06 14:40:44 +00:00
Michael Brown
4f3bab1a55 [image] Allow for zero embedded images
Having a default script containing

  #!gpxe
  autoboot

can cause problems when entering commands to load and start a kernel
manually; the default script image will still be present when the
kernel is started and so will be treated as an initrd.  It is possible
to work around this by typing "imgfree" before any other commands, but
this is counter-intuitive.

Fix by allowing the embedded image list to be empty (in which case we
just call autoboot()), and making this the default.

Reported by alkisg@gmail.com.
2009-02-24 05:57:56 +00:00
Michael Brown
4dd746a725 [iscsi] Include credentials in iBFT only if used during iSCSI login
Avoid passing credentials in the iBFT that were available but not
required for login.  This works around a problem in the Microsoft
iSCSI initiator, which will refuse to initiate sessions if the CHAP
password is fewer than 12 characters, even if the target ends up not
asking for CHAP authentication.
2009-02-20 21:41:00 +00:00
Michael Brown
9937bf13c9 [crypto] Allow creation of arbitrary CBC cipher algorithms using CBC_CIPHER()
Given any block cipher, a corresponding CBC mode of behaviour for the
cipher can be created using the CBC_CIPHER() macro.
2009-02-19 01:53:25 +00:00
Michael Brown
e950dc04ba [crypto] Add our own general-purpose cipher-block chaining routines 2009-02-19 01:23:50 +00:00
Michael Brown
b4d3d686cc [crypto] Change cipher_{en,de}crypt() to void functions
It is a programming error, not a runtime error, if we attempt to use
block ciphers with an incorrect blocksize, so use an assert() rather
than an error status return.
2009-02-19 00:06:41 +00:00
Michael Brown
a3219b24a8 [crypto] Split crypto_algorithm into {digest,cipher,pubkey}_algorithm
The various types of cryptographic algorithm are fundamentally
different, and it was probably a mistake to try to handle them via a
single common type.

pubkey_algorithm is a placeholder type for now.
2009-02-18 22:17:41 +00:00
Michael Brown
991f907d5b [crypto] Rename aes_algorithm to aes_cbc_algorithm 2009-02-18 21:28:46 +00:00
Michael Brown
b5577553e5 [pxeprefix] Add .kkpxe image type and ability to return via PXE stack
Certain combinations of PXE stack and BIOS result in a broken INT 18
call, which will leave the system displaying a "PRESS ANY KEY TO
REBOOT" message instead of proceeding to the next boot device.  On
these systems, returning via the PXE stack is the only way to continue
to the next boot device.  Returning via the PXE stack works only if we
haven't already blown away the PXE base code in pxeprefix.S.

In most circumstances, we do want to blow away the PXE base code.
Base memory is a limited resource, and it is desirable to reclaim as
much as possible.  When we perform an iSCSI boot, we need to place the
iBFT above the 512kB mark, because otherwise it may not be detected by
the loaded OS; this may not be possible if the PXE base code is still
occupying that memory.

Introduce a new prefix type .kkpxe which will preserve both the PXE
base code and the UNDI driver (as compared to .kpxe, which preserves
the UNDI driver but uninstalls the PXE base code).  This prefix type
can be used on systems that are known to experience the specific
problem of INT 18 being broken, or in builds (such as gpxelinux.0) for
which it is particularly important to know that returning to the BIOS
will work.

Written by H. Peter Anvin <hpa@zytor.com> and Stefan Hajnoczi
<stefanha@gmail.com>, minor structural alterations by Michael Brown
<mcb30@etherboot.org>.
2009-02-18 18:12:32 +00:00
Michael Brown
6de4db5da0 [login] Add "login" command and UI 2009-02-17 12:02:16 +00:00
Michael Brown
67ee41ad6d [editbox] Allow for password widgets that do not display their contents 2009-02-17 11:55:55 +00:00
Michael Brown
06b5132fdc [icmp] Add support for responding to pings 2009-02-17 06:59:15 +00:00
Michael Brown
14eafc5b8d [comboot] Fix reference counting on replacement images
When chaining COMBOOT images, the old images now get freed correctly.
2009-02-17 01:45:12 +00:00
Michael Brown
8904cd55f1 [comboot] Allow for tail recursion of COMBOOT images
Multi-level menus via COMBOOT rely on the COMBOOT program being able
to exit and invoke a new COMBOOT program (the next menu).  This works,
but rapidly (within about five iterations) runs out of space in gPXE's
internal stack, since each new image is executed in a new function
context.

Fix by allowing tail recursion between images; an image can now
specify a replacement image for itself, and image_exec() will perform
the necessary tail recursion.
2009-02-17 00:47:35 +00:00
Michael Brown
b08e255ef1 [build] Fix building on gcc 3
GCC did not support #pragma GCC visibility until version 4.0.
2009-02-16 02:15:17 +00:00
Michael Brown
076154a1c6 [image] Allow multiple embedded images
This patch extends the embedded image feature to allow multiple
embedded images instead of just one.

gPXE now always boots the first embedded image on startup instead of
doing the hardcoded DHCP boot (aka autoboot).

Based heavily upon a patch by Stefan Hajnoczi <stefanha@gmail.com>.
2009-02-16 00:30:36 +00:00
Michael Brown
d900ae05d7 [base64] Add base64 encoding functions 2009-02-13 14:54:13 +00:00
Michael Brown
8e960eb67c [tls] Use our own ASN.1 routines for certificate parsing
Use our own, more robust, ASN.1 parsing routines to extract the RSA
public key from a server certificate.  Remove the now-unused AXTLS
ASN.1 parser.
2009-02-10 18:30:17 +00:00
Michael Brown
881f1f59ef [pxe] Obey lists of PXE Boot Servers and associated Discovery Control bits
Various combinations of options 43.6, 43.7 and 43.8 dictate which
servers we send Boot Server Discovery requests to, and which servers
we should accept responses from.  Obey these options, and remove the
explicit specification of a single Boot Server from start_pxebs() and
dependent functions.
2009-02-05 09:34:32 +00:00
Michael Brown
ff2b308506 [pxe] Skip PXE boot server discovery if directed to do so
Option 43.6 can direct us to skip PXE boot server discovery and just
perform a standard DHCP filename boot.
2009-02-05 09:34:05 +00:00
Michael Brown
dbe84c5aad [iobuf] Add iob_disown() and use it where it simplifies code
There are many functions that take ownership of the I/O buffer they
are passed as a parameter.  The caller should not retain a pointer to
the I/O buffer.  Use iob_disown() to automatically nullify the
caller's pointer, e.g.:

    xfer_deliver_iob ( xfer, iob_disown ( iobuf ) );

This will ensure that iobuf is set to NULL for any code after the call
to xfer_deliver_iob().

iob_disown() is currently used only in places where it simplifies the
code, by avoiding an extra line explicitly setting the I/O buffer
pointer to NULL.  It should ideally be used with each call to any
function that takes ownership of an I/O buffer.  (The SSA
optimisations will ensure that use of iob_disown() gets optimised away
in cases where the caller makes no further use of the I/O buffer
pointer anyway.)

If gcc ever introduces an __attribute__((free)), indicating that use
of a function argument after a function call should generate a
warning, then we should use this to identify all applicable function
call sites, and add iob_disown() as necessary.
2009-02-01 20:16:10 +00:00
Michael Brown
4502c04360 [dhcp] Send user class in DHCP requests 2009-02-01 20:06:09 +00:00
Michael Brown
e65afc4b10 [dhcp] Split PXE menuing code out of dhcp.c
The DHCP client code now implements only the mechanism of the DHCP and
PXE Boot Server protocols.  Boot Server Discovery can be initiated
manually using the "pxebs" command.  The menuing code is separated out
into a user-level function on a par with boot_root_path(), and is
entered in preference to a normal filename boot if the DHCP vendor
class is "PXEClient" and the PXE boot menu option exists.
2009-02-01 01:21:40 +00:00
Stefan Hajnoczi
d10a7e7739 [dns] Append local domain to relative names
Try to qualify relative names in the DNS resolver using the DHCP Domain
Name.  For example:

  DHCP Domain Name: etherboot.org
  (Relative) Name: www

yields:

  www.etherboot.org

Only names with no dots ('.') will be modified.  A name with one or more
dots is unchanged.
2009-01-27 19:26:12 +00:00
Michael Brown
a128973ecb [settings] Add fetch_string_setting_copy() 2009-01-27 19:13:47 +00:00
Michael Brown
027c72e0d0 [dhcp] Include support for PXE boot menus
PXE dictates a mechanism for boot menuing, involving prompting the
user with a variable message, waiting for a predefined keypress,
displaying a boot menu, and waiting for a selection.

This breaks the currently desirable abstraction that DHCP is a process
that can happen in the background without any user interaction.
2009-01-25 21:16:47 +00:00
Michael Brown
ce9690ca39 [console] Allow KEY_xxx constants to cover F8 function key
F8 is represented by the ANSI escape sequence "^[[19~", which is not
representable as a KEY_xxx constant using the current encoding scheme.
Adapt the encoding scheme to allow F8 to be represented, since PXE
requires that we may need to prompt the user to press F8.
2009-01-25 21:10:48 +00:00
Michael Brown
3f814f08e5 [dhcp] Clarify language surrounding ProxyDHCP
Remove the lazy assumption that ProxyDHCP == "DHCP with option 60 set
to PXEClient", and explicitly separate the notion of ProxyDHCP from
the notion of packets containing PXE options.
2009-01-23 01:47:33 +00:00
Michael Brown
76d05a4da0 [dhcp] Pass PXE boot menu item to PXE Boot Server
Pick out the first boot menu item from the boot menu (option 43.9) and
pass it to the boot server as the boot menu item (option 43.71).

Also improve DHCP debug messages to include more details of the
packets being transmitted.
2009-01-23 01:13:50 +00:00
Michael Brown
6941793416 [dhcp] Add preliminary support for PXE Boot Servers
Some PXE configurations require us to perform a third DHCP transaction
(in addition to the real DHCP transaction and the ProxyDHCP
transaction) in order to retrieve information from a "Boot Server".

This is an experimental implementation, since the actual behaviour is
not well specified in the PXE spec.
2009-01-21 03:43:26 +00:00
Michael Brown
d230b53df2 [tcpip] Allow for transmission to multicast IPv4 addresses
When sending to a multicast address, it may be necessary to specify
the source address explicitly, since the multicast destination address
does not provide enough information to deduce the source address via
the miniroute table.

Allow the source address specified via the data-xfer metadata to be
passed down through the TCP/IP stack to the IPv4 layer, which can use
it as a default source address.
2009-01-21 03:40:39 +00:00
Michael Brown
aa86afe890 [efi] Add an EFI_NETWORK_INTERFACE_IDENTIFIER_PROTOCOL interface
This allegedly optional interface seems to be compulsory if you want
EFI's PXE code to bother trying to use your network interface.
2009-01-12 19:11:30 +00:00
Michael Brown
cced04ef3b [efi] Provide component name protocol and device path protocol interfaces
Include a minimal component name protocol so that the driver name
shows up as something other than "<UNKNOWN>" in the driver list, and a
device path protocol so that the network interface shows up as a
separate device in the device list, rather than being attached
directly to the PCI device.

Incidentally, the EFI component name protocol reaches new depths for
signal-to-noise ratio in program code.  A typical instance within the
EFI development kit will use an additional 300 lines of code to
provide slightly less functionality than GNU gettext achieves with
three additional characters.
2009-01-12 19:10:53 +00:00
Michael Brown
ba1016f378 [dhcp] Include gPXE version number within DHCP request 2009-01-08 08:39:05 +00:00
Michael Brown
fb72336fe6 [efi] Add efirom utility and .efirom image format 2009-01-08 02:19:18 +00:00
Michael Brown
765efac771 [efi] Allow for .efidrv images as well as .efi images
Merge in the changes that allow for building EFI driver images (that
can be loaded using the EFI shell's "load" command) as well as EFI
applications.
2009-01-07 23:43:26 +00:00
Michael Brown
314779eb36 [efi] Use elf2efi utility in place of efilink
elf2efi converts a suitable ELF executable (containing relocation
information, and with appropriate virtual addresses) into an EFI
executable.  It is less tightly coupled with the gPXE build process
and, in particular, does not require the use of a hand-crafted PE
image header in efiprefix.S.

elf2efi correctly handles .bss sections, which significantly reduces
the size of the gPXE EFI executable.
2009-01-07 22:59:05 +00:00
Michael Brown
85e5e25c52 [build] Avoid strict-aliasing warnings when building with gcc 4.4
Conventional usage of the various struct sockaddr_xxx types involves
liberal use of casting, which tends to trigger strict-aliasing
warnings from gcc.  Avoid these now and in future by marking all the
relevant types with __attribute__((may_alias)).
2009-01-05 19:20:26 -08:00
Michael Brown
53a7dd26cd [infiniband] Call ib_open() only when opening the IPoIB net device
Defer the call to ib_open() until we want to actually open the device,
rather than when the device is registered.
2009-01-02 21:04:31 +00:00
Michael Brown
ce0a0ccf5c [x86_64] Add support for compilation as an x86_64 binary
Currently the only supported platform for x86_64 is EFI.

Building an EFI64 gPXE requires a version of gcc that supports
__attribute__((ms_abi)).  This currently means a development build of
gcc; the feature should be present when gcc 4.4 is released.

In the meantime; you can grab a suitable gcc tree from

  git://git.etherboot.org/scm/people/mcb30/gcc/.git
2008-12-05 00:06:27 +00:00
Michael Brown
29480dd715 [efi] Use EFI-native mechanism for accessing SMBIOS table
EFI provides a copy of the SMBIOS table accessible via the EFI system
table, which we should use instead of manually scanning through the
F000:0000 segment.
2008-12-04 23:19:12 +00:00
Michael Brown
045a22764a [efi] Allow use of EFI configuration tables
EFI passes in copies of SMBIOS and other system configuration tables
via the EFI system table.  Allow configuration tables to be requested
using a mechanism similar to the current method for requesting EFI
protocols.
2008-12-04 23:18:32 +00:00
Pantelis Koukousoulas
7166bc7b2d [b44] Add driver for Broadcom bcm44xx cards
This driver is based on Stefan Hajnoczi's summer work, which
is in turn based on version 1.01 of the linux b44 driver.
I just assembled the pieces and fixed/added a few pieces
here and there to make it work for my hardware.

The most major limitation is that this driver won't work
on systems with >1GB RAM due to the card not having enough
address bits for that and gPXE not working around this
limitation.

Still, other than that the driver works well enough for
at least 2 users :) and the above limitation can always
be fixed when somebody wants it bad enough :)

Signed-off-by: Pantelis Koukousoulas <pktoss@gmail.com>
2008-11-21 23:22:50 +00:00
Michael Brown
02a0215873 [netdevice] Provide function to retrieve the most recently opened net device
There are currently four places within the codebase that use a
heuristic to guess the "boot network device", with varying degrees of
success.  Add a feature to the net device core to maintain a list of
open network devices, in order of opening, and provide a function
last_opened_netdev() to retrieve the most recently opened net device.
This should do a better job than the current assortment of
guess_boot_netdev() functions.
2008-11-21 20:34:02 +00:00
Michael Brown
246ddf5ee4 [aoe] Use an AoE config query to identify the target MAC address
The AoE spec does not specify that the source MAC address of a
received packet actually matches the MAC address of the AoE target.
In principle an AoE server can respond to an AoE request on any
interface available to it, which may not be an address configured to
accept AoE requests.

This issue is resolved by implementing AoE device discovery.  The
purpose of AoE discovery is to find out which addresses an AoE target
can use for requests.  An AoE configuration command is sent when the
AoE attach is attempted.  The AoE target must respond to that
configuration query from an interface that can accept requests.

Based on a patch from Ryan Thomas <ryan@coraid.com>
2008-11-19 21:42:33 +00:00
Laurent Vivier
a2686a55c4 [blockdev] Move block device operations to structure block_device_operations
Signed-off-by: Laurent Vivier <Laurent.Vivier@bull.net>
2008-11-19 20:04:43 +00:00
Laurent Vivier
b48f37e69a [virtio] Split virtio-net.c into several files.
Signed-off-by: Laurent Vivier <Laurent.Vivier@bull.net>
2008-11-19 19:58:51 +00:00
Laurent Vivier
d3d8f20626 [virtio] Remove dependency on nic for virtio PCI functions
Signed-off-by: Laurent Vivier <Laurent.Vivier@bull.net>
2008-11-19 19:51:38 +00:00
Laurent Vivier
fc49421c7e [virtio] Consolidate vring_get_buf() by using a buffer list to add to the vring
Signed-off-by: Laurent Vivier <Laurent.Vivier@bull.net>
2008-11-19 19:50:51 +00:00
Laurent Vivier
5dd5107976 [virtio] Move virtio-pci.h and virtio-ring.h to include/gpxe
Signed-off-by: Laurent Vivier <Laurent.Vivier@bull.net>
2008-11-19 19:48:30 +00:00
Michael Brown
0ebbbb95fa [x86_64] Fix assorted 64-bit compilation errors and warnings
Remove various 32-bit assumptions scattered throughout the codebase.
The code is still not necessarily 64-bit clean, but will at least
compile.
2008-11-19 19:33:05 +00:00
Michael Brown
3f85626fa9 [efi] Add efi_strerror()
EFI_STATUS is defined as an INTN, which maps to UINT32 (i.e. unsigned
int) on i386 and UINT64 (i.e. unsigned long) on x86_64.  This would
require a cast each time the error status is printed.

Add efi_strerror() to avoid this ickiness and simultaneously enable
prettier reporting of EFI status codes.
2008-11-19 19:22:49 +00:00
Michael Brown
d9b3d09910 [i386] Move iSCSI and AoE boot code to arch/i386/interface/pcbios 2008-11-19 19:20:45 +00:00
Michael Brown
dc60c24146 [i386] Rename __cdecl to __asmcall
__cdecl is a misleading name, since it currently encapsulates both
cdecl and regparm(0) attributes.  Rename to __asmcall.
2008-11-19 19:12:53 +00:00
Michael Brown
446b6d5fdd [pxe] Move all PXE files to arch/i386
The initial PXE implementation in Etherboot had the goal of being
architecture-agnostic, but this goal has not been realised.
2008-11-18 22:27:02 +00:00
Michael Brown
fca2dcabb8 [elf] Kill off unused <bits/elf.h> and <bits/elf_x.h> header files 2008-11-18 22:16:15 +00:00
Michael Brown
ab96932ab3 [efi] Update to latest UEFI headers 2008-11-18 21:54:51 +00:00
Michael Brown
54fbd11221 [build] Keep gcc 4.4 happy
gcc 4.4 adds another few warnings, and also seems to complain if we
place %ebp in the clobber list for any inline asm.
2008-11-18 01:52:40 +00:00
Michael Brown
1b3edd9e11 [infiniband] Respect hop pointer when building directed route SMP return path
The return path in directed route SMPs lists the egress ports in order
from SM to node, rather than from node to SM.

To write to the correct offset within the return path, we need to
parse the hop pointer.  This is held within the class-specific data
portion of the MAD header, which was previously unused by us and
defined to be a uint16_t.  Define this field to be a union type; this
requires some rearrangement of ib_mad.h and corresponding changes to
ipoib.c.
2008-11-12 15:35:45 +00:00
Michael Brown
125c6d66a8 [linda] Add support for QLogic 7220-based Infiniband HCAs
These cards very nearly support our current IB Verbs model.  There is
one minor difference: multicast packets will always be delivered by
the hardware to QP0, so the driver has to redirect them to the
appropriate QP.  This means that QP owners may see receive completions
for buffers that they never posted.  Nothing in our current codebase
will break because of this.
2008-11-11 05:58:47 +00:00
Michael Brown
9e5fd8ec59 [infiniband] Add raw packet parser and constructor
This can be used with cards that require the driver to construct and
parse packet headers manually.  Headers are optionally handled
out-of-line from the packet payload, since some such cards will split
received headers into a separate ring buffer.
2008-11-11 05:31:19 +00:00
Michael Brown
c0ec00f47f [infiniband] Add a standalone subnet management agent
This generic SMA code can be used for any cards that do not provide
firmware-based embedded SMAs.
2008-11-11 05:31:18 +00:00
Michael Brown
9a35830d1f [ipoib] Kill off the IPoIB pseudo-header
Some Infiniband cards will not be as accommodating as the Arbel and
Hermon cards in providing enough space for us to push a fake extra
header at the start of the received packet.  We must therefore make do
with squeezing enough information to identify source and destination
addresses into the two bytes of padding within a genuine IPoIB
link-layer header.
2008-11-11 05:31:08 +00:00
Michael Brown
663904a7bc [infiniband] Split subnet management agent client out into ib_smc.c
Not all Infiniband cards have embedded subnet management agents.
Split out the code that communicates with such an embedded SMA into a
separate ib_smc.c file, and have drivers call ib_smc_update()
explicitly when they suspect that the answers given by the embedded
SMA may have changed.
2008-11-11 05:31:07 +00:00
Michael Brown
830e19eb54 [infiniband] Pass address vector in receive completions
Receive completion handlers now get passed an address vector
containing the information extracted from the packet headers
(including the GRH, if present), and only the payload remains in the
I/O buffer.

This breaks the symmetry between transmit and receive completions, so
remove the ib_completer_t type and use an ib_completion_queue_operations
structure instead.

Rename the "destination QPN" and "destination LID" fields in struct
ib_address_vector to reflect its new dual usage.

Since the ib_completion structure now contains only an IB status code,
("syndrome") replace it with a generic gPXE integer status code.
2008-11-11 05:31:07 +00:00
Michael Brown
0de5f7af6d [infiniband] Maintain queue fill level as a property of a work queue
Both queue owners and drivers often need to keep track of the fill
level, so let's make it a generic property.
2008-11-11 05:31:06 +00:00
Michael Brown
d9751edafa [infiniband] Flush uncompleted work queue entries at QP teardown
Avoid leaking I/O buffers in ib_destroy_qp() by completing any
outstanding work queue entries with a generic error code.  This
requires the completion handlers to be available to ib_destroy_qp(),
which is done by making them static configuration parameters of the CQ
(set by ib_create_cq()) rather than being provided on each call to
ib_poll_cq().

This mimics the functionality of netdev_{tx,rx}_flush().  The netdev
flush functions would previously have been catching any I/O buffers
leaked by the IPoIB data queue (though not by the IPoIB metadata
queue).
2008-11-11 05:31:06 +00:00
Pantelis Koukousoulas
dd34500188 [ne2k_isa] Restore support for ne2k isa cards
Add the simplified ne2k_isa driver.  It is just a selective copy+paste
of the relevant parts from ns8390.c plus a little trivial hacking to
make it actually work.

It is true that the code is pretty ugly, but:
  a) ns8390.c is worse
  b) It is only 372 lines and no #ifdefs
  c) It works both in qemu/bochs and in real hardware
     and we all know it is easier to cleanup working code

Hope someone will find the time to rewrite this driver properly,
but until then at least for me this is an ok solution.

Signed-off-by: Pantelis Koukousoulas <pktoss@gmail.com>
2008-11-08 13:01:20 +00:00
Michael Brown
9a52ba0cfa [netdevice] Retain and report detailed error breakdowns
netdev_rx_err() and netdev_tx_complete_err() get passed the error
code, but currently use it only in debug messages.

Retain error numbers and frequencey counts for up to
NETDEV_MAX_UNIQUE_ERRORS (4) different errors for each of TX and RX.
This allows the "ifstat" command to report the reasons for TX/RX
errors in most cases, even in non-debug builds.
2008-11-08 05:30:30 +00:00
Michael Brown
0a6c66a830 [settings] Add the notion of a "tag magic" to numbered settings
Settings can be constructed using a dotted-decimal notation, to allow
for access to unnamed settings.  The default interpretation is as a
DHCP option number (with encapsulated options represented as
"<encapsulating option>.<encapsulated option>".

In several contexts (e.g. SMBIOS, Phantom CLP), it is useful to
interpret the dotted-decimal notation as referring to non-DHCP
options.  In this case, it becomes necessary for these contexts to
ignore standard DHCP options, otherwise we end up trying to, for
example, retrieve the boot filename from SMBIOS.

Allow settings blocks to specify a "tag magic".  When dotted-decimal
notation is used to construct a setting, the tag magic value of the
originating settings block will be ORed in to the tag number.
Store/fetch methods can then check for the magic number before
interpreting arbitrarily-numbered settings.
2008-10-30 21:47:14 +00:00
Michael Brown
c99b16c974 [efi] Add basic implementation of EFI SIMPLE_NETWORK_PROTOCOL
This implementation is tested and working, but not currently tied in
to the EFI build.
2008-10-16 05:38:23 +01:00
Michael Brown
3a505dfc35 [netdevice] Change link-layer push() and pull() methods to take raw types
EFI requires us to be able to specify the source address for
individual transmitted packets, and to be able to extract the
destination address on received packets.

Take advantage of this to rationalise the push() and pull() methods so
that push() takes a (dest,source,proto) tuple and pull() returns a
(dest,source,proto) tuple.
2008-10-16 05:13:40 +01:00
Michael Brown
6b9cc25556 [netdevice] Split multicast hashing out into an mc_hash method
Multicast hashing is an ugly overlap between network and link layers.
EFI requires us to provide access to this functionality, so move it
out of ipv4.c and expose it as a method of the link layer.
2008-10-16 05:12:56 +01:00
Michael Brown
832668105e [netdevice] Add maximum packet length as a net device property
Currently this length is set at device allocation time, and is never
changed.
2008-10-16 05:11:47 +01:00
Michael Brown
81d92c6d34 [efi] Add EFI image format and basic runtime environment
We have EFI APIs for CPU I/O, PCI I/O, timers, console I/O, user
access and user memory allocation.

EFI executables are created using the vanilla GNU toolchain, with the
EXE header handcrafted in assembly and relocations generated by a
custom efilink utility.
2008-10-13 10:24:14 +01:00
Michael Brown
54c024e0af [sanboot] Quick and dirty hack to make SAN boot protocols selectable 2008-10-13 10:05:51 +01:00
Michael Brown
831e4cfc27 [umalloc] Formalise the user memory allocation API 2008-10-13 05:33:14 +01:00
Michael Brown
6554b79ff9 [uaccess] Formalise the uaccess API
The userptr_t is now the fundamental type that gets used for conversions.
For example, virt_to_phys() is implemented in terms of virt_to_user() and
user_to_phys().
2008-10-13 04:10:34 +01:00
Michael Brown
c0835339d0 [nap] Formalise the CPU sleeping API 2008-10-12 23:36:53 +01:00
Michael Brown
16f1e35775 [timer] Formalise the timer API
We now have two implementations for the timer API: one using the
time-of-day counter at 40:70 and one using RDTSC.  Both make use of
timer2_udelay().
2008-10-12 20:22:02 +01:00
Michael Brown
f945d6d201 [retry] Use a separate flag to indicate that a retry timer is running
Using start==0 to indicate a stopped timer is dangerous, because 0 is a
valid value for the current tick counter.
2008-10-12 15:11:20 +01:00
Michael Brown
8a4ccebec9 [pci] Formalise the PCI I/O API 2008-10-12 12:54:12 +01:00
Michael Brown
fd67452807 [legacy] Add missing #include <gpxe/io.h> 2008-10-12 12:52:56 +01:00
Michael Brown
aef6d0df5c [ioapi] Absorb virt_to_phys() and phys_to_virt() into the I/O API 2008-10-12 02:15:34 +01:00
Michael Brown
8956a36be5 [ioapi] Formalise the I/O API as used in i386-pcbios 2008-10-12 01:03:17 +01:00
Michael Brown
2e812235f4 [makefile] Add -Wformat-nonliteral as an extra warning category
-Wformat-nonliteral is not enabled by -Wall and needs to be explicitly
 specified.

Modified the few files that use nonliteral format strings to work with
this new setting in place.

Inspired by a patch from Carl Karsten <carl@personnelware.com> and an
identical patch from Rorschach <r0rschach@lavabit.com>.
2008-10-10 18:41:24 +01:00
Michael Brown
ac663cf509 [efi] Add EFI headers from the EFI Development Kit (edk2)
The intention is to include near-verbatim copies of the EFI headers
required by gPXE.  This is achieved using the import.pl script in
src/include/gpxe/efi.

Note that import.pl will modify any #include lines in each imported
header to reflect its new location within the gPXE tree.  It will also
tidy up the file by removing carriage return characters and trailing
whitespace.
2008-10-10 04:04:07 +01:00
Michael Brown
160b950af8 [libc] Define wchar_t in a gcc-compatible way
gcc defines the magic __WCHAR_TYPE__ macro, in order to convey
information about whether or not the user selected -fshort-wchar.
2008-10-07 22:27:55 +01:00
Michael Brown
19a0452205 [libc] Add function declaration for main() in stdlib.h 2008-10-07 22:04:50 +01:00
Michael Brown
521549d900 [crypto] Rename <gpxe/bitops.h> to <gpxe/rotate.h> 2008-10-01 19:24:56 +01:00
Michael Brown
9dccbc0af2 [i2c] Generalise i2c bit-bashing support to addressless devices
Some devices (e.g. the Atmel AT24C11) have no concept of a device
address; they respond to every device address and use this value as
the word address.  Some other devices use part of the device address
field to extend the word address field.

Generalise the i2c bit-bashing support to handle this by defining the
device address length and word address length as properties of an i2c
device.  The word address is assumed to overflow into the device
address field if the address used exceeds the width of the word
address field.

Also add a bus reset mechanism.  i2c chips don't usually have a reset
line, so rebooting the host will not clear any bizarre state that the
chip may be in.  We reset the bus by clocking SCL until we see SDA
high, at which point we know we can generate a start condition and
have it seen by all devices.  We then generate a stop condition to
leave the bus in a known state prior to use.

Finally, add some extra debugging messages to i2c_bit.c.
2008-10-01 19:24:56 +01:00
Michael Brown
afe1323c76 [compiler] Allow for selective disabling of debug levels at runtime
The usefulness of DBGLVL_IO is limited by the fact that many cards
require large numbers of uninteresting I/O reads/writes at device
probe time, typically when driving a bit-bashing I2C/SPI bus to read
the MAC address.

This patch adds the DBG_DISABLE() and DBG_ENABLE() macros, which can
be used to temporarily disable and re-enable selected debug levels.
Note that debug levels must still be enabled in the build in order to
function at all: you can't use DBG_ENABLE(DBGLVL_IO) in an object
built with DEBUG=object:1 and expect it to do anything.
2008-10-01 19:24:56 +01:00
Michael Brown
9b01a9fd9c [compiler] Add __always_inline macro 2008-10-01 19:24:56 +01:00
Michael Brown
e2d5788716 [settings] Expose MAC address setting for general use 2008-09-26 03:39:17 +01:00
Michael Brown
aa8d972581 [dhcp] Accept BOOTP as well as DHCP 2008-09-25 01:35:15 +01:00
Michael Brown
b350b10b35 [uri] Add uri_encode() and uri_decode() functions for URI character encoding 2008-09-24 07:21:47 +01:00
Daniel Verkamp
e8b22f203f [comboot] Add COMBOOT and COM32 support 2008-08-28 23:52:19 +01:00
Michael Brown
30fb3b3810 [undi] Fill in ProtType correctly in PXENV_UNDI_ISR
Determine the network-layer packet type and fill it in for UNDI
clients.  This is required by some NBPs such as emBoot's winBoot/i.

This change requires refactoring the link-layer portions of the
gPXE netdevice API, so that it becomes possible to strip the
link-layer header without passing the packet up the network stack.
2008-08-20 03:21:37 +01:00
Michael Brown
320b072c7a [pcbios] Support arbitrary splits of the e820 memory map
Allow for an arbitrary number of splits of the system memory map via
INT 15,e820.

Features of the new map-mangling algorithm include:

  Supports random access to e820 map entries.

  Requires only sequential access support from the underlying e820
  map, even if our caller uses random access.

  Empty regions will always be stripped.

  Always terminates with %ebx=0, even if the underlying map terminates
  with CF=1.

  Allows for an arbitrary number of hidden regions, with underlying
  regions split into as many subregions as necessary.

Total size increase to achieve this is 193 bytes.
2008-08-18 07:17:41 +01:00
Andrew Schran
ff2b6a512d [retry] Added configurable timeouts to retry timer
New min_timeout and max_timeout fields in struct retry_timer allow
users of this timer to set their own desired minimum and maximum
timeouts, without being constrained to a single global minimum and
maximum. Users of the timer can still elect to use the default global
values by leaving the min_timeout and max_timeout fields as 0.
2008-08-12 01:05:26 +01:00
Michael Brown
5d4839b577 [iSCSI] Add support for mutual CHAP
Allow initiator to verify target authentication using CHAP.
2008-08-11 03:43:12 +01:00
Michael Brown
7ad2f652b4 [libc] Add missing __attribute__ (( format ( printf ) )) to ssnprintf() 2008-08-11 02:31:14 +01:00
Michael Brown
481a21798d [autoboot] Retain initial-slash (if present) when constructing TFTP URIs
When we boot from a DHCP-supplied filename, we previously relied on
the fact that the current working URI is set to tftp://[next-server]/
in order to resolve the filename into a full tftp:// URI.  However,
this process will eliminate the distinction between filenames with and
without initial slashes:

 cwuri="tftp://10.0.0.1/" filename="vmlinuz"  => URI="tftp://10.0.0.1/vmlinuz"
 cwuri="tftp://10.0.0.1/" filename="/vmlinuz" => URI="tftp://10.0.0.1/vmlinuz"

This distinction is important for some TFTP servers.  We now
explicitly construct a string of the form

 "tftp://[next-server]/filename"

so that a filename with an initial slash will result in a URI
containing a double-slash, e.g.

 "tftp://10.0.0.1//vmlinuz"

The TFTP code always strips a single initial slash, and so ends up
presenting the correct path to the server.

URIs entered explicitly by users at the command line must include a
double slash if they want an initial slash presented to the TFTP
server:

  "kernel tftp://10.0.0.1/vmlinuz"  => filename="vmlinuz"
  "kernel tftp://10.0.0.1//vmlinuz" => filename="/vmlinuz"
2008-07-31 16:55:46 +01:00
Andrew Schran
6b58992318 [tg3] Added support for tg3-5754.
In tg3_chip_reset(), the PCI_EXPRESS change is taken from the Linux
tg3 driver. I am not sure what exactly it does (it is not documented
in the Linux driver), but it is necessary for the NIC to work
correctly.
2008-07-24 19:55:53 +01:00
Michael Brown
03c80c12b8 [iSCSI] Support Windows Server 2008 direct iSCSI installation
Add yet another ugly hack to iscsiboot.c, this time to allow the user to
inhibit the shutdown/removal of the iSCSI INT13 device (and the network
devices, since they are required for the iSCSI device to function).

On the plus side, the fact that shutdown() now takes flags to
differentiate between shutdown-for-exit and shutdown-for-boot means that
another ugly hack (to allow returning via the PXE stack on BIOSes that
have broken INT 18 calls) will be easier.

I feel dirty.
2008-07-17 17:45:17 +01:00
Michael Brown
dbe9269f3a [bzimage] Kill off the initrd image type
We can just treat all non-kernel images as initrds, which matches our
behaviour for multiboot kernels.  This allows us to eliminate initrd as
an image type, and treat the "initrd" command as just another synonym for
"imgfetch".
2008-07-08 01:30:11 +01:00
Michael Brown
3ad348e55a [phantom] Add support for NetXen Phantom NICs 2008-07-04 19:38:14 -07:00
Stefan Hajnoczi
e9e1da131a [GDB] Provide functions to manually enter GDB stub. 2008-06-30 19:19:48 +01:00
Stefan Hajnoczi
19386ec2c8 [GDB] Add watch and rwatch hardware watchpoints 2008-06-30 19:19:48 +01:00
Stefan Hajnoczi
6e670b5f38 [GDB] Remote debugging over UDP
This commit implements GDB over UDP.  Using UDP is more complex than
serial and has required some restructuring.

The GDB stub is now built using one or both of GDBSERIAL and GDBUDP
config.h options.

To enter the debugger, execute the gPXE shell command:
gdbstub <transport> [<options>...]

Where <transport> is "serial" or "udp".  For "udp", the name of a
configured network device is required:
gdbstub udp net0

The GDB stub listens on UDP port 43770 by default.
2008-06-30 19:19:48 +01:00
Michael Brown
4c75e9ded4 [nvs] Add support for ST M25P32 SPI flash devices 2008-06-27 14:39:25 -07:00
Michael Brown
0d91c37ce5 [legacy] Align legacy drivers' __shared data to the maximum possible
Some drivers that still use the legacy-driver wrapper (tg3 in particular)
apparently do not specify their alignment constraints properly.  This
hack forces any __shared data to be maximally aligned.

Note that this provides only 16-byte alignment; it is not possible to
request alignment to any greater than 16 bytes using
__attribute__((aligned)), since the relocation code will preserve only 16
byte alignment (and operation under -DKEEP_IT_REAL cannot preserve more
that 16 byte alignment).

Idea proposed by Tim Hockin <thockin@google.com>
2008-06-14 20:01:14 +01:00
Michael Brown
31c6df5365 [cleanup] Remove long-obsolete gpxe/async.h header file 2008-06-12 13:15:53 +01:00
Michael Brown
32e8ab4df0 [retry] Add start_timer_fixed()
Allow for timers to be started with fixed timeouts.
2008-06-11 09:37:58 +01:00
Michael Brown
72c1bb8224 [slam] Add Scalable Local Area Multicast (SLAM) protocol support
Tested against the mini-slamd server located in contrib/mini-slamd
with a single client, on a lossy network.
2008-06-10 00:04:19 +01:00
Michael Brown
aa160211c2 [udp] Verify local socket address (if specified) for UDP sockets
UDP sockets can be used for multicast, at which point it becomes
plausible that we could receive packets that aren't destined for us
but that still match on a port number.
2008-06-10 00:01:29 +01:00
Michael Brown
77a5cc6b13 [ELF] Add ability to boot ELF images generated by wraplinux and mkelfImage
Delete ELF as a generic image type.  The method for invoking an
ELF-based image (as well as any tables that must be set up to allow it
to boot) will always depend on the specific architecture.  core/elf.c
now only provides the elf_load() function, to avoid duplicating
functionality between ELF-based image types.

Add arch/i386/image/elfboot.c, to handle the generic case of 32-bit
x86 ELF images.  We don't currently set up any multiboot tables, ELF
notes, etc.  This seems to be sufficient for loading kernels generated
using both wraplinux and coreboot's mkelfImage.

Note that while Etherboot 5.4 allowed ELF images to return, we don't.
There is no callback mechanism for the loaded image to shut down gPXE,
which means that we have to shut down before invoking the image.  This
means that we lose device state, protection against being trampled on,
etc.  It is not safe to continue afterwards.
2008-06-09 13:50:00 +01:00
Stefan Hajnoczi
831db76ff7 [Serial] Split serial console from serial driver 2008-06-05 00:45:43 +01:00
Michael Brown
75965c9c6e [iSCSI] Produce meaningful errors on login failure
Return the most appropriate of EACCES, EPERM, ENODEV, ENOTSUP, EIO or
EINVAL depending on the exact error returned by the target, rather than
just always returning EPERM.

Also, ensure that error strings exist for these errors.
2008-06-03 23:47:20 +01:00
Michael Brown
30cd348689 [SMBIOS] Interpret UUIDs as being in network-endian order
Various specification documents disagree about the byte ordering of
UUIDs.  However, SMBIOS seems to use the standard in which everything is
in network-endian order.

This doesn't affect anything sent on the wire; only what gets printed on
the screen when the "uuid" variable is displayed.
2008-05-20 18:41:36 +01:00
Michael Brown
7d01bf663e [libc] Fix isdigit(), islower() and isupper().
From: Stefan Hajnoczi <stefanha@gmail.com>
2008-05-19 16:34:17 +01:00
Michael Brown
3430226d40 [MTNIC] Minor cleanups of vendor-provided driver for Mellanox 10GigE cards
Drivers are not allowed to call printf().  Converted eprintf() to DBG(),
and removed spurious startup banner.

Fixed hardcoded inclusion of little_bswap.h

Use EIO rather than 1 as an error number.
2008-04-22 17:50:30 +01:00
Michael Brown
1ba959c6b3 [NETDEV] Add notion of link state
Add ability for network devices to flag link up/down state to the
networking core.

Autobooting code will now wait for link-up before attempting DHCP.

IPoIB reflects the Infiniband link state as the network device link state
(which is not strictly correct; we also need a succesful IPoIB IPv4
broadcast group join), but is probably more informative.
2008-04-22 17:40:50 +01:00
Michael Brown
35a5836677 [Infiniband] Move event-queue process from driver to Infiniband core 2008-04-21 13:23:11 +01:00
Michael Brown
a176a24ac0 [Infiniband] Add preliminary multiple port support for Hermon cards
Infiniband devices no longer block waiting for link-up in
register_ibdev().

Hermon driver needs to create an event queue and poll for link-up events.

Infiniband core needs to reread MAD parameters when link state changes.

IPoIB needs to cope with Infiniband link parameters being only partially
available at probe and open time.
2008-04-18 02:50:48 +01:00
Marty Connor
fbb6a3fd65 [Drivers-r8169] Add support for newer rtl8169 variants from Hilko Bengen
03-19-2008, Hilko Bengen, Cleanups and fixes for newer cards
(successfully tested with 8110SC-d onboard NIC)
2008-03-31 09:14:23 -04:00
Michael Brown
feade5da6e [Settings] Expose SMBIOS via settings API
In particular, expose the system UUID as a setting ("smbios/uuid").
2008-03-28 15:35:06 +00:00
Michael Brown
aa74a7d53c [DHCP] Add support for ProxyDHCP requests
The PXE spec is (as usual) unclear on precisely when ProxyDHCPREQUESTs
should be issued.  We adapt the following, slightly paranoid approach:

  If an offer contains an IP address, then it is a normal DHCPOFFER.

  If an offer contains an option #60 "PXEClient", then it is a
  ProxyDHCPOFFER.  Note that the same packet can be both a normal
  DHCPOFFER and a ProxyDHCPOFFER.

  After receiving the normal DHCPACK, if we have received a
  ProxyDHCPOFFER, we unicast a ProxyDHCPREQUEST back to the ProxyDHCP
  server on port 4011.  If we time out waiting for a ProxyDHCPACK, we
  treat this as a non-fatal error.
2008-03-27 16:45:15 +00:00
Michael Brown
4b267ed713 [libc] Whitespace cleanup in errno.h 2008-03-26 22:57:25 +00:00
H. Peter Anvin
61ee294875 [PXEXT] Change the PXE return code for EWOULDBLOCK
Change the PXE return code for EWOULDBLOCK from PXENV_STATUS_FAILURE
to PXENV_STATUS_TFTP_OPEN.  This code is only used by the FILE_READ
PXEXT call, and is necessary to distinguish "error" from "no data" in
that call.

(The only other nonblocking call is UDP_READ, where the caller doesn't
care about the distinction, however, gPXE doesn't use EWOULDBLOCK
internally to represent this condition in that code.)
2008-03-26 15:12:19 -07:00
H. Peter Anvin
d62e89d776 [PXEXT] Add FILE_API_CHECK API function
Add FILE_API_CHECK to the PXEXT API so the NBP can query the
availability and status of the API.
2008-03-26 15:10:56 -07:00
Michael Brown
92d15eff30 [Settings] Remove assumption that all settings have DHCP tag values
Allow for settings to be described by something other than a DHCP option
tag if desirable.  Currently used only for the MAC address setting.

Separate out fake DHCP packet creation code from dhcp.c to fakedhcp.c.

Remove notion of settings from dhcppkt.c.

Rationalise dhcp.c to use settings API only for final registration of the
DHCP options, rather than using {store,fetch}_setting throughout.
2008-03-25 20:46:16 +00:00
Michael Brown
dbf8a02e8f [libc] Use __builtin_va_list et al in stdarg.h
The home-grown versions don't work properly for static variadic
functions, when gcc can choose to use a non-standard calling convention.
2008-03-24 00:23:11 +00:00
Michael Brown
23e077666b [Settings] copy_settings() should not fail if some settings are missing! 2008-03-23 23:28:21 +00:00
Michael Brown
978865da2f [IPv4] Use default netmasks when no subnet mask is specified. 2008-03-23 22:20:47 +00:00
Michael Brown
2af6c8d130 [IPv4] Tidy up some header files. 2008-03-23 22:05:47 +00:00
Michael Brown
ee4206a8a7 [DHCP] Fix up fake-packet creation as used by PXENV_GET_CACHED_INFO
Add dedicated functions create_dhcpdiscover(), create_dhcpack() and
create_proxydhcpack() for use by external code such as the PXE preboot
code.

Register ProxyDHCP options under the global scope "proxydhcp".

Unregister previously-acquired DHCP and ProxyDHCP settings when DHCP
succeeds.
2008-03-23 21:58:05 +00:00
Michael Brown
e5cea13e51 [Settings] Implement simple_settings backed with extensible DHCP options 2008-03-22 00:31:08 +00:00
Michael Brown
8afb36c3bc [Settings] Migrate DHCP and NVO code to the new settings API (untested) 2008-03-21 22:15:31 +00:00
Michael Brown
bb32b8999c [DHCP] Kill off some no-longer-used DHCP functions 2008-03-21 00:50:12 +00:00
Michael Brown
1edbcd4246 [Settings] Use a settings applicator to set the default TFTP URI. 2008-03-21 00:26:29 +00:00
Michael Brown
aec9b8a41b [Settings] Use a settings applicator to configure IPv4 routes. 2008-03-21 00:01:27 +00:00
Michael Brown
eae6ac3d0b [Settings] Convert code in src/usr to use settings API. 2008-03-20 23:42:11 +00:00
Michael Brown
cf03304620 [Settings] Introduce settings applicators.
Convert DHCP option applicators in dns.c and iscsi.c to settings
applicators.

Kill off DHCP option applicators.
2008-03-20 23:15:48 +00:00
Michael Brown
acfa14423e [Settings] Add per-netdevice settings block
Add a configuration settings block for each net device.  This will
provide the parent scope for settings applicable only to that network
device (e.g. non-volatile options stored on the NIC, options obtained via
DHCP, etc.).

Expose the MAC address as a setting.
2008-03-20 21:06:53 +00:00
Michael Brown
260b93bb72 [Settings] Add settings hierarchy
Add the notion of the settings hierarchy, complete with
register/unregister routines.

Rename set->store and get->fetch to avoid naming conflicts with get/put
as used in reference counting.
2008-03-20 21:01:32 +00:00
Michael Brown
a48b4d9948 [Settings] Start revamping the configuration settings API.
Add the concept of an abstract configuration setting, comprising a (DHCP)
tag value and an associated byte sequence.

Add the concept of a settings namespace.

Add functions for extracting string, IPv4 address, and signed and
unsigned integer values from configuration settings (analogous to
dhcp_snprintf(), dhcp_ipv4_option(), etc.).

Update functions for parsing and formatting named/typed options to work
with new settings API.

Update NVO commands and config UI to use new settings API.
2008-03-20 04:06:07 +00:00
Michael Brown
070cbebc26 [Timers] Initialise timers on first use
Timers are sometimes required before the call to initialise(), so we
cannot rely on initialise() to set up the timers before use.

Also fix a potential integer overflow issue in generic_currticks_udelay()
2008-03-18 15:23:10 +00:00
Michael Brown
2652abdc5f [Timers] Miscellaneous timer system fixes
Add missing comments to timer code.

Lock system if no suitable timer source is found.

Fix initialisation order so that timers are initialised before code that
needs to use them.
2008-03-18 14:48:28 +00:00
Michael Brown
5a08b434c7 [Settings] show_setting() functions return snprintf()-style length.
show_setting() and related functions now return an "actual length" in the
style of snprintf().  This is to allow consumers to allocate buffers large
enough to hold the formatted setting.
2008-03-18 00:48:23 +00:00
Michael Brown
3e781eb87f Merge branch 'xl0-timer' 2008-03-10 13:02:53 +00:00
Michael Brown
b62f2325ba [PXEXT] Add PXENV_FILE_EXEC call to PXE extensions API.
This allows pxelinux to execute arbitrary gPXE commands.  This is
remarkably unsafe (not least because some of the commands will assume
full ownership of memory and do nasty things like edit the e820 map
underneath the calling pxelinux), but it does allow access to the
"sanboot" command.
2008-03-04 18:16:30 +00:00
Michael Brown
b08a6f5300 [Command] Add "sanboot" command. 2008-03-04 17:59:26 +00:00
Alexey Zaytsev
a1572e0ab0 Modify gPXE core and drivers to work with the new timer subsystem
Signed-off-by: Alexey Zaytsev <alexey.zaytsev@gmail.com>
2008-03-02 03:41:10 +03:00
Alexey Zaytsev
4006d229e5 Introduce the new timer subsystem.
Timer subsystem initialization code in core/timer.c

	Split the BIOS and RTDSC timer drivers from i386_timer.c

	Split arch/i386/firmware/pcbios/bios.c into the RTSDC
	timer driver and arch/i386/core/nap.c

	Split the headers properly:
		include/unistd.h - delay functions to be used by the
					gPXE core and drivers.

		include/gpxe/timer.h - the fimer subsystem interface
					to be used by the timer drivers
					and currticks() to be used by
					the code gPXE subsystems.

		include/latch.h	- removed
		include/timer.h - scheduled for removal. Some driver
					are using currticks, which is
					only for core subsystems.

Signed-off-by: Alexey Zaytsev <alexey.zaytsev@gmail.com>
2008-03-02 03:15:07 +03:00
Michael Brown
bc3f0a25c6 [Infiniband] Add preliminary support for multi-port devices.
Arbel and Hermon cards both have multiple ports.  Add the
infrastructure required to register each port as a separate IB
device.  Don't yet register more than one port, since registration
will currently fail unless a valid link is detected.

Use ib_*_{set,get}_{drv,owner}data wrappers to access driver- and
owner-private data on Infiniband structures.
2008-02-27 13:59:56 +00:00
Michael Brown
6570203571 [Infiniband] Centralise MAD operations
Pull out common code for handling management datagrams from arbel.c
and hermon.c into infiniband.c.

Add port number to struct ib_device.

Add open(), close() and mad() methods to struct ib_device_operations.
2008-02-26 22:56:19 +00:00
Michael Brown
396dc6e797 [Hermon] Add driver for Mellanox Hermon (ConnectX) cards. 2008-02-23 10:51:38 +00:00
Michael Brown
604c934981 Add DBGLVL_IO to trace all memory-mapped I/O. 2008-02-21 12:44:09 +00:00
Michael Brown
105ebec4f3 Merge commit 'laptop/master' 2008-01-22 18:57:01 +00:00
Michael Brown
122abb50af Merge branch 'master' of rom.etherboot.org:/pub/scm/gpxe 2008-01-22 18:53:01 +00:00
Michael Brown
c9c8cdeb8b Add pxe_set_cached_filename() so that pxe_tftp.c can also update the
stored DHCP packets.
2008-01-22 18:51:12 +00:00
Michael Brown
a2b4252d5a Add XFER_INIT() macro. 2008-01-22 18:48:47 +00:00
Michael Brown
f6a8158eed Make seek information part of the xfer metadata, rather than an entirely
separate xfer method.

Add missing .alloc_iob entries to several xfer_interface_operations
structures.
2008-01-08 16:46:55 +00:00
Michael Brown
74fd544101 Added the embedded pxelinux payload patch from hpa. 2008-01-08 15:51:36 +00:00
Michael Brown
f3265b4bf8 Add preliminary support for MTFTP. 2007-12-26 18:51:20 +00:00
Michael Brown
bea8787a03 Kill off the now-obsolete *_fill_nic() functions. 2007-12-15 19:40:55 +00:00
Michael Brown
3b1efba864 Add RFC2090 TFTP multicast support. 2007-11-28 10:57:26 +00:00
Michael Brown
b3abf25e3c Allow DHCP server to instruct gPXE to ignore ProxyDHCP (which will
also avoid waiting for ProxyDHCP offers).

Also reduce the ProxyDHCP timeout, because it's already irritating me.
2007-11-21 22:10:04 +00:00
Michael Brown
0becbf5fba Add ProxyDHCP support. 2007-11-21 21:51:43 +00:00
Michael Brown
b53ee1eb16 Merge commit 'origin/mdc-working' 2007-11-21 15:35:08 +00:00
Michael Brown
fb809da2df Remove some assumptions about DHCP obtaining only a single options block. 2007-11-21 04:48:18 +00:00
Michael Brown
8d18338ae7 Add PXE-required DHCP options to DHCPDISCOVER and DHCPREQUEST packets. 2007-11-21 03:57:30 +00:00
Michael Brown
26f3a09ccf Add UUID to DHCP request as option 97 (if available). 2007-11-21 03:29:53 +00:00
Michael Brown
899f5b8ab2 Added definition of a UUID and uuid_ntoa() (for debugging), and
implemented smbios_get_uuid().
2007-11-21 02:27:07 +00:00
Marty Connor
048a234dce Add errfile definition for new e1000.c 2007-11-18 10:45:20 -05:00
Marty Connor
8bd670301c Add ERRFILE information for e1000_main and e1000_hw, part of the new e1000 driver
It is likely we will rename e1000_main to e1000 when the new e1000 driver is debugged.
2007-11-18 09:51:21 -05:00
Michael Brown
44461b1854 Merge branch 'master' into 3leaf-delivery 2007-09-21 01:27:03 +01:00
Michael Brown
1e677b2024 Merge branch 'master' of rom.etherboot.org:/pub/scm/gpxe 2007-09-21 01:26:06 +01:00
Michael Brown
5793dbe96f Infinband requires longer link-layer addresses and headers than Ethernet. 2007-09-21 01:23:57 +01:00
Michael Brown
2ee76d0c93 Added defines for Infiniband files (which can't be committed to the
main tree yet, but reserving the error numbers now avoids problems later).
2007-09-21 01:19:04 +01:00
Michael Brown
af303db75d Use RFC4390 whenever hardware address exceeds 16 bytes; this allows us
to construct DHCP packets suitable for Infiniband.
2007-09-21 01:15:58 +01:00
Michael Brown
db124b1255 Add fls() for non-constant values. 2007-09-21 01:14:38 +01:00
Michael Brown
f09173326c Moved iobuf.h assertions outside the static inline functions, so that
the assert message's file and line number gives some clue as to the
real location of the problem.

Added similar assertions to list.h.
2007-09-21 01:13:22 +01:00
Michael Brown
30717896f5 IB can't afford many RX buffers, because the MTU is so large. Reduce
the TCP window to compensate.
2007-09-18 07:02:41 +01:00
Michael Brown
2f23881856 Added arbel.c 2007-09-18 06:37:22 +01:00
Michael Brown
2c56ede6f8 Moved iobuf.h assertions outside the static inline functions, so that
the assert message's file and line number gives some clue as to the
real location of the problem.

Added similar assertions to list.h.
2007-09-17 18:38:04 +01:00
Michael Brown
bdac591726 Some interesting packet corruption happening now. 2007-09-17 13:31:13 +01:00
Michael Brown
2ed1acb9e9 Broadcast GID is now calculated by IPoIB layer. 2007-09-17 11:50:25 +01:00
Michael Brown
ab191e45db Unicasts seem to be working. :) 2007-09-17 10:39:30 +01:00
Michael Brown
b3d3814c17 Obtains a response to the get path record! 2007-09-17 08:36:56 +01:00
Michael Brown
e05a8cd4de Use pkey table access to determine broadcast GID directly. 2007-09-17 06:35:21 +01:00
Michael Brown
440e7926fb Dead code removal 2007-09-17 05:12:47 +01:00
Michael Brown
4e78a53cf2 IPoIB code separated out to ipoib.c. 2007-09-17 05:04:58 +01:00
Michael Brown
67836430e6 Read port GID directly using MAD IFC. 2007-09-17 02:54:15 +01:00
Michael Brown
3c6a6bdc5d Multicast join now works. 2007-09-17 00:24:44 +01:00
Michael Brown
7e85f0d296 create_qp() and destroy_qp() now written (but not tested). 2007-09-16 20:54:21 +01:00
Michael Brown
251cc84ed6 Started implementing create_qp() and destroy_qp(). 2007-09-16 19:03:24 +01:00
Michael Brown
6d15a193aa Add fls() for non-constant values. 2007-09-16 17:36:40 +01:00
Michael Brown
b21d4ca21e Revert to dev_priv/owner_priv scheme, rather than container_of; it
makes it easier to put the generic allocation code into infiniband.c
2007-09-16 17:25:15 +01:00
Michael Brown
e238bb1e43 destroy_cq() now implemented (not tested). 2007-09-16 14:39:51 +01:00
Michael Brown
156b409ccc Rearrange data structures to maximise embedding (and hence minimise
the number of separate allocations that need to be done).
2007-09-16 04:02:20 +01:00
Michael Brown
37fc40bc8c post_recv() now works, and we can pass data on the IPoIB queue pair
using entirely our own code.
2007-09-15 23:33:25 +01:00
Michael Brown
8deef093d9 Direct polling of TX completion queue now works. 2007-09-15 20:58:29 +01:00
Michael Brown
6a791649f0 Updated MLX_* accessor macros to use implicit type information. 2007-09-15 18:44:09 +01:00
Michael Brown
a3a91fedc1 Started added poll_cq() verb.
Started reworking MLX_EXTRACT(), MLX_POPULATE() etc. to automatically
determine type information.
2007-09-15 15:40:35 +01:00
Michael Brown
970951666f arbel_post_send() has been observed to transmit a packet! 2007-09-15 02:53:05 +01:00
Michael Brown
8b27da9de1 Gets a response out of the hardware. (An error completion, to be precise.) 2007-09-15 01:35:07 +01:00
Michael Brown
38a73b55c4 Now at least compiles 2007-09-15 00:19:38 +01:00
Michael Brown
9d08b7c692 Starting to introduce an Infiniband device abstraction 2007-09-14 20:29:44 +01:00
Michael Brown
08e8dfd801 Now handling TX completions in our poll loop. 2007-09-14 11:10:25 +01:00
Michael Brown
30a19c3f1c Can now both send and receive packets. LL header format not yet
fixed; still using a quick hack-up just to be able to pass through
data.
2007-09-13 14:43:12 +01:00
Michael Brown
99411e36da Added netdev_priv() to ease Linux driver compatibility. 2007-09-13 13:34:38 +01:00
Michael Brown
7e4e5af462 Use RFC4390 whenever hardware address exceeds 16 bytes; this allows us
to construct DHCP packets suitable for Infiniband.
2007-09-13 01:53:04 +01:00
Michael Brown
7b6d11e713 Started IB driver rewrite 2007-09-12 22:17:43 +01:00
Holger Lubitz
5d6f6fb924 Merge branch 'master' into curses
Conflicts:

	src/include/compiler.h
	src/include/readline/readline.h

created by strings branch merge. resolved.
2007-08-23 23:15:54 +02:00
Michael Brown
746d0f8feb Merge commit 'holger/strings' 2007-08-23 21:51:57 +01:00
Holger Lubitz
8bb295e3fd use malloc attribute 2007-08-20 20:29:58 +02:00
Holger Lubitz
6f61e254dc use malloc attribute 2007-08-20 20:29:50 +02:00
Holger Lubitz
347ab9b8c2 use malloc attribute 2007-08-20 20:29:41 +02:00
Holger Lubitz
c4285e148d use malloc attribute 2007-08-20 20:29:30 +02:00
Holger Lubitz
05708503e5 use malloc attribute 2007-08-20 20:29:23 +02:00
Holger Lubitz
9386263433 use malloc attribute 2007-08-20 20:29:09 +02:00
Holger Lubitz
2220e1a676 define malloc attribute 2007-08-20 20:28:11 +02:00
Holger Lubitz
2e88138b06 __nonnull changes 2007-08-20 00:35:07 +02:00
Holger Lubitz
a0fbce4656 __nonnull changes 2007-08-20 00:34:59 +02:00
Holger Lubitz
d0867b101d __nonnull changes 2007-08-20 00:34:46 +02:00
Holger Lubitz
d2dd4b9e31 __nonnull changes 2007-08-20 00:34:39 +02:00
Holger Lubitz
e1eefee16b __nonnull changes 2007-08-20 00:34:32 +02:00
Holger Lubitz
3859abb7de define __nonnull 2007-08-19 22:51:17 +02:00
Holger Lubitz
e8b8991b84 define __pure and __const 2007-08-19 22:50:48 +02:00
Michael Brown
db61b0a577 Added error IDs for all files in drivers/net; they're likely to need them. 2007-08-19 00:29:27 +01:00
Michael Brown
a895fd0c15 Add barrier() primitive (was present in Eb5.4), used by some currently
out-of-tree driver code.
2007-08-18 18:04:50 +01:00
Michael Brown
eff8b06eff Separate out arch-independent parts of stdint.h 2007-08-17 19:51:08 +01:00
Michael Brown
0a3c2b80ea Add start_timer_nodelay() 2007-08-13 10:59:00 -07:00
Michael Brown
54bf2621ed Add iBFT code derived from IBM document.
No Microsoft intellectual property was harmed in the production of
this code.
2007-08-09 17:44:20 -07:00
Michael Brown
950057eeed Add PXE FILE API. 2007-08-04 01:23:37 +01:00
Michael Brown
07f84566d5 Make read_user() non-blocking, and add select() call. 2007-08-04 01:22:52 +01:00
Michael Brown
218651e125 Display name and status of each file as it is downloaded. 2007-08-03 12:49:21 +01:00
Michael Brown
49009a4c1b uri_get(NULL) and uri_put(NULL) are explicitly allowed. 2007-08-02 20:26:49 +01:00
Michael Brown
d4947c05b2 Allow images to hold references to the originating URI.
Some shuffling around of the image management code; this needs tidying up.
2007-08-02 20:18:32 +01:00
Michael Brown
9fd6a0418f Allowed zero-cost enforced ordering of features in startup banner
list.

Added FEATURE() macros to most relevant (non-driver) files.
2007-08-02 14:51:03 +01:00
Michael Brown
67afe84292 Use otherwise-useless byte in DHCP feature option as a version number 2007-08-02 04:36:00 +01:00
Michael Brown
0acb016840 Add FEATURE() macro, plus code to display features at startup time,
and generate DHCP options to indicate features to DHCP server (and to
PXE NBPs).
2007-08-02 04:24:39 +01:00
Holger Lubitz
7e1db201b9 strdup and strndup call malloc and are not pure 2007-08-02 03:04:44 +02:00
Holger Lubitz
7e8e4f8abd declare pointers passed to string functions as nonnull 2007-08-02 01:02:06 +02:00
Holger Lubitz
e3d10ac673 define __nonnull 2007-08-02 01:01:01 +02:00
Holger Lubitz
8e3e97fcef set __pure attribute where possible 2007-08-02 00:51:38 +02:00
Holger Lubitz
cd619a1eec define __pure and __const 2007-08-02 00:27:54 +02:00
Michael Brown
726e366e8f Add code for constructing single-file cpio archives on the fly 2007-08-01 23:10:30 +01:00
Michael Brown
291d69d7fd Added support for draft version of the AoE Boot Firmware Table. 2007-07-31 14:05:03 +01:00
Michael Brown
79691961ba Add identifier for the network device into the DHCP request. 2007-07-31 03:32:22 +01:00
Michael Brown
5e26df0325 Centralise construction of the DHCP request and response packets. 2007-07-31 03:02:21 +01:00
Michael Brown
bf3d8fb1aa Allowed HTTPS to be a separately configurable feature. 2007-07-30 03:01:04 +01:00
Michael Brown
3b8b06ae90 Added missing #include 2007-07-30 03:00:15 +01:00
Michael Brown
6fc9ed167e TLS now working again. 2007-07-30 02:48:38 +01:00
Michael Brown
3b9bf40682 Preparation for adding tls.c 2007-07-29 17:16:00 +01:00
Michael Brown
a6467c99a0 Added a simple pass-through filter layer for data transfer interfaces. 2007-07-29 16:05:14 +01:00
Michael Brown
218314e712 Added HMAC code from TLS project 2007-07-29 03:09:00 +01:00
Michael Brown
43013da9bf Quick hack to get AoE back in to the tree, on a par with the current
iSCSI hack.
2007-07-29 02:31:14 +01:00
Michael Brown
a6a1052096 Applied a modified version of holger's regparm patches. 2007-07-29 00:17:25 +01:00
Michael Brown
e3484e26eb Merge branch 'symcheck2' 2007-07-28 22:55:31 +01:00
Michael Brown
0d568ac219 Make has_key() a static inline, rather than omitting it altogether. 2007-07-28 22:55:17 +01:00
Michael Brown
47a86bca2d Prepare for iBFT merge when possible. iscsiboot.c contains a really,
really ugly hack at present, but that doesn't hugely matter since I'm
aiming to change the interface to iSCSI devices anyway within the next
week.
2007-07-26 02:13:38 +01:00
Michael Brown
9aa61ad5a2 Add per-file error identifiers 2007-07-24 17:11:31 +01:00
Michael Brown
3f338b7b80 Include errno.h in the few drivers which use it, rather than in nic.h 2007-07-24 14:05:32 +01:00
Michael Brown
f44969f7df nameserver should be static 2007-07-17 01:21:20 +01:00
Michael Brown
7df3d4a177 Obsolete code removal 2007-07-17 01:19:35 +01:00
Michael Brown
60ce8e884d Added missing extern 2007-07-17 01:16:24 +01:00
Michael Brown
7e3a8f5e10 Remove more obsolete files 2007-07-14 23:16:01 +01:00
Michael Brown
25fd42ca87 Reduced etherboot.h dependencies to avoid unnecessary rebuilds.
etherboot.h is only now used by drivers that have not been updated to
the new API.
2007-07-14 15:52:23 +01:00
Michael Brown
e330db3c74 Dead code removal.
Kill off use of etherboot.h outside drivers/net.
2007-07-14 15:42:26 +01:00
Michael Brown
096fa94f0c Add support for TCP timestamps 2007-07-13 11:32:53 +01:00
Michael Brown
9dc6a1e678 Remove some obsolete stream-API files 2007-07-09 03:53:06 +01:00
Michael Brown
487dc5be56 Fix up iscsiboot missing prototype warnings 2007-07-09 01:10:32 +01:00
Michael Brown
cc80750694 Merge branch 'master' into iscsi-update 2007-07-08 22:06:33 +01:00
Michael Brown
7137c20ed1 Add strcspn() and strndup() 2007-07-08 22:03:12 +01:00
Michael Brown
ed20fee0cf Make ref_get() return the reference, for cleaner code. 2007-07-08 22:02:45 +01:00
Michael Brown
b94420a52b Ready to start testing 2007-07-08 22:01:49 +01:00
Michael Brown
edd1b173a7 Code in place to use a hypothetical SCSI interface. 2007-07-08 19:33:26 +01:00
Michael Brown
f2fa390ae6 Everything except the SCSI interface should now be present 2007-07-08 18:51:56 +01:00
Michael Brown
9b28b25332 iSCSI updated to use data-xfer interface on the socket side (TCP).
SCSI interface not yet implemented.
2007-07-08 16:04:13 +01:00
Michael Brown
edded7546e Limit xmit window to one MTU. (Path MTU discovery not yet
implemented; should be done at some point.)
2007-07-08 14:33:53 +01:00
Michael Brown
3e1dd0772a Fix typo that was preventing any DHCP option applicators from being
applied.
2007-07-08 14:32:20 +01:00
Michael Brown
b34d4d0449 Separate the "is data ready" function of xfer_seek() into an
xfer_window() function, which can return a scalar rather than a
boolean.
2007-07-08 14:11:07 +01:00
Michael Brown
ca4c6f9eee Kill off unused request() method in data-xfer interface. 2007-07-08 02:10:54 +01:00
Michael Brown
4c418d2100 Use net_device_operations structure and netdev_nullify() to allow for
safe dropping of the netdev ref by the driver while other refs still
exist.

Add netdev_irq() method.  Net device open()/close() methods should no
longer enable or disable IRQs.

Remove rx_quota; it wasn't used anywhere and added too much complexity
to implementing correct interrupt-masking behaviour in pxe_undi.c.
2007-07-07 16:43:39 +01:00
Michael Brown
934b70d62c Apply global DHCP options when register_dhcp_options() is called. Do
not apply DHCP options in dhcp_configure_netdev().
2007-07-06 17:07:50 +01:00
Michael Brown
b3ca73c303 Remap EBADF to PXENV_STATUS_TFTP_FILE_NOT_FOUND; the only user is
posix_io.c and this PXE error makes more sense in this context.
2007-07-05 18:47:46 +01:00
Michael Brown
1567b69895 Add concept of DHCP option applicators. 2007-07-05 18:38:14 +01:00
Michael Brown
539ff45fd0 Allow recording of TX and RX errors to aid in end-user debugging. 2007-07-05 17:18:27 +01:00
Michael Brown
bdd1a0f462 Make masking constants unsigned, to avoid a gcc3-only compiler warning. 2007-07-05 12:04:53 +01:00
Marty Connor
b219814627 Remove deprecation of pci_bar_size() 2007-07-04 18:28:37 -04:00
Michael Brown
89349d7fad Separated out initialisation functions from startup/shutdown functions. 2007-07-03 23:09:56 +01:00
Michael Brown
1f24ba73c4 Added missing "extern" 2007-07-03 21:12:54 +01:00
Michael Brown
cbd4542dc0 Merge branch 'master' of rom.etherboot.org:/pub/scm/gpxe 2007-07-03 21:09:26 +01:00
Marty Connor
6be8cdbb6f Merge branch 'master' of /pub/scm/gpxe 2007-07-03 16:02:26 -04:00
Marty Connor
9b3c4e4d79 Warnings purge: src/arch/i386, src/core/disk.c, ramdisk, autoboot 2007-07-03 16:02:15 -04:00
Michael Brown
fae10a7ca1 We don't actually use the reset functions anywhere, and nothing really
provides them.
2007-07-03 20:34:51 +01:00
Michael Brown
fd86c819ba Use a linker-table based system to automatically mark and start up
permanent processes, rather than requiring each one to have its own
initialisation function.
2007-07-03 20:09:14 +01:00
Marty Connor
4bcfe7507b Merge branch 'master' of /pub/scm/gpxe 2007-07-03 13:20:54 -04:00
Marty Connor
c77704cb60 Warnings purge: src/{crypto,hci,net} 2007-07-03 13:20:22 -04:00
Michael Brown
0924cf678e Implemented (untested) PXENV_START_UNDI. 2007-07-03 18:17:14 +01:00
Michael Brown
4968caab82 Add trivial net device statistics (TX and RX packet count), reported
via UNDI API and also by ifstat command; may be useful for debugging.
2007-07-03 00:15:53 +01:00
Marty Connor
0297a63877 Merge branch 'master' of ssh://rom.etherboot.org/pub/scm/gpxe 2007-07-02 15:36:19 -04:00
Marty Connor
ef7f6e72a1 Warnings purge 2007-07-02 15:28:55 -04:00
Michael Brown
332614a382 Add untested support for UNDI transmit and receive. 2007-07-02 20:05:58 +01:00
Michael Brown
5f17089b14 pxe_netdev now holds a reference to the network device.
Use generic fields in struct device_description rather than assuming
that the struct device * is contained within a pci_device or
isapnp_device; this assumption is broken when using the undionly
driver.

Add PXENV_UNDI_SET_STATION_ADDRESS.
2007-07-02 17:43:32 +01:00
Michael Brown
15f8323055 Removing obsolete files. 2007-07-01 15:30:12 +01:00
Michael Brown
95cb7aaacf Support cards such as natsemi which treat the data as little-endian
(i.e. LSB transmitted first on the wire), even though SPI commands and
addresses always have to be big-endian.
2007-07-01 15:22:12 +01:00
Michael Brown
8f6a4e8140 Add gdbsym.c object to help with running gdb-to-qemu 2007-06-30 22:43:31 +01:00
Michael Brown
4472e22b5e Implement the two UNDI API calls used by RIS. 2007-06-30 15:56:00 +01:00
Michael Brown
acd598b4f9 Don't build option-overloaded packets; they just confuse people (ISC
DHCPD and Windows RIS in particular).
2007-06-30 01:32:53 +01:00
Michael Brown
dffdc285b3 Obsoleted by downloader.c 2007-06-28 19:28:26 +01:00
Michael Brown
5de837cc67 Mildly ugly hack to force correct linkage. 2007-06-28 18:06:25 +01:00
Michael Brown
4b08f4cf0f Quick hack to get image booting working again 2007-06-28 17:55:29 +01:00
Michael Brown
1ec7bb789d Add dhcp_configure_netdev() 2007-06-28 15:18:26 +01:00
Michael Brown
6209d20779 Added monojob controller in lieu of a full working shell. 2007-06-28 14:53:12 +01:00
Michael Brown
73fe1ba9dd Kill off job::start() (it was only ever added as part of an aborted
attempt at triggering TCP-related protocols to start).
2007-06-28 01:09:45 +01:00
Michael Brown
07dc294de8 Update DHCP to use data-xfer interface (not yet tested). 2007-06-27 23:20:36 +01:00
Michael Brown
f77815f2b1 Kill off hotplug.h and just make net devices normal reference-counted
structures.

DHCP still broken and #if 0'd out.
2007-06-27 14:48:31 +01:00
Michael Brown
e381714c07 Partial migration of UDP to data-xfer interface. (Will not link at
present; DHCP is broken).
2007-06-20 01:13:35 +01:00
Michael Brown
564ac70a42 Add iob_ensure_headroom() placeholder. 2007-06-20 01:12:21 +01:00
Michael Brown
15dae1e042 Add concept of "current working URI". 2007-06-11 23:54:51 +01:00
Michael Brown
2d4c72b762 Remove unused headers. 2007-06-11 23:40:34 +01:00
Michael Brown
f87bc837f4 Updated DNS to use not-yet-implemented UDP data-xfer API. 2007-06-11 23:30:44 +01:00
Michael Brown
a74ecf3057 Merge branch 'master' into mcb-tcp-xfer 2007-06-11 21:36:22 +01:00
Michael Brown
058b200529 Renamed _calloc() to zalloc(), ready to be used as a standalone function. 2007-06-11 21:36:10 +01:00
Michael Brown
01b4bde8a0 Updated TFTP and PXE UDP API code to use not-yet-implemented data-xfer
UDP API.
2007-06-11 18:11:29 +01:00
Michael Brown
95adce0ce1 Add concept of transfer metadata, to be used by UDP in order to
implement sendto()/recvfrom() equivalents.
2007-06-11 15:04:39 +01:00
Michael Brown
11ec23f454 Merge branch 'master' into mcb-tcp-xfer 2007-06-09 22:58:27 +01:00
Michael Brown
0f8d7d705d Rename .cvsignore files to .gitignore 2007-06-09 22:57:00 +01:00
Michael Brown
2c569fb240 Allow xfer_open() to take a struct uri as well as a URI string. 2007-06-09 18:20:08 +01:00
Michael Brown
7c8cc3ef6c Use standard xfer_open() argument list for downloader instantiator 2007-06-09 17:42:46 +01:00
Michael Brown
6f0a6c09db Merge branch 'master' into mcb-tcp-xfer 2007-06-08 16:33:24 +01:00
Michael Brown
a6f0a098da Add facility for resolving base+relative URIs (and paths). 2007-06-03 02:01:02 +00:00
Michael Brown
182e3ed61d Added dirname() 2007-06-03 01:51:10 +00:00
Michael Brown
816c8f3b89 Added [v]asprintf() 2007-06-03 01:50:03 +00:00
Michael Brown
335b99a39d Move [v]ssnprintf() from iscsi.c into vsprintf.c; we need them
elsewhere as well.
2007-05-31 13:26:50 +00:00
Michael Brown
735e07268e Update HTTP to use data-xfer interface. 2007-05-29 15:37:09 +00:00
Michael Brown
0dfd5b84fd Updated FTP to use data-xfer API. 2007-05-28 20:11:02 +00:00
Michael Brown
a6a18ae9af Add xfer_[v]printf() functions. 2007-05-28 20:09:44 +00:00
Michael Brown
656485c1f1 Make URI structures reference-counted. 2007-05-28 17:35:15 +00:00
Michael Brown
63719deea9 Introduce name resolution interface and named socket opener. 2007-05-27 01:07:00 +00:00
Michael Brown
a1210e4fca Eliminate PF_INET; just use the AF_INET from the struct sockaddr instead. 2007-05-26 20:41:23 +00:00
Michael Brown
10d0a1f8c7 Modify data-xfer semantics: it is no longer necessary to call one of
request(), seek() or deliver_xxx() in order to start the data flow.
Autonomous generators must be genuinely autonomous (having their own
process), or otherwise arrange to be called.  TCP does this by
starting the retry timer immediately.

Add some debugging statements.
2007-05-26 15:04:36 +00:00
Michael Brown
3601103381 Modify process semantics; rescheduling is now automatic.
Add reference-counting to processes.

Add timer_running() test.
2007-05-26 15:00:56 +00:00
Michael Brown
1136c19fa4 Updated tcp.c to provide a standardised data transfer interface. 2007-05-25 15:58:42 +00:00
Michael Brown
5e25a89e74 Add local address to socket openers. 2007-05-19 20:14:18 +00:00
Michael Brown
3e2c6b6736 pkbuff->iobuf changeover
Achieved via Perl using:

perl -pi -e 's/pk_buff/io_buffer/g; s/Packet buffer/I\/O buffer/ig; ' \
	-e 's/pkbuff\.h/iobuf.h/g; s/pkb_/iob_/g; s/_pkb/_iob/g; ' \
	-e 's/pkb/iobuf/g; s/PKB/IOB/g;'
2007-05-19 18:39:40 +00:00
Michael Brown
68dd826b86 Add alloc_iob() and free_iob(). (Direct search-and-replace
equivalents for alloc_pkb() and free_pkb(), which will be retired in
due course).
2007-05-18 14:45:16 +00:00
Michael Brown
86a948ccbe Added POSIX-style blocking I/O calls, for use by PXE TFTP API. 2007-05-18 14:19:22 +00:00
Michael Brown
6b6fc1d5ea Allow construction of PXE status code from internal error number. 2007-05-18 14:17:35 +00:00
Michael Brown
59e738d756 Prefix all the open()-family routines with xfer_, to disambiguate them
from the normal POSIX-style open()
2007-05-18 14:16:06 +00:00
Michael Brown
b1755462ab Do not hold self-references. This then avoids the problem of having to
ensure that we only drop our self-reference exactly once.

To maintain the guarantee that an object won't go out of scope
unexpectedly while one of its event handlers is being called, the
event-calling functions now automatically obtain and drop extra
references.
2007-05-15 16:53:46 +00:00
Michael Brown
5471bfbbbe Data-transfer interface should now be functionally complete. 2007-05-15 15:23:09 +00:00
Michael Brown
817a446cc6 Add always_inline attribute to force gcc to inline single-instruction
functions.
2007-05-01 10:17:29 +00:00
Michael Brown
123a98db26 Added (non-functional) reference count to struct image 2007-05-01 00:11:34 +00:00
Michael Brown
53da1f1402 Initial sketch for a downloader object 2007-05-01 00:09:19 +00:00
Michael Brown
e3dcb9a1ad Add start() event
Add "xfer" to all xfer functions and "job" to all job functions.
2007-05-01 00:07:57 +00:00
Michael Brown
a90a9adbd7 Clarify behaviour of plug() by using intf_put() and intf_get(). 2007-05-01 00:06:21 +00:00
Michael Brown
7ff81f6654 Document the fact that a zeroed-out refcounted object will behave in
the most generally useful way.
2007-05-01 00:04:21 +00:00
Michael Brown
0898b0b3b1 Added plug_plug() 2007-04-30 01:23:01 +00:00
Michael Brown
d40761d725 Add (and use) generic reference counter, to improve signal:noise ratio
in code defining reference-counted objects.
2007-04-29 23:53:39 +00:00
Michael Brown
36bfb6edbb Skeleton job control interface 2007-04-29 02:08:39 +00:00
Michael Brown
280160139d Add seek()
Dehyphenate "data-transfer".
2007-04-29 02:03:58 +00:00
Michael Brown
ff1222a8d3 Preliminary support for opening data-transfer interfaces 2007-04-28 20:56:24 +00:00
Michael Brown
27b3bd10c9 Added PF_INET[6] and SOCK_{STREAM,DGRAM} definitions and debug
functions.
2007-04-28 20:53:48 +00:00
Michael Brown
1c765b3988 Added deliver-as-iobuf/deliver-as-raw concepts. 2007-04-27 00:02:23 +00:00
Michael Brown
2575ddc889 Initial sketch for the generic data-transfer interface. 2007-04-26 22:44:52 +00:00
Michael Brown
95206577a7 Trivial ASN.1 decoding functions. 2007-04-21 18:53:26 +00:00
Anselm Martin Hoffmeister
ed7dc02a95 hoffmeis: Preparations for syslog support (LOGSERVER in DHCP, linewise
output buffering defintions and the like)
2007-04-09 18:01:43 +00:00
Michael Brown
520d9c36af Updated ISAPnP, EISA, MCA and ISA buses to current device model.
ISA 3c509 is currently non-functional, although the EISA (3c509-eisa) and
MCA (3c529) variants should build OK.

None of this code is yet tested.
2007-03-10 18:08:33 +00:00
Michael Brown
0050378f51 SHA1_DIGEST_SIZE also available as a static constant 2007-02-01 06:36:45 +00:00
Michael Brown
cc8f9e4b7f Make context sizes available for statically-allocated structures 2007-02-01 05:48:56 +00:00
Michael Brown
f5776dbef1 Fix prototypes 2007-02-01 02:18:56 +00:00
Michael Brown
a1f021db96 Placeholder 2007-02-01 02:17:33 +00:00
Michael Brown
1ae70e12e5 Added wrapper for AXTLS AES code 2007-01-31 18:09:20 +00:00
Michael Brown
0d07657296 Added setiv method 2007-01-31 17:58:36 +00:00
Michael Brown
c1aa1d0764 Add wrapper around axtls' sha1 code 2007-01-31 12:24:01 +00:00
Michael Brown
a3695b1ff6 Placeholder for TLS insertion 2007-01-31 03:47:42 +00:00
Michael Brown
1f5f900595 Add HTTPS port 2007-01-31 03:44:38 +00:00
Michael Brown
21f3789ec8 Swap downstream/upstream order so that debug messages for filters show
up in the same colour as debug messages for the application stream.
2007-01-31 03:43:40 +00:00
Michael Brown
e38e516463 Add insert_filter() function 2007-01-31 03:04:56 +00:00
Michael Brown
a008f9e85b Add null crypto algorithm 2007-01-31 03:04:31 +00:00
Michael Brown
6d32f0e6e2 Changed to use the generic stream API. 2007-01-31 02:09:13 +00:00
Michael Brown
811db204a6 Added cipher wrapper functions 2007-01-30 22:54:20 +00:00
Michael Brown
b3e4418ea8 Missing check-in 2007-01-30 22:53:59 +00:00
Michael Brown
db2fde474e Generalise digest_algorithm to crypto_algorithm. 2007-01-30 14:55:17 +00:00
Michael Brown
2f7eac1646 Low-overhead filter streams 2007-01-30 12:17:03 +00:00
Michael Brown
ddf3b56d47 Definition of a (hopefully) generic stream API 2007-01-30 12:16:36 +00:00
Michael Brown
395c76e94d Use "dbg_stream" rather than "stream" as a variable name in
DBG_AC_IF(), to avoid namespace collisions.
2007-01-30 10:12:19 +00:00
Michael Brown
1a79437888 Added async_block_progress() and default SIGUPDATE handler. 2007-01-29 04:15:24 +00:00
Michael Brown
c42a384709 Moved most buffer debug messages to DBG2.
Make expand_buffer() a non-inline function, so that we can add debug
messages.

Expandable buffers now don't *always* round up to the next power of two.
This allows e.g. loading a 137MB ISO image on a machine with only 256MB
RAM...
2007-01-29 04:12:29 +00:00
Michael Brown
afe4e011ac Move tolower() etc to ctype.h as per ISO C 2007-01-26 03:25:19 +00:00
Michael Brown
bf9ec8102f Add 64-bit rotates 2007-01-26 02:53:30 +00:00
Michael Brown
da9dc834b1 Help quick testing of building Linux code inside gPXE 2007-01-24 23:38:05 +00:00
Michael Brown
9cf5c4557d Add Linux-compatible rol32/ror32 functions. Amazingly, gcc will
optimise these down to the correct single "roll"/"rorl" instruction.
2007-01-24 23:31:58 +00:00
Michael Brown
18f9f939a8 Introduce structured error codes. 2007-01-19 13:15:26 +00:00
Michael Brown
c2352dc8de Add POSIX prototypes for time functions, to allow external code to build
more easily within gPXE.

Note that we don't have function bodies for these functions yet.
2007-01-19 03:09:22 +00:00
Michael Brown
4256b3338a Split random number generation out into core/random.c, and create the
correct prototypes for srandom(), rand() and srand().
2007-01-19 02:02:59 +00:00
Michael Brown
f4c1e564a1 vsprintf.h is gPXE-specific; move it to include/gpxe 2007-01-19 01:17:23 +00:00
Michael Brown
73b09ecba6 Use stdio.h instead of vsprintf.h 2007-01-19 01:13:12 +00:00
Michael Brown
06475f7b69 Finally move the prototypes for printf() and friends to stdio.h 2007-01-19 00:58:49 +00:00
Michael Brown
1a0ca661c2 4.3BSD says that bcopy and bzero are defined in strings.h, not string.h 2007-01-19 00:51:13 +00:00
Michael Brown
b02a564297 Add missing prerequisite include 2007-01-19 00:39:12 +00:00
Michael Brown
4e3976711d A working name resolution framework 2007-01-18 22:38:13 +00:00
Michael Brown
075f8144ff Have DHCP set the nameserver, rather than DNS read the DHCP nameserver
value.
2007-01-18 21:22:03 +00:00
Michael Brown
c014f607a8 Use total free memory as advertised window. This seems to be sufficient
to avoid drops even on slow NICs.
2007-01-18 20:39:17 +00:00
Michael Brown
6d4e37cf42 Move include/malloc.h to include/gpxe/malloc.h, since everything in there
is now gPXE-specific.  (The standard malloc() et al have been in stdlib.h
for a while).

Add free memory counter.
2007-01-18 20:11:04 +00:00
Michael Brown
d12770e254 console.h is no longer needed for debugging 2007-01-18 19:13:25 +00:00
Michael Brown
f781a98ac4 Add DBGLVL_PROFILE 2007-01-18 17:59:59 +00:00
Michael Brown
5b00fbade3 Increase window size to 64kB. Line rate downloads on a 100Mbps link,
anyone?
2007-01-18 16:39:55 +00:00
Michael Brown
c8b3e969a0 Allow buffers to be pre-expanded on demand. 2007-01-18 15:13:41 +00:00
Michael Brown
35776f481c Don't always zero memory in malloc(). This saves around 2us on a
full-length PKB allocation.
2007-01-18 12:54:18 +00:00
Michael Brown
dd6d94004f HTTP/DNS now working fully asynchronously. HTTP/IP addresses and any
other protocol won't work at the moment.
2007-01-18 03:39:45 +00:00
Michael Brown
0b11733b75 Replacement for fetch() which operates asynchronously and identifies
protocols by URI scheme.
2007-01-18 03:37:05 +00:00
Michael Brown
99e58865c7 Use struct sockaddr rather than struct sockaddr_tcpip
Tidy up code
2007-01-18 03:35:00 +00:00
Michael Brown
6601a7da6a Added async_uninit() to simplify failure paths. 2007-01-18 03:29:40 +00:00
Michael Brown
5a807994d8 Add utility function to parse port from URI 2007-01-18 03:28:55 +00:00
Michael Brown
8ffbbebf11 Ensure that struct sockaddr is long enough... 2007-01-18 03:28:29 +00:00
Michael Brown
9828181e3b Obsolete 2007-01-18 01:05:09 +00:00
Michael Brown
544fa25928 Rename e{malloc,realloc,free} to u{malloc,realloc,free}, to more obviously
reflect the fact that they allocate and deallocate user memory (i.e.
things reached through a userptr_t).
2007-01-16 08:36:42 +00:00
Michael Brown
ff8528ea9a Create and use async_block() macro; it cuts down on the visual overhead
of blocking on asynchronous operations, when that isn't an important
aspect of the code.
2007-01-16 08:10:54 +00:00
Michael Brown
9af12d5fba A working DNS resolver (not yet tied in to anything) 2007-01-15 17:31:35 +00:00
Michael Brown
df0397f334 Update TFTP and FTP to take the same temporary URI scheme as HTTP 2007-01-15 09:58:26 +00:00
Michael Brown
c676591cd1 Unmaintained example code is probably worse than useless. 2007-01-15 09:06:12 +00:00
Michael Brown
4e20d73bb5 Gave asynchronous operations approximate POSIX signal semantics. This
will enable us to cascade async operations, which is necessary in order to
properly support DNS.  (For example, an HTTP request may have to redirect
to a new location and will have to perform a new DNS lookup, so we can't
just rely on doing the name lookup at the time of parsing the initial
URL).

Anything other than HTTP is probably broken right now; I'll fix the others
up asap.
2007-01-15 08:49:10 +00:00
Michael Brown
26166cf5e0 Added a URI parser that should be standards conformant. (It can certainly
handle something as convoluted as

  ftp://joe:secret@insecure.org:8081/hidden/path/to?what=is#this
2007-01-14 23:48:31 +00:00
Michael Brown
99272f958b Typo 2007-01-14 15:13:33 +00:00
Michael Brown
10c9b03cdb Actually, the initrd image should be architecture-independent. 2007-01-14 15:07:11 +00:00
Michael Brown
784e10635a Can almost start a kernel now. It dies with "No setup signature found" 2007-01-14 06:36:20 +00:00
Michael Brown
797edf28b7 Replace image->entry with image->priv. 2007-01-14 04:04:28 +00:00
Michael Brown
dca369ddc3 Call hide_etherboot() from startup(), rather than requiring the prefix to
do it.
2007-01-14 00:53:56 +00:00
Michael Brown
c2708df14a Make shutdown functions callable by OS image's exec methods. 2007-01-14 00:16:41 +00:00
Michael Brown
aaed3d50a8 Some operating systems get a nasty shock if a region of the E820 map seems
to start on a non-page boundary.  Make life safer by rounding out our
edited regions.
2007-01-13 23:38:33 +00:00
Michael Brown
526d314266 Advertise a larger MSS to improve TCP performance. 2007-01-13 17:36:17 +00:00
Michael Brown
3b77c7aa1b Hex dumps are now integrated into the DBG() framework. 2007-01-13 16:49:38 +00:00
Michael Brown
497c3a5aad Fixed HTTP 2007-01-12 19:18:13 +00:00
Michael Brown
369754f959 Whitespace fix 2007-01-12 19:17:25 +00:00
Michael Brown
83b7933f8a Damn it; my lovely resilient scheme falls down when you have a protocol
that switches from line-oriented to byte-oriented partway through, such as
HTTP.
2007-01-12 18:09:14 +00:00
Michael Brown
ad22cccc09 No need to maintain a received byte count; we always fill in sequential
order so we can just use buffer->fill.
2007-01-12 17:16:46 +00:00
Michael Brown
996b091b50 Added generic line-buffering code (a la stdio) 2007-01-12 17:08:37 +00:00
Michael Brown
b45a9bfa2d Added missing declaration. 2007-01-12 10:07:56 +00:00
Michael Brown
e2c0055e23 Let ifmgmt.c take care of calling efree(), since it's the once which
took out the contract to eventually call efree() when it called fetch().

Maintain the most recently loaded image at the start of the list, so that
imgautoselect() will pick it.
2007-01-12 09:46:10 +00:00
Michael Brown
39ede8c7e8 Added dhcp() user-level command. 2007-01-12 09:20:11 +00:00
Michael Brown
2be2f3b205 Rearrange struct image to reflect usage of the fields 2007-01-12 08:58:16 +00:00
Michael Brown
48e0fc3447 API change: the raw image will no longer be (hypothetically) discarded
after a call to load().
2007-01-12 08:15:25 +00:00
Michael Brown
6fdc6c81a6 Force probing of multiboot before ELF. 2007-01-12 08:10:35 +00:00
Michael Brown
475d6d1f7c fetch() now knows nothing about struct image; it simply loads a file and
returns the allocated buffer.
2007-01-12 08:02:27 +00:00
Michael Brown
2876197306 Allow "imgexec" with no arguments to boot the file that was loaded with
"kernel".
2007-01-12 07:32:46 +00:00
Michael Brown
f135a37f30 Cleaner separation between imgXXX() functions and image_cmd.c 2007-01-12 07:22:20 +00:00
Michael Brown
742f242863 Add free_image 2007-01-12 06:26:59 +00:00
Michael Brown
9817f93094 Add basic "fetch" and "imgstat" commands. 2007-01-12 06:05:27 +00:00
Michael Brown
b9fea9cbac Added IMAGE_LOADED flag and find_image() 2007-01-12 06:03:02 +00:00
Michael Brown
e96041872e Added missing declaration. 2007-01-12 05:27:02 +00:00
Michael Brown
9debfed07a Place command-line inline, to save on memory allocation hassles. 2007-01-12 05:26:19 +00:00
Michael Brown
f15482d85f Added basename() to make automatically naming images easier. 2007-01-12 05:24:51 +00:00
Michael Brown
29dadc5ec6 Build automatically expanding buffers from struct buffer and erealloc(). 2007-01-12 03:51:04 +00:00
Michael Brown
45ec9c907e First version of an external memory allocator (not tested) 2007-01-12 03:15:29 +00:00
Michael Brown
859da6bd32 Allow external code to update hidden memory regions. 2007-01-12 03:13:04 +00:00
Michael Brown
2c66588f3e Add UNULL 2007-01-12 01:40:12 +00:00
Michael Brown
f59ad50504 Provide registration mechanism for loaded images, so that we can e.g.
refer to them by name from the command line, or build them into a
multiboot module list.

Use setting image->type to disambiguate between "not my image" and "bad
image"; this avoids relying on specific values of the error code.
2007-01-11 23:43:29 +00:00
Michael Brown
79a399c05a alloca() can be useful in some (limited) circumstances. 2007-01-11 23:19:31 +00:00
Michael Brown
c468c68661 Add command line that can be passed to executed images. 2007-01-11 21:19:29 +00:00
Michael Brown
819cd3f41c Limit -ENOEXEC to mean "this is not in my format". 2007-01-11 17:06:25 +00:00
Michael Brown
6a03552381 Distinguish between ENOMEM (as representing a lack of internal memory
as allocated by malloc()) versus all other errors, in particular
ENOBUFS (representing a lack of external buffer space, e.g. in a
device's TX queue or a user buffer).
2007-01-11 16:30:21 +00:00
Michael Brown
c810baad37 Use generic "struct image" rather than "struct elf". 2007-01-11 16:10:32 +00:00
Michael Brown
c6c63d954d Rename "image" field to "data", because "image->image" is just confusing. 2007-01-11 16:07:30 +00:00
Michael Brown
4fc9333159 Move include/image.h to include/gpxe/image.h 2007-01-11 16:04:36 +00:00
Michael Brown
230f16538f Create include/gpxe/elf.h for the ELF bits that aren't part of the ELF
standard and so don't belong in include/elf.h
2007-01-11 15:25:07 +00:00
Michael Brown
0010e10ef3 Update TFTP to use a struct buffer rather than a callback.
Add debug autocolourisation to TFTP.
2007-01-11 15:14:54 +00:00
Michael Brown
7ad1c2eaa8 Removed the Etherboot-specific ELF-image code and replaced it with a
generic ELF loader, to be used by the multiboot code.
2007-01-11 14:44:03 +00:00
Michael Brown
3634e705b7 Remove osloader.c and replace with a prep_segment() that uses userptr_t
and get_memmap() in image/segment.c
2007-01-11 14:32:26 +00:00
Michael Brown
c980cdd0aa Move memmap.h out of arch/i386; it no longer contains anything
architecture-dependent and is needed by the ELF code.
2007-01-11 14:08:44 +00:00
Michael Brown
fbfed96965 buffer.c should be using copy_{to,from}_user, rather than
copy_{to,from}_phys.
2007-01-11 05:42:06 +00:00
Michael Brown
a3ed0cbbc7 Extract packet-padding login from rtl8139.c to a separate pkbpad.c file. 2007-01-11 05:25:50 +00:00
Michael Brown
6918cf9e9e Change FTP to use a data buffer rather than a callback function. 2007-01-11 04:51:20 +00:00
Michael Brown
e2dcd05b67 Update buffer-handling code to enable expandable buffers. 2007-01-11 03:50:47 +00:00
Michael Brown
bb2024c6d6 Move include/buffer.h to include/gpxe/buffer.h 2007-01-11 01:47:26 +00:00
Michael Brown
d9ba8f790b Add route() function to display routing table. 2007-01-10 20:38:20 +00:00
Michael Brown
1fa5cd0e2b Add find_pci_netdev() 2007-01-10 16:16:05 +00:00
Michael Brown
fdc97499bf Add device description fields to struct device. 2007-01-10 15:27:48 +00:00
Michael Brown
dad5274522 Add "name" field to struct device to allow human-readable hardware device
names.

Add "dev" pointer in struct net_device to tie network interfaces back to a
hardware device.

Force natural alignment of data types in __table() macros.  This seems to
prevent gcc from taking the unilateral decision to occasionally increase
their alignment (which screws up the table packing).
2007-01-10 04:22:09 +00:00
Michael Brown
c821a7b20d Add udp_sendto_via() to allow e.g. DHCP to transmit without first having
to set up dummy routing entries.
2007-01-10 02:31:38 +00:00
Michael Brown
f008b77ba2 Allow an explicit network device to be specified for IP-layer
transmissions.
2007-01-10 02:25:11 +00:00
Michael Brown
55e590ab3a Move header file for usr/autoboot.c to include/usr 2007-01-10 02:03:20 +00:00
Michael Brown
d24b80acf2 Added network interface management commands 2007-01-10 01:55:07 +00:00
Michael Brown
98b6154c3e Add "name" field to network device, to facilitate netdev commands. 2007-01-09 23:48:18 +00:00
Michael Brown
c65fae2475 Add RX quotas to the net device poll() method. This avoids the problem
of alloc_pkb() exhaustion when e.g. an iSCSI-booted DOS session is left
idle for a long time at the C:\ prompt and builds up a huge packet
backlog.
2007-01-09 21:47:01 +00:00
Michael Brown
18e5353bed Rename pkb_available() to pkb_tailroom() for consistency with Linux's
skb_tailroom().  Add pkb_headroom().
2007-01-09 20:56:31 +00:00
Michael Brown
b7fcfe8ece Added net device TX queue; this will be needed to support the PXE UNDI API
(which will need us to wait for TX completions).

Added debug autocolourisation to netdevice.c
2007-01-09 20:18:31 +00:00
Michael Brown
76525294ee Clean up connection closing and permanent failure logic. 2007-01-09 04:31:33 +00:00
Michael Brown
79c5f0ba04 Added PCI_BASE_CLASS() macro 2007-01-08 03:32:41 +00:00
Michael Brown
5af4918356 Added support for wildcard device/vendor ID matches 2007-01-08 03:23:38 +00:00
Michael Brown
20c9fc407e Remove types and prototypes now provided in the undi*.h headers. 2007-01-08 03:05:34 +00:00
Michael Brown
9780fef360 Partial implementation of UNDI loader caller. 2007-01-05 03:24:39 +00:00
Michael Brown
0638945c7e Add PXE driver-scanning code, capable of locating all PXE ROMs in a system
and matching them up to (e.g. PCI) devices.
2007-01-05 01:52:06 +00:00
Michael Brown
7e07dfb2f4 Added PXE bus driver (with support only for using PXE structures found
lying about in memory, not for loading from ROM), and UNDI net driver.
2007-01-04 19:38:34 +00:00
Michael Brown
350603cb86 Don't include __FUNCTION__ in assert() messages; it was causing the
function name to appear within the objects even in non-asserting
builds.  (This could be considered a gcc bug.)

Removing __FUNCTION__ from assert() reduces the size of bin/blib.a by
around 2.5%!
2007-01-04 13:48:13 +00:00
Michael Brown
0c03bb5a9a Make open() and close() an official part of the netdevice API.
Call netdevice's poll() and transmit() methods only when device is open.
2007-01-04 04:20:08 +00:00
Michael Brown
7fafa89258 A DHCP session holds a persistent reference to a network device 2007-01-04 03:42:28 +00:00
Michael Brown
ac53da1790 Added missing #include 2007-01-04 03:40:07 +00:00
Michael Brown
b29861a5aa IPv6 minirouting table entries hold persistent references to net devices. 2007-01-04 03:28:30 +00:00
Michael Brown
b22d4405c0 An AoE session holds a persistent reference to a net device. 2007-01-04 03:21:45 +00:00
Michael Brown
bdf79ec8dc Use hotplug support to notify persistent reference holders when a
net_device is unregistered.
2007-01-04 03:09:28 +00:00
Michael Brown
0063725d28 Minimal hotplug support: provide a facility for notifying persistent
reference holders that their reference is about to become invalid.
2007-01-04 03:08:16 +00:00
Michael Brown
a0525a4ed3 Verify checksums on the RX datapath.
Simplify checksum generation on the TX datapath.
2007-01-03 20:48:52 +00:00
Michael Brown
b91b9d3d88 Use whole bytes for the ACKED and RCVD portions of tcp_state; it
produces slightly smaller code.
2006-12-30 01:32:22 +00:00
Michael Brown
2494625702 Added auto-colourising DBGC() macro 2006-12-29 03:05:21 +00:00
Michael Brown
ce9819af27 Redefine TCP state to include "flags that have been sent" rather than
"flags that are currently being sent".  This allows at least one special
case (checking that we haven't already sent a FIN in tcp_rx_fin()) to be
collapsed.
2006-12-29 00:44:31 +00:00
Michael Brown
61ed298bc7 Merge changes from mcb-tcp-fixes branch. 2006-12-27 23:09:46 +00:00
Michael Brown
a2e3357825 Cannot immediately overwrite the peer address when we parse
TargetAddress from the login response, because we still need the old
address while we close the connection!
2006-12-22 12:24:12 +00:00
Michael Brown
73e3e02367 Fix prototype of random() and move to stdlib.h 2006-12-22 01:44:51 +00:00
Michael Brown
66a7ed23cb Make start_timer() and stop_timer() robust against incorrect usage. 2006-12-22 01:35:21 +00:00
Michael Brown
9485478acc ibft_fill_data() prototype change. 2006-12-21 18:42:51 +00:00
Michael Brown
ab242a760d Add ability to shut down iSCSI connection 2006-12-21 17:17:47 +00:00
Michael Brown
cacd6b1d04 KEY_XXX constants are now defined in gpxe/keys.h. Kept separate from
curses.h so that you don't have to suffer the curses namespace pollution
just to get the symbolic key names.
2006-12-20 22:24:45 +00:00
Michael Brown
46c3eeba2a Fix definition of KEY_END 2006-12-20 22:17:44 +00:00
Michael Brown
2ae27f44d9 Add insert/delete and document keys, and documentation. 2006-12-20 22:11:28 +00:00
Michael Brown
791c7d3bf4 Added code to interpret ANSI keypress sequences into KEY_XXX constants. 2006-12-20 21:56:50 +00:00
Michael Brown
96a1a2c6f0 Key definitions 2006-12-20 21:53:07 +00:00
Michael Brown
b9f8599537 Define KEY_MIN and use it in kb.c. 2006-12-20 21:10:32 +00:00
Michael Brown
cbeec25662 settings_ui() now returns a status code. 2006-12-20 11:42:48 +00:00
Michael Brown
84202d89f0 Split the (quick hack) boot logic out from main.c to autoboot.c, add a
"boot" command to attempt booting from within the command shell, fall back
to shell if boot fails for any reason.
2006-12-20 07:04:08 +00:00
Michael Brown
f8910410fe Add attr_{get,set,on,off} as static inlines. 2006-12-20 06:06:38 +00:00
Michael Brown
8f9336e0c1 Add "config" command to access config UI 2006-12-20 05:37:33 +00:00
Michael Brown
b93ff48173 Added descriptive text for settings and setting types, and display it in
the option config UI.
2006-12-20 04:58:26 +00:00
Michael Brown
35edecac34 Move {show,set,clear}_setting() to {show,set,clear}_named_setting().
Introduce new {show,set,clear}_setting() that take a struct setting *
rather than a const char *.

set_setting() handles calling clear_setting() when appropriate, so that
individual setting types don't have to check for empty strings.
2006-12-20 04:20:13 +00:00
Michael Brown
4b33c03942 Increase colour pair limit 2006-12-20 03:42:35 +00:00
Michael Brown
84a2b886e1 Split error-message table portions of errno.h out to gpxe/errortab.h 2006-12-20 03:40:48 +00:00
Michael Brown
e5f0898f38 Move strerror() prototype to string.h, where it belongs 2006-12-20 03:35:49 +00:00
Michael Brown
04da3556f9 Differentiate between ENOSPC and ENOMEM 2006-12-20 03:34:27 +00:00
Michael Brown
637a891264 Fix prototype of sleep() and move it to unistd.h 2006-12-20 03:14:59 +00:00
Michael Brown
3e0f7621eb Don't automatically redraw the edit box; this allows better inheritance. 2006-12-20 02:09:41 +00:00
Michael Brown
35dcbfe771 Editable text box widget based on mucurses and edit_string. 2006-12-20 01:40:57 +00:00
Michael Brown
4919646fb9 Separated out (and tidied up) shell banner code 2006-12-20 00:24:13 +00:00
Michael Brown
a2c5744daf Minimal shell implementation using readline() and system(). 2006-12-19 23:55:05 +00:00
Michael Brown
66007fa448 Provide an edit history to allow caller to efficiently update display. 2006-12-19 23:24:16 +00:00
Michael Brown
b3c535e550 Skeletal (non-echoing) version of readline() 2006-12-19 22:35:10 +00:00
Michael Brown
1bc3514bd8 Start of generic editable string support 2006-12-19 19:28:12 +00:00
Michael Brown
70d20c4e7a Use common symbols to avoid dragging in getopt.o unless a getopt-using
command is linked in.
2006-12-19 16:27:15 +00:00
Michael Brown
e85bf52446 Avoid cursor move on every single character 2006-12-19 00:51:32 +00:00
Michael Brown
edbdce6e3d Now basically functioning on ANSI-supporting consoles. 2006-12-19 00:27:25 +00:00
Michael Brown
688eb60df4 Use int rather than short for bool; it will give more efficient code. 2006-12-18 16:48:09 +00:00
Michael Brown
2ed2b2efe8 Use iskey() and getchar() to interact with console, rather than object
abstraction.
2006-12-18 16:46:25 +00:00
Michael Brown
8b3a4c9862 Add basic ANSI escape sequence support to BIOS console 2006-12-18 01:19:38 +00:00
Michael Brown
1cd45decc4 Added support for interpreting ANSI escape sequences on behalf of
non-ANSI-capable consoles.
2006-12-18 00:01:30 +00:00
Michael Brown
a39b111684 Automatically select between the "10" and "16" variants of command set,
based on the device size.
2006-12-12 18:54:35 +00:00
Michael Brown
007ca97f25 Added clear_setting() 2006-12-12 15:49:46 +00:00
Michael Brown
72b1629cee Add placeholder ibft.h 2006-12-08 16:16:21 +00:00
Michael Brown
c343a3a8ee Including the final (char *)NULL is the responsibility of the caller
of execl().
2006-12-08 09:15:12 +00:00
Michael Brown
7de5d32ff5 cmdlinelib.c now calls system() rather than doing its own tokenisation
(which was extremely heavy on calls to malloc()).

Moved include/command.h to include/gpxe/command.h, since it's
gPXE-specific.
2006-12-08 01:26:11 +00:00
Michael Brown
f3d817d512 Added execv() and system(). 2006-12-08 01:23:11 +00:00
Michael Brown
e106a39ce8 Added missing include of stdint.h 2006-12-08 01:21:13 +00:00
Michael Brown
496563071d Added strdup() 2006-12-08 00:34:47 +00:00
Michael Brown
1e4a838f55 Added missing prototype 2006-12-08 00:21:08 +00:00
Michael Brown
be0cd1cddd Added a functional version of getopt() and getopt_long(), ready for use
in our commands.
2006-12-07 03:54:57 +00:00
Michael Brown
d2bf7abe75 Added write support for three-wire devices (e.g. the RTL8139 EEPROM) 2006-12-06 19:51:58 +00:00
Michael Brown
89bcb57201 Update ftp.c to work with Nikhil's TCP stack.
Remove the now-totally-obsolete sockaddr_in field from tcp.h.
2006-12-05 19:07:47 +00:00
Michael Brown
6a91a03409 Added options listed in
http://www.microsoft.com/whdc/winlogo/hwrequirements.mspx as required
for iSCSI boot.  Note that options 204-206 are listed in the document
but don't seem to be defined anywhere on the web.
2006-12-05 15:40:28 +00:00
Michael Brown
d041d74054 Tied NVO commands into the human-interactable settings code that I
completely forgot I'd written ages ago.
2006-12-05 02:40:03 +00:00
Michael Brown
6842dd3222 Handle TargetAddress 2006-12-05 01:41:32 +00:00
Michael Brown
67577556a2 Handle strings as complete units, instead of a byte at a time. 2006-12-05 01:08:56 +00:00
Michael Brown
3a7d762c1c Add iscsi_rx_buffered_data() and supporting infrastructure. 2006-12-05 00:39:05 +00:00
Michael Brown
d9f32726b4 Added quick and dirty commands for testing the new NVO code. 2006-12-04 23:40:35 +00:00
Michael Brown
ab4e1dba3f Added nvo_save() 2006-12-04 22:04:10 +00:00
Michael Brown
cc9bcb99a0 Add the concept of a fragment list for non-volatile stored options. 2006-12-04 21:46:13 +00:00
Michael Brown
d62c83a350 Migrated etherfabric driver to using generic SPI layer. 2006-12-04 20:47:51 +00:00
Michael Brown
2d8d21fe74 Added the generic block-splitting code to nvs.c 2006-12-04 19:06:07 +00:00
Michael Brown
1961ba44e1 Added generic SPI protocol handler with read and write support. 2006-12-04 18:32:55 +00:00
Michael Brown
946967f09c Abstracted out part of the concept of an SPI device to a generalised NVS
device.

Separated the mechanisms of non-volatile storage access and non-volatile
stored options.
2006-12-04 18:23:06 +00:00
Michael Brown
dc06c895fc Changed length parameter in SPI methods to be a byte length, rather than
a word length.
2006-12-04 16:09:59 +00:00
Michael Brown
931f94dca3 Generalised the SPI abstraction layer to also be able to handle interfaces
that don't provide the full flexibility of a bit-bashing interface.

Temporarily hacked rtl8139.c to use the new interface.
2006-12-04 15:36:51 +00:00
Michael Brown
2e41bfd268 Force syntax-checking on assertions even in non-asserting builds. 2006-12-04 15:09:57 +00:00
Michael Brown
3e0286dee3 Move ANSI C standard prototypes to stdlib.h; leave the gPXE-specific
function prototypes (e.g. malloc_dma()) in malloc.h.
2006-12-02 20:10:21 +00:00
Michael Brown
4cd56820ea Basic non-volatile storage support 2006-11-29 02:41:08 +00:00
Michael Brown
74c41fac06 Create "username" and "password" DHCP options, ready for placing this
information in NVS.
2006-11-28 02:14:20 +00:00
Michael Brown
3f0b4d9ed8 Updated to use asynchronous operation model for iSCSI requests
Added CHAP authentication
2006-11-28 00:29:02 +00:00
Michael Brown
82342e0b8f Marked memcmp/strcmp as "pure" functions, to allow gcc to optimise
away code such as

  if ( strcmp ( some_string, "some_value" ) != 0 ) {
     DBG ( "Bad value received!" );
  }
2006-11-27 23:50:24 +00:00
Michael Brown
c4677c7e73 Implemented realloc(), and changed the semantics of malloc(0) to allow
for realloc(0) being a valid way to free memory.
2006-11-24 16:51:18 +00:00
Michael Brown
fdaddd969a Added "name" field to digest algorithms 2006-11-21 16:14:50 +00:00
Michael Brown
c5428303e4 Added generic CHAP layer, independent of iSCSI 2006-11-21 13:26:59 +00:00
Michael Brown
57d539aab0 Made it temporarily possible to call MD5 routines directly from external
code, rather than going through the digest layer.

Removed a spurious line of constants.
2006-11-15 04:22:22 +00:00
Michael Brown
fedc186fd7 Split login into security negotation and operational parameter
negotiation phases, to allow inclusion of CHAP authentication.
2006-10-03 09:17:38 +00:00
Michael Brown
b16de6ae66 Inhibit compiler warnings on DBG() when building a non-debug object,
while retaining the format string checking.
2006-09-27 11:09:56 +00:00
Michael Brown
b8baee7632 Removed as a gesture of goodwill following a request from Microsoft 2006-09-18 21:56:15 +00:00
Michael Brown
2f60aa42e7 Killed 2006-09-18 21:55:27 +00:00
Michael Brown
0dca1dc8ce Made eth_ntoa() public for use in legacy drivers' DBG() statements. 2006-09-15 12:34:34 +00:00
Marty Connor
e2aca77132 update DBG_DISCARD macro to allow the compiler to see the argument for compile-time checking, while still having it optimized away during compilation 2006-09-14 17:38:17 +00:00
Michael Brown
bb8725bffa Added the "swap in place" macros 2006-09-11 17:54:19 +00:00
Michael Brown
1ddfce2308 Generalisation of a message digest algorithm 2006-09-11 16:29:45 +00:00
Michael Brown
22511400c7 Added generic function for calculating ACPI table checksum 2006-08-27 22:02:08 +00:00
Michael Brown
cab3f4502b Correct option number for DHCP_DNS_SERVERS, and add it to the request
list.
2006-08-27 01:37:58 +00:00
Michael Brown
b4e559d7e2 Added basic profiling support 2006-08-24 16:22:56 +00:00
Nikhil Chandru Rao
d1d334b8e1 IP6 support 2006-08-19 15:58:22 +00:00
Michael Brown
cf2178f885 Added debug strings. 2006-08-16 00:05:24 +00:00
Michael Brown
97439cb6eb Kill off poll_interruptions(); it is lethal when we're acting as a PXE
stack or INT 13 emulator etc.
2006-08-14 22:29:51 +00:00
Michael Brown
7029fb8eff Add string configuration type 2006-08-11 18:16:57 +00:00
Michael Brown
db46972349 Added basic infrastructure for manipulating settings. 2006-08-11 18:00:22 +00:00
Derek Pryor
25ea34a8d7 New HTTP protocol and test code 2006-08-11 14:13:02 +00:00
Michael Brown
bc1a37eacb Added missing packed attribute 2006-08-10 00:10:09 +00:00
Michael Brown
35559ad87c Added description for a basic ACPI table, taken from
include/linux/acpi.h.
2006-08-10 00:09:31 +00:00
Michael Brown
c3a4f3c5da Towards an RFC2988-compliant timer. 2006-08-09 15:54:17 +00:00
Marty Connor
ee9ae8130a Remove _PROTOCOL macros for gcc 3.2 compatibility 2006-08-09 04:42:14 +00:00
Michael Brown
75d26d884a Added pxe_netdev; a slight hack for now, but will need to be done
properly for the PXE UNDI API anyway.
2006-08-09 02:58:27 +00:00
Michael Brown
e9561aafc0 Derive xid dynamically from the netdev, so that we can call
create_dhcp_packet() from pxe_preboot.c, after the dhcp_session is long
gone.

Expose the functions required by pxe_preboot.c
2006-08-09 02:56:40 +00:00
Marty Connor
41af7457a8 Merge of Fredrik Hultin command_line 2006-08-09 02:30:35 +00:00
Michael Brown
a3d508b648 Clarified packet ownership transfer between a few functions.
Added a large number of missing calls to free_pkb().  In the case of UDP,
no received packets were ever freed, which lead to memory exhaustion
remarkably quickly once pxelinux started up.

In general, any function with _rx() in its name which accepts a pk_buff
*must* either call free_pkb() or pass the pkb to another _rx() function
(e.g. the next layer up the stack).  Since the UDP (and TCP) layers don't
pass packet buffers up to the higher-layer protocols (the
"applications"), they must free the packet buffer after calling the
application's newdata() method.
2006-08-09 01:24:32 +00:00
Michael Brown
d1a123b1f4 Added TFTP test code (currently just dumps file to console). 2006-08-09 00:09:29 +00:00
Michael Brown
3611cb17b7 Initial (untested) implementation of TFTP over the new UDP API. 2006-08-08 23:45:52 +00:00
Michael Brown
eda79ec32b The prototype for strcasecmp() is apparently in strings.h. 2006-08-08 22:52:16 +00:00
Michael Brown
72cd29f13c Added some TFTP definitions for use with the new UDP API. 2006-08-08 22:01:16 +00:00
Michael Brown
d12383f1d3 Update to match the daft capitalisation in the actual PXE spec 2006-08-08 20:43:05 +00:00
Michael Brown
68e33224ef gcc3 compatibility: removed ARP_NET_PROTOCOL(). 2006-08-08 17:44:25 +00:00
Nikhil Chandru Rao
d2bdf81505 Removed some bugs in TCP 2006-08-08 03:42:30 +00:00
Nikhil Chandru Rao
cb42e573a0 Added retransmissions to TCP 2006-08-07 18:52:26 +00:00
Michael Brown
ecdcdea1af Remove unused attribute from __table macros; the tables are no longer
static since otherwise gcc4 optimises them away completely.  Also, it
really *is* an error if the table start and end are unused, so they
certainly shouldn't be marked with attribute unused.
2006-08-07 17:06:31 +00:00
Michael Brown
eb24eece0e Convert some trivial functions to static inlines. 2006-08-03 23:42:03 +00:00
Michael Brown
ffe0e24249 Make the UDP senddata() methods return a status code.
udp_connect() now follows the standard BSD sockets semantics and simply
sets the default address for outgoing packets; it doesn't filter incoming
packets.
2006-08-03 23:10:14 +00:00
Michael Brown
a0a872f7f1 Updated PXE UDP implementation to use the new Etherboot UDP API.
Updated PXE API dispatcher to use copy_{to,from}_user, and moved to
arch/i386 since the implementation is quite architecture-dependent.
(The individual PXE API calls can be largely
architecture-independent.)
2006-08-02 23:08:10 +00:00
Michael Brown
e24a6cb525 Moved the basic struct sockaddr out of in.h. 2006-08-02 00:06:30 +00:00
Michael Brown
467e9627cc Added features that will be required for PXE UDP support.
Introduced struct sockaddr_tcpip, to simplify code that deals with
both IPv4 and IPv6 addresses.

Reorganised parts of tcpip.c and udp.c.
2006-08-02 00:02:21 +00:00
Nikhil Chandru Rao
9225f4edac TCP support 2006-08-01 20:46:50 +00:00
Nikhil Chandru Rao
c24546c70b Minor changes to the network layer rx() functions 2006-08-01 20:27:26 +00:00
Michael Brown
beadd82208 Remove unused functions. 2006-08-01 14:26:02 +00:00
Michael Brown
1ebb68e49a Renamed trans_{rx,tx}() to tcpip_{rx,tx}(), since they are specific to
the TCP/IP protocol suite (rather than being general transport-layer
functions).
2006-08-01 14:22:04 +00:00
Michael Brown
3a0e293123 Renamed tcpip_if.[ch] to tcpip.[ch] 2006-08-01 14:18:09 +00:00
Michael Brown
b26806cf18 Add dhcp_snprintf() for extracting DHCP string options. 2006-07-20 14:13:11 +00:00
Michael Brown
7ca8bcd98c Print out the lease time, just to show how easy it is. 2006-07-20 03:02:34 +00:00
Michael Brown
00a1f000b1 Added dhcp_ipv4_option() and friends.
Added test code to configure the interface for IPv4 after DHCP.
2006-07-20 02:49:59 +00:00
Michael Brown
7ca1bb0fbe Now successfully negotiates the whole DHCPDISCOVER/OFFER/REQUEST/ACK
cycle.  :)
2006-07-20 02:19:06 +00:00
Michael Brown
2c0eb6eb1d Correct TCP/IP checksum generation. 2006-07-19 23:38:05 +00:00
Nikhil Chandru Rao
13dbf5494d Minor edits 2006-07-19 21:05:58 +00:00
Michael Brown
224529d8dd Now capable of sending what, to me, looks like a valid DHCPDISCOVER
(apart from the bad UDP checksum).
2006-07-19 20:50:50 +00:00
Michael Brown
6858b14a34 Add pkb_available() 2006-07-19 18:16:48 +00:00
Michael Brown
6d9d48537e Added some debug messages and DHCP test code 2006-07-19 17:49:31 +00:00
Michael Brown
317b962b65 Proof of concept: transmit a single DHCPDISCOVER and dump out any
parsed DHCP responses.
2006-07-19 17:32:13 +00:00
Michael Brown
76070cd226 Added missing prototype 2006-07-19 17:29:18 +00:00
Michael Brown
bf0cdd42cf Add some DHCP options that we are likely to use 2006-07-19 17:00:32 +00:00
Michael Brown
e0668ad8df Correct typo 2006-07-19 16:58:44 +00:00
Nikhil Chandru Rao
ab577e1a3a The following edits were made: \
1. Updated UDP send data code\
2. Corrected internet checksum\
3. Moved udp_buffer() and udp_buflen() to udp.c from udp.h
2006-07-19 16:25:23 +00:00
Michael Brown
b8d619e822 Added macros for generating static DHCP options 2006-07-19 16:16:51 +00:00
Michael Brown
254fe6e00e Split DHCP packet creation into two parts: creating the basic packet
structure, and populating it with options.  This should allow us to
use the same basic options list for both DHCPDISCOVER and DHCPREQUEST,
plus making it much easier to set the non-constant parameters
(e.g. requested IP address) in request packets.
2006-07-19 12:12:45 +00:00
Michael Brown
e40ebb67de Allow for calling find_dhcp_option() with "options" set to NULL, in order
to search through all registered option blocks.

Move some static inlines that are likely to be used frequently into
dhcpopts.c as normal functions, to save space.
2006-07-19 11:05:38 +00:00
Michael Brown
6c01d3bb95 Fix creation of the htype field; the ll_proto field from which it is
derived is a 16-bit big-endian field, but htype is only 8 bits wide.
2006-07-17 13:07:14 +00:00
Michael Brown
b24947f0c0 Add sketch code to reassemble a DHCP packet from our internal "everything
is a DHCP option" data structures.

We need this code in order to be able to return a DHCP packet to a PXE NBP
which reflects options from our multiple sources (e.g. NVS and DHCP
server).  This is expensive, but necessary.  Having paid this cost, we may
as well try to use the same code to generate our DHCP request packets,
since the process is similar.
2006-07-17 12:47:22 +00:00
Michael Brown
12da7ea475 Add (untested) code for parsing a received DHCP packet and constructing a
DHCP options block from the contents.
2006-07-15 19:24:55 +00:00
Michael Brown
19e8b41562 Add code to modify DHCP option values within a block. 2006-07-13 20:49:04 +00:00
Nikhil Chandru Rao
5f651f8622 Added fragment reassembly code 2006-06-30 08:52:03 +00:00
Nikhil Chandru Rao
8de630c62b Removing net/interface.c and include/gpxe/interface.h 2006-06-29 06:51:11 +00:00
Michael Brown
51d62d1a3c Provide a mechanism for returning the encapsulator as well as the
encapsulated option; this will be needed for modifications to the options
block.
2006-06-28 18:59:54 +00:00
Nikhil Chandru Rao
c9ea710930 Renamed net/interface.c and include/gpxe/interface.h to net/tcpip_if.c and include/gpxe/tcpip_if.h respectively. Made changes in the other files. 2006-06-28 15:43:08 +00:00
Michael Brown
291f072b82 Add priority mechanism 2006-06-28 13:48:02 +00:00
Dan Lynch
d8b51332c6 typo in macro fixed 2006-06-28 11:53:41 +00:00
Nikhil Chandru Rao
6e2c97b0c0 Added ipv4_pseudo_header structure 2006-06-28 09:59:27 +00:00
Nikhil Chandru Rao
e60817fa7a IP6 specifications 2006-06-28 09:44:41 +00:00
Nikhil Chandru Rao
a6c6b3d739 Fixed whitespaces; updated UDP code 2006-06-28 07:46:28 +00:00
Michael Brown
0bcaa8a21f First stab at DHCP option handling in a way that will allow us to have
multiple option sources (e.g. multiple DHCP replies, non-volatile
storage etc.)
2006-06-27 17:24:07 +00:00
Dan Lynch
e442447f37 - multiple static inline definitions added
- changes made to some constants and macros
- changes made to _curses_screen struct
- identified and removed prototypes for yet more unsupportable functions
2006-06-27 10:38:57 +00:00
Nikhil Chandru Rao
f5ebf067c4 added generalized sockaddr structure and ip6 sockaddr 2006-06-25 05:18:24 +00:00
Nikhil Chandru Rao
90fbff8f34 added support for processing and transmitting without uIP 2006-06-25 05:16:54 +00:00
Nikhil Chandru Rao
74339b3c6e updated UDP interface 2006-06-25 05:13:17 +00:00
Nikhil Chandru Rao
fdc05e2664 created interface for transport-network interface 2006-06-25 05:12:07 +00:00
Michael Brown
3a660f9b25 Update ftp.c and hello.c to use the generic async_operations API. 2006-06-19 15:46:58 +00:00
Michael Brown
15397db2b4 Placeholder 2006-06-17 23:34:48 +00:00
Michael Brown
8637834031 Made the temporary buffer part of the TCP senddata() API, to ease the
transition away from uIP.

Prepared ipv4.c for transition away from uIP.
2006-06-17 23:20:54 +00:00
Michael Brown
3c8aafa209 Simplify RX data path.
Kill off the static single net device and move to proper dynamic
registration (which we need with the new device model).

Break the (flawed) assumption that all network-layer protocols can use
ARP; such network-layer protocols (i.e. IPv4) must now register as an ARP
protocol using ARP_NET_PROTOCOL() and provide a single method for checking
the existence of a local network-layer address.
2006-06-17 22:36:27 +00:00
Michael Brown
bbd9e28061 Simplify TX datapath. 2006-06-16 00:19:46 +00:00
Michael Brown
cce2e47ff4 Added iSCSI boot test code 2006-06-14 17:00:25 +00:00
Michael Brown
3b51c719d3 Generalise three-wire interface to generic SPI interface.
Update rtl8139 driver to instantiate an SPI interface with a three-wire
device attached.
2006-06-14 00:22:50 +00:00
Michael Brown
ab4f96e525 Move per-transition delays from generic bit-bashing layer to i2c layer
(since SPI bit-bashing will require different delay semantics).
2006-06-14 00:20:35 +00:00
Michael Brown
51a36f1cfb Change read_bit() to return 0 or -1UL, rather than 0 or 1. 2006-06-12 19:29:50 +00:00
Michael Brown
3ed40686c9 Added bit-bashing i2c interface code 2006-06-11 00:57:00 +00:00
Michael Brown
e90b64d625 Added sketch of bit-bashing interface common code 2006-06-08 19:47:09 +00:00
Michael Brown
286bf68faf Added a very quick and dirty compatibility layer, to allow
not-yet-updated drivers to at least function.
2006-06-05 15:45:21 +00:00
Michael Brown
d78581297b Improve tcpdump legibility. 2006-06-01 19:23:52 +00:00
Michael Brown
48fb6c6dc2 Updated retry timer mechanism to incorporate smoothed RTT estimation.
AoE now uses the retry timer mechanism.
2006-06-01 14:33:52 +00:00
Michael Brown
50415b3aca Make DBG_DISCARD correct 2006-06-01 12:11:09 +00:00
Michael Brown
1f394c2f7c Backing out last change; no immediate plans to make the whole block-device
layer asynchronous, so keeping the sync/async boundary within aoedev.c
seems cleanest for now.
2006-06-01 11:14:59 +00:00
Michael Brown
99ef98d0bf ATA devices are now asynchronous. The ATA layer itself now performs the
async_wait(), though we may wish to move this higher up the stack, and
consider making the block device model asynchronous.  (There is only a
marginal cost for synchronous devices, since they can simply call
async_done() before returning; async_wait() will work seamlessly in this
situation).
2006-05-31 18:57:11 +00:00
Michael Brown
68125bc441 Added generic asynchronous operations code.
Removed data_in_len and data_out_len from ata_command structure; the
lengths are implied by the sector count and the presence of the data_in
or data_out pointers.

Changed AoE code to use subcommands by default, and made aoe_issue()
nonblocking (with completion via async_wait()).
2006-05-31 14:34:17 +00:00
Michael Brown
1db1a6dad3 Added first sketch of a generic retry timer mechanism. The idea is to use
these timer objects in AoE and UDP protocols (where there is no underlying
retransmission mechanism) without requiring each protocol to implement its
own individual retry logic.  Eventually, we should be able to use the same
timer code for TCP retransmissions as well.
2006-05-29 14:55:07 +00:00
Michael Brown
6541338897 Handle multi-sector reads by splitting them into subcommands. 2006-05-29 08:25:31 +00:00
Michael Brown
9a2a52693d Initial AoE implementation. Limitations are:
Cannot yet handle reads of more than two sectors

  No retransmission

  No way to find out a target's MAC address (this proof of concept uses
  broadcasts)

These limitations shall not last long!  :)
2006-05-28 23:29:43 +00:00
Michael Brown
6f998cecb3 Use separate data-in and data-out buffers.
Increase code simplicity at the expense of around 64 bytes.
2006-05-28 23:26:42 +00:00
Michael Brown
6d6252067f Add ETH_P_AOE 2006-05-28 21:47:52 +00:00
Michael Brown
f743de4858 Added tcp_kick(). This speed up LILO and GRUB booting by almost two
orders of magnitude.
2006-05-27 19:01:20 +00:00
Michael Brown
6c50564724 Make PKB_ZLEN the minimum possible size of packet buffer (to allow for
hardware that can't autopad).
2006-05-27 13:39:45 +00:00