diff --git a/core/net/sicslowpan.c b/core/net/sicslowpan.c index dd546d465..41b1934a0 100644 --- a/core/net/sicslowpan.c +++ b/core/net/sicslowpan.c @@ -32,7 +32,7 @@ * * This file is part of the Contiki operating system. * - * $Id: sicslowpan.c,v 1.40 2010/05/24 10:07:34 joxe Exp $ + * $Id: sicslowpan.c,v 1.41 2010/05/24 14:28:56 joxe Exp $ */ /** * \file @@ -123,7 +123,6 @@ void uip_log(char *msg); /** \name Pointers in the rime buffer * @{ */ -/* #define RIME_FRAG_BUF ((struct sicslowpan_frag_hdr *)rime_ptr) */ #define RIME_FRAG_PTR (rime_ptr) #define RIME_FRAG_DISPATCH_SIZE 0 /* 16 bit */ #define RIME_FRAG_TAG 2 /* 16 bit */ @@ -132,13 +131,11 @@ void uip_log(char *msg); /* define the buffer as a byte array */ #define RIME_IPHC_BUF ((uint8_t *)(rime_ptr + rime_hdr_len)) -/* #define RIME_HC1_BUF ((struct sicslowpan_hc1_hdr *)(rime_ptr + rime_hdr_len)) */ #define RIME_HC1_PTR (rime_ptr + rime_hdr_len) #define RIME_HC1_DISPATCH 0 /* 8 bit */ #define RIME_HC1_ENCODING 1 /* 8 bit */ #define RIME_HC1_TTL 2 /* 8 bit */ -/* #define RIME_HC1_HC_UDP_BUF ((struct sicslowpan_hc1_hc_udp_hdr *)(rime_ptr + rime_hdr_len)) */ #define RIME_HC1_HC_UDP_PTR (rime_ptr + rime_hdr_len) #define RIME_HC1_HC_UDP_DISPATCH 0 /* 8 bit */ #define RIME_HC1_HC_UDP_HC1_ENCODING 1 /* 8 bit */ @@ -147,18 +144,11 @@ void uip_log(char *msg); #define RIME_HC1_HC_UDP_PORTS 4 /* 8 bit */ #define RIME_HC1_HC_UDP_CHKSUM 5 /* 16 bit */ -/* #define RIME_IPHC_DISPATCH 0 /\* 8 bit *\/ */ -/* #define RIME_IPHC_ENCODING1 1 /\* 8 bit *\/ */ -/* #define RIME_IPHC_ENCODING2 2 /\* 8 bit *\/ */ - -/* #define RIME_IP_BUF ((struct uip_ip_hdr *)(rime_ptr + rime_hdr_len)) */ -/** @} */ - /** \name Pointers in the sicslowpan and uip buffer * @{ */ -#define SICSLOWPAN_IP_BUF ((struct uip_ip_hdr *)&sicslowpan_buf.u8[UIP_LLH_LEN]) -#define SICSLOWPAN_UDP_BUF ((struct uip_udp_hdr *)&sicslowpan_buf.u8[UIP_LLIPH_LEN]) +#define SICSLOWPAN_IP_BUF ((struct uip_ip_hdr *)&sicslowpan_buf[UIP_LLH_LEN]) +#define SICSLOWPAN_UDP_BUF ((struct uip_udp_hdr *)&sicslowpan_buf[UIP_LLIPH_LEN]) #define UIP_IP_BUF ((struct uip_ip_hdr *)&uip_buf[UIP_LLH_LEN]) #define UIP_UDP_BUF ((struct uip_udp_hdr *)&uip_buf[UIP_LLIPH_LEN]) @@ -215,13 +205,14 @@ static u8_t uncomp_hdr_len; */ static u16_t sicslowpan_len; + /** * The buffer used for the 6lowpan reassembly. * This buffer contains only the IPv6 packet (no MAC header, 6lowpan, etc). * It has a fix size as we do not use dynamic memory allocation. */ - -static uip_buf_t sicslowpan_buf; +static uip_buf_t sicslowpan_aligned_buf; +#define sicslowpan_buf (sicslowpan_aligned_buf.u8) /** The total length of the IPv6 packet in the sicslowpan_buf. */ @@ -269,7 +260,6 @@ static struct sicslowpan_addr_context *context; /** pointer to the byte where to write next inline field. */ static uint8_t *hc06_ptr; - /*--------------------------------------------------------------------*/ /** \name HC06 related functions * @{ */ @@ -306,24 +296,25 @@ addr_context_lookup_by_number(u8_t number) { return NULL; } /*--------------------------------------------------------------------*/ -static void +static uint8_t compress_addr_64(uint8_t bitpos, uip_ipaddr_t *ipaddr, uip_lladdr_t *lladdr) { if(uip_is_addr_mac_addr_based(ipaddr, lladdr)){ - RIME_IPHC_BUF[1] |= 3 << bitpos; /* 0-bits */ + return 3 << bitpos; /* 0-bits */ } else if(sicslowpan_is_iid_16_bit_compressable(ipaddr)){ /* compress IID to 16 bits xxxx::XXXX */ - RIME_IPHC_BUF[1] |= 2 << bitpos; /* 16-bits */ memcpy(hc06_ptr, &ipaddr->u16[7], 2); hc06_ptr += 2; + return 2 << bitpos; /* 16-bits */ } else { /* do not compress IID => xxxx::IID */ - RIME_IPHC_BUF[1] |= 1 << bitpos; /* 64-bits */ memcpy(hc06_ptr, &ipaddr->u16[4], 8); hc06_ptr += 8; + return 1 << bitpos; /* 64-bits */ } } /*--------------------------------------------------------------------*/ + static void uncompress_lladdr(uint8_t mode, uip_ipaddr_t *ipaddr, uip_lladdr_t *lladdr) { switch(mode) { @@ -399,7 +390,7 @@ uncompress_lladdr(uint8_t mode, uip_ipaddr_t *ipaddr, uip_lladdr_t *lladdr) { static void compress_hdr_hc06(rimeaddr_t *rime_destaddr) { - uint8_t tmp; + uint8_t tmp, iphc0, iphc1; #if DEBUG PRINTF("before compression: "); for (tmp = 0; tmp < UIP_IP_BUF->len[1] + 40; tmp++) { @@ -417,8 +408,8 @@ compress_hdr_hc06(rimeaddr_t *rime_destaddr) * this does not work. We therefore reset the IPHC encoding here */ - RIME_IPHC_BUF[0] = SICSLOWPAN_DISPATCH_IPHC; - RIME_IPHC_BUF[1] = 0; + iphc0 = SICSLOWPAN_DISPATCH_IPHC; + iphc1 = 0; RIME_IPHC_BUF[2] = 0; /* might not be used - but needs to be cleared */ /* @@ -435,7 +426,7 @@ compress_hdr_hc06(rimeaddr_t *rime_destaddr) addr_context_lookup_by_prefix(&UIP_IP_BUF->srcipaddr) != NULL) { /* set context flag and increase hc06_ptr */ PRINTF("IPHC: compressing dest or src ipaddr - setting CID\n"); - RIME_IPHC_BUF[1] |= SICSLOWPAN_IPHC_CID; + iphc1 |= SICSLOWPAN_IPHC_CID; hc06_ptr++; } @@ -453,11 +444,11 @@ compress_hdr_hc06(rimeaddr_t *rime_destaddr) if(((UIP_IP_BUF->tcflow & 0x0F) == 0) && (UIP_IP_BUF->flow == 0)) { /* flow label can be compressed */ - RIME_IPHC_BUF[0] |= SICSLOWPAN_IPHC_FL_C; + iphc0 |= SICSLOWPAN_IPHC_FL_C; if(((UIP_IP_BUF->vtc & 0x0F) == 0) && ((UIP_IP_BUF->tcflow & 0xF0) == 0)) { /* compress (elide) all */ - RIME_IPHC_BUF[0] |= SICSLOWPAN_IPHC_TC_C; + iphc0 |= SICSLOWPAN_IPHC_TC_C; } else { /* compress only the flow label */ *hc06_ptr = tmp; @@ -468,7 +459,7 @@ compress_hdr_hc06(rimeaddr_t *rime_destaddr) if(((UIP_IP_BUF->vtc & 0x0F) == 0) && ((UIP_IP_BUF->tcflow & 0xF0) == 0)) { /* compress only traffic class */ - RIME_IPHC_BUF[0] |= SICSLOWPAN_IPHC_TC_C; + iphc0 |= SICSLOWPAN_IPHC_TC_C; *hc06_ptr = (tmp & 0xc0) | (UIP_IP_BUF->tcflow & 0x0F); memcpy(hc06_ptr + 1, &UIP_IP_BUF->flow, 2); @@ -487,15 +478,15 @@ compress_hdr_hc06(rimeaddr_t *rime_destaddr) /* Next header. We compress it if UDP */ #if UIP_CONF_UDP if(UIP_IP_BUF->proto == UIP_PROTO_UDP) { - RIME_IPHC_BUF[0] |= SICSLOWPAN_IPHC_NH_C; + iphc0 |= SICSLOWPAN_IPHC_NH_C; } #endif /*UIP_CONF_UDP*/ #ifdef SICSLOWPAN_NH_COMPRESSOR if(SICSLOWPAN_NH_COMPRESSOR.is_compressable(UIP_IP_BUF->proto)) { - RIME_IPHC_BUF[0] |= SICSLOWPAN_IPHC_NH_C; + iphc0 |= SICSLOWPAN_IPHC_NH_C; } #endif - if ((RIME_IPHC_BUF[0] & SICSLOWPAN_IPHC_NH_C) == 0) { + if ((iphc0 & SICSLOWPAN_IPHC_NH_C) == 0) { *hc06_ptr = UIP_IP_BUF->proto; hc06_ptr += 1; } @@ -509,13 +500,13 @@ compress_hdr_hc06(rimeaddr_t *rime_destaddr) */ switch(UIP_IP_BUF->ttl) { case 1: - RIME_IPHC_BUF[0] |= SICSLOWPAN_IPHC_TTL_1; + iphc0 |= SICSLOWPAN_IPHC_TTL_1; break; case 64: - RIME_IPHC_BUF[0] |= SICSLOWPAN_IPHC_TTL_64; + iphc0 |= SICSLOWPAN_IPHC_TTL_64; break; case 255: - RIME_IPHC_BUF[0] |= SICSLOWPAN_IPHC_TTL_255; + iphc0 |= SICSLOWPAN_IPHC_TTL_255; break; default: *hc06_ptr = UIP_IP_BUF->ttl; @@ -526,26 +517,26 @@ compress_hdr_hc06(rimeaddr_t *rime_destaddr) /* source address - cannot be multicast */ if(uip_is_addr_unspecified(&UIP_IP_BUF->srcipaddr)) { PRINTF("IPHC: compressing unspecified - setting SAC\n"); - RIME_IPHC_BUF[1] |= SICSLOWPAN_IPHC_SAC; - RIME_IPHC_BUF[1] |= SICSLOWPAN_IPHC_SAM_00; + iphc1 |= SICSLOWPAN_IPHC_SAC; + iphc1 |= SICSLOWPAN_IPHC_SAM_00; } else if((context = addr_context_lookup_by_prefix(&UIP_IP_BUF->srcipaddr)) != NULL) { /* elide the prefix - indicate by CID and set context + SAC */ PRINTF("IPHC: compressing src with context - setting CID & SAC ctx: %d\n", context->number); - RIME_IPHC_BUF[1] |= SICSLOWPAN_IPHC_CID | SICSLOWPAN_IPHC_SAC; + iphc1 |= SICSLOWPAN_IPHC_CID | SICSLOWPAN_IPHC_SAC; RIME_IPHC_BUF[2] |= context->number << 4; /* compession compare with this nodes address (source) */ - compress_addr_64(SICSLOWPAN_IPHC_SAM_BIT, - &UIP_IP_BUF->srcipaddr, &uip_lladdr); + iphc1 |= compress_addr_64(SICSLOWPAN_IPHC_SAM_BIT, + &UIP_IP_BUF->srcipaddr, &uip_lladdr); /* No context found for this address */ } else if(uip_is_addr_link_local(&UIP_IP_BUF->srcipaddr)) { - compress_addr_64(SICSLOWPAN_IPHC_SAM_BIT, - &UIP_IP_BUF->srcipaddr, &uip_lladdr); + iphc1 |= compress_addr_64(SICSLOWPAN_IPHC_SAM_BIT, + &UIP_IP_BUF->srcipaddr, &uip_lladdr); } else { /* send the full address => SAC = 0, SAM = 00 */ - RIME_IPHC_BUF[1] |= SICSLOWPAN_IPHC_SAM_00; /* 128-bits */ + iphc1 |= SICSLOWPAN_IPHC_SAM_00; /* 128-bits */ memcpy(hc06_ptr, &UIP_IP_BUF->srcipaddr.u16[0], 16); hc06_ptr += 16; } @@ -553,26 +544,26 @@ compress_hdr_hc06(rimeaddr_t *rime_destaddr) /* dest address*/ if(uip_is_addr_mcast(&UIP_IP_BUF->destipaddr)) { /* Address is multicast, try to compress */ - RIME_IPHC_BUF[1] |= SICSLOWPAN_IPHC_M; + iphc1 |= SICSLOWPAN_IPHC_M; if(sicslowpan_is_mcast_addr_compressable8(&UIP_IP_BUF->destipaddr)) { - RIME_IPHC_BUF[1] |= SICSLOWPAN_IPHC_DAM_11; + iphc1 |= SICSLOWPAN_IPHC_DAM_11; /* use last byte */ *hc06_ptr = UIP_IP_BUF->destipaddr.u8[15]; hc06_ptr += 1; } else if(sicslowpan_is_mcast_addr_compressable32(&UIP_IP_BUF->destipaddr)){ - RIME_IPHC_BUF[1] |= SICSLOWPAN_IPHC_DAM_10; + iphc1 |= SICSLOWPAN_IPHC_DAM_10; /* second byte + the last three */ *hc06_ptr = UIP_IP_BUF->destipaddr.u8[1]; memcpy(hc06_ptr + 1, &UIP_IP_BUF->destipaddr.u8[13], 3); hc06_ptr += 4; } else if(sicslowpan_is_mcast_addr_compressable48(&UIP_IP_BUF->destipaddr)){ - RIME_IPHC_BUF[1] |= SICSLOWPAN_IPHC_DAM_01; + iphc1 |= SICSLOWPAN_IPHC_DAM_01; /* second byte + the last five */ *hc06_ptr = UIP_IP_BUF->destipaddr.u8[1]; memcpy(hc06_ptr + 1, &UIP_IP_BUF->destipaddr.u8[11], 5); hc06_ptr += 6; } else { - RIME_IPHC_BUF[1] |= SICSLOWPAN_IPHC_DAM_00; + iphc1 |= SICSLOWPAN_IPHC_DAM_00; /* full address */ memcpy(hc06_ptr, &UIP_IP_BUF->destipaddr.u8[0], 16); hc06_ptr += 16; @@ -581,19 +572,19 @@ compress_hdr_hc06(rimeaddr_t *rime_destaddr) /* Address is unicast, try to compress */ if((context = addr_context_lookup_by_prefix(&UIP_IP_BUF->destipaddr)) != NULL) { /* elide the prefix */ - RIME_IPHC_BUF[1] |= SICSLOWPAN_IPHC_DAC; + iphc1 |= SICSLOWPAN_IPHC_DAC; RIME_IPHC_BUF[2] |= context->number; /* compession compare with link adress (destination) */ - compress_addr_64(SICSLOWPAN_IPHC_DAM_BIT, - &UIP_IP_BUF->destipaddr, (uip_lladdr_t *)rime_destaddr); + iphc1 |= compress_addr_64(SICSLOWPAN_IPHC_DAM_BIT, + &UIP_IP_BUF->destipaddr, (uip_lladdr_t *)rime_destaddr); /* No context found for this address */ } else if(uip_is_addr_link_local(&UIP_IP_BUF->destipaddr)) { - compress_addr_64(SICSLOWPAN_IPHC_DAM_BIT, - &UIP_IP_BUF->destipaddr, (uip_lladdr_t *)rime_destaddr); + iphc1 |= compress_addr_64(SICSLOWPAN_IPHC_DAM_BIT, + &UIP_IP_BUF->destipaddr, (uip_lladdr_t *)rime_destaddr); } else { /* send the full address */ - RIME_IPHC_BUF[1] |= SICSLOWPAN_IPHC_DAM_00; /* 128-bits */ + iphc1 |= SICSLOWPAN_IPHC_DAM_00; /* 128-bits */ memcpy(hc06_ptr, &UIP_IP_BUF->destipaddr.u16[0], 16); hc06_ptr += 16; } @@ -651,10 +642,16 @@ compress_hdr_hc06(rimeaddr_t *rime_destaddr) uncomp_hdr_len += UIP_UDPH_LEN; } #endif /*UIP_CONF_UDP*/ + #ifdef SICSLOWPAN_NH_COMPRESSOR /* if nothing to compress just return zero */ hc06_ptr += SICSLOWPAN_NH_COMPRESSOR.compress(hc06_ptr, &uncomp_hdr_len); #endif + + /* before the rime_hdr_len operation */ + RIME_IPHC_BUF[0] = iphc0; + RIME_IPHC_BUF[1] = iphc1; + rime_hdr_len = hc06_ptr - rime_ptr; return; } @@ -678,20 +675,23 @@ compress_hdr_hc06(rimeaddr_t *rime_destaddr) static void uncompress_hdr_hc06(u16_t ip_len) { - uint8_t tmp; + uint8_t tmp, iphc0, iphc1; /* at least two byte will be used for the encoding */ hc06_ptr = rime_ptr + rime_hdr_len + 2; + iphc0 = RIME_IPHC_BUF[0]; + iphc1 = RIME_IPHC_BUF[1]; + /* another if the CID flag is set */ - if(RIME_IPHC_BUF[1] & SICSLOWPAN_IPHC_CID) { + if(iphc1 & SICSLOWPAN_IPHC_CID) { PRINTF("IPHC: CID flag set - increase header with one\n"); hc06_ptr++; } /* Traffic class and flow label */ - if((RIME_IPHC_BUF[0] & SICSLOWPAN_IPHC_FL_C) == 0) { + if((iphc0 & SICSLOWPAN_IPHC_FL_C) == 0) { /* Flow label are carried inline */ - if((RIME_IPHC_BUF[0] & SICSLOWPAN_IPHC_TC_C) == 0) { + if((iphc0 & SICSLOWPAN_IPHC_TC_C) == 0) { /* Traffic class is carried inline */ memcpy(&SICSLOWPAN_IP_BUF->tcflow, hc06_ptr + 1, 3); tmp = *hc06_ptr; @@ -714,7 +714,7 @@ uncompress_hdr_hc06(u16_t ip_len) { } else { /* Version is always 6! */ /* Version and flow label are compressed */ - if((RIME_IPHC_BUF[0] & SICSLOWPAN_IPHC_TC_C) == 0) { + if((iphc0 & SICSLOWPAN_IPHC_TC_C) == 0) { /* Traffic class is inline */ SICSLOWPAN_IP_BUF->vtc = 0x60 | ((*hc06_ptr >> 2) & 0x0f); SICSLOWPAN_IP_BUF->tcflow = ((*hc06_ptr << 6) & 0xC0) | ((*hc06_ptr >> 2) & 0x30); @@ -729,7 +729,7 @@ uncompress_hdr_hc06(u16_t ip_len) { } /* Next Header */ - if((RIME_IPHC_BUF[0] & SICSLOWPAN_IPHC_NH_C) == 0) { + if((iphc0 & SICSLOWPAN_IPHC_NH_C) == 0) { /* Next header is carried inline */ SICSLOWPAN_IP_BUF->proto = *hc06_ptr; PRINTF("IPHC: next header inline: %d\n", SICSLOWPAN_IP_BUF->proto); @@ -737,7 +737,7 @@ uncompress_hdr_hc06(u16_t ip_len) { } /* Hop limit */ - switch(RIME_IPHC_BUF[0] & 0x03) { + switch(iphc0 & 0x03) { case SICSLOWPAN_IPHC_TTL_1: SICSLOWPAN_IP_BUF->ttl = 1; break; @@ -754,12 +754,12 @@ uncompress_hdr_hc06(u16_t ip_len) { } /* context based compression */ - if(RIME_IPHC_BUF[1] & SICSLOWPAN_IPHC_SAC) { - uint8_t sci = (RIME_IPHC_BUF[1] & SICSLOWPAN_IPHC_CID) ? + if(iphc1 & SICSLOWPAN_IPHC_SAC) { + uint8_t sci = (iphc1 & SICSLOWPAN_IPHC_CID) ? RIME_IPHC_BUF[2] >> 4 : 0; /* Source address */ - if((RIME_IPHC_BUF[1] & SICSLOWPAN_IPHC_SAM_11) != SICSLOWPAN_IPHC_SAM_00) { + if((iphc1 & SICSLOWPAN_IPHC_SAM_11) != SICSLOWPAN_IPHC_SAM_00) { context = addr_context_lookup_by_number(sci); if(context == NULL) { @@ -770,7 +770,7 @@ uncompress_hdr_hc06(u16_t ip_len) { } } - switch(RIME_IPHC_BUF[1] & SICSLOWPAN_IPHC_SAM_11) { + switch(iphc1 & SICSLOWPAN_IPHC_SAM_11) { case SICSLOWPAN_IPHC_SAM_00: /* copy the unspecificed address */ PRINTF("IPHC: unspecified address\n"); @@ -802,20 +802,20 @@ uncompress_hdr_hc06(u16_t ip_len) { /* end context based compression */ } else { /* no compression and link local */ - uncompress_lladdr((RIME_IPHC_BUF[1] & SICSLOWPAN_IPHC_SAM_11) >> SICSLOWPAN_IPHC_SAM_BIT, + uncompress_lladdr((iphc1 & SICSLOWPAN_IPHC_SAM_11) >> SICSLOWPAN_IPHC_SAM_BIT, &SICSLOWPAN_IP_BUF->srcipaddr, (uip_lladdr_t *)packetbuf_addr(PACKETBUF_ADDR_SENDER)); } /* Destination address */ /* multicast compression */ - if(RIME_IPHC_BUF[1] & SICSLOWPAN_IPHC_M) { + if(iphc1 & SICSLOWPAN_IPHC_M) { /* context based multicast compression */ - if(RIME_IPHC_BUF[1] & SICSLOWPAN_IPHC_DAC) { + if(iphc1 & SICSLOWPAN_IPHC_DAC) { /* TODO: implement this */ } else { /* non-context based multicast compression */ - switch (RIME_IPHC_BUF[1] & SICSLOWPAN_IPHC_DAM_11) { + switch (iphc1 & SICSLOWPAN_IPHC_DAM_11) { case SICSLOWPAN_IPHC_DAM_00: /* 128 bits */ /* copy whole address from packet */ memcpy(&SICSLOWPAN_IP_BUF->destipaddr.u8[0], hc06_ptr, 16); @@ -847,8 +847,8 @@ uncompress_hdr_hc06(u16_t ip_len) { } else { /* no multicast */ /* Context based */ - if(RIME_IPHC_BUF[1] & SICSLOWPAN_IPHC_DAC) { - uint8_t dci = (RIME_IPHC_BUF[1] & SICSLOWPAN_IPHC_CID) ? + if(iphc1 & SICSLOWPAN_IPHC_DAC) { + uint8_t dci = (iphc1 & SICSLOWPAN_IPHC_CID) ? RIME_IPHC_BUF[2] & 0x0f : 0; context = addr_context_lookup_by_number(dci); @@ -858,7 +858,7 @@ uncompress_hdr_hc06(u16_t ip_len) { return; } - switch (RIME_IPHC_BUF[1] & SICSLOWPAN_IPHC_DAM_11) { + switch (iphc1 & SICSLOWPAN_IPHC_DAM_11) { case SICSLOWPAN_IPHC_DAM_01: /* 64 bits */ /* copy prefix from context - rest from packet */ memcpy(&SICSLOWPAN_IP_BUF->destipaddr, context->prefix, 8); @@ -882,14 +882,14 @@ uncompress_hdr_hc06(u16_t ip_len) { } } else { /* not context based => link local M = 0, DAC = 0 - same as SAC */ - uncompress_lladdr((RIME_IPHC_BUF[1] & SICSLOWPAN_IPHC_DAM_11) >> SICSLOWPAN_IPHC_DAM_BIT, + uncompress_lladdr((iphc1 & SICSLOWPAN_IPHC_DAM_11) >> SICSLOWPAN_IPHC_DAM_BIT, &SICSLOWPAN_IP_BUF->destipaddr, (uip_lladdr_t *)packetbuf_addr(PACKETBUF_ADDR_RECEIVER)); } } uncomp_hdr_len += UIP_IPH_LEN; /* Next header processing - continued */ - if((RIME_IPHC_BUF[0] & SICSLOWPAN_IPHC_NH_C)) { + if((iphc0 & SICSLOWPAN_IPHC_NH_C)) { /* The next header is compressed, NHC is following */ if((*hc06_ptr & SICSLOWPAN_NHC_UDP_MASK) == SICSLOWPAN_NHC_UDP_ID) { uint8_t checksum_compressed; @@ -1071,24 +1071,19 @@ compress_hdr_hc1(rimeaddr_t *rime_destaddr) * All fields in the IP header but Hop Limit are elided * If next header is UDP, we compress UDP header using HC2 */ -/* RIME_HC1_BUF->dispatch = SICSLOWPAN_DISPATCH_HC1; */ RIME_HC1_PTR[RIME_HC1_DISPATCH] = SICSLOWPAN_DISPATCH_HC1; uncomp_hdr_len += UIP_IPH_LEN; switch(UIP_IP_BUF->proto) { case UIP_PROTO_ICMP6: /* HC1 encoding and ttl */ -/* RIME_HC1_BUF->encoding = 0xFC; */ RIME_HC1_PTR[RIME_HC1_ENCODING] = 0xFC; -/* RIME_HC1_BUF->ttl = UIP_IP_BUF->ttl; */ RIME_HC1_PTR[RIME_HC1_TTL] = UIP_IP_BUF->ttl; rime_hdr_len += SICSLOWPAN_HC1_HDR_LEN; break; #if UIP_CONF_TCP case UIP_PROTO_TCP: /* HC1 encoding and ttl */ -/* RIME_HC1_BUF->encoding = 0xFE; */ RIME_HC1_PTR[RIME_HC1_ENCODING] = 0xFE; -/* RIME_HC1_BUF->ttl = UIP_IP_BUF->ttl; */ RIME_HC1_PTR[RIME_HC1_TTL] = UIP_IP_BUF->ttl; rime_hdr_len += SICSLOWPAN_HC1_HDR_LEN; break; @@ -1106,30 +1101,22 @@ compress_hdr_hc1(rimeaddr_t *rime_destaddr) HTONS(UIP_UDP_BUF->destport) >= SICSLOWPAN_UDP_PORT_MIN && HTONS(UIP_UDP_BUF->destport) < SICSLOWPAN_UDP_PORT_MAX) { /* HC1 encoding */ -/* RIME_HC1_HC_UDP_BUF->hc1_encoding = 0xFB; */ RIME_HC1_HC_UDP_PTR[RIME_HC1_HC_UDP_HC1_ENCODING] = 0xFB; /* HC_UDP encoding, ttl, src and dest ports, checksum */ -/* RIME_HC1_HC_UDP_BUF->hc_udp_encoding = 0xE0; */ RIME_HC1_HC_UDP_PTR[RIME_HC1_HC_UDP_UDP_ENCODING] = 0xE0; -/* RIME_HC1_HC_UDP_BUF->ttl = UIP_IP_BUF->ttl; */ RIME_HC1_HC_UDP_PTR[RIME_HC1_HC_UDP_TTL] = UIP_IP_BUF->ttl; -/* RIME_HC1_HC_UDP_BUF->ports = (u8_t)((HTONS(UIP_UDP_BUF->srcport) - */ -/* SICSLOWPAN_UDP_PORT_MIN) << 4) + */ -/* (u8_t)((HTONS(UIP_UDP_BUF->destport) - SICSLOWPAN_UDP_PORT_MIN)); */ + RIME_HC1_HC_UDP_PTR[RIME_HC1_HC_UDP_PORTS] = (u8_t)((HTONS(UIP_UDP_BUF->srcport) - SICSLOWPAN_UDP_PORT_MIN) << 4) + (u8_t)((HTONS(UIP_UDP_BUF->destport) - SICSLOWPAN_UDP_PORT_MIN)); -/* RIME_HC1_HC_UDP_BUF->udpchksum = UIP_UDP_BUF->udpchksum; */ memcpy(&RIME_HC1_HC_UDP_PTR[RIME_HC1_HC_UDP_CHKSUM], &UIP_UDP_BUF->udpchksum, 2); rime_hdr_len += SICSLOWPAN_HC1_HC_UDP_HDR_LEN; uncomp_hdr_len += UIP_UDPH_LEN; } else { /* HC1 encoding and ttl */ -/* RIME_HC1_BUF->encoding = 0xFA; */ RIME_HC1_PTR[RIME_HC1_ENCODING] = 0xFA; -/* RIME_HC1_BUF->ttl = UIP_IP_BUF->ttl; */ RIME_HC1_PTR[RIME_HC1_TTL] = UIP_IP_BUF->ttl; rime_hdr_len += SICSLOWPAN_HC1_HDR_LEN; } @@ -1174,18 +1161,15 @@ uncompress_hdr_hc1(u16_t ip_len) { uncomp_hdr_len += UIP_IPH_LEN; /* Next header field */ -/* switch(RIME_HC1_BUF->encoding & 0x06) { */ switch(RIME_HC1_PTR[RIME_HC1_ENCODING] & 0x06) { case SICSLOWPAN_HC1_NH_ICMP6: SICSLOWPAN_IP_BUF->proto = UIP_PROTO_ICMP6; -/* SICSLOWPAN_IP_BUF->ttl = RIME_HC1_BUF->ttl; */ SICSLOWPAN_IP_BUF->ttl = RIME_HC1_PTR[RIME_HC1_TTL]; rime_hdr_len += SICSLOWPAN_HC1_HDR_LEN; break; #if UIP_CONF_TCP case SICSLOWPAN_HC1_NH_TCP: SICSLOWPAN_IP_BUF->proto = UIP_PROTO_TCP; -/* SICSLOWPAN_IP_BUF->ttl = RIME_HC1_BUF->ttl; */ SICSLOWPAN_IP_BUF->ttl = RIME_HC1_PTR[RIME_HC1_TTL]; rime_hdr_len += SICSLOWPAN_HC1_HDR_LEN; break; @@ -1193,30 +1177,22 @@ uncompress_hdr_hc1(u16_t ip_len) { #if UIP_CONF_UDP case SICSLOWPAN_HC1_NH_UDP: SICSLOWPAN_IP_BUF->proto = UIP_PROTO_UDP; -/* if(RIME_HC1_HC_UDP_BUF->hc1_encoding & 0x01) { */ if(RIME_HC1_HC_UDP_PTR[RIME_HC1_HC_UDP_HC1_ENCODING] & 0x01) { /* UDP header is compressed with HC_UDP */ -/* if(RIME_HC1_HC_UDP_BUF->hc_udp_encoding != */ if(RIME_HC1_HC_UDP_PTR[RIME_HC1_HC_UDP_UDP_ENCODING] != SICSLOWPAN_HC_UDP_ALL_C) { PRINTF("sicslowpan (uncompress_hdr), packet not supported"); return; } /* IP TTL */ -/* SICSLOWPAN_IP_BUF->ttl = RIME_HC1_HC_UDP_BUF->ttl; */ SICSLOWPAN_IP_BUF->ttl = RIME_HC1_HC_UDP_PTR[RIME_HC1_HC_UDP_TTL]; /* UDP ports, len, checksum */ -/* SICSLOWPAN_UDP_BUF->srcport = HTONS(SICSLOWPAN_UDP_PORT_MIN + */ -/* (RIME_HC1_HC_UDP_BUF->ports >> 4)); */ SICSLOWPAN_UDP_BUF->srcport = HTONS(SICSLOWPAN_UDP_PORT_MIN + (RIME_HC1_HC_UDP_PTR[RIME_HC1_HC_UDP_PORTS] >> 4)); -/* SICSLOWPAN_UDP_BUF->destport = HTONS(SICSLOWPAN_UDP_PORT_MIN + */ -/* (RIME_HC1_HC_UDP_BUF->ports & 0x0F)); */ SICSLOWPAN_UDP_BUF->destport = HTONS(SICSLOWPAN_UDP_PORT_MIN + (RIME_HC1_HC_UDP_PTR[RIME_HC1_HC_UDP_PORTS] & 0x0F)); -/* SICSLOWPAN_UDP_BUF->udpchksum = RIME_HC1_HC_UDP_BUF->udpchksum; */ memcpy(&SICSLOWPAN_UDP_BUF->udpchksum, &RIME_HC1_HC_UDP_PTR[RIME_HC1_HC_UDP_CHKSUM], 2); uncomp_hdr_len += UIP_UDPH_LEN; rime_hdr_len += SICSLOWPAN_HC1_HC_UDP_HDR_LEN; @@ -1440,7 +1416,6 @@ output(uip_lladdr_t *localdest) rime_payload_len = (MAC_MAX_PAYLOAD - rime_hdr_len) & 0xf8; while(processed_ip_len < uip_len){ PRINTFO("sicslowpan output: fragment "); -/* RIME_FRAG_BUF->offset = processed_ip_len >> 3; */ RIME_FRAG_PTR[RIME_FRAG_OFFSET] = processed_ip_len >> 3; /* Copy payload and send */ @@ -1527,7 +1502,6 @@ input(void) * Since we don't support the mesh and broadcast header, the first header * we look for is the fragmentation header */ -/* switch((ntohs(RIME_FRAG_BUF->dispatch_size) & 0xf800) >> 8) { */ switch((GET16(RIME_FRAG_PTR, RIME_FRAG_DISPATCH_SIZE) & 0xf800) >> 8) { case SICSLOWPAN_DISPATCH_FRAG1: PRINTFI("sicslowpan input: FRAG1 "); @@ -1547,11 +1521,8 @@ input(void) * Offset is in units of 8 bytes */ PRINTFI("sicslowpan input: FRAGN "); -/* frag_offset = RIME_FRAG_BUF->offset; */ frag_offset = RIME_FRAG_PTR[RIME_FRAG_OFFSET]; -/* frag_tag = ntohs(RIME_FRAG_BUF->tag); */ frag_tag = GET16(RIME_FRAG_PTR, RIME_FRAG_TAG); -/* frag_size = (ntohs(RIME_FRAG_BUF->dispatch_size) & 0x07ff); */ frag_size = GET16(RIME_FRAG_PTR, RIME_FRAG_DISPATCH_SIZE) & 0x07ff; PRINTFI("size %d, tag %d, offset %d)\n", frag_size, frag_tag, frag_offset); @@ -1598,7 +1569,6 @@ input(void) #endif /* SICSLOWPAN_CONF_FRAG */ /* Process next dispatch and headers */ -/* switch(RIME_HC1_BUF->dispatch) { */ #if SICSLOWPAN_COMPRESSION == SICSLOWPAN_COMPRESSION_HC06 if((RIME_HC1_PTR[RIME_HC1_DISPATCH] & 0xe0) == SICSLOWPAN_DISPATCH_IPHC) { PRINTFI("sicslowpan input: IPHC\n"); @@ -1625,7 +1595,6 @@ input(void) break; default: /* unknown header */ -/* PRINTF("sicslowpan input: unknown dispatch\n"); */ PRINTFI("sicslowpan input: unknown dispatch: %u\n", RIME_HC1_PTR[RIME_HC1_DISPATCH]); return;