diff options
author | 2013-04-17 08:25:37 +0000 | |
---|---|---|
committer | 2013-04-17 08:25:37 +0000 | |
commit | 48afad5974cd198754ab894a7515ddcf96a25bb1 (patch) | |
tree | 506a3ee64d61df30a7b46cc95686b565cf8423be | |
parent | ext2fs has a 32-bit time fields. store a u_int32_t of the real time_t -- (diff) | |
download | wireguard-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.c | 29 |
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; |