zabbix-extra-mac80211: fix mac80211.phydiscovery
/sys/kernel/debug/ is now only accessible to root, use zabbix_helper_mac80211 (suid helper) to compute mac80211.phydiscovery (the discovery rule) Signed-off-by: Etienne CHAMPETIER <etienne.champetier@free.fr> git-svn-id: svn://svn.openwrt.org/openwrt/packages@39490 3c298f89-4303-0410-b956-a3cf2f4a3e73
This commit is contained in:
parent
0d416a1cc0
commit
4474f2911f
@ -7,7 +7,7 @@
|
||||
# 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)
|
||||
#
|
||||
|
@ -2,31 +2,76 @@
|
||||
#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[]) {
|
||||
|
||||
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");
|
||||
|
||||
if(f != NULL) {
|
||||
char temp[256];
|
||||
while (fgets(temp, 256, f) != NULL)
|
||||
printf("%s",temp);
|
||||
|
||||
fclose(f);
|
||||
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;
|
||||
}
|
||||
}
|
||||
free(filename);
|
||||
printf("]}\n");
|
||||
closedir(dir);
|
||||
} 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;
|
||||
}
|
||||
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]);
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user