diff options
author | 2014-08-26 15:09:26 +0000 | |
---|---|---|
committer | 2014-08-26 15:09:26 +0000 | |
commit | 60cc7504ce5c0ac2ae5cb723a815832a2784b949 (patch) | |
tree | f0c864a748e837d3b39a88fafe80259ea5d42101 | |
parent | Don't single out ami(4) here; other RAID drivers support logical (diff) | |
download | wireguard-openbsd-60cc7504ce5c0ac2ae5cb723a815832a2784b949.tar.xz wireguard-openbsd-60cc7504ce5c0ac2ae5cb723a815832a2784b949.zip |
Revert the addition of broadcast addresses, it apparently also corrupts
the tree. Found by millert@.
-rw-r--r-- | sys/net/route.c | 32 | ||||
-rw-r--r-- | sys/netinet/if_ether.c | 14 |
2 files changed, 7 insertions, 39 deletions
diff --git a/sys/net/route.c b/sys/net/route.c index e1bf33efa4f..3718bce4e0d 100644 --- a/sys/net/route.c +++ b/sys/net/route.c @@ -1,4 +1,4 @@ -/* $OpenBSD: route.c,v 1.180 2014/08/21 10:07:07 mpi Exp $ */ +/* $OpenBSD: route.c,v 1.181 2014/08/26 15:09:26 mpi Exp $ */ /* $NetBSD: route.c,v 1.14 1996/02/13 22:00:46 christos Exp $ */ /* @@ -791,8 +791,7 @@ rtrequest1(int req, struct rt_addrinfo *info, u_int8_t prio, * sure that local routes are only modified by the * kernel. */ - if ((rt->rt_flags & (RTF_LOCAL | RTF_BROADCAST)) && - prio != RTP_LOCAL) + if (rt->rt_flags & RTF_LOCAL && prio != RTP_LOCAL) senderr(EINVAL); if ((rn = rnh->rnh_deladdr(info->rti_info[RTAX_DST], @@ -1111,7 +1110,7 @@ rt_ifa_add(struct ifaddr *ifa, int flags, struct sockaddr *dst) if ((flags & RTF_HOST) == 0) info.rti_info[RTAX_NETMASK] = ifa->ifa_netmask; - if (flags & (RTF_LOCAL|RTF_BROADCAST)) + if (flags & RTF_LOCAL) prio = RTP_LOCAL; error = rtrequest1(RTM_ADD, &info, prio, &nrt, rtableid); @@ -1129,12 +1128,6 @@ rt_ifa_add(struct ifaddr *ifa, int flags, struct sockaddr *dst) if (ifa->ifa_rtrequest) ifa->ifa_rtrequest(RTM_ADD, rt); } - - /* - * A local route is created for every address configured - * on an interface, so use this information to notify - * userland that a new address has been added. - */ if (flags & RTF_LOCAL) rt_newaddrmsg(RTM_ADD, ifa, error, nrt); } @@ -1185,7 +1178,7 @@ rt_ifa_del(struct ifaddr *ifa, int flags, struct sockaddr *dst) if ((flags & RTF_HOST) == 0) info.rti_info[RTAX_NETMASK] = ifa->ifa_netmask; - if (flags & (RTF_LOCAL|RTF_BROADCAST)) + if (flags & RTF_LOCAL) prio = RTP_LOCAL; error = rtrequest1(RTM_DELETE, &info, prio, &nrt, rtableid); @@ -1236,16 +1229,9 @@ rt_ifa_addloop(struct ifaddr *ifa) /* If there is no loopback entry, allocate one. */ rt = rtalloc1(ifa->ifa_addr, 0, ifa->ifa_ifp->if_rdomain); if (rt == NULL || (rt->rt_flags & RTF_HOST) == 0 || - (rt->rt_ifp->if_flags & IFF_LOOPBACK) == 0) { + (rt->rt_ifp->if_flags & IFF_LOOPBACK) == 0) rt_ifa_add(ifa, RTF_UP| RTF_HOST | RTF_LLINFO | RTF_LOCAL, ifa->ifa_addr); - - if ((ifa->ifa_ifp->if_flags & IFF_BROADCAST) && - ifa->ifa_broadaddr) - rt_ifa_add(ifa, RTF_UP | RTF_HOST | RTF_LLINFO | - RTF_BROADCAST, ifa->ifa_broadaddr); - - } if (rt) rt->rt_refcnt--; } @@ -1288,15 +1274,9 @@ rt_ifa_delloop(struct ifaddr *ifa) */ rt = rtalloc1(ifa->ifa_addr, 0, ifa->ifa_ifp->if_rdomain); if (rt != NULL && (rt->rt_flags & RTF_HOST) != 0 && - (rt->rt_ifp->if_flags & IFF_LOOPBACK) != 0) { + (rt->rt_ifp->if_flags & IFF_LOOPBACK) != 0) rt_ifa_del(ifa, RTF_HOST | RTF_LLINFO | RTF_LOCAL, ifa->ifa_addr); - - if ((ifa->ifa_ifp->if_flags & IFF_BROADCAST) && - ifa->ifa_broadaddr) - rt_ifa_del(ifa, RTF_HOST | RTF_LLINFO | RTF_BROADCAST, - ifa->ifa_broadaddr); - } if (rt) rt->rt_refcnt--; } diff --git a/sys/netinet/if_ether.c b/sys/netinet/if_ether.c index 11f7876a472..4d40891c279 100644 --- a/sys/netinet/if_ether.c +++ b/sys/netinet/if_ether.c @@ -1,4 +1,4 @@ -/* $OpenBSD: if_ether.c,v 1.134 2014/08/19 12:49:41 mpi Exp $ */ +/* $OpenBSD: if_ether.c,v 1.135 2014/08/26 15:09:26 mpi Exp $ */ /* $NetBSD: if_ether.c,v 1.31 1996/05/11 12:59:58 mycroft Exp $ */ /* @@ -232,18 +232,6 @@ arp_rtrequest(int req, struct rtentry *rt) rt->rt_flags |= RTF_LLINFO; LIST_INSERT_HEAD(&llinfo_arp, la, la_list); - /* - * Routes to broadcast addresses must be incomplete - * arp entries so that they won't be picked up, but - * since we expect them to always be present in the - * routing table, make sure arptimer() won't free - * them. - */ - if (rt->rt_flags & RTF_BROADCAST) { - rt->rt_expire = 0; - break; - } - TAILQ_FOREACH(ifa, &ifp->if_addrlist, ifa_list) { if ((ifa->ifa_addr->sa_family == AF_INET) && ifatoia(ifa)->ia_addr.sin_addr.s_addr == |