hostap is only interested in RTM_IEEE80211. wpa_supplicant is only interested in RTM_IEEE80211, RTM_IFINFO and RTM_IFANNOUNCE. This supports the NetBSD RO_MSGFILTER interface and the alternative DragonFlyBSD/OpenBSD interface ROUTE_MSGFILTER. Signed-off-by: Roy Marples <roy@xxxxxxxxxxxx> diff --git a/src/drivers/driver_bsd.c b/src/drivers/driver_bsd.c index 82ca0612e..8667ee519 100644 --- a/src/drivers/driver_bsd.c +++ b/src/drivers/driver_bsd.c @@ -1661,6 +1661,17 @@ static void * bsd_global_init(void *ctx) { struct bsd_driver_global *global; +#if defined(RO_MSGFILTER) || defined(ROUTE_MSGFILTER) + unsigned char msgfilter[] = { + RTM_IEEE80211, +#ifndef HOSTAPD + RTM_IFINFO, RTM_IFANNOUNCE, +#endif + }; +#endif +#ifdef ROUTE_MSGFILTER + unsigned int i, msgfilter_mask; +#endif global = os_zalloc(sizeof(*global)); if (global == NULL) @@ -1683,6 +1694,21 @@ bsd_global_init(void *ctx) goto fail; } +#if defined(RO_MSGFILTER) + if (setsockopt(global->route, PF_ROUTE, RO_MSGFILTER, + &msgfilter, sizeof(msgfilter)) < 0) + wpa_printf(MSG_ERROR, "socket[PF_ROUTE,RO_MSGFILTER]: %s", + strerror(errno)); +#elif defined(ROUTE_MSGFILTER) + msgfilter_mask = 0; + for (i = 0; i < (sizeof(msgfilter) / sizeof(msgfilter[0])); i++) + msgfilter_mask |= ROUTE_FILTER(msgfilter[i]); + if (setsockopt(global->route, PF_ROUTE, ROUTE_MSGFILTER, + &msgfilter_mask, sizeof(msgfilter_mask)) < 0) + wpa_printf(MSG_ERROR, "socket[PF_ROUTE,ROUTE_MSGFILTER]: %s", + strerror(errno)); +#endif + global->event_buf_len = rtbuf_len(); global->event_buf = os_malloc(global->event_buf_len); if (global->event_buf == NULL) { _______________________________________________ Hostap mailing list Hostap@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/hostap