summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Golle <daniel@makrotopia.org>2021-01-05 14:21:14 +0000
committerDaniel Golle <daniel@makrotopia.org>2021-01-05 22:19:43 +0000
commit8bfd8d88001e0d239d741c954c2421052b858fc1 (patch)
tree02dee1e9f9ddfc625e8e6b57c7cf8c73118371b6
parent74d13fb98730a7a8af6e6662d0f4281b6655ddd0 (diff)
downloadiwinfo-8bfd8d88001e0d239d741c954c2421052b858fc1.tar.gz
iwinfo: add support for GCMP cipher
Extend support for WPA ciphers by GCMP which is required for 802.11ad. Breaks ABI as ciphers now needs to be a field of 16 bits instead of 8. Signed-off-by: Daniel Golle <daniel@makrotopia.org>
-rw-r--r--include/iwinfo.h7
-rw-r--r--include/iwinfo/utils.h2
-rw-r--r--iwinfo_cli.c3
-rw-r--r--iwinfo_lua.c3
-rw-r--r--iwinfo_nl80211.c5
-rw-r--r--iwinfo_utils.c9
6 files changed, 20 insertions, 9 deletions
diff --git a/include/iwinfo.h b/include/iwinfo.h
index 680f384..5799c02 100644
--- a/include/iwinfo.h
+++ b/include/iwinfo.h
@@ -38,7 +38,8 @@
#define IWINFO_CIPHER_WEP104 (1 << 5)
#define IWINFO_CIPHER_AESOCB (1 << 6)
#define IWINFO_CIPHER_CKIP (1 << 7)
-#define IWINFO_CIPHER_COUNT 8
+#define IWINFO_CIPHER_GCMP (1 << 8)
+#define IWINFO_CIPHER_COUNT 9
#define IWINFO_KMGMT_NONE (1 << 0)
#define IWINFO_KMGMT_8021x (1 << 1)
@@ -164,8 +165,8 @@ struct iwinfo_freqlist_entry {
struct iwinfo_crypto_entry {
uint8_t enabled;
uint8_t wpa_version;
- uint8_t group_ciphers;
- uint8_t pair_ciphers;
+ uint16_t group_ciphers;
+ uint16_t pair_ciphers;
uint8_t auth_suites;
uint8_t auth_algs;
};
diff --git a/include/iwinfo/utils.h b/include/iwinfo/utils.h
index 98b9c89..1fa4f52 100644
--- a/include/iwinfo/utils.h
+++ b/include/iwinfo/utils.h
@@ -54,7 +54,7 @@ struct iwinfo_hardware_entry * iwinfo_hardware(struct iwinfo_hardware_id *id);
int iwinfo_hardware_id_from_mtd(struct iwinfo_hardware_id *id);
void iwinfo_parse_rsn(struct iwinfo_crypto_entry *c, uint8_t *data, uint8_t len,
- uint8_t defcipher, uint8_t defauth);
+ uint16_t defcipher, uint8_t defauth);
struct uci_section *iwinfo_uci_get_radio(const char *name, const char *type);
void iwinfo_uci_free(void);
diff --git a/iwinfo_cli.c b/iwinfo_cli.c
index c052d63..4976790 100644
--- a/iwinfo_cli.c
+++ b/iwinfo_cli.c
@@ -158,6 +158,9 @@ static char * format_enc_ciphers(int ciphers)
if (ciphers & IWINFO_CIPHER_CCMP)
pos += sprintf(pos, "CCMP, ");
+ if (ciphers & IWINFO_CIPHER_GCMP)
+ pos += sprintf(pos, "GCMP, ");
+
if (ciphers & IWINFO_CIPHER_WRAP)
pos += sprintf(pos, "WRAP, ");
diff --git a/iwinfo_lua.c b/iwinfo_lua.c
index 58a5537..abe848b 100644
--- a/iwinfo_lua.c
+++ b/iwinfo_lua.c
@@ -61,6 +61,9 @@ static char * iwinfo_crypto_print_ciphers(int ciphers)
if (ciphers & IWINFO_CIPHER_CCMP)
pos += sprintf(pos, "CCMP, ");
+ if (ciphers & IWINFO_CIPHER_GCMP)
+ pos += sprintf(pos, "GCMP, ");
+
if (ciphers & IWINFO_CIPHER_WRAP)
pos += sprintf(pos, "WRAP, ");
diff --git a/iwinfo_nl80211.c b/iwinfo_nl80211.c
index b067fc1..5ca5c03 100644
--- a/iwinfo_nl80211.c
+++ b/iwinfo_nl80211.c
@@ -1654,10 +1654,11 @@ static struct {
{ "WEP-40", IWINFO_CIPHER_WEP40 },
{ "NONE", IWINFO_CIPHER_NONE },
{ "TKIP", IWINFO_CIPHER_TKIP },
- { "CCMP", IWINFO_CIPHER_CCMP }
+ { "CCMP", IWINFO_CIPHER_CCMP },
+ { "GCMP", IWINFO_CIPHER_GCMP }
};
-static void parse_wpa_ciphers(const char *str, uint8_t *ciphers)
+static void parse_wpa_ciphers(const char *str, uint16_t *ciphers)
{
int i;
size_t l;
diff --git a/iwinfo_utils.c b/iwinfo_utils.c
index b4f98a9..d071997 100644
--- a/iwinfo_utils.c
+++ b/iwinfo_utils.c
@@ -285,7 +285,7 @@ int iwinfo_hardware_id_from_mtd(struct iwinfo_hardware_id *id)
return (id->vendor_id && id->device_id) ? 0 : -1;
}
-static void iwinfo_parse_rsn_cipher(uint8_t idx, uint8_t *ciphers)
+static void iwinfo_parse_rsn_cipher(uint8_t idx, uint16_t *ciphers)
{
switch (idx)
{
@@ -312,9 +312,12 @@ static void iwinfo_parse_rsn_cipher(uint8_t idx, uint8_t *ciphers)
*ciphers |= IWINFO_CIPHER_WEP104;
break;
+ case 8:
+ *ciphers |= IWINFO_CIPHER_GCMP;
+ break;
+
case 6: /* AES-128-CMAC */
case 7: /* No group addressed */
- case 8: /* GCMP */
case 9: /* GCMP-256 */
case 10: /* CCMP-256 */
case 11: /* BIP-GMAC-128 */
@@ -325,7 +328,7 @@ static void iwinfo_parse_rsn_cipher(uint8_t idx, uint8_t *ciphers)
}
void iwinfo_parse_rsn(struct iwinfo_crypto_entry *c, uint8_t *data, uint8_t len,
- uint8_t defcipher, uint8_t defauth)
+ uint16_t defcipher, uint8_t defauth)
{
uint16_t i, count;
uint8_t wpa_version = 0;