summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormpi <mpi@openbsd.org>2013-04-17 08:25:37 +0000
committermpi <mpi@openbsd.org>2013-04-17 08:25:37 +0000
commit48afad5974cd198754ab894a7515ddcf96a25bb1 (patch)
tree506a3ee64d61df30a7b46cc95686b565cf8423be
parentext2fs has a 32-bit time fields. store a u_int32_t of the real time_t -- (diff)
downloadwireguard-openbsd-48afad5974cd198754ab894a7515ddcf96a25bb1.tar.xz
wireguard-openbsd-48afad5974cd198754ab894a7515ddcf96a25bb1.zip
Simplify the check to call in_ifinit() by merging two conditional
viariables. ok mikeb@
-rw-r--r--sys/netinet/in.c29
1 files changed, 14 insertions, 15 deletions
diff --git a/sys/netinet/in.c b/sys/netinet/in.c
index f82fdcdb335..29bcaae5953 100644
--- a/sys/netinet/in.c
+++ b/sys/netinet/in.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: in.c,v 1.74 2013/03/22 01:41:12 tedu Exp $ */
+/* $OpenBSD: in.c,v 1.75 2013/04/17 08:25:37 mpi Exp $ */
/* $NetBSD: in.c,v 1.26 1996/02/13 23:41:39 christos Exp $ */
/*
@@ -195,7 +195,7 @@ in_control(struct socket *so, u_long cmd, caddr_t data, struct ifnet *ifp)
struct in_ifaddr *ia = NULL;
struct in_aliasreq *ifra = (struct in_aliasreq *)data;
struct sockaddr_in oldaddr;
- int error, hostIsNew, maskIsNew;
+ int error;
int newifaddr;
int s;
@@ -357,30 +357,30 @@ in_control(struct socket *so, u_long cmd, caddr_t data, struct ifnet *ifp)
ifra->ifra_addr.sin_addr.s_addr;
break;
- case SIOCAIFADDR:
- maskIsNew = 0;
- hostIsNew = 1;
+ case SIOCAIFADDR: {
+ int needinit = 0;
+
error = 0;
+
s = splsoftnet();
if (ia->ia_addr.sin_family == AF_INET) {
- if (ifra->ifra_addr.sin_len == 0) {
+ if (ifra->ifra_addr.sin_len == 0)
ifra->ifra_addr = ia->ia_addr;
- hostIsNew = 0;
- } else if (ifra->ifra_addr.sin_addr.s_addr ==
- ia->ia_addr.sin_addr.s_addr && !newifaddr)
- hostIsNew = 0;
+ else if (ifra->ifra_addr.sin_addr.s_addr !=
+ ia->ia_addr.sin_addr.s_addr || newifaddr)
+ needinit = 1;
}
if (ifra->ifra_mask.sin_len) {
in_ifscrub(ifp, ia);
ia->ia_sockmask = ifra->ifra_mask;
ia->ia_netmask = ia->ia_sockmask.sin_addr.s_addr;
- maskIsNew = 1;
+ needinit = 1;
}
if ((ifp->if_flags & IFF_POINTOPOINT) &&
(ifra->ifra_dstaddr.sin_family == AF_INET)) {
in_ifscrub(ifp, ia);
ia->ia_dstaddr = ifra->ifra_dstaddr;
- maskIsNew = 1; /* We lie; but the effect's the same */
+ needinit = 1;
}
if ((ifp->if_flags & IFF_BROADCAST) &&
(ifra->ifra_broadaddr.sin_family == AF_INET)) {
@@ -390,8 +390,7 @@ in_control(struct socket *so, u_long cmd, caddr_t data, struct ifnet *ifp)
ifa_update_broadaddr(ifp, &ia->ia_ifa,
sintosa(&ifra->ifra_broadaddr));
}
- if (ifra->ifra_addr.sin_family == AF_INET &&
- (hostIsNew || maskIsNew)) {
+ if (ifra->ifra_addr.sin_family == AF_INET && needinit) {
error = in_ifinit(ifp, ia, &ifra->ifra_addr, 0,
newifaddr);
}
@@ -403,7 +402,7 @@ in_control(struct socket *so, u_long cmd, caddr_t data, struct ifnet *ifp)
}
splx(s);
return (error);
-
+ }
case SIOCDIFADDR: {
error = 0;