]> git.ipfire.org Git - thirdparty/dhcpcd.git/commitdiff
Improve if_addrflag handling.
authorRoy Marples <roy@marples.name>
Tue, 29 Nov 2016 18:02:04 +0000 (18:02 +0000)
committerRoy Marples <roy@marples.name>
Tue, 29 Nov 2016 18:02:04 +0000 (18:02 +0000)
if-bsd.c

index 26c2b062695279d6ef1590547c774da16fc502fa..44e09d9e65d2f0323835fb17d11cce794ceb9817 100644 (file)
--- 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