aboutsummaryrefslogtreecommitdiff
path: root/usr.sbin/ndp
diff options
context:
space:
mode:
authorAlexander V. Chernikov <melifaro@FreeBSD.org>2021-02-19 21:09:17 +0000
committerAlexander V. Chernikov <melifaro@FreeBSD.org>2021-02-19 21:17:17 +0000
commitf9e1cd6c99200846b324a8b65f7f31ded74013bd (patch)
treee1de91c2b590f2e9c4a7b0a6bceda69a8d23240e /usr.sbin/ndp
parenta78bb831a17f9ba4b3d833ae6a9c2ce4f5cb5d1e (diff)
downloadsrc-f9e1cd6c99200846b324a8b65f7f31ded74013bd.tar.gz
src-f9e1cd6c99200846b324a8b65f7f31ded74013bd.zip
Fix arp/ndp deletion broken by 2fe5a79425c7.
Changes in the 2fe5a79425c7 moved dst sockaddr masking from the routing control plane to the rtsock code. It broke arp/ndp deletion. It turns out, arp/ndp perform RTM_GET request first to get an interface index necessary for the deletion. Then they simply stamp the reply with RTF_LLDATA and set the command to RTM_DELETE. As a result, kernel receives request with non-empty RTA_NETMASK and clears RTA_DST host bits before passing the message to the lla code. De facto, the only needed bits are RTA_DST, RTA_GATEWAY and the subset of rtm_flags. With that in mind, fix the interace by clearing RTA_NETMASK for every messages with RTF_LLDATA. While here, cleanup arp/ndp code a bit. MFC after: 1 day Reviewed by: gnn Differential Revision: https://reviews.freebsd.org/D28804
Diffstat (limited to 'usr.sbin/ndp')
-rw-r--r--usr.sbin/ndp/ndp.c10
1 files changed, 0 insertions, 10 deletions
diff --git a/usr.sbin/ndp/ndp.c b/usr.sbin/ndp/ndp.c
index aa40e2775a59..ce21e34417c3 100644
--- a/usr.sbin/ndp/ndp.c
+++ b/usr.sbin/ndp/ndp.c
@@ -860,12 +860,6 @@ rtmsg(int cmd)
rtm->rtm_inits = RTV_EXPIRE;
}
rtm->rtm_flags |= (RTF_HOST | RTF_STATIC | RTF_LLDATA);
-#if 0 /* we don't support ipv6addr/128 type proxying */
- if (rtm->rtm_flags & RTF_ANNOUNCE) {
- rtm->rtm_flags &= ~RTF_HOST;
- rtm->rtm_addrs |= RTA_NETMASK;
- }
-#endif
/* FALLTHROUGH */
case RTM_GET:
rtm->rtm_addrs |= RTA_DST;
@@ -873,10 +867,6 @@ rtmsg(int cmd)
NEXTADDR(RTA_DST, sin_m);
NEXTADDR(RTA_GATEWAY, sdl_m);
-#if 0 /* we don't support ipv6addr/128 type proxying */
- memset(&so_mask.sin6_addr, 0xff, sizeof(so_mask.sin6_addr));
- NEXTADDR(RTA_NETMASK, so_mask);
-#endif
rtm->rtm_msglen = cp - (char *)&m_rtmsg;
doit: