gluon-airtime: Improve code style, remove offset/current construction

This commit is contained in:
Jan-Philipp Litza 2016-12-04 18:30:58 +01:00
parent e42b0b2d48
commit 196e8f7c4e
4 changed files with 34 additions and 74 deletions

View File

@ -1,5 +1,4 @@
#include <stdio.h>
#include <unistd.h> /* sleep */
#include "airtime.h"
void print_result(struct airtime_result *);
@ -12,21 +11,18 @@ int main(int argc, char *argv[]) {
return 1;
}
while (1) {
a = get_airtime(argv[1], argv[2]);
print_result(&a->radio0);
print_result(&a->radio1);
sleep(1);
}
}
void print_result(struct airtime_result *result){
printf("freq=%d\tnoise=%d\tbusy=%lld\tactive=%lld\trx=%lld\ttx=%lld\n",
result->frequency,
result->noise,
result->busy_time.current,
result->active_time.current,
result->rx_time.current,
result->tx_time.current
result->busy_time,
result->active_time,
result->rx_time,
result->tx_time
);
}

View File

@ -64,8 +64,7 @@ static struct airtime cur_airtime = {
* @__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 *sinfo[NL80211_SURVEY_INFO_MAX + 1];
static struct nla_policy survey_policy[NL80211_SURVEY_INFO_MAX + 1] = {
@ -93,26 +92,11 @@ static int survey_airtime_handler(struct nl_msg *msg, void *arg)
goto abort;
}
uint64_t frequency = nla_get_u32(sinfo[NL80211_SURVEY_INFO_FREQUENCY]);
if (frequency != result->frequency) {
// channel changed, restart at zero
result->frequency = frequency;
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->frequency = nla_get_u32(sinfo[NL80211_SURVEY_INFO_FREQUENCY]);
result->active_time = nla_get_u64(sinfo[NL80211_SURVEY_INFO_CHANNEL_TIME]);
result->busy_time = nla_get_u64(sinfo[NL80211_SURVEY_INFO_CHANNEL_TIME_BUSY]);
result->rx_time = nla_get_u64(sinfo[NL80211_SURVEY_INFO_CHANNEL_TIME_RX]);
result->tx_time = nla_get_u64(sinfo[NL80211_SURVEY_INFO_CHANNEL_TIME_TX]);
result->noise = nla_get_u8(sinfo[NL80211_SURVEY_INFO_NOISE]);
abort:
@ -121,10 +105,9 @@ abort:
static int get_airtime_for_interface(struct airtime_result *result, const char *interface) {
int error = 0;
int ctrl, ifx, flags;
int ctrl, ifx;
struct nl_sock *sk = 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; } }
@ -141,12 +124,8 @@ static int get_airtime_for_interface(struct airtime_result *result, const char *
goto out;
}
cmd = NL80211_CMD_GET_SURVEY;
flags = 0;
flags |= NLM_F_DUMP;
/* 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);

View File

@ -2,18 +2,13 @@
#include <stdint.h>
struct airtime_time {
uint64_t current;
uint64_t offset;
};
struct airtime_result {
uint64_t active_time;
uint64_t busy_time;
uint64_t rx_time;
uint64_t tx_time;
uint32_t frequency;
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 {

View File

@ -9,35 +9,25 @@ static const char const *wifi_0_dev = "client0";
static const char const *wifi_1_dev = "client1";
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();
if(!obj)
goto error;
#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);
return;
JSON_ADD_INT64(air->active_time.current,"active")
JSON_ADD_INT64(air->busy_time.current,"busy")
JSON_ADD_INT64(air->rx_time.current,"rx")
JSON_ADD_INT64(air->tx_time.current,"tx")
json_object_object_add(obj, "frequency", json_object_new_int(air->frequency));
json_object_object_add(obj, "active", json_object_new_int64(air->active_time));
json_object_object_add(obj, "busy", json_object_new_int64(air->busy_time));
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_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);
json_object_array_add(wireless, obj);
}
static struct json_object *respondd_provider_statistics(void) {
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);
if (!airtime)
@ -47,7 +37,7 @@ static struct json_object *respondd_provider_statistics(void) {
if (!result)
return NULL;
wireless = json_object_new_object();
wireless = json_object_new_array();
if (!wireless) {
json_object_put(result);
return NULL;