diff options
| author | Michael Brown | 2012-08-30 00:34:14 +0200 |
|---|---|---|
| committer | Michael Brown | 2012-08-31 22:22:59 +0200 |
| commit | 03f0c23f8b1a60575f788dd1b9d4ea47debf2345 (patch) | |
| tree | 60b2312a0d56d6707a25aef4ce5bb4f6874359d6 /src/arch | |
| parent | [infiniband] Include destination address vector in ib_complete_recv() (diff) | |
| download | ipxe-03f0c23f8b1a60575f788dd1b9d4ea47debf2345.tar.gz ipxe-03f0c23f8b1a60575f788dd1b9d4ea47debf2345.tar.xz ipxe-03f0c23f8b1a60575f788dd1b9d4ea47debf2345.zip | |
[ipoib] Expose Ethernet-compatible eIPoIB link-layer addresses and headers
Almost all clients of the raw-packet interfaces (UNDI and SNP) can
handle only Ethernet link layers. Expose an Ethernet-compatible link
layer to local clients, while remaining compatible with IPoIB on the
wire. This requires manipulation of ARP (but not DHCP) packets within
the IPoIB driver.
This is ugly, but it's the only viable way to allow IPoIB devices to
be driven via the raw-packet interfaces.
Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src/arch')
| -rw-r--r-- | src/arch/i386/interface/pxe/pxe_undi.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/src/arch/i386/interface/pxe/pxe_undi.c b/src/arch/i386/interface/pxe/pxe_undi.c index f9282db10..5d2122694 100644 --- a/src/arch/i386/interface/pxe/pxe_undi.c +++ b/src/arch/i386/interface/pxe/pxe_undi.c @@ -358,7 +358,8 @@ pxenv_undi_transmit ( struct s_PXENV_UNDI_TRANSMIT *undi_transmit ) { } /* Allocate and fill I/O buffer */ - iobuf = alloc_iob ( MAX_LL_HEADER_LEN + len ); + iobuf = alloc_iob ( MAX_LL_HEADER_LEN + + ( ( len > IOB_ZLEN ) ? len : IOB_ZLEN ) ); if ( ! iobuf ) { DBGC2 ( &pxe_netdev, " could not allocate iobuf\n" ); undi_transmit->Status = PXENV_STATUS_OUT_OF_RESOURCES; |
