46 #include "net/ipv6/uip-ds6.h"
48 #include "contiki-default-conf.h"
53 #define PRINTF(...) printf(__VA_ARGS__)
54 #define PRINT6ADDR(addr) PRINTF(" %02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x ", ((uint8_t *)addr)[0], ((uint8_t *)addr)[1], ((uint8_t *)addr)[2], ((uint8_t *)addr)[3], ((uint8_t *)addr)[4], ((uint8_t *)addr)[5], ((uint8_t *)addr)[6], ((uint8_t *)addr)[7], ((uint8_t *)addr)[8], ((uint8_t *)addr)[9], ((uint8_t *)addr)[10], ((uint8_t *)addr)[11], ((uint8_t *)addr)[12], ((uint8_t *)addr)[13], ((uint8_t *)addr)[14], ((uint8_t *)addr)[15])
55 #define PRINTLLADDR(lladdr) PRINTF(" %02x:%02x:%02x:%02x:%02x:%02x ",lladdr->addr[0], lladdr->addr[1], lladdr->addr[2], lladdr->addr[3],lladdr->addr[4], lladdr->addr[5])
58 #define PRINT6ADDR(addr)
61 #define UIP_IP_BUF ((struct uip_ip_hdr *)&uip_buf[UIP_LLH_LEN])
62 #define UIP_ICMP_BUF ((struct uip_icmp_hdr *)&uip_buf[uip_l2_l3_hdr_len])
63 #define UIP_ICMP6_ERROR_BUF ((struct uip_icmp6_error *)&uip_buf[uip_l2_l3_icmp_hdr_len])
64 #define UIP_EXT_BUF ((struct uip_ext_hdr *)&uip_buf[uip_l2_l3_hdr_len])
65 #define UIP_FIRST_EXT_BUF ((struct uip_ext_hdr *)&uip_buf[UIP_LLIPH_LEN])
74 static uip_ipaddr_t tmp_ipaddr;
76 LIST(echo_reply_callback_list);
90 PRINTF(
"Received Echo Request from");
109 #if UIP_CONF_IPV6_RPL
110 if((temp_ext_len = rpl_invert_header())) {
112 UIP_FIRST_EXT_BUF->next = UIP_PROTO_ICMP6;
124 (
uip_len - UIP_IPH_LEN - temp_ext_len - UIP_ICMPH_LEN));
141 (
uip_len - UIP_IPH_LEN - UIP_ICMPH_LEN));
143 #if UIP_CONF_IPV6_RPL
157 PRINTF(
"Sending Echo Reply to");
171 if(UIP_EXT_BUF->next == UIP_PROTO_ICMP6 &&
UIP_ICMP_BUF->type < 128){
182 #if UIP_CONF_IPV6_RPL
196 memmove((uint8_t *)UIP_ICMP6_ERROR_BUF +
uip_ext_len + UIP_ICMP6_ERROR_LEN,
203 UIP_FIRST_EXT_BUF->next = UIP_PROTO_ICMP6;
236 UIP_ICMP6_ERROR_BUF->param = uip_htonl(param);
244 PRINTF(
"Sending ICMPv6 ERROR message type %d code %d to", type, code);
262 UIP_IP_BUF->len[0] = (UIP_ICMPH_LEN + payload_len) >> 8;
263 UIP_IP_BUF->len[1] = (UIP_ICMPH_LEN + payload_len) & 0xff;
265 memcpy(&
UIP_IP_BUF->destipaddr, dest,
sizeof(*dest));
274 uip_len = UIP_IPH_LEN + UIP_ICMPH_LEN + payload_len;
283 #if UIP_CONF_IPV6_RPL
284 uint8_t temp_ext_len;
291 #if UIP_CONF_IPV6_RPL
292 if((temp_ext_len = rpl_invert_header())) {
294 UIP_FIRST_EXT_BUF->next = UIP_PROTO_ICMP6;
307 (
uip_len - UIP_IPH_LEN - temp_ext_len - UIP_ICMPH_LEN));
325 (
uip_len - UIP_IPH_LEN - UIP_ICMPH_LEN));
327 #if UIP_CONF_IPV6_RPL
335 struct uip_icmp6_echo_reply_notification *n;
336 for(n =
list_head(echo_reply_callback_list);
339 if(n->callback !=
NULL) {
340 n->callback(&sender, ttl,
342 uip_len -
sizeof(
struct uip_icmp_hdr) - UIP_IPH_LEN);
351 uip_icmp6_echo_reply_callback_t c)
355 list_add(echo_reply_callback_list, n);