Merged in antmerlino/nuttx/sixlowpan-ieee802154-address-endianness (pull request #790)
sixlowpan/ieee802154: IEEE802.15.4 stores and uses addresses in little endian order. # Conflicts: # drivers/wireless/ieee802154/xbee/xbee_netdev.c Approved-by: GregoryN <gnutt@nuttx.org>
This commit is contained in:
parent
f47e0da90c
commit
c897790e55
@ -283,7 +283,18 @@ static int xbeenet_set_ipaddress(FAR struct net_driver_s *dev)
|
||||
/* Set the MAC address as the eaddr */
|
||||
|
||||
eaddr = arg.getreq.attrval.mac.eaddr;
|
||||
IEEE802154_EADDRCOPY(dev->d_mac.radio.nv_addr, eaddr);
|
||||
|
||||
/* Network layers expect address in Network Order (Big Endian) */
|
||||
|
||||
dev->d_mac.radio.nv_addr[0] = eaddr[7];
|
||||
dev->d_mac.radio.nv_addr[1] = eaddr[6];
|
||||
dev->d_mac.radio.nv_addr[2] = eaddr[5];
|
||||
dev->d_mac.radio.nv_addr[3] = eaddr[4];
|
||||
dev->d_mac.radio.nv_addr[4] = eaddr[3];
|
||||
dev->d_mac.radio.nv_addr[5] = eaddr[2];
|
||||
dev->d_mac.radio.nv_addr[6] = eaddr[1];
|
||||
dev->d_mac.radio.nv_addr[7] = eaddr[0];
|
||||
|
||||
dev->d_mac.radio.nv_addrlen = IEEE802154_EADDRSIZE;
|
||||
|
||||
/* Set the IP address based on the eaddr */
|
||||
@ -292,10 +303,10 @@ static int xbeenet_set_ipaddress(FAR struct net_driver_s *dev)
|
||||
dev->d_ipv6addr[1] = 0;
|
||||
dev->d_ipv6addr[2] = 0;
|
||||
dev->d_ipv6addr[3] = 0;
|
||||
dev->d_ipv6addr[4] = (uint16_t)eaddr[0] << 8 | (uint16_t)eaddr[1];
|
||||
dev->d_ipv6addr[5] = (uint16_t)eaddr[2] << 8 | (uint16_t)eaddr[3];
|
||||
dev->d_ipv6addr[6] = (uint16_t)eaddr[4] << 8 | (uint16_t)eaddr[5];
|
||||
dev->d_ipv6addr[7] = (uint16_t)eaddr[6] << 8 | (uint16_t)eaddr[7];
|
||||
dev->d_ipv6addr[4] = HTONS((uint16_t)eaddr[7] << 8 | (uint16_t)eaddr[6]);
|
||||
dev->d_ipv6addr[5] = HTONS((uint16_t)eaddr[5] << 8 | (uint16_t)eaddr[4]);
|
||||
dev->d_ipv6addr[6] = HTONS((uint16_t)eaddr[3] << 8 | (uint16_t)eaddr[2]);
|
||||
dev->d_ipv6addr[7] = HTONS((uint16_t)eaddr[1] << 8 | (uint16_t)eaddr[0]);
|
||||
|
||||
/* Invert the U/L bit */
|
||||
|
||||
@ -324,7 +335,12 @@ static int xbeenet_set_ipaddress(FAR struct net_driver_s *dev)
|
||||
/* Set the MAC address as the saddr */
|
||||
|
||||
saddr = arg.getreq.attrval.mac.saddr;
|
||||
IEEE802154_SADDRCOPY(dev->d_mac.radio.nv_addr, saddr);
|
||||
|
||||
/* Network layers expect address in Network Order (Big Endian) */
|
||||
|
||||
dev->d_mac.radio.nv_addr[0] = saddr[1];
|
||||
dev->d_mac.radio.nv_addr[1] = saddr[0];
|
||||
|
||||
dev->d_mac.radio.nv_addrlen = IEEE802154_SADDRSIZE;
|
||||
|
||||
/* Set the IP address based on the saddr */
|
||||
@ -336,7 +352,7 @@ static int xbeenet_set_ipaddress(FAR struct net_driver_s *dev)
|
||||
dev->d_ipv6addr[4] = 0;
|
||||
dev->d_ipv6addr[5] = HTONS(0x00ff);
|
||||
dev->d_ipv6addr[6] = HTONS(0xfe00);
|
||||
dev->d_ipv6addr[7] = (uint16_t)saddr[0] << 8 | (uint16_t)saddr[1];
|
||||
dev->d_ipv6addr[7] = HTONS((uint16_t)saddr[1] << 8 | (uint16_t)saddr[0]);
|
||||
return OK;
|
||||
}
|
||||
#endif
|
||||
|
@ -206,17 +206,34 @@ int sixlowpan_meta_data(FAR struct radio_driver_s *radio,
|
||||
/* Extended destination address mode */
|
||||
|
||||
meta->destaddr.mode = IEEE802154_ADDRMODE_EXTENDED;
|
||||
sixlowpan_eaddrcopy(&meta->destaddr.eaddr, pktmeta->dest.nm_addr);
|
||||
|
||||
/* 802.15.4 layer expects address in Little-Endian byte order */
|
||||
|
||||
meta->destaddr.eaddr[0] = pktmeta->dest.nm_addr[7];
|
||||
meta->destaddr.eaddr[1] = pktmeta->dest.nm_addr[6];
|
||||
meta->destaddr.eaddr[2] = pktmeta->dest.nm_addr[5];
|
||||
meta->destaddr.eaddr[3] = pktmeta->dest.nm_addr[4];
|
||||
meta->destaddr.eaddr[4] = pktmeta->dest.nm_addr[3];
|
||||
meta->destaddr.eaddr[5] = pktmeta->dest.nm_addr[2];
|
||||
meta->destaddr.eaddr[6] = pktmeta->dest.nm_addr[1];
|
||||
meta->destaddr.eaddr[7] = pktmeta->dest.nm_addr[0];
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Short destination address mode */
|
||||
|
||||
meta->destaddr.mode = IEEE802154_ADDRMODE_SHORT;
|
||||
sixlowpan_saddrcopy(&meta->destaddr.saddr, pktmeta->dest.nm_addr);
|
||||
|
||||
/* 802.15.4 layer expects address in Little-Endian byte order */
|
||||
|
||||
meta->destaddr.saddr[0] = pktmeta->dest.nm_addr[1];
|
||||
meta->destaddr.saddr[1] = pktmeta->dest.nm_addr[0];
|
||||
}
|
||||
|
||||
IEEE802154_PANIDCOPY(meta->destaddr.panid, pktmeta->dpanid);
|
||||
/* 802.15.4 layer expects address in Little-Endian byte order */
|
||||
|
||||
meta->destaddr.panid[0] = pktmeta->dpanid[1];
|
||||
meta->destaddr.panid[1] = pktmeta->dpanid[0];
|
||||
|
||||
/* Handle associated with MSDU. Will increment once per packet, not
|
||||
* necesarily per frame: The same MSDU handle will be used for each
|
||||
|
@ -507,22 +507,15 @@ static void uncompress_addr(FAR const struct netdev_varaddr_s *addr,
|
||||
|
||||
for (i = destndx; i < 8; i++)
|
||||
{
|
||||
if (usemac)
|
||||
{
|
||||
ipaddr[i] = (uint16_t)srcptr[0] << 8 | (uint16_t)srcptr[1];
|
||||
}
|
||||
else
|
||||
{
|
||||
#ifdef CONFIG_ENDIAN_BIG
|
||||
/* Preserve big-endian, network order */
|
||||
/* Preserve big-endian, network order */
|
||||
|
||||
ipaddr[i] = (uint16_t)srcptr[0] << 8 | (uint16_t)srcptr[1];
|
||||
ipaddr[i] = (uint16_t)srcptr[0] << 8 | (uint16_t)srcptr[1];
|
||||
#else
|
||||
/* Preserve big-endian, network order */
|
||||
/* Preserve big-endian, network order */
|
||||
|
||||
ipaddr[i] = (uint16_t)srcptr[1] << 8 | (uint16_t)srcptr[0];
|
||||
ipaddr[i] = (uint16_t)srcptr[1] << 8 | (uint16_t)srcptr[0];
|
||||
#endif
|
||||
}
|
||||
srcptr += 2;
|
||||
}
|
||||
|
||||
|
@ -127,7 +127,7 @@ static void sixlowpan_baddrfromip(const net_ipv6addr_t ipaddr, FAR uint8_t *badd
|
||||
{
|
||||
/* Big-endian uint16_t to byte order */
|
||||
|
||||
baddr[0] = ipaddr[7] >> 8;
|
||||
baddr[0] = NTOHS(ipaddr[7]) & 0xff;
|
||||
}
|
||||
#endif
|
||||
|
||||
@ -136,8 +136,8 @@ static void sixlowpan_saddrfromip(const net_ipv6addr_t ipaddr, FAR uint8_t *sadd
|
||||
{
|
||||
/* Big-endian uint16_t to byte order */
|
||||
|
||||
saddr[0] = ipaddr[7] >> 8;
|
||||
saddr[1] = ipaddr[7] & 0xff;
|
||||
saddr[0] = NTOHS(ipaddr[7]) >> 8;
|
||||
saddr[1] = NTOHS(ipaddr[7]) & 0xff;
|
||||
}
|
||||
#endif
|
||||
|
||||
@ -151,8 +151,8 @@ static void sixlowpan_eaddrfromip(const net_ipv6addr_t ipaddr, FAR uint8_t *eadd
|
||||
{
|
||||
/* Big-endian uint16_t to byte order */
|
||||
|
||||
*eptr++ = ipaddr[i] >> 8;
|
||||
*eptr++ = ipaddr[i] & 0xff;
|
||||
*eptr++ = NTOHS(ipaddr[i]) >> 8;
|
||||
*eptr++ = NTOHS(ipaddr[i]) & 0xff;
|
||||
}
|
||||
|
||||
eaddr[0] ^= 0x02;
|
||||
@ -433,7 +433,7 @@ static inline void sixlowpan_ipfrombyte(FAR const uint8_t *byte,
|
||||
ipaddr[4] = 0;
|
||||
ipaddr[5] = HTONS(0x00ff);
|
||||
ipaddr[6] = HTONS(0xfe00);
|
||||
ipaddr[7] = (uint16_t)byte[0] << 8;
|
||||
ipaddr[7] = HTONS((uint16_t)byte[0]);
|
||||
}
|
||||
#endif
|
||||
|
||||
@ -448,7 +448,10 @@ static inline void sixlowpan_ipfromsaddr(FAR const uint8_t *saddr,
|
||||
ipaddr[4] = 0;
|
||||
ipaddr[5] = HTONS(0x00ff);
|
||||
ipaddr[6] = HTONS(0xfe00);
|
||||
ipaddr[7] = (uint16_t)saddr[0] << 8 | (uint16_t)saddr[1];
|
||||
|
||||
/* Preserve big-endian */
|
||||
|
||||
memcpy(&ipaddr[7], saddr, 2);
|
||||
}
|
||||
#endif
|
||||
|
||||
@ -460,10 +463,13 @@ static inline void sixlowpan_ipfromeaddr(FAR const uint8_t *eaddr,
|
||||
ipaddr[1] = 0;
|
||||
ipaddr[2] = 0;
|
||||
ipaddr[3] = 0;
|
||||
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[7];
|
||||
|
||||
/* Preserve big-endian */
|
||||
|
||||
memcpy(&ipaddr[4], eaddr , 2);
|
||||
memcpy(&ipaddr[5], eaddr + 2, 2);
|
||||
memcpy(&ipaddr[6], eaddr + 4, 2);
|
||||
memcpy(&ipaddr[7], eaddr + 6, 2);
|
||||
|
||||
/* Invert the U/L bit */
|
||||
|
||||
@ -522,7 +528,7 @@ static inline bool sixlowpan_isbytebased(const net_ipv6addr_t ipaddr,
|
||||
{
|
||||
return (ipaddr[5] == HTONS(0x00ff) &&
|
||||
ipaddr[6] == HTONS(0xfe00) &&
|
||||
ipaddr[7] == ((uint16_t)byte << 8));
|
||||
ipaddr[7] == HTONS((uint16_t)byte));
|
||||
}
|
||||
#endif
|
||||
|
||||
@ -531,16 +537,22 @@ static inline bool sixlowpan_issaddrbased(const net_ipv6addr_t ipaddr,
|
||||
{
|
||||
return (ipaddr[5] == HTONS(0x00ff) &&
|
||||
ipaddr[6] == HTONS(0xfe00) &&
|
||||
ipaddr[7] == (GETUINT16(saddr, 0)));
|
||||
ipaddr[7] == *(uint16_t *)saddr);
|
||||
}
|
||||
|
||||
static inline bool sixlowpan_iseaddrbased(const net_ipv6addr_t ipaddr,
|
||||
FAR const uint8_t *eaddr)
|
||||
{
|
||||
return (ipaddr[4] == (GETUINT16(eaddr, 0) ^ HTONS(0x0200)) &&
|
||||
ipaddr[5] == GETUINT16(eaddr, 2) &&
|
||||
ipaddr[6] == GETUINT16(eaddr, 4) &&
|
||||
ipaddr[7] == GETUINT16(eaddr, 6));
|
||||
/* If the U/L bit is not set, indicating that the address is universal, it
|
||||
* can not be eaddr-based since EUI-64's are always universal
|
||||
*/
|
||||
|
||||
if ((ipaddr[4] & HTONS(0x0200)) == 0) return false;
|
||||
|
||||
return (ipaddr[4] == ((*(uint16_t *)eaddr) ^ HTONS(0x0200)) &&
|
||||
ipaddr[5] == *(uint16_t *)(eaddr + 2) &&
|
||||
ipaddr[6] == *(uint16_t *)(eaddr + 4) &&
|
||||
ipaddr[7] == *(uint16_t *)(eaddr + 6));
|
||||
}
|
||||
|
||||
bool sixlowpan_ismacbased(const net_ipv6addr_t ipaddr,
|
||||
@ -637,7 +649,11 @@ int sixlowpan_src_panid(FAR struct radio_driver_s *radio,
|
||||
return ret;
|
||||
}
|
||||
|
||||
IEEE802154_PANIDCOPY(panid, arg.u.getreq.attrval.mac.panid);
|
||||
/* MAC802154 gives us PAN ID in Little Endinan Order, but we need it in Network Order */
|
||||
|
||||
panid[0] = arg.u.getreq.attrval.mac.panid[1];
|
||||
panid[1] = arg.u.getreq.attrval.mac.panid[0];
|
||||
|
||||
return OK;
|
||||
}
|
||||
#endif
|
||||
@ -676,12 +692,28 @@ int sixlowpan_extract_srcaddr(FAR struct radio_driver_s *radio,
|
||||
if (ind->src.mode == IEEE802154_ADDRMODE_SHORT)
|
||||
{
|
||||
srcaddr->nv_addrlen = NET_6LOWPAN_SADDRSIZE;
|
||||
memcpy(srcaddr->nv_addr, ind->src.saddr, NET_6LOWPAN_SADDRSIZE);
|
||||
|
||||
/* MAC802154 gives us Short Address in Little Endinan Order, but we
|
||||
* need it in Network Order */
|
||||
|
||||
srcaddr->nv_addr[0] = ind->src.saddr[1];
|
||||
srcaddr->nv_addr[1] = ind->src.saddr[0];
|
||||
}
|
||||
else
|
||||
{
|
||||
srcaddr->nv_addrlen = NET_6LOWPAN_EADDRSIZE;
|
||||
memcpy(srcaddr->nv_addr, ind->src.eaddr, NET_6LOWPAN_EADDRSIZE);
|
||||
|
||||
/* MAC802154 gives us Extended Address in Little Endinan Order, but
|
||||
* we need it in Network Order */
|
||||
|
||||
srcaddr->nv_addr[0] = ind->src.eaddr[7];
|
||||
srcaddr->nv_addr[1] = ind->src.eaddr[6];
|
||||
srcaddr->nv_addr[2] = ind->src.eaddr[5];
|
||||
srcaddr->nv_addr[3] = ind->src.eaddr[4];
|
||||
srcaddr->nv_addr[4] = ind->src.eaddr[3];
|
||||
srcaddr->nv_addr[5] = ind->src.eaddr[2];
|
||||
srcaddr->nv_addr[6] = ind->src.eaddr[1];
|
||||
srcaddr->nv_addr[7] = ind->src.eaddr[0];
|
||||
}
|
||||
|
||||
return OK;
|
||||
@ -743,12 +775,28 @@ int sixlowpan_extract_destaddr(FAR struct radio_driver_s *radio,
|
||||
if (ind->dest.mode == IEEE802154_ADDRMODE_SHORT)
|
||||
{
|
||||
destaddr->nv_addrlen = NET_6LOWPAN_SADDRSIZE;
|
||||
memcpy(destaddr->nv_addr, ind->dest.saddr, NET_6LOWPAN_SADDRSIZE);
|
||||
|
||||
/* MAC802154 gives us Short Address in Little Endinan Order, but we
|
||||
* need it in Network Order */
|
||||
|
||||
destaddr->nv_addr[0] = ind->dest.saddr[1];
|
||||
destaddr->nv_addr[1] = ind->dest.saddr[0];
|
||||
}
|
||||
else
|
||||
{
|
||||
destaddr->nv_addrlen = NET_6LOWPAN_EADDRSIZE;
|
||||
memcpy(destaddr->nv_addr, ind->dest.eaddr, NET_6LOWPAN_EADDRSIZE);
|
||||
|
||||
/* MAC802154 gives us Extended Address in Little Endinan Order, but
|
||||
* we need it in Network Order */
|
||||
|
||||
destaddr->nv_addr[0] = ind->dest.eaddr[7];
|
||||
destaddr->nv_addr[1] = ind->dest.eaddr[6];
|
||||
destaddr->nv_addr[2] = ind->dest.eaddr[5];
|
||||
destaddr->nv_addr[3] = ind->dest.eaddr[4];
|
||||
destaddr->nv_addr[4] = ind->dest.eaddr[3];
|
||||
destaddr->nv_addr[5] = ind->dest.eaddr[2];
|
||||
destaddr->nv_addr[6] = ind->dest.eaddr[1];
|
||||
destaddr->nv_addr[7] = ind->dest.eaddr[0];
|
||||
}
|
||||
|
||||
return OK;
|
||||
|
@ -225,16 +225,16 @@ static void lo_addr2ip(FAR struct net_driver_s *dev)
|
||||
dev->d_ipv6addr[1] = 0;
|
||||
dev->d_ipv6addr[2] = 0;
|
||||
dev->d_ipv6addr[3] = 0;
|
||||
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[7];
|
||||
dev->d_ipv6addr[4] = HTONS((uint16_t)g_eaddr[7] << 8 | (uint16_t)g_eaddr[6]);
|
||||
dev->d_ipv6addr[5] = HTONS((uint16_t)g_eaddr[5] << 8 | (uint16_t)g_eaddr[4]);
|
||||
dev->d_ipv6addr[6] = HTONS((uint16_t)g_eaddr[3] << 8 | (uint16_t)g_eaddr[2]);
|
||||
dev->d_ipv6addr[7] = HTONS((uint16_t)g_eaddr[1] << 8 | (uint16_t)g_eaddr[0]);
|
||||
|
||||
/* Invert the U/L bit */
|
||||
|
||||
dev->d_ipv6addr[4] ^= HTONS(0x0200);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
#else
|
||||
static void lo_addr2ip(FAR struct net_driver_s *dev)
|
||||
{
|
||||
@ -253,7 +253,7 @@ static void lo_addr2ip(FAR struct net_driver_s *dev)
|
||||
dev->d_ipv6addr[4] = 0;
|
||||
dev->d_ipv6addr[5] = HTONS(0x00ff);
|
||||
dev->d_ipv6addr[6] = HTONS(0xfe00);
|
||||
dev->d_ipv6addr[7] = (uint16_t)g_saddr[0] << 8 | (uint16_t)g_saddr[1];
|
||||
dev->d_ipv6addr[7] = HTONS((uint16_t)g_saddr[1] << 8 | (uint16_t)g_saddr[0]);
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
@ -283,7 +283,18 @@ static int macnet_advertise(FAR struct net_driver_s *dev)
|
||||
/* Set the MAC address as the eaddr */
|
||||
|
||||
eaddr = arg.getreq.attrval.mac.eaddr;
|
||||
IEEE802154_EADDRCOPY(dev->d_mac.radio.nv_addr, eaddr);
|
||||
|
||||
/* Network layers expect address in Network Order (Big Endian) */
|
||||
|
||||
dev->d_mac.radio.nv_addr[0] = eaddr[7];
|
||||
dev->d_mac.radio.nv_addr[1] = eaddr[6];
|
||||
dev->d_mac.radio.nv_addr[2] = eaddr[5];
|
||||
dev->d_mac.radio.nv_addr[3] = eaddr[4];
|
||||
dev->d_mac.radio.nv_addr[4] = eaddr[3];
|
||||
dev->d_mac.radio.nv_addr[5] = eaddr[2];
|
||||
dev->d_mac.radio.nv_addr[6] = eaddr[1];
|
||||
dev->d_mac.radio.nv_addr[7] = eaddr[0];
|
||||
|
||||
dev->d_mac.radio.nv_addrlen = IEEE802154_EADDRSIZE;
|
||||
|
||||
/* Set the IP address based on the eaddr */
|
||||
@ -292,10 +303,10 @@ static int macnet_advertise(FAR struct net_driver_s *dev)
|
||||
dev->d_ipv6addr[1] = 0;
|
||||
dev->d_ipv6addr[2] = 0;
|
||||
dev->d_ipv6addr[3] = 0;
|
||||
dev->d_ipv6addr[4] = (uint16_t)eaddr[0] << 8 | (uint16_t)eaddr[1];
|
||||
dev->d_ipv6addr[5] = (uint16_t)eaddr[2] << 8 | (uint16_t)eaddr[3];
|
||||
dev->d_ipv6addr[6] = (uint16_t)eaddr[4] << 8 | (uint16_t)eaddr[5];
|
||||
dev->d_ipv6addr[7] = (uint16_t)eaddr[6] << 8 | (uint16_t)eaddr[7];
|
||||
dev->d_ipv6addr[4] = HTONS((uint16_t)eaddr[7] << 8 | (uint16_t)eaddr[6]);
|
||||
dev->d_ipv6addr[5] = HTONS((uint16_t)eaddr[5] << 8 | (uint16_t)eaddr[4]);
|
||||
dev->d_ipv6addr[6] = HTONS((uint16_t)eaddr[3] << 8 | (uint16_t)eaddr[2]);
|
||||
dev->d_ipv6addr[7] = HTONS((uint16_t)eaddr[1] << 8 | (uint16_t)eaddr[0]);
|
||||
|
||||
/* Invert the U/L bit */
|
||||
|
||||
@ -324,7 +335,12 @@ static int macnet_advertise(FAR struct net_driver_s *dev)
|
||||
/* Set the MAC address as the saddr */
|
||||
|
||||
saddr = arg.getreq.attrval.mac.saddr;
|
||||
IEEE802154_SADDRCOPY(dev->d_mac.radio.nv_addr, saddr);
|
||||
|
||||
/* Network layers expect address in Network Order (Big Endian) */
|
||||
|
||||
dev->d_mac.radio.nv_addr[0] = saddr[1];
|
||||
dev->d_mac.radio.nv_addr[1] = saddr[0];
|
||||
|
||||
dev->d_mac.radio.nv_addrlen = IEEE802154_SADDRSIZE;
|
||||
|
||||
/* Set the IP address based on the saddr */
|
||||
@ -336,7 +352,7 @@ static int macnet_advertise(FAR struct net_driver_s *dev)
|
||||
dev->d_ipv6addr[4] = 0;
|
||||
dev->d_ipv6addr[5] = HTONS(0x00ff);
|
||||
dev->d_ipv6addr[6] = HTONS(0xfe00);
|
||||
dev->d_ipv6addr[7] = (uint16_t)saddr[0] << 8 | (uint16_t)saddr[1];
|
||||
dev->d_ipv6addr[7] = HTONS((uint16_t)saddr[1] << 8 | (uint16_t)saddr[0]);
|
||||
return OK;
|
||||
}
|
||||
#endif
|
||||
|
Loading…
x
Reference in New Issue
Block a user