From 144a0180e254a5d6ef58360774b935717fe4f58a Mon Sep 17 00:00:00 2001 From: Anthony Merlino Date: Tue, 13 Aug 2019 21:19:53 +0000 Subject: [PATCH] Merged in antmerlino/apps/i8sak-eaddr2ip-fix (pull request #196) i8sak: Fixes conversion from extended address to IPv6 address. Approved-by: Gregory Nutt --- wireless/ieee802154/i8sak/i8sak.h | 27 +++++++++++---------------- wireless/ieee802154/i8sak/i8sak_get.c | 2 +- 2 files changed, 12 insertions(+), 17 deletions(-) diff --git a/wireless/ieee802154/i8sak/i8sak.h b/wireless/ieee802154/i8sak/i8sak.h index 317a75d1a..3b5b0eca2 100644 --- a/wireless/ieee802154/i8sak/i8sak.h +++ b/wireless/ieee802154/i8sak/i8sak.h @@ -262,36 +262,31 @@ static inline void i8sak_cmd_error(FAR struct i8sak_s *i8sak) #ifdef CONFIG_NET_6LOWPAN static inline void i8sak_update_ep_ip(FAR struct i8sak_s *i8sak) { + i8sak->ep_in6addr.sin6_addr.in6_u.u6_addr16[0] = HTONS(0xfe80); + i8sak->ep_in6addr.sin6_addr.in6_u.u6_addr16[1] = 0; + i8sak->ep_in6addr.sin6_addr.in6_u.u6_addr16[2] = 0; + i8sak->ep_in6addr.sin6_addr.in6_u.u6_addr16[3] = 0; + if (i8sak->ep_addr.mode == IEEE802154_ADDRMODE_EXTENDED) { - i8sak->ep_in6addr.sin6_addr.in6_u.u6_addr16[0] = HTONS(0xfe80); - i8sak->ep_in6addr.sin6_addr.in6_u.u6_addr16[1] = 0; - i8sak->ep_in6addr.sin6_addr.in6_u.u6_addr16[2] = 0; - i8sak->ep_in6addr.sin6_addr.in6_u.u6_addr16[3] = 0; - i8sak->ep_in6addr.sin6_addr.in6_u.u6_addr16[4] = - ((uint16_t)i8sak->ep_addr.eaddr[0] << 8 | (uint16_t)i8sak->ep_addr.eaddr[1]); + i8sak->ep_in6addr.sin6_addr.in6_u.u6_addr16[4] = + HTONS(((uint16_t)i8sak->ep_addr.eaddr[0] << 8 | (uint16_t)i8sak->ep_addr.eaddr[1])); i8sak->ep_in6addr.sin6_addr.in6_u.u6_addr16[5] = - ((uint16_t)i8sak->ep_addr.eaddr[2] << 8 | (uint16_t)i8sak->ep_addr.eaddr[3]); + HTONS(((uint16_t)i8sak->ep_addr.eaddr[2] << 8 | (uint16_t)i8sak->ep_addr.eaddr[3])); i8sak->ep_in6addr.sin6_addr.in6_u.u6_addr16[6] = - ((uint16_t)i8sak->ep_addr.eaddr[4] << 8 | (uint16_t)i8sak->ep_addr.eaddr[5]); + HTONS(((uint16_t)i8sak->ep_addr.eaddr[4] << 8 | (uint16_t)i8sak->ep_addr.eaddr[5])); i8sak->ep_in6addr.sin6_addr.in6_u.u6_addr16[7] = - ((uint16_t)i8sak->ep_addr.eaddr[6] << 8 | (uint16_t)i8sak->ep_addr.eaddr[7]); + HTONS(((uint16_t)i8sak->ep_addr.eaddr[6] << 8 | (uint16_t)i8sak->ep_addr.eaddr[7])); - i8sak->ep_in6addr.sin6_addr.in6_u.u6_addr16[4] ^= 0x200; + i8sak->ep_in6addr.sin6_addr.in6_u.u6_addr16[4] ^= HTONS(0x0200); } else { - i8sak->ep_in6addr.sin6_addr.in6_u.u6_addr16[0] = HTONS(0xfe80); - i8sak->ep_in6addr.sin6_addr.in6_u.u6_addr16[1] = 0; - i8sak->ep_in6addr.sin6_addr.in6_u.u6_addr16[2] = 0; - i8sak->ep_in6addr.sin6_addr.in6_u.u6_addr16[3] = 0; i8sak->ep_in6addr.sin6_addr.in6_u.u6_addr16[4] = 0; i8sak->ep_in6addr.sin6_addr.in6_u.u6_addr16[5] = HTONS(0x00ff); i8sak->ep_in6addr.sin6_addr.in6_u.u6_addr16[6] = HTONS(0xfe00); i8sak->ep_in6addr.sin6_addr.in6_u.u6_addr16[7] = ((uint16_t)i8sak->ep_addr.saddr[0] << 8 | (uint16_t)i8sak->ep_addr.saddr[1]); - - i8sak->ep_in6addr.sin6_addr.in6_u.u6_addr16[7] ^= 0x200; } } #endif diff --git a/wireless/ieee802154/i8sak/i8sak_get.c b/wireless/ieee802154/i8sak/i8sak_get.c index 1442f4a1a..bdbedb568 100644 --- a/wireless/ieee802154/i8sak/i8sak_get.c +++ b/wireless/ieee802154/i8sak/i8sak_get.c @@ -349,7 +349,7 @@ void i8sak_get_cmd(FAR struct i8sak_s *i8sak, int argc, FAR char *argv[]) else if (strcmp(argv[argind], "maxretries") == 0) { sixlowpan_getmaxretries(fd, i8sak->ifname, &u.attr.mac.max_retries); - printf("i8sak: Transmit Power: %d\n", (int)u.attr.mac.max_retries); + printf("i8sak: Max Retries: %d\n", (int)u.attr.mac.max_retries); } else if (strcmp(argv[argind], "promisc") == 0) {