6LoWPAN: Fix a src/dest address confusion

This commit is contained in:
Gregory Nutt 2017-06-22 16:04:40 -06:00
parent 4a517ad48d
commit 9c2f67c477
3 changed files with 11 additions and 5 deletions

View File

@ -766,11 +766,11 @@ void sixlowpan_compresshdr_hc06(FAR struct ieee802154_driver_s *ieee,
SIXLOWPAN_IPHC_SAM_BIT);
}
/* No address context found for this address */
/* No address context found for the source address */
else if (net_is_addr_linklocal(ipv6->srcipaddr) &&
ipv6->destipaddr[1] == 0 && ipv6->destipaddr[2] == 0 &&
ipv6->destipaddr[3] == 0)
ipv6->srcipaddr[1] == 0 && ipv6->srcipaddr[2] == 0 &&
ipv6->srcipaddr[3] == 0)
{
iphc1 |= compress_laddr(ipv6->srcipaddr,
&ieee->i_dev.d_mac.ieee802154,
@ -778,7 +778,7 @@ void sixlowpan_compresshdr_hc06(FAR struct ieee802154_driver_s *ieee,
}
else
{
/* Send the full address ipaddr: SAC = 0, SAM = 00 */
/* Send the full source address ipaddr: SAC = 0, SAM = 00 */
ninfo("Uncompressable srcipaddr=%04x:%04x:%04x:%04x:%04x:%04x:%04x:%04x\n",
ipv6->srcipaddr[0], ipv6->srcipaddr[1], ipv6->srcipaddr[2],

View File

@ -223,7 +223,7 @@ ssize_t psock_6lowpan_udp_sendto(FAR struct socket *psock,
if (dev == NULL)
#endif
{
nwarn("WARNING: Not routable\n");
nwarn("WARNING: Not routable or not IEEE802.15.4 MAC\n");
return (ssize_t)-ENETUNREACH;
}
#endif
@ -260,6 +260,8 @@ ssize_t psock_6lowpan_udp_sendto(FAR struct socket *psock,
net_ipv6addr_hdrcopy(ipv6udp.ipv6.destipaddr, to6->sin6_addr.in6_u.u6_addr16);
#ifdef CONFIG_NETDEV_MULTINIC
net_ipv6addr_hdrcopy(ipv6udp.ipv6.srcipaddr, conn->u.ipv6.laddr);
#else
net_ipv6addr_hdrcopy(ipv6udp.ipv6.srcipaddr, dev->d_ipv6addr);
#endif
ninfo("IPv6 length: %d\n",

View File

@ -311,6 +311,10 @@ static int lo_loopback(FAR struct net_driver_s *dev)
ind.dest.mode = IEEE802154_ADDRMODE_SHORT;
#endif
/* Only loopback the local address is the destination and some (arbitrary)
* address is the source.
*/
IEEE802154_PANIDCOPY(ind.src.panid, g_panid);
IEEE802154_SADDRCOPY(ind.src.saddr, g_src_saddr);
IEEE802154_EADDRCOPY(ind.src.eaddr, g_src_eaddr);