# mac80211 phy discovery (like 'phy0')
# exemple: {"data":[{"{#PHY}":"phy0"}]}
#
-UserParameter=mac80211.phydiscovery,for phy in $(ls /sys/kernel/debug/ieee80211/); do list="$list,"'{"{#PHY}":"'$phy'"}'; done; echo '{"data":['${list#,}']}'
+UserParameter=mac80211.phydiscovery,zabbix_helper_mac80211 discovery
#phy statistics (you need {#PHY} as parameter)
#
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
+#include <sys/types.h>
+#include <dirent.h>
+#include <stdbool.h>
-int main(int argc, char *argv[]) {
+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;
+}
- if(argc == 3) {
- char *phy = NULL;
- char *stat = NULL;
- char *filename = NULL;
- FILE *f = NULL;
- phy = basename(argv[1]);
- stat = basename(argv[2]);
- if(asprintf(&filename, "/sys/kernel/debug/ieee80211/%s/statistics/%s", phy, stat) > 0)
- f = fopen(filename, "r");
+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);
+ if (f != NULL) {
+ char temp[256];
+ while (fgets(temp, 256, f) != NULL)
+ printf("%s",temp);
- fclose(f);
- }
- free(filename);
+ fclose(f);
} else {
- fprintf(stderr, "Usage: %s PHY STAT\n",argv[0]);
- fprintf(stderr, " cat /sys/kernel/debug/ieee80211/PHY/statistics/STAT as root\n");
- return 1;
- }
- return 0;
+ 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]);
+ }
}