X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fiwinfo.git;a=blobdiff_plain;f=iwinfo_cli.c;h=aab6ae6598b9f828ddc02512dded5173045ac56e;hp=891f77e4f0bf67eed1f745989661c7460d263ff6;hb=78f0fafa591754c3c5bbd3f408a0a91b78690141;hpb=8ae758db52957939eeb6bc1c7da7be9d0339d3aa diff --git a/iwinfo_cli.c b/iwinfo_cli.c index 891f77e..aab6ae6 100644 --- a/iwinfo_cli.c +++ b/iwinfo_cli.c @@ -280,7 +280,7 @@ static char * format_hwmodes(int modes) static char * format_assocrate(struct iwinfo_rate_entry *r) { - static char buf[40]; + static char buf[80]; char *p = buf; int l = sizeof(buf); @@ -293,13 +293,21 @@ static char * format_assocrate(struct iwinfo_rate_entry *r) p += snprintf(p, l, "%s", format_rate(r->rate)); l = sizeof(buf) - (p - buf); - if (r->mcs >= 0) + if (r->is_ht) { - p += snprintf(p, l, ", MCS %d, %dMHz", r->mcs, 20 + r->is_40mhz*20); + p += snprintf(p, l, ", MCS %d, %dMHz", r->mcs, r->mhz); + l = sizeof(buf) - (p - buf); + } + else if (r->is_vht) + { + p += snprintf(p, l, ", VHT-MCS %d, %dMHz", r->mcs, r->mhz); l = sizeof(buf) - (p - buf); - if (r->is_short_gi) - p += snprintf(p, l, ", short GI"); + if (r->nss) + { + p += snprintf(p, l, ", VHT-NSS %d", r->nss); + l = sizeof(buf) - (p - buf); + } } } @@ -744,10 +752,46 @@ static void print_countrylist(const struct iwinfo_ops *iw, const char *ifname) } } +static void print_htmodelist(const struct iwinfo_ops *iw, const char *ifname) +{ + int i, htmodes = 0; + + if (iw->htmodelist(ifname, &htmodes)) + { + printf("No HT mode information available\n"); + return; + } + + for (i = 0; i < ARRAY_SIZE(IWINFO_HTMODE_NAMES); i++) + if (htmodes & (1 << i)) + printf("%s ", IWINFO_HTMODE_NAMES[i]); + + printf("\n"); +} + +static void lookup_phy(const struct iwinfo_ops *iw, const char *section) +{ + char buf[IWINFO_BUFSIZE]; + + if (!iw->lookup_phy) + { + fprintf(stderr, "Not supported\n"); + return; + } + + if (iw->lookup_phy(section, buf)) + { + fprintf(stderr, "Phy not found\n"); + return; + } + + printf("%s\n", buf); +} + int main(int argc, char **argv) { - int i; + int i, rv = 0; char *p; const struct iwinfo_ops *iw; glob_t globbuf; @@ -762,6 +806,8 @@ int main(int argc, char **argv) " iwinfo freqlist\n" " iwinfo assoclist\n" " iwinfo countrylist\n" + " iwinfo htmodelist\n" + " iwinfo phyname
\n" ); return 1; @@ -791,49 +837,81 @@ int main(int argc, char **argv) return 0; } - iw = iwinfo_backend(argv[1]); - - if (!iw) + if (argc > 3) { - fprintf(stderr, "No such wireless device: %s\n", argv[1]); - return 1; - } + iw = iwinfo_backend_by_name(argv[1]); + + if (!iw) + { + fprintf(stderr, "No such wireless backend: %s\n", argv[1]); + rv = 1; + } + else + { + switch (argv[2][0]) + { + case 'p': + lookup_phy(iw, argv[3]); + break; - for (i = 2; i < argc; i++) + default: + fprintf(stderr, "Unknown command: %s\n", argv[2]); + rv = 1; + } + } + } + else { - switch(argv[i][0]) + iw = iwinfo_backend(argv[1]); + + if (!iw) { - case 'i': - print_info(iw, argv[1]); - break; + fprintf(stderr, "No such wireless device: %s\n", argv[1]); + rv = 1; + } + else + { + for (i = 2; i < argc; i++) + { + switch(argv[i][0]) + { + case 'i': + print_info(iw, argv[1]); + break; - case 's': - print_scanlist(iw, argv[1]); - break; + case 's': + print_scanlist(iw, argv[1]); + break; - case 't': - print_txpwrlist(iw, argv[1]); - break; + case 't': + print_txpwrlist(iw, argv[1]); + break; - case 'f': - print_freqlist(iw, argv[1]); - break; + case 'f': + print_freqlist(iw, argv[1]); + break; + + case 'a': + print_assoclist(iw, argv[1]); + break; - case 'a': - print_assoclist(iw, argv[1]); - break; + case 'c': + print_countrylist(iw, argv[1]); + break; - case 'c': - print_countrylist(iw, argv[1]); - break; + case 'h': + print_htmodelist(iw, argv[1]); + break; - default: - fprintf(stderr, "Unknown command: %s\n", argv[i]); - return 1; + default: + fprintf(stderr, "Unknown command: %s\n", argv[i]); + rv = 1; + } + } } } iwinfo_finish(); - return 0; + return rv; }