Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Replace the existing partially-implemented IPv6 stack with a fresh implementation. This implementation is not yet complete. The IPv6 transmit and receive datapaths are functional (including fragment reassembly and parsing of arbitrary extension headers). NDP neighbour solicitations and advertisements are supported. ICMPv6 echo is supported. At present, only link-local addresses may be used, and there is no way to specify an IPv6 address as part of a URI (either directly or via a DNS lookup). Signed-off-by: Michael Brown <mcb30@ipxe.org>
- Loading branch information
Showing
16 changed files
with
1,669 additions
and
652 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,78 @@ | ||
#ifndef _IPXE_ICMP6_H | ||
#define _IPXE_ICMP6_H | ||
|
||
/** @file | ||
* | ||
* ICMPv6 protocol | ||
* | ||
*/ | ||
|
||
FILE_LICENCE ( GPL2_OR_LATER ); | ||
|
||
#include <stdint.h> | ||
#include <ipxe/tables.h> | ||
#include <ipxe/iobuf.h> | ||
#include <ipxe/netdevice.h> | ||
|
||
/** An ICMPv6 header */ | ||
struct icmpv6_header { | ||
/** Type */ | ||
uint8_t type; | ||
/** Code */ | ||
uint8_t code; | ||
/** Checksum */ | ||
uint16_t chksum; | ||
} __attribute__ (( packed )); | ||
|
||
/** An ICMPv6 echo request/reply */ | ||
struct icmpv6_echo { | ||
/** ICMPv6 header */ | ||
struct icmpv6_header icmp; | ||
/** Identifier */ | ||
uint16_t ident; | ||
/** Sequence number */ | ||
uint16_t sequence; | ||
/** Data */ | ||
uint8_t data[0]; | ||
} __attribute__ (( packed )); | ||
|
||
/** An ICMPv6 handler */ | ||
struct icmpv6_handler { | ||
/** Type */ | ||
unsigned int type; | ||
/** Process received packet | ||
* | ||
* @v iobuf I/O buffer | ||
* @v netdev Network device | ||
* @v sin6_src Source socket address | ||
* @v sin6_dest Destination socket address | ||
* @ret rc Return status code | ||
* | ||
* This function takes ownership of the I/O buffer. | ||
*/ | ||
int ( * rx ) ( struct io_buffer *iobuf, struct net_device *netdev, | ||
struct sockaddr_in6 *sin6_src, | ||
struct sockaddr_in6 *sin6_dest ); | ||
}; | ||
|
||
/** ICMPv6 handler table */ | ||
#define ICMPV6_HANDLERS __table ( struct icmpv6_handler, "icmpv6_handlers" ) | ||
|
||
/** Declare an ICMPv6 handler */ | ||
#define __icmpv6_handler __table_entry ( ICMPV6_HANDLERS, 01 ) | ||
|
||
/** ICMPv6 echo request */ | ||
#define ICMPV6_ECHO_REQUEST 128 | ||
|
||
/** ICMPv6 echo reply */ | ||
#define ICMPV6_ECHO_REPLY 129 | ||
|
||
/** ICMPv6 neighbour solicitation */ | ||
#define ICMPV6_NDP_NEIGHBOUR_SOLICITATION 135 | ||
|
||
/** ICMPv6 neighbour advertisement */ | ||
#define ICMPV6_NDP_NEIGHBOUR_ADVERTISEMENT 136 | ||
|
||
extern struct tcpip_protocol icmpv6_protocol __tcpip_protocol; | ||
|
||
#endif /* _IPXE_ICMP6_H */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.
Oops, something went wrong.