NetBSD Problem Report #60071
From www@netbsd.org Thu Mar 12 04:19:15 2026
Return-Path: <www@netbsd.org>
Received: from mail.netbsd.org (mail.netbsd.org [199.233.217.200])
(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256
client-signature RSA-PSS (2048 bits) client-digest SHA256)
(Client CN "mail.netbsd.org", Issuer "R12" (not verified))
by mollari.NetBSD.org (Postfix) with ESMTPS id 9C81B1A9239
for <gnats-bugs@gnats.NetBSD.org>; Thu, 12 Mar 2026 04:19:15 +0000 (UTC)
Message-Id: <20260312041914.58AE71A923A@mollari.NetBSD.org>
Date: Thu, 12 Mar 2026 04:19:14 +0000 (UTC)
From: ozaki-r@iij.ad.jp
Reply-To: ozaki-r@iij.ad.jp
To: gnats-bugs@NetBSD.org
Subject: The kernel stop sending ARP/NS packets on ping/ping6
X-Send-Pr-Version: www-1.0
X-From4GNATS: "ozaki-r@iij.ad.jp via gnats" <gnats-admin@NetBSD.org>
>Number: 60071
>Category: kern
>Synopsis: The kernel stop sending ARP/NS packets on ping/ping6
>Confidential: no
>Severity: serious
>Priority: medium
>Responsible: kern-bug-people
>State: open
>Class: sw-bug
>Submitter-Id: net
>Arrival-Date: Thu Mar 12 04:20:00 +0000 2026
>Last-Modified: Wed Jun 03 18:45:03 +0000 2026
>Originator: Ryota Ozaki
>Release: current, 11, 10
>Organization:
IIJ
>Environment:
NetBSD kvm 11.99.5 NetBSD 11.99.5 (KVM) #32: Thu Mar 12 11:48:45 JST 2026 (hidden) amd64
>Description:
ping(8) with no option sends ICMP echo requests periodically. If a target host is not available, the kernel keeps sending ARP packets per the ICMP packets. This is probably the typical and expected behavior. NetBSD 9, NetBSD 8, FreeBSD 11 and Linux 6.0 acts like so.
However, recent NetBSD kernels (10~) stop sending ARP packets at most net.inet.arp.nd_bmaxtries times.
ping6 (IPv6 NS) is the same situation.
>How-To-Repeat:
Run tcpdump on a host (or another host in the same network) and ping to a nonexistence host from the host, and see tcpdump's outputs.
>Fix:
One possible fix:
@@ -361,10 +361,6 @@ nd_resolve(struct llentry *ln, const struct rtentry *rt, struct mbuf *m,
* does not exceed maxqueuelen. When it exceeds maxqueuelen,
* the oldest packet in the queue will be removed.
*/
- if (ln->ln_state == ND_LLINFO_NOSTATE ||
- ln->ln_state == ND_LLINFO_WAITDELETE)
- ln->ln_state = ND_LLINFO_INCOMPLETE;
-
#ifdef MBUFTRACE
m_claimm(m, ln->lle_tbl->llt_mowner);
#endif
@@ -406,6 +402,12 @@ nd_resolve(struct llentry *ln, const struct rtentry *rt, struct mbuf *m,
else
error = EWOULDBLOCK;
+ if (ln->ln_state == ND_LLINFO_NOSTATE ||
+ ln->ln_state == ND_LLINFO_WAITDELETE) {
+ ln->ln_asked = 0;
+ ln->ln_state = ND_LLINFO_INCOMPLETE;
+ }
+
/*
* If there has been no NS for the neighbor after entering the
* INCOMPLETE state, send the first solicitation.
>Audit-Trail:
From: Ryota Ozaki <ozaki-r@netbsd.org>
To: gnats-bugs@netbsd.org
Cc: kern-bug-people@netbsd.org, gnats-admin@netbsd.org, netbsd-bugs@netbsd.org
Subject: Re: kern/60071: The kernel stop sending ARP/NS packets on ping/ping6
Date: Thu, 19 Mar 2026 14:34:11 +0900
On Thu, Mar 12, 2026 at 1:20=E2=80=AFPM ozaki-r@iij.ad.jp via gnats
<gnats-admin@netbsd.org> wrote:
>
> >Number: 60071
> >Category: kern
> >Synopsis: The kernel stop sending ARP/NS packets on ping/ping6
> >Confidential: no
> >Severity: serious
> >Priority: medium
> >Responsible: kern-bug-people
> >State: open
> >Class: sw-bug
> >Submitter-Id: net
> >Arrival-Date: Thu Mar 12 04:20:00 +0000 2026
> >Originator: Ryota Ozaki
> >Release: current, 11, 10
> >Organization:
> IIJ
> >Environment:
> NetBSD kvm 11.99.5 NetBSD 11.99.5 (KVM) #32: Thu Mar 12 11:48:45 JST 2026=
(hidden) amd64
> >Description:
> ping(8) with no option sends ICMP echo requests periodically. If a targe=
t host is not available, the kernel keeps sending ARP packets per the ICMP =
packets. This is probably the typical and expected behavior. NetBSD 9, Ne=
tBSD 8, FreeBSD 11 and Linux 6.0 acts like so.
>
> However, recent NetBSD kernels (10~) stop sending ARP packets at most net=
.inet.arp.nd_bmaxtries times.
>
> ping6 (IPv6 NS) is the same situation.
> >How-To-Repeat:
> Run tcpdump on a host (or another host in the same network) and ping to a=
nonexistence host from the host, and see tcpdump's outputs.
> >Fix:
> One possible fix:
>
> @@ -361,10 +361,6 @@ nd_resolve(struct llentry *ln, const struct rtentry =
*rt, struct mbuf *m,
> * does not exceed maxqueuelen. When it exceeds maxqueuelen,
> * the oldest packet in the queue will be removed.
> */
> - if (ln->ln_state =3D=3D ND_LLINFO_NOSTATE ||
> - ln->ln_state =3D=3D ND_LLINFO_WAITDELETE)
> - ln->ln_state =3D ND_LLINFO_INCOMPLETE;
> -
> #ifdef MBUFTRACE
> m_claimm(m, ln->lle_tbl->llt_mowner);
> #endif
> @@ -406,6 +402,12 @@ nd_resolve(struct llentry *ln, const struct rtentry =
*rt, struct mbuf *m,
> else
> error =3D EWOULDBLOCK;
>
> + if (ln->ln_state =3D=3D ND_LLINFO_NOSTATE ||
> + ln->ln_state =3D=3D ND_LLINFO_WAITDELETE) {
> + ln->ln_asked =3D 0;
> + ln->ln_state =3D ND_LLINFO_INCOMPLETE;
> + }
> +
> /*
> * If there has been no NS for the neighbor after entering the
> * INCOMPLETE state, send the first solicitation.
>
I've updated the possible fix:
https://www.netbsd.org/~ozaki-r/fix-nd_resolve.diff
The new diff is even closer to the old behavior; if unresolved, an error is
constantly returned to the caller.
ozaki-r
From: "Ryota Ozaki" <ozaki-r@netbsd.org>
To: gnats-bugs@gnats.NetBSD.org
Cc:
Subject: PR/60071 CVS commit: src/sys
Date: Thu, 26 Mar 2026 04:35:18 +0000
Module Name: src
Committed By: ozaki-r
Date: Thu Mar 26 04:35:17 UTC 2026
Modified Files:
src/sys/net: if_llatbl.h nd.c
src/sys/netinet: if_arp.c
src/sys/netinet6: nd6.c
Log Message:
commit 27c3de6c8063a7850ef0efbea0d83f314e541ce8
Author: Ryota Ozaki <ozaki-r@iij.ad.jp>
Date: Thu Mar 12 12:42:03 2026 +0900
nd: reset ln_asked on state reset
Even if a userland program such as ping continuously sends packets
to a (temporarily) unreachable host, the ND resolver only sends
request packets up to nd_mmaxtries times. This change allows ND
request packets to continue being sent while the userland process
is still sending packets.
Additionally, introduce LLE_UNRESOLVED to fix another issue.
nd_resolve may incorrectly return an error immediately after sending
the last ND request packet. For example, if nd_mmaxtries = 1 and two
packets arrive simultaneously, nd_resolve returns an error for the
second packet. This occurs because ln_asked is used to determine
whether the ND resolution is still in progress.
Instead, use the new LLE_UNRESOLVED state. It is set when the state
transitions to WAITDELETE, i.e., one second after the last request
is sent without successful address resolution.
PR kern/60071
diff --git a/sys/net/if_llatbl.h b/sys/net/if_llatbl.h
index a83f31cac70..31a3ebef30b 100644
--- a/sys/net/if_llatbl.h
+++ b/sys/net/if_llatbl.h
@@ -249,6 +249,7 @@ MALLOC_DECLARE(M_LLTABLE);
#define LLE_VALID 0x0008 /* ll_addr is valid */
#define LLE_PUB 0x0020 /* publish entry ??? */
#define LLE_LINKED 0x0040 /* linked to lookup structure */
+#define LLE_UNRESOLVED 0x0080 /* address unresolved */
/* LLE request flags */
#define LLE_EXCLUSIVE 0x2000 /* return lle xlocked */
diff --git a/sys/net/nd.c b/sys/net/nd.c
index 8ebc5fe5338..8d12c1d7b58 100644
--- a/sys/net/nd.c
+++ b/sys/net/nd.c
@@ -113,6 +113,7 @@ nd_timer(void *arg)
missed = ND_LLINFO_INCOMPLETE;
ln->ln_state = ND_LLINFO_WAITDELETE;
+ ln->la_flags |= LLE_UNRESOLVED;
break;
case ND_LLINFO_REACHABLE:
@@ -360,8 +361,10 @@ nd_resolve(struct llentry *ln, const struct rtentry *rt, struct mbuf *m,
* the oldest packet in the queue will be removed.
*/
if (ln->ln_state == ND_LLINFO_NOSTATE ||
- ln->ln_state == ND_LLINFO_WAITDELETE)
+ ln->ln_state == ND_LLINFO_WAITDELETE) {
+ ln->ln_asked = 0;
ln->ln_state = ND_LLINFO_INCOMPLETE;
+ }
#ifdef MBUFTRACE
m_claimm(m, ln->lle_tbl->llt_mowner);
@@ -398,7 +401,7 @@ nd_resolve(struct llentry *ln, const struct rtentry *rt, struct mbuf *m,
ln->la_numheld, nd->nd_maxqueuelen);
ln->la_numheld++;
- if (ln->ln_asked >= nd->nd_mmaxtries)
+ if ((ln->la_flags & LLE_UNRESOLVED) != 0)
error = (rt != NULL && rt->rt_flags & RTF_GATEWAY) ?
EHOSTUNREACH : EHOSTDOWN;
else
diff --git a/sys/netinet/if_arp.c b/sys/netinet/if_arp.c
index 2934534efb1..fc4d0252a74 100644
--- a/sys/netinet/if_arp.c
+++ b/sys/netinet/if_arp.c
@@ -1056,6 +1056,7 @@ again:
KASSERT(sizeof(la->ll_addr) >= ifp->if_addrlen);
memcpy(&la->ll_addr, ar_sha(ah), ifp->if_addrlen);
la->la_flags |= LLE_VALID;
+ la->la_flags &= ~LLE_UNRESOLVED;
la->ln_asked = 0;
if (new_state != 0) {
la->ln_state = new_state;
diff --git a/sys/netinet6/nd6.c b/sys/netinet6/nd6.c
index aeaef609a79..1920759ecbc 100644
--- a/sys/netinet6/nd6.c
+++ b/sys/netinet6/nd6.c
@@ -1400,6 +1400,7 @@ nd6_cache_lladdr(
*/
memcpy(&ln->ll_addr, lladdr, ifp->if_addrlen);
ln->la_flags |= LLE_VALID;
+ ln->la_flags &= ~LLE_UNRESOLVED;
}
if (!is_newentry) {
To generate a diff of this commit:
cvs rdiff -u -r1.19 -r1.20 src/sys/net/if_llatbl.h
cvs rdiff -u -r1.9 -r1.10 src/sys/net/nd.c
cvs rdiff -u -r1.318 -r1.319 src/sys/netinet/if_arp.c
cvs rdiff -u -r1.285 -r1.286 src/sys/netinet6/nd6.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
From: Ryota Ozaki <ozaki-r@iij.ad.jp>
To: kern-bug-people@netbsd.org, gnats-admin@netbsd.org, netbsd-bugs@netbsd.org,
gnats-bugs@netbsd.org
Cc:
Subject: Re: PR/60071 CVS commit: src/sys
Date: Thu, 26 Mar 2026 13:46:36 +0900
Oops!
I mistakenly passed the diff file to cvs -F...
Could someone change the commit log of the commit in the
repository with the following log?
Thanks,
ozaki-r
=3D=3D=3D=3D
nd: reset ln_asked on state reset
Even if a userland program such as ping continuously sends packets
to a (temporarily) unreachable host, the ND resolver only sends
request packets up to nd_mmaxtries times. This change allows ND
request packets to continue being sent while the userland process
is still sending packets.
Additionally, introduce LLE_UNRESOLVED to fix another issue.
nd_resolve may incorrectly return an error immediately after sending
the last ND request packet. For example, if nd_mmaxtries =3D 1 and two
packets arrive simultaneously, nd_resolve returns an error for the
second packet. This occurs because ln_asked is used to determine
whether the ND resolution is still in progress.
Instead, use the new LLE_UNRESOLVED state. It is set when the state
transitions to WAITDELETE, i.e., one second after the last request
is sent without successful address resolution.
PR kern/60071
=3D=3D=3D=3D
On Thu, Mar 26, 2026 at 1:40=E2=80=AFPM Ryota Ozaki <ozaki-r@netbsd.org> wr=
ote:
>
> The following reply was made to PR kern/60071; it has been noted by GNATS=
.
>
> From: "Ryota Ozaki" <ozaki-r@netbsd.org>
> To: gnats-bugs@gnats.NetBSD.org
> Cc:
> Subject: PR/60071 CVS commit: src/sys
> Date: Thu, 26 Mar 2026 04:35:18 +0000
>
> Module Name: src
> Committed By: ozaki-r
> Date: Thu Mar 26 04:35:17 UTC 2026
>
> Modified Files:
> src/sys/net: if_llatbl.h nd.c
> src/sys/netinet: if_arp.c
> src/sys/netinet6: nd6.c
>
> Log Message:
> commit 27c3de6c8063a7850ef0efbea0d83f314e541ce8
> Author: Ryota Ozaki <ozaki-r@iij.ad.jp>
> Date: Thu Mar 12 12:42:03 2026 +0900
>
> nd: reset ln_asked on state reset
>
> Even if a userland program such as ping continuously sends packets
> to a (temporarily) unreachable host, the ND resolver only sends
> request packets up to nd_mmaxtries times. This change allows ND
> request packets to continue being sent while the userland process
> is still sending packets.
>
> Additionally, introduce LLE_UNRESOLVED to fix another issue.
> nd_resolve may incorrectly return an error immediately after sending
> the last ND request packet. For example, if nd_mmaxtries =3D 1 and t=
wo
> packets arrive simultaneously, nd_resolve returns an error for the
> second packet. This occurs because ln_asked is used to determine
> whether the ND resolution is still in progress.
>
> Instead, use the new LLE_UNRESOLVED state. It is set when the state
> transitions to WAITDELETE, i.e., one second after the last request
> is sent without successful address resolution.
>
> PR kern/60071
>
> diff --git a/sys/net/if_llatbl.h b/sys/net/if_llatbl.h
> index a83f31cac70..31a3ebef30b 100644
> --- a/sys/net/if_llatbl.h
> +++ b/sys/net/if_llatbl.h
> @@ -249,6 +249,7 @@ MALLOC_DECLARE(M_LLTABLE);
> #define LLE_VALID 0x0008 /* ll_addr is valid */
> #define LLE_PUB 0x0020 /* publish entry ??? */
> #define LLE_LINKED 0x0040 /* linked to lookup structure */
> +#define LLE_UNRESOLVED 0x0080 /* address unresolved */
> /* LLE request flags */
> #define LLE_EXCLUSIVE 0x2000 /* return lle xlocked */
>
> diff --git a/sys/net/nd.c b/sys/net/nd.c
> index 8ebc5fe5338..8d12c1d7b58 100644
> --- a/sys/net/nd.c
> +++ b/sys/net/nd.c
> @@ -113,6 +113,7 @@ nd_timer(void *arg)
>
> missed =3D ND_LLINFO_INCOMPLETE;
> ln->ln_state =3D ND_LLINFO_WAITDELETE;
> + ln->la_flags |=3D LLE_UNRESOLVED;
> break;
>
> case ND_LLINFO_REACHABLE:
> @@ -360,8 +361,10 @@ nd_resolve(struct llentry *ln, const struct rtentry=
*rt, struct mbuf *m,
> * the oldest packet in the queue will be removed.
> */
> if (ln->ln_state =3D=3D ND_LLINFO_NOSTATE ||
> - ln->ln_state =3D=3D ND_LLINFO_WAITDELETE)
> + ln->ln_state =3D=3D ND_LLINFO_WAITDELETE) {
> + ln->ln_asked =3D 0;
> ln->ln_state =3D ND_LLINFO_INCOMPLETE;
> + }
>
> #ifdef MBUFTRACE
> m_claimm(m, ln->lle_tbl->llt_mowner);
> @@ -398,7 +401,7 @@ nd_resolve(struct llentry *ln, const struct rtentry =
*rt, struct mbuf *m,
> ln->la_numheld, nd->nd_maxqueuelen);
> ln->la_numheld++;
>
> - if (ln->ln_asked >=3D nd->nd_mmaxtries)
> + if ((ln->la_flags & LLE_UNRESOLVED) !=3D 0)
> error =3D (rt !=3D NULL && rt->rt_flags & RTF_GATEWAY) ?
> EHOSTUNREACH : EHOSTDOWN;
> else
> diff --git a/sys/netinet/if_arp.c b/sys/netinet/if_arp.c
> index 2934534efb1..fc4d0252a74 100644
> --- a/sys/netinet/if_arp.c
> +++ b/sys/netinet/if_arp.c
> @@ -1056,6 +1056,7 @@ again:
> KASSERT(sizeof(la->ll_addr) >=3D ifp->if_addrlen);
> memcpy(&la->ll_addr, ar_sha(ah), ifp->if_addrlen);
> la->la_flags |=3D LLE_VALID;
> + la->la_flags &=3D ~LLE_UNRESOLVED;
> la->ln_asked =3D 0;
> if (new_state !=3D 0) {
> la->ln_state =3D new_state;
> diff --git a/sys/netinet6/nd6.c b/sys/netinet6/nd6.c
> index aeaef609a79..1920759ecbc 100644
> --- a/sys/netinet6/nd6.c
> +++ b/sys/netinet6/nd6.c
> @@ -1400,6 +1400,7 @@ nd6_cache_lladdr(
> */
> memcpy(&ln->ll_addr, lladdr, ifp->if_addrlen);
> ln->la_flags |=3D LLE_VALID;
> + ln->la_flags &=3D ~LLE_UNRESOLVED;
> }
>
> if (!is_newentry) {
>
>
> To generate a diff of this commit:
> cvs rdiff -u -r1.19 -r1.20 src/sys/net/if_llatbl.h
> cvs rdiff -u -r1.9 -r1.10 src/sys/net/nd.c
> cvs rdiff -u -r1.318 -r1.319 src/sys/netinet/if_arp.c
> cvs rdiff -u -r1.285 -r1.286 src/sys/netinet6/nd6.c
>
> Please note that diffs are not public domain; they are subject to the
> copyright notices on the relevant files.
>
From: Thomas Klausner <wiz@netbsd.org>
To: Ryota Ozaki <ozaki-r@iij.ad.jp>
Cc: NetBSD bugtracking <gnats-bugs@netbsd.org>
Subject: Re: PR/60071 CVS commit: src/sys
Date: Thu, 26 Mar 2026 08:26:51 +0100
On Thu, Mar 26, 2026 at 04:50:02AM +0100, Ryota Ozaki via gnats wrote:
> I mistakenly passed the diff file to cvs -F...
> Could someone change the commit log of the commit in the
> repository with the following log?
We don't change the commit message after a commit.
The standard workaround is to commit a dummy commit to the same file
(-f or whitespace change or similar), with an explanation that the
previous commit message was wrong and that the new commit is just for
adding the commit message for it to the repository.
Cheers,
Thomas
From: Ryota Ozaki <ozaki-r@iij.ad.jp>
To: gnats-bugs@netbsd.org
Cc: kern-bug-people@netbsd.org, gnats-admin@netbsd.org, netbsd-bugs@netbsd.org
Subject: Re: PR/60071 CVS commit: src/sys
Date: Thu, 26 Mar 2026 16:44:58 +0900
On Thu, Mar 26, 2026 at 4:30=E2=80=AFPM Thomas Klausner via gnats
<gnats-admin@netbsd.org> wrote:
>
> The following reply was made to PR kern/60071; it has been noted by GNATS=
.
>
> From: Thomas Klausner <wiz@netbsd.org>
> To: Ryota Ozaki <ozaki-r@iij.ad.jp>
> Cc: NetBSD bugtracking <gnats-bugs@netbsd.org>
> Subject: Re: PR/60071 CVS commit: src/sys
> Date: Thu, 26 Mar 2026 08:26:51 +0100
>
> On Thu, Mar 26, 2026 at 04:50:02AM +0100, Ryota Ozaki via gnats wrote:
> > I mistakenly passed the diff file to cvs -F...
> > Could someone change the commit log of the commit in the
> > repository with the following log?
>
> We don't change the commit message after a commit.
Oh, I see.
>
> The standard workaround is to commit a dummy commit to the same file
> (-f or whitespace change or similar), with an explanation that the
> previous commit message was wrong and that the new commit is just for
> adding the commit message for it to the repository.
Fortunately(?), the wrong commit log includes the correct commit log,
so I think we don't need another commit.
Anyway I'm sorry for my mistake,
ozaki-r
>
> Cheers,
> Thomas
>
From: "Martin Husemann" <martin@netbsd.org>
To: gnats-bugs@gnats.NetBSD.org
Cc:
Subject: PR/60071 CVS commit: [netbsd-11] src
Date: Wed, 3 Jun 2026 18:41:37 +0000
Module Name: src
Committed By: martin
Date: Wed Jun 3 18:41:37 UTC 2026
Modified Files:
src/sys/net [netbsd-11]: if_llatbl.h nd.c
src/sys/netinet [netbsd-11]: if_arp.c
src/sys/netinet6 [netbsd-11]: nd6.c
src/tests/net/arp [netbsd-11]: t_arp.sh
Log Message:
Pull up following revision(s) (requested by ozaki-r in ticket #300):
sys/net/if_llatbl.h: revision 1.20
sys/netinet/if_arp.c: revision 1.319
sys/net/nd.c: revision 1.10
tests/net/arp/t_arp.sh: revision 1.50
tests/net/arp/t_arp.sh: revision 1.51
sys/netinet6/nd6.c: revision 1.286
commit 27c3de6c8063a7850ef0efbea0d83f314e541ce8
Author: Ryota Ozaki <ozaki-r@iij.ad.jp>
Date: Thu Mar 12 12:42:03 2026 +0900
nd: reset ln_asked on state reset
Even if a userland program such as ping continuously sends packets
to a (temporarily) unreachable host, the ND resolver only sends
request packets up to nd_mmaxtries times. This change allows ND
request packets to continue being sent while the userland process
is still sending packets.
Additionally, introduce LLE_UNRESOLVED to fix another issue.
nd_resolve may incorrectly return an error immediately after sending
the last ND request packet. For example, if nd_mmaxtries = 1 and two
packets arrive simultaneously, nd_resolve returns an error for the
second packet. This occurs because ln_asked is used to determine
whether the ND resolution is still in progress.
Instead, use the new LLE_UNRESOLVED state. It is set when the state
transitions to WAITDELETE, i.e., one second after the last request
is sent without successful address resolution.
PR kern/60071
tests, arp: add keep_sending test
It tests whether ARP sends requests more than net.inet.arp.nd_bmaxtries
times while ping is sending packets.
tests: skip arp_keep_sending test on qemu
It doesn't work on qemu (on NetBSD?) while it works on other
environments.
To generate a diff of this commit:
cvs rdiff -u -r1.19 -r1.19.10.1 src/sys/net/if_llatbl.h
cvs rdiff -u -r1.7.4.1 -r1.7.4.2 src/sys/net/nd.c
cvs rdiff -u -r1.317.2.1 -r1.317.2.2 src/sys/netinet/if_arp.c
cvs rdiff -u -r1.284 -r1.284.2.1 src/sys/netinet6/nd6.c
cvs rdiff -u -r1.48.2.1 -r1.48.2.2 src/tests/net/arp/t_arp.sh
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
From: "Martin Husemann" <martin@netbsd.org>
To: gnats-bugs@gnats.NetBSD.org
Cc:
Subject: PR/60071 CVS commit: [netbsd-10] src
Date: Wed, 3 Jun 2026 18:43:46 +0000
Module Name: src
Committed By: martin
Date: Wed Jun 3 18:43:46 UTC 2026
Modified Files:
src/sys/net [netbsd-10]: if_llatbl.h nd.c
src/sys/netinet [netbsd-10]: if_arp.c
src/sys/netinet6 [netbsd-10]: nd6.c
src/tests/net/arp [netbsd-10]: t_arp.sh
Log Message:
Pull up following revision(s) (requested by ozaki-r in ticket #1269):
sys/net/if_llatbl.h: revision 1.20
sys/netinet/if_arp.c: revision 1.319
sys/net/nd.c: revision 1.10
tests/net/arp/t_arp.sh: revision 1.50
tests/net/arp/t_arp.sh: revision 1.51
sys/netinet6/nd6.c: revision 1.286
commit 27c3de6c8063a7850ef0efbea0d83f314e541ce8
Author: Ryota Ozaki <ozaki-r@iij.ad.jp>
Date: Thu Mar 12 12:42:03 2026 +0900
nd: reset ln_asked on state reset
Even if a userland program such as ping continuously sends packets
to a (temporarily) unreachable host, the ND resolver only sends
request packets up to nd_mmaxtries times. This change allows ND
request packets to continue being sent while the userland process
is still sending packets.
Additionally, introduce LLE_UNRESOLVED to fix another issue.
nd_resolve may incorrectly return an error immediately after sending
the last ND request packet. For example, if nd_mmaxtries = 1 and two
packets arrive simultaneously, nd_resolve returns an error for the
second packet. This occurs because ln_asked is used to determine
whether the ND resolution is still in progress.
Instead, use the new LLE_UNRESOLVED state. It is set when the state
transitions to WAITDELETE, i.e., one second after the last request
is sent without successful address resolution.
PR kern/60071
tests, arp: add keep_sending test
It tests whether ARP sends requests more than net.inet.arp.nd_bmaxtries
times while ping is sending packets.
tests: skip arp_keep_sending test on qemu
It doesn't work on qemu (on NetBSD?) while it works on other
environments.
To generate a diff of this commit:
cvs rdiff -u -r1.19 -r1.19.2.1 src/sys/net/if_llatbl.h
cvs rdiff -u -r1.5.2.2 -r1.5.2.3 src/sys/net/nd.c
cvs rdiff -u -r1.311.2.4 -r1.311.2.5 src/sys/netinet/if_arp.c
cvs rdiff -u -r1.279.4.4 -r1.279.4.5 src/sys/netinet6/nd6.c
cvs rdiff -u -r1.45.6.3 -r1.45.6.4 src/tests/net/arp/t_arp.sh
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
(Contact us)
$NetBSD: query-full-pr,v 1.51 2026/08/10 02:28:17 riastradh Exp $
$NetBSD: gnats_config.sh,v 1.10 2026/05/13 22:00:09 riastradh Exp $
Copyright © 1994-2026
The NetBSD Foundation, Inc. ALL RIGHTS RESERVED.