mirror of
https://github.com/berlin-open-wireless-lab/DAWN.git
synced 2025-03-09 15:40:12 +00:00
fix ubus_invoke, fix iwinfo
This commit is contained in:
parent
7dd5d0f6ef
commit
0407da37e8
3 changed files with 60 additions and 21 deletions
|
@ -39,14 +39,14 @@ config metric
|
||||||
option low_rssi_val '-80'
|
option low_rssi_val '-80'
|
||||||
option chan_util_val '140'
|
option chan_util_val '140'
|
||||||
option max_chan_util_val '170'
|
option max_chan_util_val '170'
|
||||||
option min_probe_count '2'
|
option min_probe_count '0'
|
||||||
option bandwith_threshold '6'
|
option bandwith_threshold '6'
|
||||||
option use_station_count '1'
|
option use_station_count '1'
|
||||||
option max_station_diff '1'
|
option max_station_diff '1'
|
||||||
option eval_probe_req '1'
|
option eval_probe_req '0'
|
||||||
option eval_auth_req '1' # no real reasoncode...
|
option eval_auth_req '0' # no real reasoncode...
|
||||||
option eval_assoc_req '1' # just deny assocs...
|
option eval_assoc_req '0' # just deny assocs...
|
||||||
option kicking '1'
|
option kicking '0'
|
||||||
option deny_auth_reason '1' # unspecified
|
option deny_auth_reason '1' # unspecified
|
||||||
option deny_assoc_reason '17' # assoc rejected can't handle new station
|
option deny_assoc_reason '17' # assoc rejected can't handle new station
|
||||||
option use_driver_recog '1'
|
option use_driver_recog '1'
|
||||||
|
|
|
@ -276,21 +276,49 @@ int get_ssid(const char *ifname, char* ssid) {
|
||||||
|
|
||||||
int get_channel_utilization(const char *ifname, uint64_t *last_channel_time, uint64_t *last_channel_time_busy) {
|
int get_channel_utilization(const char *ifname, uint64_t *last_channel_time, uint64_t *last_channel_time_busy) {
|
||||||
|
|
||||||
|
int len;
|
||||||
const struct iwinfo_ops *iw;
|
const struct iwinfo_ops *iw;
|
||||||
struct iwinfo_survey_entry survey_entry;
|
char buf[IWINFO_BUFSIZE];
|
||||||
|
struct iwinfo_survey_entry *e;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
iw = iwinfo_backend(ifname);
|
iw = iwinfo_backend(ifname);
|
||||||
if (iw->survey(ifname, &survey_entry))
|
|
||||||
|
int freq;
|
||||||
|
if (iw->frequency(ifname, &freq))
|
||||||
|
{
|
||||||
return 0;
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
uint64_t dividend = survey_entry.channel_time_busy - *last_channel_time_busy;
|
if (iw->survey(ifname, buf, &len))
|
||||||
uint64_t divisor = survey_entry.channel_time - *last_channel_time;
|
{
|
||||||
*last_channel_time = survey_entry.channel_time;
|
printf("Survey not possible!\n\n");
|
||||||
*last_channel_time_busy = survey_entry.channel_time_busy;
|
return 0;
|
||||||
|
}
|
||||||
|
else if (len <= 0)
|
||||||
|
{
|
||||||
|
printf("No survey results\n\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0, x = 1; i < len; i += sizeof(struct iwinfo_survey_entry), x++)
|
||||||
|
{
|
||||||
|
e = (struct iwinfo_survey_entry *) &buf[i];
|
||||||
|
|
||||||
|
if(e->mhz == freq)
|
||||||
|
{
|
||||||
|
uint64_t dividend = e->busy_time - *last_channel_time_busy;
|
||||||
|
uint64_t divisor = e->active_time - *last_channel_time;
|
||||||
|
*last_channel_time = e->active_time;
|
||||||
|
*last_channel_time_busy = e->busy_time;
|
||||||
|
|
||||||
|
if(divisor)
|
||||||
|
ret = (int)(dividend * 255 / divisor);
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if(divisor)
|
|
||||||
ret = (int)(dividend * 255 / divisor);
|
|
||||||
iwinfo_finish();
|
iwinfo_finish();
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,6 +32,8 @@ static struct blob_buf data_buf;
|
||||||
static struct blob_buf b_probe;
|
static struct blob_buf b_probe;
|
||||||
static struct blob_buf b_domain;
|
static struct blob_buf b_domain;
|
||||||
static struct blob_buf b_notify;
|
static struct blob_buf b_notify;
|
||||||
|
static struct blob_buf b_clients;
|
||||||
|
static struct blob_buf b_umdns;
|
||||||
|
|
||||||
void update_clients(struct uloop_timeout *t);
|
void update_clients(struct uloop_timeout *t);
|
||||||
|
|
||||||
|
@ -700,7 +702,6 @@ static int add_subscriber(char *name) {
|
||||||
struct hostapd_sock_entry *hostapd_entry;
|
struct hostapd_sock_entry *hostapd_entry;
|
||||||
uint32_t id = 0;
|
uint32_t id = 0;
|
||||||
|
|
||||||
|
|
||||||
sprintf(subscribe_name, "hostapd.%s", name);
|
sprintf(subscribe_name, "hostapd.%s", name);
|
||||||
|
|
||||||
if (ubus_lookup_id(ctx, subscribe_name, &id)) {
|
if (ubus_lookup_id(ctx, subscribe_name, &id)) {
|
||||||
|
@ -708,6 +709,9 @@ static int add_subscriber(char *name) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
printf("Subscribing to: %s\n", subscribe_name);
|
||||||
|
printf("Subscriber ID: %d\n", id);
|
||||||
|
|
||||||
if(hostapd_array_check_id(id))
|
if(hostapd_array_check_id(id))
|
||||||
{
|
{
|
||||||
// entry already existing
|
// entry already existing
|
||||||
|
@ -728,7 +732,6 @@ static int add_subscriber(char *name) {
|
||||||
hostapd_entry->ht = (uint8_t) support_ht(name);
|
hostapd_entry->ht = (uint8_t) support_ht(name);
|
||||||
hostapd_entry->vht = (uint8_t) support_vht(name);
|
hostapd_entry->vht = (uint8_t) support_vht(name);
|
||||||
|
|
||||||
|
|
||||||
ret = ubus_register_subscriber(ctx, &hostapd_entry->subscriber);
|
ret = ubus_register_subscriber(ctx, &hostapd_entry->subscriber);
|
||||||
ret = ubus_subscribe( ctx, &hostapd_entry->subscriber, id);
|
ret = ubus_subscribe( ctx, &hostapd_entry->subscriber, id);
|
||||||
|
|
||||||
|
@ -772,20 +775,22 @@ int dawn_init_ubus(const char *ubus_socket, const char *hostapd_dir) {
|
||||||
return -1;
|
return -1;
|
||||||
} else {
|
} else {
|
||||||
printf("Connected to ubus\n");
|
printf("Connected to ubus\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
ubus_add_uloop(ctx);
|
ubus_add_uloop(ctx);
|
||||||
|
|
||||||
// set dawn metric
|
// set dawn metric
|
||||||
dawn_metric = uci_get_dawn_metric();
|
dawn_metric = uci_get_dawn_metric();
|
||||||
|
|
||||||
uloop_timeout_add(&hostapd_timer);
|
//uloop_timeout_add(&hostapd_timer);
|
||||||
|
|
||||||
// remove probe
|
// remove probe
|
||||||
uloop_add_data_cbs();
|
uloop_add_data_cbs();
|
||||||
|
|
||||||
// get clients
|
// get clients
|
||||||
|
printf("SETTING UP CLIENT TIMER:\n");
|
||||||
uloop_timeout_add(&client_timer);
|
uloop_timeout_add(&client_timer);
|
||||||
|
printf("FINISHED ADDING CLIENT TIMER!\n");
|
||||||
|
|
||||||
uloop_timeout_add(&channel_utilization_timer);
|
uloop_timeout_add(&channel_utilization_timer);
|
||||||
|
|
||||||
|
@ -798,6 +803,8 @@ int dawn_init_ubus(const char *ubus_socket, const char *hostapd_dir) {
|
||||||
if (network_config.network_option == 2)
|
if (network_config.network_option == 2)
|
||||||
run_server(network_config.tcp_port);
|
run_server(network_config.tcp_port);
|
||||||
|
|
||||||
|
subscribe_to_hostapd_interfaces(hostapd_dir_glob);
|
||||||
|
|
||||||
//subscribe_to_hostapd_interfaces(hostapd_dir_glob);
|
//subscribe_to_hostapd_interfaces(hostapd_dir_glob);
|
||||||
|
|
||||||
uloop_run();
|
uloop_run();
|
||||||
|
@ -961,6 +968,8 @@ int parse_to_clients(struct blob_attr *msg, int do_kick, uint32_t id) {
|
||||||
|
|
||||||
static void ubus_get_clients_cb(struct ubus_request *req, int type, struct blob_attr *msg) {
|
static void ubus_get_clients_cb(struct ubus_request *req, int type, struct blob_attr *msg) {
|
||||||
|
|
||||||
|
printf("GOT CALLBACK!\n");
|
||||||
|
|
||||||
if (!msg)
|
if (!msg)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -995,9 +1004,10 @@ static void ubus_get_clients_cb(struct ubus_request *req, int type, struct blob_
|
||||||
}
|
}
|
||||||
|
|
||||||
static int ubus_get_clients() {
|
static int ubus_get_clients() {
|
||||||
|
int timeout = 1;
|
||||||
for (int i = 0; i <= hostapd_sock_last; i++) {
|
for (int i = 0; i <= hostapd_sock_last; i++) {
|
||||||
int timeout = 1;
|
blob_buf_init(&b_clients, 0);
|
||||||
ubus_invoke(ctx, hostapd_sock_arr[i]->id, "get_clients", NULL, ubus_get_clients_cb, NULL, timeout * 1000);
|
ubus_invoke(ctx, hostapd_sock_arr[i]->id, "get_clients", b_clients.head, ubus_get_clients_cb, NULL, timeout * 1000);
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -1106,8 +1116,9 @@ int ubus_call_umdns() {
|
||||||
}
|
}
|
||||||
|
|
||||||
int timeout = 1;
|
int timeout = 1;
|
||||||
ubus_invoke(ctx, id, "update", NULL, NULL, NULL, timeout * 1000);
|
blob_buf_init(&b_umdns, 0);
|
||||||
ubus_invoke(ctx, id, "browse", NULL, ubus_umdns_cb, NULL, timeout * 1000);
|
ubus_invoke(ctx, id, "update", b_umdns.head, NULL, NULL, timeout * 1000);
|
||||||
|
ubus_invoke(ctx, id, "browse", b_umdns.head, ubus_umdns_cb, NULL, timeout * 1000);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue