1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- #define _GNU_SOURCE
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- #include <sys/types.h>
- #include <dirent.h>
- #include <stdbool.h>
- int discovery()
- {
- DIR *dir;
- struct dirent *ent;
- bool comma = false;
- if ((dir = opendir ("/sys/kernel/debug/ieee80211/")) != NULL) {
- printf("{\"data\":[");
- while ((ent = readdir (dir)) != NULL) {
- if (strcmp(".", ent->d_name) && strcmp("..", ent->d_name)) {
- if (comma)
- printf(",");
- printf("{\"{#PHY}\":\"%s\"}", ent->d_name);
- comma = true;
- }
- }
- printf("]}\n");
- closedir(dir);
- } else {
- perror("");
- return EXIT_FAILURE;
- }
- return EXIT_SUCCESS;
- }
- int get_param(char *phy, char *stat)
- {
- char *filename = NULL;
- FILE *f = NULL;
- phy = basename(phy);
- stat = basename(stat);
- if (asprintf(&filename, "/sys/kernel/debug/ieee80211/%s/statistics/%s", phy, stat) > 0)
- f = fopen(filename, "r");
- if (f != NULL) {
- char temp[256];
- while (fgets(temp, 256, f) != NULL)
- printf("%s",temp);
- fclose(f);
- } else {
- perror("");
- return EXIT_FAILURE;
- }
- free(filename);
- return EXIT_SUCCESS;
- }
- int usage(char *name)
- {
- fprintf(stderr, "Usage:\n");
- fprintf(stderr, " %s discovery\n", name);
- fprintf(stderr, " => print mac80211.phydiscovery discovery rule\n");
- fprintf(stderr, " %s PHY STAT\n", name);
- fprintf(stderr, " => cat /sys/kernel/debug/ieee80211/PHY/statistics/STAT as root\n");
- return EXIT_FAILURE;
- }
- int main(int argc, char *argv[])
- {
- switch (argc) {
- case 2:
- return discovery();
- case 3:
- return get_param(argv[1], argv[2]);
- default:
- return usage(argv[0]);
- }
- }
|