Page MenuHomeFreeBSD

D28804.1794732911.diff
No OneTemporary

Authored By
Unknown
Size
2 KB
Referenced Files
None
Subscribers
None

D28804.1794732911.diff

Index: sys/net/rtsock.c
===================================================================
--- sys/net/rtsock.c
+++ sys/net/rtsock.c
@@ -1376,6 +1376,15 @@
return (0);
}
+static void
+remove_netmask(struct rt_addrinfo *info)
+{
+
+ info->rti_info[RTAX_NETMASK] = NULL;
+ info->rti_flags |= RTF_HOST;
+ info->rti_addrs &= ~RTA_NETMASK;
+}
+
#ifdef INET
static int
cleanup_xaddrs_inet(struct rt_addrinfo *info)
@@ -1405,11 +1414,8 @@
if (mask.s_addr != INADDR_BROADCAST)
fill_sockaddr_inet(mask_sa, mask);
- else {
- info->rti_info[RTAX_NETMASK] = NULL;
- info->rti_flags |= RTF_HOST;
- info->rti_addrs &= ~RTA_NETMASK;
- }
+ else
+ remove_netmask(info);
/* Check gateway */
if (info->rti_info[RTAX_GATEWAY] != NULL)
@@ -1445,11 +1451,8 @@
if (!IN6_ARE_ADDR_EQUAL(&mask, &in6mask128))
fill_sockaddr_inet6(mask_sa, &mask, 0);
- else {
- info->rti_info[RTAX_NETMASK] = NULL;
- info->rti_flags |= RTF_HOST;
- info->rti_addrs &= ~RTA_NETMASK;
- }
+ else
+ remove_netmask(info);
/* Check gateway */
if (info->rti_info[RTAX_GATEWAY] != NULL)
@@ -1467,6 +1470,16 @@
if (info->rti_info[RTAX_DST] == NULL)
return (EINVAL);
+ if (info->rti_flags & RTF_LLDATA) {
+
+ /*
+ * arp(8)/ndp(8) sends RTA_NETMASK for the associated
+ * prefix along with the actual address in RTA_DST.
+ * Remove netmask to avoid unnecessary address masking.
+ */
+ remove_netmask(info);
+ }
+
switch (info->rti_info[RTAX_DST]->sa_family) {
#ifdef INET
case AF_INET:
Index: usr.sbin/arp/arp.c
===================================================================
--- usr.sbin/arp/arp.c
+++ usr.sbin/arp/arp.c
@@ -758,10 +758,6 @@
rtm->rtm_rmx.rmx_expire = expire_time;
rtm->rtm_inits = RTV_EXPIRE;
rtm->rtm_flags |= (RTF_HOST | RTF_STATIC | RTF_LLDATA);
- if (doing_proxy) {
- rtm->rtm_addrs |= RTA_NETMASK;
- rtm->rtm_flags &= ~RTF_HOST;
- }
/* FALLTHROUGH */
case RTM_GET:
rtm->rtm_addrs |= RTA_DST;
@@ -776,7 +772,6 @@
NEXTADDR(RTA_DST, dst);
NEXTADDR(RTA_GATEWAY, sdl);
- NEXTADDR(RTA_NETMASK, som);
rtm->rtm_msglen = cp - (char *)&m_rtmsg;
doit:
Index: usr.sbin/ndp/ndp.c
===================================================================
--- usr.sbin/ndp/ndp.c
+++ usr.sbin/ndp/ndp.c
@@ -860,12 +860,6 @@
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 @@
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:

File Metadata

Mime Type
text/plain
Expires
Sun, Nov 15, 8:55 AM (21 h, 15 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
41740836
Default Alt Text
D28804.1794732911.diff (2 KB)

Event Timeline