macsec_linux: Exit early when missing macsec kernel module

Using driver macsec_linux makes no sense without macsec kernel module
loaded.

Signed-off-by: Michael Braun <michael-dev@fami-braun.de>
This commit is contained in:
Michael Braun 2017-08-22 17:02:48 +02:00 committed by Jouni Malinen
parent 7612e65b9b
commit 73b3de01ce

View file

@ -234,10 +234,44 @@ static void macsec_drv_wpa_deinit(void *priv)
}
static int macsec_check_macsec(void)
{
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;