blob: ea7b0ca00e198dff19b8cf0a4b9054a96ce3f7e9 [file] [log] [blame]
/*
*
* Wireless daemon for Linux
*
* Copyright (C) 2014-2019 Intel Corporation. All rights reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*
*/
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include <stddef.h>
#include <stdbool.h>
#include <string.h>
#include "src/iwd.h"
#include "src/common.h"
#include "src/ie.h"
const char *security_to_str(enum security security)
{
switch (security) {
case SECURITY_NONE:
return "open";
case SECURITY_WEP:
return "wep";
case SECURITY_PSK:
return "psk";
case SECURITY_8021X:
return "8021x";
}
return NULL;
}
bool security_from_str(const char *str, enum security *security)
{
if (!strcmp(str, "open"))
*security = SECURITY_NONE;
else if (!strcmp(str, "wep"))
*security = SECURITY_WEP;
else if (!strcmp(str, "psk"))
*security = SECURITY_PSK;
else if (!strcmp(str, "8021x"))
*security = SECURITY_8021X;
else
return false;
return true;
}
#define AKM_IS_PSK(akm) \
( \
akm & (IE_RSN_AKM_SUITE_PSK | \
IE_RSN_AKM_SUITE_PSK_SHA256 | \
IE_RSN_AKM_SUITE_FT_USING_PSK | \
IE_RSN_AKM_SUITE_SAE_SHA256 | \
IE_RSN_AKM_SUITE_FT_OVER_SAE_SHA256) \
)
#define AKM_IS_8021X(akm) \
( \
akm & (IE_RSN_AKM_SUITE_8021X | \
IE_RSN_AKM_SUITE_8021X_SHA256 | \
IE_RSN_AKM_SUITE_FT_OVER_8021X | \
IE_RSN_AKM_SUITE_FILS_SHA256 | \
IE_RSN_AKM_SUITE_FILS_SHA384 | \
IE_RSN_AKM_SUITE_FT_OVER_FILS_SHA256 | \
IE_RSN_AKM_SUITE_FT_OVER_FILS_SHA384 | \
IE_RSN_AKM_SUITE_OSEN) \
)
enum security security_determine(uint16_t bss_capability,
const struct ie_rsn_info *info)
{
if (info && AKM_IS_PSK(info->akm_suites))
return SECURITY_PSK;
if (info && AKM_IS_8021X(info->akm_suites))
return SECURITY_8021X;
if (info && (info->akm_suites & IE_RSN_AKM_SUITE_OWE))
return SECURITY_NONE;
if (bss_capability & IE_BSS_CAP_PRIVACY)
return SECURITY_WEP;
return SECURITY_NONE;
}