mirror of
https://github.com/RIOT-OS/RIOT.git
synced 2024-12-29 04:50:03 +01:00
Merge pull request #3846 from OlegHahm/6lbr_address_resolution
6lowpan nd: always perform l2 lookup for 6LBR
This commit is contained in:
commit
108043594a
@ -170,7 +170,18 @@ kernel_pid_t gnrc_sixlowpan_nd_next_hop_l2addr(uint8_t *l2addr, uint8_t *l2addr_
|
||||
/* get if not gotten from previous check */
|
||||
nc_entry = gnrc_ipv6_nc_get(iface, next_hop);
|
||||
}
|
||||
if (ipv6_addr_is_link_local(next_hop)) {
|
||||
/* If a NCE for this destination exist, we can use even for link-local
|
||||
* addresses. This should be only the case for 6LBRs. */
|
||||
if ((ipv6_addr_is_link_local(next_hop)) && (nc_entry == NULL)) {
|
||||
/* in case of a border router there is no sensible way for address resolution
|
||||
* if the interface is not given */
|
||||
#ifdef MODULE_GNRC_SIXLOWPAN_ND_BORDER_ROUTER
|
||||
/* if no interface is specified it is impossible to resolve the
|
||||
* link-layer address for a link-local address on a 6LBR */
|
||||
if (iface == KERNEL_PID_UNDEF) {
|
||||
return KERNEL_PID_UNDEF;
|
||||
}
|
||||
#endif
|
||||
kernel_pid_t ifs[GNRC_NETIF_NUMOF];
|
||||
size_t ifnum = gnrc_netif_get(ifs);
|
||||
/* we don't need address resolution, the EUI-64 is in next_hop's IID */
|
||||
@ -188,7 +199,7 @@ kernel_pid_t gnrc_sixlowpan_nd_next_hop_l2addr(uint8_t *l2addr, uint8_t *l2addr_
|
||||
}
|
||||
return iface;
|
||||
}
|
||||
else if ((nc_entry == NULL) || (!gnrc_ipv6_nc_is_reachable(nc_entry)) ||
|
||||
if ((nc_entry == NULL) || (!gnrc_ipv6_nc_is_reachable(nc_entry)) ||
|
||||
(gnrc_ipv6_nc_get_type(nc_entry) == GNRC_IPV6_NC_TYPE_TENTATIVE)) {
|
||||
return KERNEL_PID_UNDEF;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user