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