diff --git a/configs/clicker2-stm32/README.txt b/configs/clicker2-stm32/README.txt index c2694ae1eba..f7f4bcc3a1a 100644 --- a/configs/clicker2-stm32/README.txt +++ b/configs/clicker2-stm32/README.txt @@ -482,7 +482,7 @@ Configurations hc06 short 6/21 --- extended 6/22 --- hc1 short 6/23 --- - extended --- --- + extended 6/23 --- ipv6 short --- --- extended --- --- diff --git a/include/nuttx/net/sixlowpan.h b/include/nuttx/net/sixlowpan.h index 77bd5c5d843..308112a1eab 100644 --- a/include/nuttx/net/sixlowpan.h +++ b/include/nuttx/net/sixlowpan.h @@ -145,7 +145,7 @@ # define SIXLOWPAN_HC1_DESTADDR_PIIC 0x10 /* PI,IC */ # define SIXLOWPAN_HC1_DESTADDR_PCII 0x20 /* PC,II */ # define SIXLOWPAN_HC1_DESTADDR_PCIC 0x30 /* PC,IC */ -#define SIXLOWPAN_HC1_TCFL_C 0x08 /* Traffic class and flow label are zero */ +#define SIXLOWPAN_HC1_TCFL_C 0x08 /* Bit 4: Traffic class and flow label are zero */ #define SIXLOWPAN_HC1_NH_MASK 0x06 /* Bits 5-6: Next HC1 header type */ # define SIXLOWPAN_HC1_NH_NC 0x00 /* Not compressed */ # define SIXLOWPAN_HC1_NH_UDP 0x02 /* UDP */ diff --git a/net/sixlowpan/sixlowpan_hc1.c b/net/sixlowpan/sixlowpan_hc1.c index aafaccbc700..dec9ea15767 100644 --- a/net/sixlowpan/sixlowpan_hc1.c +++ b/net/sixlowpan/sixlowpan_hc1.c @@ -296,11 +296,13 @@ int sixlowpan_uncompresshdr_hc1(FAR const struct ieee802154_data_ind_s *ind, ninfo("fptr=%p g_frame_hdrlen=%u\n", fptr, g_frame_hdrlen); /* Format the IPv6 header in the device d_buf */ - /* Set version, traffic clase, and flow label */ + /* Set version, traffic clase, and flow label. This assumes that Bit 4 is + * set in HC1. + */ - ipv6->vtc = 0x60; /* Bits 0-3: version, bits 4-7: traffic class (MS) */ - ipv6->tcf = 0; /* Bits 0-3: traffic class (LS), 4-bits: flow label (MS) */ - ipv6->flow = 0; /* 16-bit flow label (LS) */ + ipv6->vtc = 0x60; /* Bits 0-3: version, bits 4-7: traffic class (MS) */ + ipv6->tcf = 0; /* Bits 0-3: traffic class (LS), 4-bits: flow label (MS) */ + ipv6->flow = 0; /* 16-bit flow label (LS) */ g_uncomp_hdrlen += IPv6_HDRLEN; diff --git a/net/sixlowpan/sixlowpan_utils.c b/net/sixlowpan/sixlowpan_utils.c index e4577879bb6..4772302a7bd 100644 --- a/net/sixlowpan/sixlowpan_utils.c +++ b/net/sixlowpan/sixlowpan_utils.c @@ -170,7 +170,7 @@ void sixlowpan_ipfromeaddr(FAR const uint8_t *eaddr, ipaddr[4] = (uint16_t)eaddr[0] << 8 | (uint16_t)eaddr[1]; ipaddr[5] = (uint16_t)eaddr[2] << 8 | (uint16_t)eaddr[3]; ipaddr[6] = (uint16_t)eaddr[4] << 8 | (uint16_t)eaddr[5]; - ipaddr[7] = (uint16_t)eaddr[6] << 8 | (uint16_t)eaddr[6]; + ipaddr[7] = (uint16_t)eaddr[6] << 8 | (uint16_t)eaddr[7]; ipaddr[4] ^= 0x200; } diff --git a/wireless/ieee802154/mac802154_loopback.c b/wireless/ieee802154/mac802154_loopback.c index 3cac8fba432..6e32b64b144 100644 --- a/wireless/ieee802154/mac802154_loopback.c +++ b/wireless/ieee802154/mac802154_loopback.c @@ -213,7 +213,7 @@ static void lo_addr2ip(FAR struct net_driver_s *dev) dev->d_ipv6addr[4] = (uint16_t)g_eaddr[0] << 8 | (uint16_t)g_eaddr[1]; dev->d_ipv6addr[5] = (uint16_t)g_eaddr[2] << 8 | (uint16_t)g_eaddr[3]; dev->d_ipv6addr[6] = (uint16_t)g_eaddr[4] << 8 | (uint16_t)g_eaddr[5]; - dev->d_ipv6addr[7] = (uint16_t)g_eaddr[6] << 8 | (uint16_t)g_eaddr[6]; + dev->d_ipv6addr[7] = (uint16_t)g_eaddr[6] << 8 | (uint16_t)g_eaddr[7]; dev->d_ipv6addr[4] ^= 0x200; memcpy(dev->d_mac.ieee802154, g_eaddr, IEEE802154_EADDRSIZE);