case 3:
snprintf(buf, sizeof(buf), "mixed WPA/WPA2 %s (%s)",
format_enc_suites(c->auth_suites),
- format_enc_ciphers(c->pair_ciphers & c->group_ciphers));
+ format_enc_ciphers(c->pair_ciphers | c->group_ciphers));
break;
case 2:
snprintf(buf, sizeof(buf), "WPA2 %s (%s)",
format_enc_suites(c->auth_suites),
- format_enc_ciphers(c->pair_ciphers & c->group_ciphers));
+ format_enc_ciphers(c->pair_ciphers | c->group_ciphers));
break;
case 1:
snprintf(buf, sizeof(buf), "WPA %s (%s)",
format_enc_suites(c->auth_suites),
- format_enc_ciphers(c->pair_ciphers & c->group_ciphers));
+ format_enc_ciphers(c->pair_ciphers | c->group_ciphers));
break;
}
}
return buf;
}
+static char * format_assocrate(struct iwinfo_rate_entry *r)
+{
+ static char buf[40];
+ char *p = buf;
+ int l = sizeof(buf);
+
+ if (r->rate <= 0)
+ {
+ snprintf(buf, sizeof(buf), "unknown");
+ }
+ else
+ {
+ p += snprintf(p, l, "%s", format_rate(r->rate));
+ l = sizeof(buf) - (p - buf);
+
+ if (r->mcs >= 0)
+ {
+ p += snprintf(p, l, ", MCS %d, %dMHz", r->mcs, 20 + r->is_40mhz*20);
+ l = sizeof(buf) - (p - buf);
+
+ if (r->is_short_gi)
+ p += snprintf(p, l, ", short GI");
+ }
+ }
+
+ return buf;
+}
+
static const char * print_type(const struct iwinfo_ops *iw, const char *ifname)
{
return buf;
}
+static char * print_txpower_offset(const struct iwinfo_ops *iw, const char *ifname)
+{
+ int off;
+ static char buf[12];
+
+ if (iw->txpower_offset(ifname, &off))
+ snprintf(buf, sizeof(buf), "unknown");
+ else if (off != 0)
+ snprintf(buf, sizeof(buf), "%d dB", off);
+ else
+ snprintf(buf, sizeof(buf), "none");
+
+ return buf;
+}
+
+static char * print_frequency_offset(const struct iwinfo_ops *iw, const char *ifname)
+{
+ int off;
+ static char buf[12];
+
+ if (iw->frequency_offset(ifname, &off))
+ snprintf(buf, sizeof(buf), "unknown");
+ else if (off != 0)
+ snprintf(buf, sizeof(buf), "%.3f GHz", ((float)off / 1000.0));
+ else
+ snprintf(buf, sizeof(buf), "none");
+
+ return buf;
+}
+
static char * print_ssid(const struct iwinfo_ops *iw, const char *ifname)
{
char buf[IWINFO_ESSID_MAX_SIZE+1] = { 0 };
static char * print_mode(const struct iwinfo_ops *iw, const char *ifname)
{
+ int mode;
static char buf[128];
- if (iw->mode(ifname, buf))
- snprintf(buf, sizeof(buf), "unknown");
+ if (iw->mode(ifname, &mode))
+ mode = IWINFO_OPMODE_UNKNOWN;
+
+ snprintf(buf, sizeof(buf), "%s", IWINFO_OPMODE_NAMES[mode]);
return buf;
}
static char * print_txpower(const struct iwinfo_ops *iw, const char *ifname)
{
- int pwr;
+ int pwr, off;
+ if (iw->txpower_offset(ifname, &off))
+ off = 0;
+
if (iw->txpower(ifname, &pwr))
pwr = -1;
+ else
+ pwr += off;
return format_txpower(pwr);
}
printf(" Hardware: %s [%s]\n",
print_hardware_id(iw, ifname),
print_hardware_name(iw, ifname));
+ printf(" TX power offset: %s\n",
+ print_txpower_offset(iw, ifname));
+ printf(" Frequency offset: %s\n",
+ print_frequency_offset(iw, ifname));
printf(" Supports VAPs: %s\n",
print_mbssid_supp(iw, ifname));
}
printf(" ESSID: %s\n",
format_ssid(e->ssid));
printf(" Mode: %s Channel: %s\n",
- e->mode ? (char *)e->mode : "unknown",
+ IWINFO_OPMODE_NAMES[e->mode],
format_channel(e->channel));
printf(" Signal: %s Quality: %s/%s\n",
format_signal(e->signal - 0x100),
static void print_txpwrlist(const struct iwinfo_ops *iw, const char *ifname)
{
- int len, pwr, i;
+ int len, pwr, off, i;
char buf[IWINFO_BUFSIZE];
struct iwinfo_txpwrlist_entry *e;
if (iw->txpower(ifname, &pwr))
pwr = -1;
+ if (iw->txpower_offset(ifname, &off))
+ off = 0;
+
for (i = 0; i < len; i += sizeof(struct iwinfo_txpwrlist_entry))
{
e = (struct iwinfo_txpwrlist_entry *) &buf[i];
printf("%s%3d dBm (%4d mW)\n",
(pwr == e->dbm) ? "*" : " ",
- e->dbm,
- e->mw);
+ e->dbm + off,
+ iwinfo_dbm2mw(e->dbm + off));
}
}
{
e = (struct iwinfo_assoclist_entry *) &buf[i];
- printf("%s %s / %s (SNR %d)\n",
+ printf("%s %s / %s (SNR %d) %d ms ago\n",
format_bssid(e->mac),
format_signal(e->signal),
format_noise(e->noise),
- (e->signal - e->noise));
+ (e->signal - e->noise),
+ e->inactive);
+
+ printf(" RX: %-38s %8d Pkts.\n",
+ format_assocrate(&e->rx_rate),
+ e->rx_packets
+ );
+
+ printf(" TX: %-38s %8d Pkts.\n\n",
+ format_assocrate(&e->tx_rate),
+ e->tx_packets
+ );
}
}