65lowpan6_get_address_mode(
const ip6_addr_t *ip6addr,
const struct lowpan6_link_addr *mac_addr)
67 if (mac_addr->addr_len == 2) {
70 if ((ip6addr->addr[3] &
PP_HTONL(0x0000ffff)) ==
lwip_ntohl((mac_addr->addr[0] << 8) | mac_addr->addr[1])) {
74 }
else if (mac_addr->addr_len == 8) {
75 if ((ip6addr->addr[2] ==
lwip_ntohl(((mac_addr->addr[0] ^ 2) << 24) | (mac_addr->addr[1] << 16) | mac_addr->addr[2] << 8 | mac_addr->addr[3])) &&
76 (ip6addr->addr[3] ==
lwip_ntohl((mac_addr->addr[4] << 24) | (mac_addr->addr[5] << 16) | mac_addr->addr[6] << 8 | mac_addr->addr[7]))) {
81 if ((ip6addr->addr[2] ==
PP_HTONL(0x000000ffUL)) &&
93lowpan6_get_address_mode_mc(
const ip6_addr_t *ip6addr)
95 if ((ip6addr->addr[0] ==
PP_HTONL(0xff020000)) &&
96 (ip6addr->addr[1] == 0) &&
97 (ip6addr->addr[2] == 0) &&
98 ((ip6addr->addr[3] &
PP_HTONL(0xffffff00)) == 0)) {
100 }
else if (((ip6addr->addr[0] &
PP_HTONL(0xff00ffff)) ==
PP_HTONL(0xff000000)) &&
101 (ip6addr->addr[1] == 0)) {
102 if ((ip6addr->addr[2] == 0) &&
103 ((ip6addr->addr[3] &
PP_HTONL(0xff000000)) == 0)) {
105 }
else if ((ip6addr->addr[2] &
PP_HTONL(0xffffff00)) == 0) {
113#if LWIP_6LOWPAN_NUM_CONTEXTS > 0
115lowpan6_context_lookup(
const ip6_addr_t *lowpan6_contexts,
const ip6_addr_t *ip6addr)
120 if (ip6_addr_net_eq(&lowpan6_contexts[
i], ip6addr)) {
133 u8_t *lowpan6_header_len_out,
u8_t *hidden_header_len_out, ip6_addr_t *lowpan6_contexts,
134 const struct lowpan6_link_addr *
src,
const struct lowpan6_link_addr *
dst)
137 u8_t lowpan6_header_len;
138 u8_t hidden_header_len = 0;
146 LWIP_ASSERT(
"lowpan6_header_len_out != NULL", lowpan6_header_len_out !=
NULL);
147 LWIP_ASSERT(
"hidden_header_len_out != NULL", hidden_header_len_out !=
NULL);
163 ip6hdr = (
struct ip6_hdr *)inptr;
170 lowpan6_header_len = 2;
176#if LWIP_6LOWPAN_NUM_CONTEXTS > 0
179 i = lowpan6_context_lookup(lowpan6_contexts,
ip_2_ip6(&ip6src));
186 i = lowpan6_context_lookup(lowpan6_contexts,
ip_2_ip6(&ip6dst));
196 lowpan6_header_len++;
214 if (((
IP6H_TC(ip6hdr) & 0x3f) == 0)) {
219 buffer[lowpan6_header_len++] |= (
IP6H_FL(ip6hdr) >> 16) & 0x0f;
220 buffer[lowpan6_header_len++] = (
IP6H_FL(ip6hdr) >> 8) & 0xff;
225 buffer[lowpan6_header_len++] = (
IP6H_FL(ip6hdr) >> 16) & 0x0f;
226 buffer[lowpan6_header_len++] = (
IP6H_FL(ip6hdr) >> 8) & 0xff;
253 if (((
buffer[1] & 0x40) != 0) ||
254 (ip6_addr_islinklocal(
ip_2_ip6(&ip6src)))) {
260 lowpan6_header_len += 8;
263 lowpan6_header_len += 2;
265 }
else if (ip6_addr_isany(
ip_2_ip6(&ip6src))) {
271 lowpan6_header_len += 16;
275 if (ip6_addr_ismulticast(
ip_2_ip6(&ip6dst))) {
280 i = lowpan6_get_address_mode_mc(
ip_2_ip6(&ip6dst));
284 lowpan6_header_len += 16;
286 buffer[lowpan6_header_len++] = inptr[25];
288 lowpan6_header_len += 5;
290 buffer[lowpan6_header_len++] = inptr[25];
292 lowpan6_header_len += 3;
294 buffer[lowpan6_header_len++] = (inptr)[39];
296 }
else if (((
buffer[1] & 0x04) != 0) ||
297 (ip6_addr_islinklocal(
ip_2_ip6(&ip6dst)))) {
303 lowpan6_header_len += 8;
306 lowpan6_header_len += 2;
311 lowpan6_header_len += 16;
327 if (outbuf_size < (
size_t)(hidden_header_len + 7)) {
332 buffer[lowpan6_header_len] = 0xf0;
335 if ((inptr[0] == 0xf0) && ((inptr[1] & 0xf0) == 0xb0) &&
336 (inptr[2] == 0xf0) && ((inptr[3] & 0xf0) == 0xb0)) {
338 buffer[lowpan6_header_len++] |= 0x03;
339 buffer[lowpan6_header_len++] = ((inptr[1] & 0x0f) << 4) | (inptr[3] & 0x0f);
340 }
else if (inptr[0] == 0xf0) {
342 buffer[lowpan6_header_len++] |= 0x02;
343 buffer[lowpan6_header_len++] = inptr[1];
344 buffer[lowpan6_header_len++] = inptr[2];
345 buffer[lowpan6_header_len++] = inptr[3];
346 }
else if (inptr[2] == 0xf0) {
348 buffer[lowpan6_header_len++] |= 0x01;
349 buffer[lowpan6_header_len++] = inptr[0];
350 buffer[lowpan6_header_len++] = inptr[1];
351 buffer[lowpan6_header_len++] = inptr[3];
354 lowpan6_header_len++;
355 buffer[lowpan6_header_len++] = inptr[0];
356 buffer[lowpan6_header_len++] = inptr[1];
357 buffer[lowpan6_header_len++] = inptr[2];
358 buffer[lowpan6_header_len++] = inptr[3];
362 buffer[lowpan6_header_len++] = inptr[6];
363 buffer[lowpan6_header_len++] = inptr[7];
369 *lowpan6_header_len_out = lowpan6_header_len;
370 *hidden_header_len_out = hidden_header_len;
391lowpan6_decompress_hdr(
u8_t *lowpan6_buffer,
size_t lowpan6_bufsize,
392 u8_t *decomp_buffer,
size_t decomp_bufsize,
395 ip6_addr_t *lowpan6_contexts,
396 struct lowpan6_link_addr *
src,
struct lowpan6_link_addr *
dest)
398 u16_t lowpan6_offset;
411 ip6hdr = (
struct ip6_hdr *)decomp_buffer;
417#if LWIP_LOWPAN6_IP_COMPRESSED_DEBUG
421 for (
j = 0;
j < lowpan6_bufsize;
j++) {
435 if (lowpan6_buffer[1] & 0x80) {
440 if ((lowpan6_buffer[0] & 0x18) == 0x00) {
441 header_temp = ((lowpan6_buffer[lowpan6_offset+1] & 0x0f) << 16) | \
442 (lowpan6_buffer[lowpan6_offset + 2] << 8) | lowpan6_buffer[lowpan6_offset+3];
444 lowpan6_buffer[lowpan6_offset],header_temp));
445 IP6H_VTCFL_SET(ip6hdr, 6, lowpan6_buffer[lowpan6_offset], header_temp);
449 }
else if ((lowpan6_buffer[0] & 0x18) == 0x08) {
450 header_temp = ((lowpan6_buffer[lowpan6_offset] & 0x0f) << 16) | (lowpan6_buffer[lowpan6_offset + 1] << 8) | lowpan6_buffer[lowpan6_offset+2];
452 lowpan6_buffer[lowpan6_offset] & 0xc0,header_temp));
453 IP6H_VTCFL_SET(ip6hdr, 6, lowpan6_buffer[lowpan6_offset] & 0xc0, header_temp);
457 }
else if ((lowpan6_buffer[0] & 0x18) == 0x10) {
463 }
else if ((lowpan6_buffer[0] & 0x18) == 0x18) {
470 if ((lowpan6_buffer[0] & 0x04) == 0x00) {
482 if ((lowpan6_buffer[0] & 0x03) == 0x00) {
485 }
else if ((lowpan6_buffer[0] & 0x03) == 0x01) {
488 }
else if ((lowpan6_buffer[0] & 0x03) == 0x02) {
491 }
else if ((lowpan6_buffer[0] & 0x03) == 0x03) {
497 if ((lowpan6_buffer[1] & 0x40) == 0x00) {
501 if ((lowpan6_buffer[1] & 0x30) == 0x00) {
504 MEMCPY(&ip6hdr->src.addr[0], lowpan6_buffer + lowpan6_offset, 16);
505 lowpan6_offset += 16;
506 }
else if ((lowpan6_buffer[1] & 0x30) == 0x10) {
509 ip6hdr->src.addr[0] =
PP_HTONL(0xfe800000UL);
510 ip6hdr->src.addr[1] = 0;
512 MEMCPY(&ip6hdr->src.addr[2], lowpan6_buffer + lowpan6_offset, 8);
514 }
else if ((lowpan6_buffer[1] & 0x30) == 0x20) {
517 ip6hdr->src.addr[0] =
PP_HTONL(0xfe800000UL);
518 ip6hdr->src.addr[1] = 0;
519 ip6hdr->src.addr[2] =
PP_HTONL(0x000000ffUL);
521 ip6hdr->src.addr[3] =
lwip_htonl(0xfe000000UL | (lowpan6_buffer[lowpan6_offset] << 8) |
522 lowpan6_buffer[lowpan6_offset + 1]);
524 }
else if ((lowpan6_buffer[1] & 0x30) == 0x30) {
527 ip6hdr->src.addr[0] =
PP_HTONL(0xfe800000UL);
528 ip6hdr->src.addr[1] = 0;
529 if (
src->addr_len == 2) {
530 ip6hdr->src.addr[2] =
PP_HTONL(0x000000ffUL);
531 ip6hdr->src.addr[3] =
lwip_htonl(0xfe000000UL | (
src->addr[0] << 8) |
src->addr[1]);
532 }
else if (
src->addr_len == 8) {
533 ip6hdr->src.addr[2] =
lwip_htonl(((
src->addr[0] ^ 2) << 24) | (
src->addr[1] << 16) |
534 (
src->addr[2] << 8) |
src->addr[3]);
535 ip6hdr->src.addr[3] =
lwip_htonl((
src->addr[4] << 24) | (
src->addr[5] << 16) |
536 (
src->addr[6] << 8) |
src->addr[7]);
546 if ((lowpan6_buffer[1] & 0x30) == 0x00) {
548 ip6hdr->src.addr[0] = 0;
549 ip6hdr->src.addr[1] = 0;
550 ip6hdr->src.addr[2] = 0;
551 ip6hdr->src.addr[3] = 0;
555 if (lowpan6_buffer[1] & 0x80) {
556 i = (lowpan6_buffer[2] >> 4) & 0x0f;
564#if LWIP_6LOWPAN_NUM_CONTEXTS > 0
565 ip6hdr->src.addr[0] = lowpan6_contexts[
i].addr[0];
566 ip6hdr->src.addr[1] = lowpan6_contexts[
i].addr[1];
574 if ((lowpan6_buffer[1] & 0x30) == 0x10) {
576 MEMCPY(&ip6hdr->src.addr[2], lowpan6_buffer + lowpan6_offset, 8);
579 }
else if ((lowpan6_buffer[1] & 0x30) == 0x20) {
581 ip6hdr->src.addr[2] =
PP_HTONL(0x000000ffUL);
582 ip6hdr->src.addr[3] =
lwip_htonl(0xfe000000UL | (lowpan6_buffer[lowpan6_offset] << 8) | lowpan6_buffer[lowpan6_offset + 1]);
585 }
else if ((lowpan6_buffer[1] & 0x30) == 0x30) {
588 if (
src->addr_len == 2) {
589 ip6hdr->src.addr[2] =
PP_HTONL(0x000000ffUL);
590 ip6hdr->src.addr[3] =
lwip_htonl(0xfe000000UL | (
src->addr[0] << 8) |
src->addr[1]);
591 }
else if (
src->addr_len == 8) {
592 ip6hdr->src.addr[2] =
lwip_htonl(((
src->addr[0] ^ 2) << 24) | (
src->addr[1] << 16) | (
src->addr[2] << 8) |
src->addr[3]);
593 ip6hdr->src.addr[3] =
lwip_htonl((
src->addr[4] << 24) | (
src->addr[5] << 16) | (
src->addr[6] << 8) |
src->addr[7]);
603 if (lowpan6_buffer[1] & 0x08) {
606 if (lowpan6_buffer[1] & 0x04) {
612 if ((lowpan6_buffer[1] & 0x03) == 0x00) {
615 MEMCPY(&ip6hdr->dest.addr[0], lowpan6_buffer + lowpan6_offset, 16);
616 lowpan6_offset += 16;
617 }
else if ((lowpan6_buffer[1] & 0x03) == 0x01) {
620 ip6hdr->dest.addr[0] =
lwip_htonl(0xff000000UL | (lowpan6_buffer[lowpan6_offset++] << 16));
621 ip6hdr->dest.addr[1] = 0;
622 ip6hdr->dest.addr[2] =
lwip_htonl(lowpan6_buffer[lowpan6_offset++]);
623 ip6hdr->dest.addr[3] =
lwip_htonl((lowpan6_buffer[lowpan6_offset] << 24) | (lowpan6_buffer[lowpan6_offset + 1] << 16) | (lowpan6_buffer[lowpan6_offset + 2] << 8) | lowpan6_buffer[lowpan6_offset + 3]);
625 }
else if ((lowpan6_buffer[1] & 0x03) == 0x02) {
628 ip6hdr->dest.addr[0] =
lwip_htonl(0xff000000UL | (lowpan6_buffer[lowpan6_offset++] << 16));
629 ip6hdr->dest.addr[1] = 0;
630 ip6hdr->dest.addr[2] = 0;
631 ip6hdr->dest.addr[3] =
lwip_htonl((lowpan6_buffer[lowpan6_offset] << 16) | (lowpan6_buffer[lowpan6_offset + 1] << 8) | lowpan6_buffer[lowpan6_offset + 2]);
633 }
else if ((lowpan6_buffer[1] & 0x03) == 0x03) {
636 ip6hdr->dest.addr[0] =
PP_HTONL(0xff020000UL);
637 ip6hdr->dest.addr[1] = 0;
638 ip6hdr->dest.addr[2] = 0;
639 ip6hdr->dest.addr[3] =
lwip_htonl(lowpan6_buffer[lowpan6_offset++]);
644 if (lowpan6_buffer[1] & 0x04) {
648 if (lowpan6_buffer[1] & 0x80) {
649 i = lowpan6_buffer[2] & 0x0f;
657#if LWIP_6LOWPAN_NUM_CONTEXTS > 0
658 ip6hdr->dest.addr[0] = lowpan6_contexts[
i].addr[0];
659 ip6hdr->dest.addr[1] = lowpan6_contexts[
i].addr[1];
664 ip6hdr->dest.addr[0] =
PP_HTONL(0xfe800000UL);
665 ip6hdr->dest.addr[1] = 0;
669 if ((lowpan6_buffer[1] & 0x03) == 0x00) {
672 MEMCPY(&ip6hdr->dest.addr[0], lowpan6_buffer + lowpan6_offset, 16);
673 lowpan6_offset += 16;
674 }
else if ((lowpan6_buffer[1] & 0x03) == 0x01) {
677 MEMCPY(&ip6hdr->dest.addr[2], lowpan6_buffer + lowpan6_offset, 8);
679 }
else if ((lowpan6_buffer[1] & 0x03) == 0x02) {
682 ip6hdr->dest.addr[2] =
PP_HTONL(0x000000ffUL);
683 ip6hdr->dest.addr[3] =
lwip_htonl(0xfe000000UL | (lowpan6_buffer[lowpan6_offset] << 8) | lowpan6_buffer[lowpan6_offset + 1]);
685 }
else if ((lowpan6_buffer[1] & 0x03) == 0x03) {
688 if (
dest->addr_len == 2) {
689 ip6hdr->dest.addr[2] =
PP_HTONL(0x000000ffUL);
690 ip6hdr->dest.addr[3] =
lwip_htonl(0xfe000000UL | (
dest->addr[0] << 8) |
dest->addr[1]);
691 }
else if (
dest->addr_len == 8) {
704 if (lowpan6_buffer[0] & 0x04) {
707 if ((lowpan6_buffer[lowpan6_offset] & 0xf8) == 0xf0) {
720 if (lowpan6_buffer[lowpan6_offset] & 0x04) {
727 i = lowpan6_buffer[lowpan6_offset++] & 0x03;
729 udphdr->src =
lwip_htons(lowpan6_buffer[lowpan6_offset] << 8 | lowpan6_buffer[lowpan6_offset + 1]);
730 udphdr->dest =
lwip_htons(lowpan6_buffer[lowpan6_offset + 2] << 8 | lowpan6_buffer[lowpan6_offset + 3]);
732 }
else if (
i == 0x01) {
733 udphdr->src =
lwip_htons(lowpan6_buffer[lowpan6_offset] << 8 | lowpan6_buffer[lowpan6_offset + 1]);
736 }
else if (
i == 0x02) {
738 udphdr->dest =
lwip_htons(lowpan6_buffer[lowpan6_offset + 1] << 8 | lowpan6_buffer[lowpan6_offset + 2]);
740 }
else if (
i == 0x03) {
741 udphdr->src =
lwip_htons(0xf0b0 | ((lowpan6_buffer[lowpan6_offset] >> 4) & 0x0f));
742 udphdr->dest =
lwip_htons(0xf0b0 | (lowpan6_buffer[lowpan6_offset] & 0x0f));
746 udphdr->chksum =
lwip_htons(lowpan6_buffer[lowpan6_offset] << 8 | lowpan6_buffer[lowpan6_offset + 1]);
749 if (datagram_size == 0) {
750 datagram_size = compressed_size - lowpan6_offset + ip6_offset;
762 if (datagram_size == 0) {
763 datagram_size = compressed_size - lowpan6_offset + ip6_offset;
768 if (lowpan6_offset > lowpan6_bufsize) {
772 *hdr_size_comp = lowpan6_offset;
773 *hdr_size_decomp = ip6_offset;
779lowpan6_decompress(
struct pbuf *
p,
u16_t datagram_size, ip6_addr_t *lowpan6_contexts,
780 struct lowpan6_link_addr *
src,
struct lowpan6_link_addr *
dest)
783 u16_t lowpan6_offset, ip6_offset;
787#define UDP_HLEN_ALLOC UDP_HLEN
789#define UDP_HLEN_ALLOC 0
799 if (
q->len <
IP6_HLEN + UDP_HLEN_ALLOC) {
807 err = lowpan6_decompress_hdr((
u8_t *)
p->payload,
p->len, (
u8_t *)
q->payload,
q->len,
808 &lowpan6_offset, &ip6_offset, datagram_size,
p->tot_len, lowpan6_contexts,
src,
dest);
829 if (
p->next !=
NULL) {
#define LWIP_DEBUGF(debug, message)
#define LWIP_ASSERT(message, assertion)
GLdouble GLdouble GLdouble GLdouble q
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
#define LWIP_UNUSED_ARG(x)
void pbuf_realloc(struct pbuf *p, u16_t new_len)
void pbuf_cat(struct pbuf *h, struct pbuf *t)
struct pbuf * pbuf_alloc(pbuf_layer layer, u16_t length, pbuf_type type)
u8_t pbuf_free(struct pbuf *p)
err_t pbuf_copy(struct pbuf *p_to, const struct pbuf *p_from)
#define ip_addr_copy_from_ip6_packed(dest, src)
#define LWIP_LOWPAN6_IP_COMPRESSED_DEBUG
#define LWIP_6LOWPAN_NUM_CONTEXTS
#define LWIP_LOWPAN6_DECOMPRESSION_DEBUG
#define MEMCPY(DST, SRC, BYTES)
u8_t pbuf_remove_header(struct pbuf *p, size_t header_size_decrement)
u8_t pbuf_add_header_force(struct pbuf *p, size_t header_size_increment)
#define IP6H_PLEN_SET(hdr, plen)
#define IP6H_NEXTH_SET(hdr, nexth)
#define IP6H_VTCFL_SET(hdr, v, tc, fl)
#define IP6H_HOPLIM_SET(hdr, hl)