From: Roy Marples Date: Tue, 11 Apr 2017 14:32:30 +0000 (+0100) Subject: Use RO_MSGFILER on NetBSD to filter route(4) messages. X-Git-Tag: v7.0.0-beta3~26 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=55cb610347d302b48a20eb37169a6e493fb61ca7;p=thirdparty%2Fdhcpcd.git Use RO_MSGFILER on NetBSD to filter route(4) messages. Adapt OpenBSD ROUTE_MSGFILTER code to use the NetBSD array for this. --- diff --git a/src/if-bsd.c b/src/if-bsd.c index dbbf4c1e..89e0fae9 100644 --- a/src/if-bsd.c +++ b/src/if-bsd.c @@ -120,19 +120,21 @@ int if_opensockets_os(struct dhcpcd_ctx *ctx) { struct priv *priv; -#ifdef ROUTE_MSGFILTER - unsigned int msgfilter = ROUTE_FILTER(RTM_IFINFO) +#if defined(RO_MSGFILTER) || defined(ROUTE_MSGFILTER) + unsigned char msgfilter[] = { + RTM_IFINFO, #ifdef RTM_IFANNOUNCE - | ROUTE_FILTER(RTM_IFANNOUNCE) + RTM_IFANNOUNCE, #endif - | ROUTE_FILTER(RTM_ADD) - | ROUTE_FILTER(RTM_CHANGE) - | ROUTE_FILTER(RTM_DELETE) + RTM_ADD, RTM_CHANGE, RTM_DELETE, #ifdef RTM_CHGADDR - | ROUTE_FILTER(RTM_CHGADDR) + RTM_CHGADDR, +#endif + RTM_NEWADDR, RTM_DELADDR + }; +#ifdef ROUTE_MSGFILTER + unsigned int i, msgfilter_mask; #endif - | ROUTE_FILTER(RTM_DELADDR) - | ROUTE_FILTER(RTM_NEWADDR); #endif if ((priv = malloc(sizeof(*priv))) == NULL) @@ -152,10 +154,18 @@ if_opensockets_os(struct dhcpcd_ctx *ctx) ctx->link_fd = xsocket(PF_ROUTE, SOCK_RAW | SOCK_FLAGS, AF_UNSPEC); #undef SOCK_FLAGS -#ifdef ROUTE_MSGFILTER - if (setsockopt(ctx->link_fd, PF_ROUTE, ROUTE_MSGFILTER, +#if defined(RO_MSGFILTER) + if (setsockopt(ctx->link_fd, PF_ROUTE, RO_MSGFILTER, &msgfilter, sizeof(msgfilter)) == -1) logerr(__func__); +#elif defined(ROUTE_MSGFILTER) + /* Convert the array into a bitmask. */ + msgfilter_mask = 0; + for (i = 0; i < __arraycount(msgfilter); i++) + msgfilter_mask |= ROUTE_FILTER(msgfilter[i]); + if (setsockopt(ctx->link_fd, PF_ROUTE, ROUTE_MSGFILTER, + &msgfilter_mask, sizeof(msgfilter_mask)) == -1) + logerr(__func__); #endif return ctx->link_fd == -1 ? -1 : 0;