* [PATCH 1/6] add support for parsing ERP information element
@ 2009-05-04 8:48 Marcel Holtmann
2009-05-04 8:48 ` [PATCH 2/6] add basic support for parsing country " Marcel Holtmann
0 siblings, 1 reply; 6+ messages in thread
From: Marcel Holtmann @ 2009-05-04 8:48 UTC (permalink / raw)
To: Johannes Berg; +Cc: linux-wireless, Marcel Holtmann
---
scan.c | 16 ++++++++++++++++
1 files changed, 16 insertions(+), 0 deletions(-)
diff --git a/scan.c b/scan.c
index 91e94ed..d4a4832 100644
--- a/scan.c
+++ b/scan.c
@@ -80,11 +80,27 @@ static void print_ign(unsigned char type, unsigned char len, unsigned char *data
/* ignore for now, not too useful */
}
+static void print_erp(unsigned char type, unsigned char len, unsigned char *data)
+{
+ if (data[0] == 0x00)
+ return;
+
+ printf("\tERP:");
+ if (data[0] & 0x01)
+ printf(" NonERP_Present");
+ if (data[0] & 0x02)
+ printf(" Use_Protection");
+ if (data[0] & 0x04)
+ printf(" Barker_Preamble_Mode");
+ printf("\n");
+}
+
static const printfn ieprinters[] = {
[0] = print_ssid,
[1] = print_supprates,
[3] = print_ds,
[5] = print_ign,
+ [42] = print_erp,
[50] = print_supprates,
};
--
1.6.0.6
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 2/6] add basic support for parsing country information element
2009-05-04 8:48 [PATCH 1/6] add support for parsing ERP information element Marcel Holtmann
@ 2009-05-04 8:48 ` Marcel Holtmann
2009-05-04 8:48 ` [PATCH 3/6] add support for showing extended capabilities IE Marcel Holtmann
0 siblings, 1 reply; 6+ messages in thread
From: Marcel Holtmann @ 2009-05-04 8:48 UTC (permalink / raw)
To: Johannes Berg; +Cc: linux-wireless, Marcel Holtmann
---
scan.c | 20 ++++++++++++++++++++
1 files changed, 20 insertions(+), 0 deletions(-)
diff --git a/scan.c b/scan.c
index d4a4832..5b5d300 100644
--- a/scan.c
+++ b/scan.c
@@ -80,6 +80,25 @@ static void print_ign(unsigned char type, unsigned char len, unsigned char *data
/* ignore for now, not too useful */
}
+static void print_country(unsigned char type, unsigned char len, unsigned char *data)
+{
+ int i;
+
+ printf("\tCountry: %.*s", 2, data);
+ switch (data[2]) {
+ case 'I':
+ printf(" (indoor)");
+ break;
+ case 'O':
+ printf(" (outdoor)");
+ break;
+ }
+ printf(", data:");
+ for(i=0; i<len-3; i++)
+ printf(" %.02x", data[i + 3]);
+ printf("\n");
+}
+
static void print_erp(unsigned char type, unsigned char len, unsigned char *data)
{
if (data[0] == 0x00)
@@ -100,6 +119,7 @@ static const printfn ieprinters[] = {
[1] = print_supprates,
[3] = print_ds,
[5] = print_ign,
+ [7] = print_country,
[42] = print_erp,
[50] = print_supprates,
};
--
1.6.0.6
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 3/6] add support for showing extended capabilities IE
2009-05-04 8:48 ` [PATCH 2/6] add basic support for parsing country " Marcel Holtmann
@ 2009-05-04 8:48 ` Marcel Holtmann
2009-05-04 8:48 ` [PATCH 4/6] add human readable decoding for capability information field Marcel Holtmann
0 siblings, 1 reply; 6+ messages in thread
From: Marcel Holtmann @ 2009-05-04 8:48 UTC (permalink / raw)
To: Johannes Berg; +Cc: linux-wireless, Marcel Holtmann
---
scan.c | 11 +++++++++++
1 files changed, 11 insertions(+), 0 deletions(-)
diff --git a/scan.c b/scan.c
index 5b5d300..0cd3aa8 100644
--- a/scan.c
+++ b/scan.c
@@ -114,6 +114,16 @@ static void print_erp(unsigned char type, unsigned char len, unsigned char *data
printf("\n");
}
+static void print_capabilities(unsigned char type, unsigned char len, unsigned char *data)
+{
+ int i;
+
+ printf("\tExtended capabilties:");
+ for(i=0; i<len; i++)
+ printf(" %.02x", data[i]);
+ printf("\n");
+}
+
static const printfn ieprinters[] = {
[0] = print_ssid,
[1] = print_supprates,
@@ -122,6 +132,7 @@ static const printfn ieprinters[] = {
[7] = print_country,
[42] = print_erp,
[50] = print_supprates,
+ [127] = print_capabilities,
};
static void tab_on_first(bool *first)
--
1.6.0.6
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 4/6] add human readable decoding for capability information field
2009-05-04 8:48 ` [PATCH 3/6] add support for showing extended capabilities IE Marcel Holtmann
@ 2009-05-04 8:48 ` Marcel Holtmann
2009-05-04 8:48 ` [PATCH 5/6] add basic support for parsing WMM information element Marcel Holtmann
0 siblings, 1 reply; 6+ messages in thread
From: Marcel Holtmann @ 2009-05-04 8:48 UTC (permalink / raw)
To: Johannes Berg; +Cc: linux-wireless, Marcel Holtmann
---
scan.c | 44 +++++++++++++++++++++++++++++++++++++++++---
1 files changed, 41 insertions(+), 3 deletions(-)
diff --git a/scan.c b/scan.c
index 0cd3aa8..8cd1f90 100644
--- a/scan.c
+++ b/scan.c
@@ -13,6 +13,20 @@
#include "nl80211.h"
#include "iw.h"
+#define WLAN_CAPABILITY_ESS (1<<0)
+#define WLAN_CAPABILITY_IBSS (1<<1)
+#define WLAN_CAPABILITY_CF_POLLABLE (1<<2)
+#define WLAN_CAPABILITY_CF_POLL_REQUEST (1<<3)
+#define WLAN_CAPABILITY_PRIVACY (1<<4)
+#define WLAN_CAPABILITY_SHORT_PREAMBLE (1<<5)
+#define WLAN_CAPABILITY_PBCC (1<<6)
+#define WLAN_CAPABILITY_CHANNEL_AGILITY (1<<7)
+#define WLAN_CAPABILITY_SPECTRUM_MGMT (1<<8)
+#define WLAN_CAPABILITY_QOS (1<<9)
+#define WLAN_CAPABILITY_SHORT_SLOT_TIME (1<<10)
+#define WLAN_CAPABILITY_APSD (1<<11)
+#define WLAN_CAPABILITY_DSSS_OFDM (1<<13)
+
struct scan_params {
bool unknown;
};
@@ -333,9 +347,33 @@ static int print_bss_handler(struct nl_msg *msg, void *arg)
if (bss[NL80211_BSS_BEACON_INTERVAL])
printf("\tbeacon interval: %d\n",
nla_get_u16(bss[NL80211_BSS_BEACON_INTERVAL]));
- if (bss[NL80211_BSS_CAPABILITY])
- printf("\tcapability: 0x%.4x\n",
- nla_get_u16(bss[NL80211_BSS_CAPABILITY]));
+ if (bss[NL80211_BSS_CAPABILITY]) {
+ __u16 capa = nla_get_u16(bss[NL80211_BSS_CAPABILITY]);
+ printf("\tcapability:");
+ if (capa & WLAN_CAPABILITY_ESS)
+ printf(" ESS");
+ if (capa & WLAN_CAPABILITY_IBSS)
+ printf(" IBSS");
+ if (capa & WLAN_CAPABILITY_PRIVACY)
+ printf(" Privacy");
+ if (capa & WLAN_CAPABILITY_SHORT_PREAMBLE)
+ printf(" ShortPreamble");
+ if (capa & WLAN_CAPABILITY_PBCC)
+ printf(" PBCC");
+ if (capa & WLAN_CAPABILITY_CHANNEL_AGILITY)
+ printf(" ChannelAgility");
+ if (capa & WLAN_CAPABILITY_SPECTRUM_MGMT)
+ printf(" SpectrumMgmt");
+ if (capa & WLAN_CAPABILITY_QOS)
+ printf(" QoS");
+ if (capa & WLAN_CAPABILITY_SHORT_SLOT_TIME)
+ printf(" ShortSlotTime");
+ if (capa & WLAN_CAPABILITY_APSD)
+ printf(" APSD");
+ if (capa & WLAN_CAPABILITY_DSSS_OFDM)
+ printf(" DSSS-OFDM");
+ printf(" (0x%.4x)\n", capa);
+ }
if (bss[NL80211_BSS_SIGNAL_MBM]) {
int s = nla_get_u32(bss[NL80211_BSS_SIGNAL_MBM]);
printf("\tsignal: %d.%.2d dBm\n", s/100, s%100);
--
1.6.0.6
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 5/6] add basic support for parsing WMM information element
2009-05-04 8:48 ` [PATCH 4/6] add human readable decoding for capability information field Marcel Holtmann
@ 2009-05-04 8:48 ` Marcel Holtmann
2009-05-04 8:48 ` [PATCH 6/6] add support for parsing WPA and RSN/WPA2 information elements Marcel Holtmann
0 siblings, 1 reply; 6+ messages in thread
From: Marcel Holtmann @ 2009-05-04 8:48 UTC (permalink / raw)
To: Johannes Berg; +Cc: linux-wireless, Marcel Holtmann
---
scan.c | 23 +++++++++++++++++++++++
1 files changed, 23 insertions(+), 0 deletions(-)
diff --git a/scan.c b/scan.c
index 8cd1f90..6ff4386 100644
--- a/scan.c
+++ b/scan.c
@@ -157,6 +157,28 @@ static void tab_on_first(bool *first)
*first = false;
}
+static void print_wifi_wmm(unsigned char type, unsigned char len, unsigned char *data)
+{
+ int i;
+
+ printf("\tWMM ");
+ switch (data[0]) {
+ case 0x00:
+ printf("information:");
+ break;
+ case 0x01:
+ printf("parameter:");
+ break;
+ default:
+ printf("type %d:", data[0]);
+ break;
+ }
+
+ for(i=0; i<len-1; i++)
+ printf(" %.02x", data[i + 1]);
+ printf("\n");
+}
+
static void print_wifi_wps(unsigned char type, unsigned char len, unsigned char *data)
{
bool first = true;
@@ -238,6 +260,7 @@ static void print_wifi_wps(unsigned char type, unsigned char len, unsigned char
}
static const printfn wifiprinters[] = {
+ [2] = print_wifi_wmm,
[4] = print_wifi_wps,
};
--
1.6.0.6
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 6/6] add support for parsing WPA and RSN/WPA2 information elements
2009-05-04 8:48 ` [PATCH 5/6] add basic support for parsing WMM information element Marcel Holtmann
@ 2009-05-04 8:48 ` Marcel Holtmann
0 siblings, 0 replies; 6+ messages in thread
From: Marcel Holtmann @ 2009-05-04 8:48 UTC (permalink / raw)
To: Johannes Berg; +Cc: linux-wireless, Marcel Holtmann
---
scan.c | 194 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 187 insertions(+), 7 deletions(-)
diff --git a/scan.c b/scan.c
index 6ff4386..8fb7ac2 100644
--- a/scan.c
+++ b/scan.c
@@ -27,6 +27,9 @@
#define WLAN_CAPABILITY_APSD (1<<11)
#define WLAN_CAPABILITY_DSSS_OFDM (1<<13)
+static unsigned char wifi_oui[3] = { 0x00, 0x50, 0xf2 };
+static unsigned char ieee80211_oui[3] = { 0x00, 0x0f, 0xac };
+
struct scan_params {
bool unknown;
};
@@ -55,6 +58,14 @@ COMMAND(scan, trigger, NULL,
typedef void (*printfn)(unsigned char type, unsigned char len, unsigned char *data);
+static void tab_on_first(bool *first)
+{
+ if (!*first)
+ printf("\t");
+ else
+ *first = false;
+}
+
static void print_ssid(unsigned char type, unsigned char len, unsigned char *data)
{
int i;
@@ -128,6 +139,176 @@ static void print_erp(unsigned char type, unsigned char len, unsigned char *data
printf("\n");
}
+static void print_cipher(unsigned char *data)
+{
+ if (memcmp(data, wifi_oui, 3) == 0) {
+ switch (data[3]) {
+ case 0x00:
+ printf("Use group cipher suite");
+ break;
+ case 0x01:
+ printf("WEP-40");
+ break;
+ case 0x02:
+ printf("TKIP");
+ break;
+ case 0x04:
+ printf("CCMP");
+ break;
+ case 0x05:
+ printf("WEP-104");
+ break;
+ default:
+ printf("Reserved (%.02x)", data[3]);
+ break;
+ }
+ } else if (memcmp(data, ieee80211_oui, 3) == 0) {
+ switch (data[3]) {
+ case 0x00:
+ printf("Use group cipher suite");
+ break;
+ case 0x01:
+ printf("WEP-40");
+ break;
+ case 0x02:
+ printf("TKIP");
+ break;
+ case 0x04:
+ printf("CCMP");
+ break;
+ case 0x05:
+ printf("WEP-104");
+ break;
+ case 0x06:
+ printf("AES-128-CMAC");
+ break;
+ default:
+ printf("Reserved (%.02x)", data[3]);
+ break;
+ }
+ } else
+ printf("Other");
+}
+
+static void print_auth(unsigned char *data)
+{
+ if (memcmp(data, wifi_oui, 3) == 0) {
+ switch (data[3]) {
+ case 0x01:
+ printf("IEEE 802.1X");
+ break;
+ case 0x02:
+ printf("PSK");
+ break;
+ default:
+ printf("Reserved (%.02x)", data[3]);
+ break;
+ }
+ } else if (memcmp(data, ieee80211_oui, 3) == 0) {
+ switch (data[3]) {
+ case 0x01:
+ printf("IEEE 802.1X");
+ break;
+ case 0x02:
+ printf("PSK");
+ break;
+ default:
+ printf("Reserved (%.02x)", data[3]);
+ break;
+ }
+ } else
+ printf("Other");
+}
+
+static void print_wpa(const char *ie,
+ const char *defcipher, const char *defauth,
+ unsigned char len, unsigned char *data)
+{
+ bool first = true;
+ __u16 version, count, capa;
+ int i;
+
+ printf("\t%s:", ie);
+
+ if (len < 2) {
+ printf(" <too short> data:");
+ for(i = 0; i < len; i++)
+ printf(" %.02x", data[i]);
+ printf("\n");
+ return;
+ }
+
+ version = data[0] + (data[1] << 8);
+ tab_on_first(&first);
+ printf("\t * Version: %d\n", version);
+
+ data += 2;
+ len -= 2;
+
+ if (len < 4) {
+ tab_on_first(&first);
+ printf("\t * Group cipher: %s\n", defcipher);
+ printf("\t * Pairwise ciphers: %s\n", defcipher);
+ return;
+ }
+
+ tab_on_first(&first);
+ printf("\t * Group cipher: ");
+ print_cipher(data);
+ printf("\n");
+
+ data += 4;
+ len -= 4;
+
+ if (len < 2) {
+ tab_on_first(&first);
+ printf("\t * Pairwise ciphers: %s\n", defcipher);
+ return;
+ }
+
+ count = data[0] | (data[1] << 8);
+ tab_on_first(&first);
+ printf("\t * Pairwise ciphers:");
+ for (i=0; i<count; i++) {
+ printf(" ");
+ print_cipher(data + 2 + (i * 4));
+ }
+ printf("\n");
+
+ data += 2 + (count * 4);
+ len -= 2 + (count * 4);
+
+ if (len < 2) {
+ tab_on_first(&first);
+ printf("\t * Authentication suites: %s\n", defauth);
+ return;
+ }
+
+ count = data[0] | (data[1] << 8);
+ tab_on_first(&first);
+ printf("\t * Authentication suites:");
+ for (i=0; i<count; i++) {
+ printf(" ");
+ print_auth(data + 2 + (i * 4));
+ }
+ printf("\n");
+
+ data += 2 + (count * 4);
+ len -= 2 + (count * 4);
+
+ if (len < 2)
+ return;
+
+ capa = data[0] | (data[1] << 8);
+ tab_on_first(&first);
+ printf("\t * Capabilities: 0x%.4x\n", capa);
+}
+
+static void print_rsn(unsigned char type, unsigned char len, unsigned char *data)
+{
+ print_wpa("WPA2", "CCMP", "IEEE 802.1X", len, data);
+}
+
static void print_capabilities(unsigned char type, unsigned char len, unsigned char *data)
{
int i;
@@ -145,16 +326,14 @@ static const printfn ieprinters[] = {
[5] = print_ign,
[7] = print_country,
[42] = print_erp,
+ [48] = print_rsn,
[50] = print_supprates,
[127] = print_capabilities,
};
-static void tab_on_first(bool *first)
+static void print_wifi_wpa(unsigned char type, unsigned char len, unsigned char *data)
{
- if (!*first)
- printf("\t");
- else
- *first = false;
+ print_wpa("WPA", "TKIP", "IEEE 802.1X", len, data);
}
static void print_wifi_wmm(unsigned char type, unsigned char len, unsigned char *data)
@@ -260,6 +439,7 @@ static void print_wifi_wps(unsigned char type, unsigned char len, unsigned char
}
static const printfn wifiprinters[] = {
+ [1] = print_wifi_wpa,
[2] = print_wifi_wmm,
[4] = print_wifi_wps,
};
@@ -277,12 +457,12 @@ static void print_vendor(unsigned char len, unsigned char *data,
return;
}
- if (len >= 4 && data[0] == 0x00 && data[1] == 0x50 && data[2] == 0xF2) {
+ if (len >= 4 && memcmp(data, wifi_oui, 3) == 0) {
if (data[3] < ARRAY_SIZE(wifiprinters) && wifiprinters[data[3]])
return wifiprinters[data[3]](data[3], len - 4, data + 4);
if (!params->unknown)
return;
- printf("\tWiFi OUI %#.2x data:", data[3]);
+ printf("\tWiFi OUI %#.2x, data:", data[3]);
for(i = 0; i < len - 4; i++)
printf(" %.02x", data[i + 4]);
printf("\n");
--
1.6.0.6
^ permalink raw reply related [flat|nested] 6+ messages in thread
end of thread, other threads:[~2009-05-04 8:49 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-05-04 8:48 [PATCH 1/6] add support for parsing ERP information element Marcel Holtmann
2009-05-04 8:48 ` [PATCH 2/6] add basic support for parsing country " Marcel Holtmann
2009-05-04 8:48 ` [PATCH 3/6] add support for showing extended capabilities IE Marcel Holtmann
2009-05-04 8:48 ` [PATCH 4/6] add human readable decoding for capability information field Marcel Holtmann
2009-05-04 8:48 ` [PATCH 5/6] add basic support for parsing WMM information element Marcel Holtmann
2009-05-04 8:48 ` [PATCH 6/6] add support for parsing WPA and RSN/WPA2 information elements Marcel Holtmann
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).