I think my analysis here applies to this instance as well: https://marc.info/?l=openbsd-tech&m=145377854103866&w=2
I also changed the chained condition to a switch statement because I find that more readable. Thanks for your time, Michael Index: ifwatchd.c =================================================================== RCS file: /cvsroot/src/usr.sbin/ifwatchd/ifwatchd.c,v retrieving revision 1.26 diff -u -p -r1.26 ifwatchd.c --- ifwatchd.c 30 Aug 2011 18:57:38 -0000 1.26 +++ ifwatchd.c 27 Jan 2016 17:34:12 -0000 @@ -292,7 +292,8 @@ check_addrs(char *cp, int addrs, enum ev struct sockaddr *sa, *ifa = NULL, *brd = NULL; char ifname_buf[IFNAMSIZ]; const char *ifname; - int ifndx = 0, i; + int ifndx = 0; + unsigned int i; if (addrs == 0) return; @@ -300,7 +301,8 @@ check_addrs(char *cp, int addrs, enum ev if ((i & addrs) == 0) continue; sa = (struct sockaddr *)cp; - if (i == RTA_IFP) { + switch (i) { + case RTA_IFP: struct sockaddr_dl * li = (struct sockaddr_dl*)sa; ifndx = li->sdl_index; if (!find_interface(ifndx)) { @@ -308,10 +310,16 @@ check_addrs(char *cp, int addrs, enum ev printf("ignoring change on interface #%d\n", ifndx); return; } - } else if (i == RTA_IFA) + break; + case RTA_IFA: ifa = sa; - else if (i == RTA_BRD) + break; + case RTA_BRD: brd = sa; + break; + default: + break; + } RT_ADVANCE(cp, sa); } if (ifa != NULL) {