1 #ifndef _IPXE_ICMP6_H
2 #define _IPXE_ICMP6_H
3 
4 /** @file
5  *
6  * ICMPv6 protocol
7  *
8  */
9 
10 FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
11 
12 #include <stdint.h>
13 #include <ipxe/tables.h>
14 #include <ipxe/iobuf.h>
15 #include <ipxe/netdevice.h>
16 #include <ipxe/icmp.h>
17 
18 /** An ICMPv6 handler */
19 struct icmpv6_handler {
20 	/** Type */
21 	unsigned int type;
22 	/** Process received packet
23 	 *
24 	 * @v iobuf		I/O buffer
25 	 * @v netdev		Network device
26 	 * @v sin6_src		Source socket address
27 	 * @v sin6_dest		Destination socket address
28 	 * @ret rc		Return status code
29 	 *
30 	 * This function takes ownership of the I/O buffer.
31 	 */
32 	int ( * rx ) ( struct io_buffer *iobuf, struct net_device *netdev,
33 		       struct sockaddr_in6 *sin6_src,
34 		       struct sockaddr_in6 *sin6_dest );
35 };
36 
37 /** ICMPv6 handler table */
38 #define ICMPV6_HANDLERS __table ( struct icmpv6_handler, "icmpv6_handlers" )
39 
40 /** Declare an ICMPv6 handler */
41 #define __icmpv6_handler __table_entry ( ICMPV6_HANDLERS, 01 )
42 
43 /** ICMPv6 destination unreachable */
44 #define ICMPV6_DESTINATION_UNREACHABLE 1
45 
46 /** ICMPv6 packet too big */
47 #define ICMPV6_PACKET_TOO_BIG 2
48 
49 /** ICMPv6 time exceeded */
50 #define ICMPV6_TIME_EXCEEDED 3
51 
52 /** ICMPv6 parameter problem */
53 #define ICMPV6_PARAMETER_PROBLEM 4
54 
55 /** ICMPv6 echo request */
56 #define ICMPV6_ECHO_REQUEST 128
57 
58 /** ICMPv6 echo reply */
59 #define ICMPV6_ECHO_REPLY 129
60 
61 /** ICMPv6 router solicitation */
62 #define ICMPV6_ROUTER_SOLICITATION 133
63 
64 /** ICMPv6 router advertisement */
65 #define ICMPV6_ROUTER_ADVERTISEMENT 134
66 
67 /** ICMPv6 neighbour solicitation */
68 #define ICMPV6_NEIGHBOUR_SOLICITATION 135
69 
70 /** ICMPv6 neighbour advertisement */
71 #define ICMPV6_NEIGHBOUR_ADVERTISEMENT 136
72 
73 extern struct tcpip_protocol icmpv6_protocol __tcpip_protocol;
74 
75 #endif /* _IPXE_ICMP6_H */
76