Using driver macsec_linux makes no sense without macsec kernel module loaded. Signed-off-by: Michael Braun <michael-dev@xxxxxxxxxxxxx> -- v2: improve output, fix coding style --- src/drivers/driver_macsec_linux.c | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/src/drivers/driver_macsec_linux.c b/src/drivers/driver_macsec_linux.c index 0694e60..d5ca273 100644 --- a/src/drivers/driver_macsec_linux.c +++ b/src/drivers/driver_macsec_linux.c @@ -234,10 +234,42 @@ static void macsec_drv_wpa_deinit(void *priv) } +static int macsec_check_macsec() +{ + struct nl_sock *sk; + int err = -1; + + sk = nl_socket_alloc(); + if (!sk) { + wpa_printf(MSG_ERROR, DRV_PREFIX "failed to alloc genl socket"); + return -1; + } + + if (genl_connect(sk) < 0) { + wpa_printf(MSG_ERROR, + DRV_PREFIX "connection to genl socket failed"); + goto out_free; + } + + if (genl_ctrl_resolve(sk, "macsec") < 0) { + wpa_printf(MSG_ERROR, DRV_PREFIX "genl resolve failed - macsec kernel module not present?"); + goto out_free; + } + + err = 0; + +out_free: + nl_socket_free(sk); + return err; +} + static void * macsec_drv_wpa_init(void *ctx, const char *ifname) { struct macsec_drv_data *drv; + if (macsec_check_macsec() < 0) + return NULL; + drv = os_zalloc(sizeof(*drv)); if (!drv) return NULL; -- 2.1.4 _______________________________________________ Hostap mailing list Hostap@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/hostap