Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 11 additions & 8 deletions subsys/net/ip/ipv6_nbr.c
Original file line number Diff line number Diff line change
Expand Up @@ -1549,7 +1549,7 @@ static void ipv6_nd_reachable_timeout(struct k_work *work)
data->ns_count);

ret = net_ipv6_send_ns(nbr->iface, NULL, NULL,
NULL, &data->addr,
&data->addr, &data->addr,
false);
if (ret < 0) {
NET_DBG("Cannot send NS (%d)", ret);
Expand Down Expand Up @@ -1727,7 +1727,7 @@ static inline bool handle_na_neighbor(struct net_pkt *pkt,

if (na_hdr->flags & NET_ICMPV6_NA_FLAG_OVERRIDE ||
(!(na_hdr->flags & NET_ICMPV6_NA_FLAG_OVERRIDE) &&
tllao_offset && !lladdr_changed)) {
!lladdr_changed)) {

if (lladdr_changed) {
dbg_update_neighbor_lladdr_raw(
Expand Down Expand Up @@ -2559,12 +2559,6 @@ static int handle_ra_input(struct net_icmp_ctx *ctx,
nd_opt_hdr = (struct net_icmpv6_nd_opt_hdr *)
net_pkt_get_data(pkt, &nd_access);

/* Add neighbor cache entry using link local address, regardless of link layer address
* presence in Router Advertisement.
*/
nbr = net_ipv6_nbr_add(net_pkt_iface(pkt), (struct in6_addr *)NET_IPV6_HDR(pkt)->src, NULL,
true, NET_IPV6_NBR_STATE_INCOMPLETE);

while (nd_opt_hdr) {
net_pkt_acknowledge_data(pkt, &nd_access);

Expand Down Expand Up @@ -2665,6 +2659,15 @@ static int handle_ra_input(struct net_icmp_ctx *ctx,
net_pkt_get_data(pkt, &nd_access);
}

if (nbr == NULL) {
/* Add neighbor cache entry using link local address, regardless
* of link layer address presence in Router Advertisement.
*/
nbr = net_ipv6_nbr_add(net_pkt_iface(pkt),
(struct in6_addr *)NET_IPV6_HDR(pkt)->src,
NULL, true, NET_IPV6_NBR_STATE_INCOMPLETE);
}

router = net_if_ipv6_router_lookup(net_pkt_iface(pkt),
(struct in6_addr *)ip_hdr->src);
if (router) {
Expand Down
Loading