mirror of
https://github.com/berlin-open-wireless-lab/DAWN.git
synced 2025-03-09 15:40:12 +00:00
Add get_clients
This commit is contained in:
parent
ecb6c6b80f
commit
2228c2a74a
2 changed files with 139 additions and 0 deletions
|
@ -27,6 +27,43 @@ typedef struct {
|
||||||
int counter;
|
int counter;
|
||||||
} probe_entry;
|
} probe_entry;
|
||||||
|
|
||||||
|
/*
|
||||||
|
static const struct {
|
||||||
|
const char *name;
|
||||||
|
uint32_t flag;
|
||||||
|
} sta_flags[] = {
|
||||||
|
{ "auth", WLAN_STA_AUTH },
|
||||||
|
{ "assoc", WLAN_STA_ASSOC },
|
||||||
|
{ "authorized", WLAN_STA_AUTHORIZED },
|
||||||
|
{ "preauth", WLAN_STA_PREAUTH },
|
||||||
|
{ "wds", WLAN_STA_WDS },
|
||||||
|
{ "wmm", WLAN_STA_WMM },
|
||||||
|
{ "ht", WLAN_STA_HT },
|
||||||
|
{ "vht", WLAN_STA_VHT },
|
||||||
|
{ "wps", WLAN_STA_WPS },
|
||||||
|
{ "mfp", WLAN_STA_MFP },
|
||||||
|
};
|
||||||
|
*/
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
uint32_t freq;
|
||||||
|
} client_request;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
uint8_t mac[ETH_ALEN];
|
||||||
|
uint32_t freq;
|
||||||
|
uint32_t auth;
|
||||||
|
uint32_t assoc;
|
||||||
|
uint32_t authorized;
|
||||||
|
uint32_t preauth;
|
||||||
|
uint32_t wds;
|
||||||
|
uint32_t wmm;
|
||||||
|
uint32_t ht;
|
||||||
|
uint32_t vht;
|
||||||
|
uint32_t wps;
|
||||||
|
uint32_t mfp;
|
||||||
|
} client;
|
||||||
|
|
||||||
// List
|
// List
|
||||||
typedef struct node {
|
typedef struct node {
|
||||||
probe_entry data;
|
probe_entry data;
|
||||||
|
|
102
src/utils/ubus.c
102
src/utils/ubus.c
|
@ -33,6 +33,50 @@ static const struct blobmsg_policy prob_policy[__PROB_MAX] = {
|
||||||
[PROB_FREQ] = {.name = "freq", .type = BLOBMSG_TYPE_INT32},
|
[PROB_FREQ] = {.name = "freq", .type = BLOBMSG_TYPE_INT32},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum {
|
||||||
|
CLIENT_TABLE,
|
||||||
|
CLIENT_TABLE_FREQ,
|
||||||
|
__CLIENT_TABLE_MAX,
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct blobmsg_policy client_table_policy[__CLIENT_TABLE_MAX] = {
|
||||||
|
[CLIENT_TABLE] = {.name = "clients", .type = BLOBMSG_TYPE_TABLE},
|
||||||
|
[CLIENT_TABLE_FREQ] = {.name = "freq", .type = BLOBMSG_TYPE_INT32},
|
||||||
|
};
|
||||||
|
|
||||||
|
enum {
|
||||||
|
//CLIENT_TABLE,
|
||||||
|
//CLIENT_TABLE_FREQ,
|
||||||
|
CLIENT_AUTH,
|
||||||
|
CLIENT_ASSOC,
|
||||||
|
CLIENT_AUTHORIZED,
|
||||||
|
CLIENT_PREAUTH,
|
||||||
|
CLIENT_WDS,
|
||||||
|
CLIENT_WMM,
|
||||||
|
CLIENT_HT,
|
||||||
|
CLIENT_VHT,
|
||||||
|
CLIENT_WPS,
|
||||||
|
CLIENT_MFP,
|
||||||
|
CLIENT_AID,
|
||||||
|
__CLIENT_MAX,
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct blobmsg_policy client_policy[__CLIENT_MAX] = {
|
||||||
|
//[CLIENT_TABLE] = {.name = "clients", .type = BLOBMSG_TYPE_TABLE},
|
||||||
|
//[CLIENT_TABLE_FREQ] = {.name = "freq", .type = BLOBMSG_TYPE_INT32},
|
||||||
|
[CLIENT_AUTH] = {.name = "auth", .type = BLOBMSG_TYPE_INT8},
|
||||||
|
[CLIENT_ASSOC] = {.name = "assoc", .type = BLOBMSG_TYPE_INT8},
|
||||||
|
[CLIENT_AUTHORIZED] = {.name = "authorized", .type = BLOBMSG_TYPE_INT8},
|
||||||
|
[CLIENT_PREAUTH] = {.name = "preauth", .type = BLOBMSG_TYPE_INT8},
|
||||||
|
[CLIENT_WDS] = {.name = "wds", .type = BLOBMSG_TYPE_INT8},
|
||||||
|
[CLIENT_WMM] = {.name = "wmm", .type = BLOBMSG_TYPE_INT8},
|
||||||
|
[CLIENT_HT] = {.name = "ht", .type = BLOBMSG_TYPE_INT8},
|
||||||
|
[CLIENT_VHT] = {.name = "vht", .type = BLOBMSG_TYPE_INT8},
|
||||||
|
[CLIENT_WPS] = {.name = "wps", .type = BLOBMSG_TYPE_INT8},
|
||||||
|
[CLIENT_MFP] = {.name = "mfp", .type = BLOBMSG_TYPE_INT8},
|
||||||
|
[CLIENT_AID] = {.name = "aid", .type = BLOBMSG_TYPE_INT32},
|
||||||
|
};
|
||||||
|
|
||||||
/* Function Definitions */
|
/* Function Definitions */
|
||||||
static void hostapd_handle_remove(struct ubus_context *ctx,
|
static void hostapd_handle_remove(struct ubus_context *ctx,
|
||||||
struct ubus_subscriber *s, uint32_t id);
|
struct ubus_subscriber *s, uint32_t id);
|
||||||
|
@ -183,12 +227,70 @@ int dawn_init_ubus(const char *ubus_socket, char *hostapd_dir) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
dump_client(struct blob_attr **tb)
|
||||||
|
{
|
||||||
|
printf("DUMPING CLIENT:\n");
|
||||||
|
|
||||||
|
if (tb[CLIENT_AUTH]) {
|
||||||
|
printf("AUTH: %d\n", blobmsg_get_u8(tb[CLIENT_AUTH]));
|
||||||
|
}
|
||||||
|
if (tb[CLIENT_ASSOC]) {
|
||||||
|
printf("ASSOC: %d\n", blobmsg_get_u8(tb[CLIENT_ASSOC]));
|
||||||
|
}
|
||||||
|
|
||||||
|
if(tb[CLIENT_PREAUTH]){
|
||||||
|
printf("Preauth: %d\n", blobmsg_get_u8(tb[CLIENT_PREAUTH]));
|
||||||
|
}
|
||||||
|
if(tb[CLIENT_HT]){
|
||||||
|
printf("HT: %d\n", blobmsg_get_u8(tb[CLIENT_HT]));
|
||||||
|
}
|
||||||
|
if(tb[CLIENT_HT]){
|
||||||
|
printf("AID: %d\n", blobmsg_get_u32(tb[CLIENT_AID]));
|
||||||
|
}
|
||||||
|
printf("Dumped Client!\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
dump_client_table(struct blob_attr *head, int len)
|
||||||
|
{
|
||||||
|
struct blob_attr *attr;
|
||||||
|
struct blobmsg_hdr *hdr;
|
||||||
|
|
||||||
|
__blob_for_each_attr(attr, head, len) {
|
||||||
|
hdr = blob_data(attr);
|
||||||
|
printf("%s\n", hdr->name); // mac client
|
||||||
|
|
||||||
|
struct blob_attr *tb[__CLIENT_MAX];
|
||||||
|
blobmsg_parse(client_policy, __CLIENT_MAX, tb, blobmsg_data(attr), blobmsg_len(attr));
|
||||||
|
char* str = blobmsg_format_json_indent(attr, true, -1);
|
||||||
|
printf("%s\n", str);
|
||||||
|
|
||||||
|
dump_client(tb);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static int parse_to_clients(struct blob_attr *msg) {
|
||||||
|
struct blob_attr *tb[__CLIENT_TABLE_MAX];
|
||||||
|
|
||||||
|
blobmsg_parse(client_table_policy, __CLIENT_TABLE_MAX, tb, blob_data(msg), blob_len(msg));
|
||||||
|
|
||||||
|
if (tb[CLIENT_TABLE]) {
|
||||||
|
dump_client_table(blobmsg_data(tb[CLIENT_TABLE]), blobmsg_data_len(tb[CLIENT_TABLE]));
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("Parsing client request success!!!\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
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)
|
||||||
{
|
{
|
||||||
char *str;
|
char *str;
|
||||||
if (!msg)
|
if (!msg)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
parse_to_clients(msg);
|
||||||
|
|
||||||
str = blobmsg_format_json_indent(msg, true, -1);
|
str = blobmsg_format_json_indent(msg, true, -1);
|
||||||
printf("%s\n", str);
|
printf("%s\n", str);
|
||||||
free(str);
|
free(str);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue