1 #ifndef _GPXE_ICMP6_H
2 #define _GPXE_ICMP6_H
3 
4 /** @file
5  *
6  * ICMP6 protocol
7  *
8  */
9 
10 FILE_LICENCE ( GPL2_OR_LATER );
11 
12 #include <gpxe/ip6.h>
13 #include <gpxe/ndp.h>
14 
15 #define ICMP6_NSOLICIT 135
16 #define ICMP6_NADVERT 136
17 
18 extern struct tcpip_protocol icmp6_protocol;
19 
20 struct icmp6_header {
21 	uint8_t type;
22 	uint8_t code;
23 	uint16_t csum;
24 	/* Message body */
25 };
26 
27 struct neighbour_solicit {
28 	uint8_t type;
29 	uint8_t code;
30 	uint16_t csum;
31 	uint32_t reserved;
32 	struct in6_addr target;
33 	/* "Compulsory" options */
34 	uint8_t opt_type;
35 	uint8_t opt_len;
36   /* FIXME:  hack alert */
37 	uint8_t opt_ll_addr[6];
38 };
39 
40 struct neighbour_advert {
41 	uint8_t type;
42 	uint8_t code;
43 	uint16_t csum;
44 	uint8_t flags;
45 	uint8_t reserved;
46 	struct in6_addr target;
47 	uint8_t opt_type;
48 	uint8_t opt_len;
49   /* FIXME:  hack alert */
50 	uint8_t opt_ll_addr[6];
51 };
52 
53 #define ICMP6_FLAGS_ROUTER 0x80
54 #define ICMP6_FLAGS_SOLICITED 0x40
55 #define ICMP6_FLAGS_OVERRIDE 0x20
56 
57 int icmp6_send_solicit ( struct net_device *netdev, struct in6_addr *src, struct in6_addr *dest );
58 
59 #endif /* _GPXE_ICMP6_H */
60