mirror of
https://github.com/ipxe/ipxe
synced 2026-01-01 17:34:42 +03:00
[undi] Allow underlying PXE stack to construct link-layer header
Some PXE stacks (observed with a QLogic 8242) will always try to prepend a link-layer header, even if the caller uses P_UNKNOWN to indicate that the link-layer header has already been filled in. This results in an invalid packet being transmitted. Work around these faulty PXE stacks where possible by stripping the existing link-layer header and allowing the PXE stack to (re)construct the link-layer header itself. Originally-fixed-by: Buck Huppmann <buckh@pobox.com> Signed-off-by: Michael Brown <mcb30@ipxe.org>
This commit is contained in:
@@ -50,9 +50,9 @@ static uint8_t eth_broadcast[ETH_ALEN] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
|
||||
* @v net_proto Network-layer protocol, in network-byte order
|
||||
* @ret rc Return status code
|
||||
*/
|
||||
static int eth_push ( struct net_device *netdev __unused,
|
||||
struct io_buffer *iobuf, const void *ll_dest,
|
||||
const void *ll_source, uint16_t net_proto ) {
|
||||
int eth_push ( struct net_device *netdev __unused, struct io_buffer *iobuf,
|
||||
const void *ll_dest, const void *ll_source,
|
||||
uint16_t net_proto ) {
|
||||
struct ethhdr *ethhdr = iob_push ( iobuf, sizeof ( *ethhdr ) );
|
||||
|
||||
/* Build Ethernet header */
|
||||
@@ -74,10 +74,9 @@ static int eth_push ( struct net_device *netdev __unused,
|
||||
* @ret flags Packet flags
|
||||
* @ret rc Return status code
|
||||
*/
|
||||
static int eth_pull ( struct net_device *netdev __unused,
|
||||
struct io_buffer *iobuf, const void **ll_dest,
|
||||
const void **ll_source, uint16_t *net_proto,
|
||||
unsigned int *flags ) {
|
||||
int eth_pull ( struct net_device *netdev __unused, struct io_buffer *iobuf,
|
||||
const void **ll_dest, const void **ll_source,
|
||||
uint16_t *net_proto, unsigned int *flags ) {
|
||||
struct ethhdr *ethhdr = iobuf->data;
|
||||
|
||||
/* Sanity check */
|
||||
|
||||
Reference in New Issue
Block a user