gluon-airtime: Improve code style, remove offset/current construction
This commit is contained in:
parent
e42b0b2d48
commit
196e8f7c4e
@ -1,5 +1,4 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <unistd.h> /* sleep */
|
|
||||||
#include "airtime.h"
|
#include "airtime.h"
|
||||||
|
|
||||||
void print_result(struct airtime_result *);
|
void print_result(struct airtime_result *);
|
||||||
@ -12,21 +11,18 @@ int main(int argc, char *argv[]) {
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
while (1) {
|
|
||||||
a = get_airtime(argv[1], argv[2]);
|
a = get_airtime(argv[1], argv[2]);
|
||||||
print_result(&a->radio0);
|
print_result(&a->radio0);
|
||||||
print_result(&a->radio1);
|
print_result(&a->radio1);
|
||||||
sleep(1);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void print_result(struct airtime_result *result){
|
void print_result(struct airtime_result *result){
|
||||||
printf("freq=%d\tnoise=%d\tbusy=%lld\tactive=%lld\trx=%lld\ttx=%lld\n",
|
printf("freq=%d\tnoise=%d\tbusy=%lld\tactive=%lld\trx=%lld\ttx=%lld\n",
|
||||||
result->frequency,
|
result->frequency,
|
||||||
result->noise,
|
result->noise,
|
||||||
result->busy_time.current,
|
result->busy_time,
|
||||||
result->active_time.current,
|
result->active_time,
|
||||||
result->rx_time.current,
|
result->rx_time,
|
||||||
result->tx_time.current
|
result->tx_time
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -64,8 +64,7 @@ static struct airtime cur_airtime = {
|
|||||||
* @__NL80211_SURVEY_INFO_AFTER_LAST: internal use
|
* @__NL80211_SURVEY_INFO_AFTER_LAST: internal use
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static int survey_airtime_handler(struct nl_msg *msg, void *arg)
|
static int survey_airtime_handler(struct nl_msg *msg, void *arg) {
|
||||||
{
|
|
||||||
struct nlattr *tb[NL80211_ATTR_MAX + 1];
|
struct nlattr *tb[NL80211_ATTR_MAX + 1];
|
||||||
struct nlattr *sinfo[NL80211_SURVEY_INFO_MAX + 1];
|
struct nlattr *sinfo[NL80211_SURVEY_INFO_MAX + 1];
|
||||||
static struct nla_policy survey_policy[NL80211_SURVEY_INFO_MAX + 1] = {
|
static struct nla_policy survey_policy[NL80211_SURVEY_INFO_MAX + 1] = {
|
||||||
@ -76,7 +75,7 @@ static int survey_airtime_handler(struct nl_msg *msg, void *arg)
|
|||||||
struct genlmsghdr *gnlh = nlmsg_data(nlmsg_hdr(msg));
|
struct genlmsghdr *gnlh = nlmsg_data(nlmsg_hdr(msg));
|
||||||
struct airtime_result *result = (struct airtime_result *) arg;
|
struct airtime_result *result = (struct airtime_result *) arg;
|
||||||
|
|
||||||
nla_parse(tb, NL80211_ATTR_MAX, genlmsg_attrdata(gnlh, 0),genlmsg_attrlen(gnlh, 0), NULL);
|
nla_parse(tb, NL80211_ATTR_MAX, genlmsg_attrdata(gnlh, 0), genlmsg_attrlen(gnlh, 0), NULL);
|
||||||
|
|
||||||
if (!tb[NL80211_ATTR_SURVEY_INFO]) {
|
if (!tb[NL80211_ATTR_SURVEY_INFO]) {
|
||||||
fprintf(stderr, "survey data missing!\n");
|
fprintf(stderr, "survey data missing!\n");
|
||||||
@ -93,26 +92,11 @@ static int survey_airtime_handler(struct nl_msg *msg, void *arg)
|
|||||||
goto abort;
|
goto abort;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint64_t frequency = nla_get_u32(sinfo[NL80211_SURVEY_INFO_FREQUENCY]);
|
result->frequency = nla_get_u32(sinfo[NL80211_SURVEY_INFO_FREQUENCY]);
|
||||||
|
result->active_time = nla_get_u64(sinfo[NL80211_SURVEY_INFO_CHANNEL_TIME]);
|
||||||
if (frequency != result->frequency) {
|
result->busy_time = nla_get_u64(sinfo[NL80211_SURVEY_INFO_CHANNEL_TIME_BUSY]);
|
||||||
// channel changed, restart at zero
|
result->rx_time = nla_get_u64(sinfo[NL80211_SURVEY_INFO_CHANNEL_TIME_RX]);
|
||||||
result->frequency = frequency;
|
result->tx_time = nla_get_u64(sinfo[NL80211_SURVEY_INFO_CHANNEL_TIME_TX]);
|
||||||
result->active_time.offset = nla_get_u64(sinfo[NL80211_SURVEY_INFO_CHANNEL_TIME]);
|
|
||||||
result->busy_time.offset = nla_get_u64(sinfo[NL80211_SURVEY_INFO_CHANNEL_TIME_BUSY]);
|
|
||||||
result->rx_time.offset = nla_get_u64(sinfo[NL80211_SURVEY_INFO_CHANNEL_TIME_RX]);
|
|
||||||
result->tx_time.offset = nla_get_u64(sinfo[NL80211_SURVEY_INFO_CHANNEL_TIME_TX]);
|
|
||||||
result->active_time.current = 0;
|
|
||||||
result->busy_time.current = 0;
|
|
||||||
result->rx_time.current = 0;
|
|
||||||
result->tx_time.current = 0;
|
|
||||||
} else {
|
|
||||||
result->active_time.current = nla_get_u64(sinfo[NL80211_SURVEY_INFO_CHANNEL_TIME]) - result->active_time.offset;
|
|
||||||
result->busy_time.current = nla_get_u64(sinfo[NL80211_SURVEY_INFO_CHANNEL_TIME_BUSY]) - result->busy_time.offset;
|
|
||||||
result->rx_time.current = nla_get_u64(sinfo[NL80211_SURVEY_INFO_CHANNEL_TIME_RX]) - result->rx_time.offset;
|
|
||||||
result->tx_time.current = nla_get_u64(sinfo[NL80211_SURVEY_INFO_CHANNEL_TIME_TX]) - result->tx_time.offset;
|
|
||||||
}
|
|
||||||
|
|
||||||
result->noise = nla_get_u8(sinfo[NL80211_SURVEY_INFO_NOISE]);
|
result->noise = nla_get_u8(sinfo[NL80211_SURVEY_INFO_NOISE]);
|
||||||
|
|
||||||
abort:
|
abort:
|
||||||
@ -121,10 +105,9 @@ abort:
|
|||||||
|
|
||||||
static int get_airtime_for_interface(struct airtime_result *result, const char *interface) {
|
static int get_airtime_for_interface(struct airtime_result *result, const char *interface) {
|
||||||
int error = 0;
|
int error = 0;
|
||||||
int ctrl, ifx, flags;
|
int ctrl, ifx;
|
||||||
struct nl_sock *sk = NULL;
|
struct nl_sock *sk = NULL;
|
||||||
struct nl_msg *msg = NULL;
|
struct nl_msg *msg = NULL;
|
||||||
enum nl80211_commands cmd;
|
|
||||||
|
|
||||||
#define CHECK(x) { if (!(x)) { fprintf(stderr, "airtime.c: error on line %d\n", __LINE__); error = 1; goto out; } }
|
#define CHECK(x) { if (!(x)) { fprintf(stderr, "airtime.c: error on line %d\n", __LINE__); error = 1; goto out; } }
|
||||||
|
|
||||||
@ -141,12 +124,8 @@ static int get_airtime_for_interface(struct airtime_result *result, const char *
|
|||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
cmd = NL80211_CMD_GET_SURVEY;
|
|
||||||
flags = 0;
|
|
||||||
flags |= NLM_F_DUMP;
|
|
||||||
|
|
||||||
/* TODO: check return? */
|
/* TODO: check return? */
|
||||||
genlmsg_put(msg, 0, 0, ctrl, 0, flags, cmd, 0);
|
genlmsg_put(msg, 0, 0, ctrl, 0, NLM_F_DUMP, NL80211_CMD_GET_SURVEY, 0);
|
||||||
|
|
||||||
NLA_PUT_U32(msg, NL80211_ATTR_IFINDEX, ifx);
|
NLA_PUT_U32(msg, NL80211_ATTR_IFINDEX, ifx);
|
||||||
|
|
||||||
|
@ -2,18 +2,13 @@
|
|||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
struct airtime_time {
|
|
||||||
uint64_t current;
|
|
||||||
uint64_t offset;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct airtime_result {
|
struct airtime_result {
|
||||||
|
uint64_t active_time;
|
||||||
|
uint64_t busy_time;
|
||||||
|
uint64_t rx_time;
|
||||||
|
uint64_t tx_time;
|
||||||
uint32_t frequency;
|
uint32_t frequency;
|
||||||
uint8_t noise;
|
uint8_t noise;
|
||||||
struct airtime_time active_time;
|
|
||||||
struct airtime_time busy_time;
|
|
||||||
struct airtime_time rx_time;
|
|
||||||
struct airtime_time tx_time;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct airtime {
|
struct airtime {
|
||||||
|
@ -8,36 +8,26 @@
|
|||||||
static const char const *wifi_0_dev = "client0";
|
static const char const *wifi_0_dev = "client0";
|
||||||
static const char const *wifi_1_dev = "client1";
|
static const char const *wifi_1_dev = "client1";
|
||||||
|
|
||||||
void fill_airtime_json(struct airtime_result *air, struct json_object* wireless){
|
void fill_airtime_json(struct airtime_result *air, struct json_object *wireless) {
|
||||||
struct json_object *result = NULL, *obj = NULL;
|
struct json_object *obj = NULL;
|
||||||
|
|
||||||
obj = json_object_new_object();
|
obj = json_object_new_object();
|
||||||
if(!obj)
|
if(!obj)
|
||||||
goto error;
|
return;
|
||||||
#define JSON_ADD_INT64(value,key) {result = json_object_new_int64(value); json_object_object_add(obj,key,result);}
|
|
||||||
result = json_object_new_int(air->frequency);
|
|
||||||
if(!result)
|
|
||||||
goto error;
|
|
||||||
json_object_object_add(obj,"frequency",result);
|
|
||||||
|
|
||||||
JSON_ADD_INT64(air->active_time.current,"active")
|
json_object_object_add(obj, "frequency", json_object_new_int(air->frequency));
|
||||||
JSON_ADD_INT64(air->busy_time.current,"busy")
|
json_object_object_add(obj, "active", json_object_new_int64(air->active_time));
|
||||||
JSON_ADD_INT64(air->rx_time.current,"rx")
|
json_object_object_add(obj, "busy", json_object_new_int64(air->busy_time));
|
||||||
JSON_ADD_INT64(air->tx_time.current,"tx")
|
json_object_object_add(obj, "rx", json_object_new_int64(air->rx_time));
|
||||||
|
json_object_object_add(obj, "tx", json_object_new_int64(air->tx_time));
|
||||||
|
json_object_object_add(obj, "noise", json_object_new_int(air->noise));
|
||||||
|
|
||||||
result = json_object_new_int(air->noise);
|
json_object_array_add(wireless, obj);
|
||||||
json_object_object_add(obj,"noise",result);
|
|
||||||
|
|
||||||
error:
|
|
||||||
if(air->frequency >= 2400 && air->frequency < 2500)
|
|
||||||
json_object_object_add(wireless, "airtime24", obj);
|
|
||||||
else if (air->frequency >= 5000 && air->frequency < 6000)
|
|
||||||
json_object_object_add(wireless, "airtime5", obj);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct json_object *respondd_provider_statistics(void) {
|
static struct json_object *respondd_provider_statistics(void) {
|
||||||
struct airtime *airtime = NULL;
|
struct airtime *airtime = NULL;
|
||||||
struct json_object *result = NULL, *wireless = NULL;
|
struct json_object *result, *wireless;
|
||||||
|
|
||||||
airtime = get_airtime(wifi_0_dev, wifi_1_dev);
|
airtime = get_airtime(wifi_0_dev, wifi_1_dev);
|
||||||
if (!airtime)
|
if (!airtime)
|
||||||
@ -47,8 +37,8 @@ static struct json_object *respondd_provider_statistics(void) {
|
|||||||
if (!result)
|
if (!result)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
wireless = json_object_new_object();
|
wireless = json_object_new_array();
|
||||||
if (!wireless){
|
if (!wireless) {
|
||||||
json_object_put(result);
|
json_object_put(result);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user