summaryrefslogtreecommitdiffstats
path: root/if-bsd.c
diff options
context:
space:
mode:
authorRoy Marples <roy@marples.name>2016-11-29 18:02:04 +0000
committerRoy Marples <roy@marples.name>2016-11-29 18:02:04 +0000
commit4a5dbbcb4380c8aa67a146b1c97b31515a0fd074 (patch)
treef55e96e91a13a301a052b0bed3a88f99cfb54ef2 /if-bsd.c
parent2126c395a5c2d46f4895f52ac69c45079c4fee13 (diff)
downloaddhcpcd-4a5dbbcb4380c8aa67a146b1c97b31515a0fd074.tar.xz
Improve if_addrflag handling.
Diffstat (limited to 'if-bsd.c')
-rw-r--r--if-bsd.c35
1 files changed, 13 insertions, 22 deletions
diff --git a/if-bsd.c b/if-bsd.c
index 26c2b062..44e09d9e 100644
--- a/if-bsd.c
+++ b/if-bsd.c
@@ -1204,14 +1204,13 @@ if_ifa(struct dhcpcd_ctx *ctx, const struct ifa_msghdr *ifam)
#endif
#ifndef HAVE_IFAM_ADDRFLAGS
- if (ifam->ifam_type == RTM_DELADDR ||
- (addrflags = if_addrflags(ifp, &addr, NULL)) == -1)
- {
- if (ifam->ifam_type != RTM_DELADDR || errno != EEXIST)
- logger(ctx, LOG_ERR,
- "%s: if_addrflags: %s: %m",
- ifp->name, inet_ntoa(addr));
- addrflags = 0;
+ if (ifam->ifam_type == RTM_DELADDR)
+ addrflags = 0 ;
+ else if ((addrflags = if_addrflags(ifp, &addr, NULL)) == -1) {
+ logger(ctx, LOG_ERR,
+ "%s: if_addrflags: %s: %m",
+ ifp->name, inet_ntoa(addr));
+ break;
}
#endif
@@ -1232,20 +1231,12 @@ if_ifa(struct dhcpcd_ctx *ctx, const struct ifa_msghdr *ifam)
mask6 = sin6->sin6_addr;
#ifndef HAVE_IFAM_ADDRFLAGS
- if (ifam->ifam_type == RTM_DELADDR ||
- (addrflags = if_addrflags6(ifp, &addr6, NULL)) == -1)
- {
-#ifdef __FreeBSD__
- /* For some reason FreeBSD does't set errno
- * if the interface has just departed. */
- errno = 0;
-#endif
- if (ifam->ifam_type != RTM_DELADDR ||
- (errno != EEXIST && errno != 0))
- logger(ctx, LOG_ERR,
- "%s: if_addrflags6: %m",
- ifp->name);
- addrflags = 0;
+ if (ifam->ifam_type == RTM_DELADDR)
+ addrflags = 0;
+ else if ((addrflags = if_addrflags6(ifp, &addr6, NULL)) == -1) {
+ logger(ctx, LOG_ERR,
+ "%s: if_addrflags6: %m", ifp->name);
+ break;
}
#endif