summaryrefslogtreecommitdiffstats
path: root/usr.sbin/arp
diff options
context:
space:
mode:
authormelifaro <melifaro@FreeBSD.org>2015-09-27 04:54:29 +0000
committermelifaro <melifaro@FreeBSD.org>2015-09-27 04:54:29 +0000
commit4fed811000ba5b64a4b7fba73ed6c0590038ab48 (patch)
treeb8bd529bc94d7864472e3eae47cfdc76698c9f0b /usr.sbin/arp
parent5d0f31382ff2eb2e0ef0a1e21c6edd686c7132a2 (diff)
downloadFreeBSD-src-4fed811000ba5b64a4b7fba73ed6c0590038ab48.zip
FreeBSD-src-4fed811000ba5b64a4b7fba73ed6c0590038ab48.tar.gz
rtsock requests for deleting interface address lles started to return EPERM
instead of old "ignore-and-return 0" in r287789. This broke arp -da / ndp -cn behavior (they exit on rtsock command failure). Fix this by translating LLE_IFADDR to RTM_PINNED flag, passing it to userland and making arp/ndp ignore these entries in batched delete. MFC after: 2 weeks
Diffstat (limited to 'usr.sbin/arp')
-rw-r--r--usr.sbin/arp/arp.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/usr.sbin/arp/arp.c b/usr.sbin/arp/arp.c
index 60f776f..eefde75 100644
--- a/usr.sbin/arp/arp.c
+++ b/usr.sbin/arp/arp.c
@@ -673,10 +673,13 @@ print_entry(struct sockaddr_dl *sdl,
*/
static void
nuke_entry(struct sockaddr_dl *sdl __unused,
- struct sockaddr_in *addr, struct rt_msghdr *rtm __unused)
+ struct sockaddr_in *addr, struct rt_msghdr *rtm)
{
char ip[20];
+ if (rtm->rtm_flags & RTF_PINNED)
+ return;
+
snprintf(ip, sizeof(ip), "%s", inet_ntoa(addr->sin_addr));
delete(ip);
}
OpenPOWER on IntegriCloud