use loop to update connections

This commit is contained in:
PolynomialDivision 2018-01-05 19:55:58 +01:00
parent b34f9e3018
commit 7508faae91
9 changed files with 74 additions and 29 deletions

View file

@ -1,7 +1,8 @@
config network config network
option broadcast_ip '10.0.0.255' option broadcast_ip '10.0.0.255'
option broadcast_port '1025' option broadcast_port '1025'
option multicast '0' option tcp_port '1026'
option network_option '2' # 0 udp broadcast, 1 mutlicast, 2 tcp
option shared_key 'Niiiiiiiiiiiiiik' option shared_key 'Niiiiiiiiiiiiiik'
option iv 'Niiiiiiiiiiiiiik' option iv 'Niiiiiiiiiiiiiik'
@ -17,22 +18,23 @@ config times
option remove_probe '120' option remove_probe '120'
option remove_ap '460' option remove_ap '460'
option update_hostapd '10' option update_hostapd '10'
option update_tcp_con '10'
config metric config metric
option ht_support '0' option ht_support '10'
option vht_support '0' option vht_support '100'
option no_ht_support '0' option no_ht_support '0'
option no_vht_support '0' option no_vht_support '0'
option rssi '0' option rssi '0'
option low_rssi '0' option low_rssi '-500'
option freq '0' option freq '100'
option chan_util '0' option chan_util '0'
option max_chan_util '0' option max_chan_util '0'
option rssi_val '0' option rssi_val '-60'
option low_rssi_val '0' option low_rssi_val '-80'
option chan_util_val '0' option chan_util_val '140'
option max_chan_util_val '0' option max_chan_util_val '170'
option min_probe_count '0' option min_probe_count '4'
option bandwith_threshold '0' option bandwith_threshold '6'
option use_station_count '0' option use_station_count '1'
option eval_probe_req '0' option eval_probe_req '1'

View file

@ -10,12 +10,20 @@ NAME=dawn
start_service() start_service()
{ {
local _tcp_buffer
config_load dawn
load_tcp_port() {
config_get _tcp_buffer "$1" tcp_port
}
config_foreach load_tcp_port network
echo "Starting Service..." echo "Starting Service..."
procd_open_instance procd_open_instance
procd_set_param command $PROG procd_set_param command $PROG
procd_set_param stdout 1 procd_set_param stdout 1
procd_set_param stderr 1 procd_set_param stderr 1
procd_add_mdns "dawn" "tcp" "1026" procd_add_mdns "dawn" "tcp" "${_tcp_buffer}"
procd_close_instance procd_close_instance
echo "Dawn instance started!" echo "Dawn instance started!"
echo "UMDNS with port ${_tcp_buffer}"
} }

View file

@ -61,11 +61,13 @@ struct time_config_s {
time_t remove_probe; time_t remove_probe;
time_t remove_ap; time_t remove_ap;
time_t update_hostapd; time_t update_hostapd;
time_t update_tcp_con;
}; };
struct network_config_s { struct network_config_s {
const char* broadcast_ip; const char* broadcast_ip;
int broadcast_port; int broadcast_port;
int network_option;
const char* multicast; const char* multicast;
const char* shared_key; const char* shared_key;
const char* iv; const char* iv;

View file

@ -6,6 +6,8 @@
#include "datastorage.h" #include "datastorage.h"
void start_umdns_update();
int dawn_init_ubus(const char *ubus_socket, const char *hostapd_dir); int dawn_init_ubus(const char *ubus_socket, const char *hostapd_dir);
int parse_to_probe_req(struct blob_attr *msg, probe_entry *prob_req); int parse_to_probe_req(struct blob_attr *msg, probe_entry *prob_req);

View file

@ -20,6 +20,8 @@ void daemon_shutdown();
void signal_handler(int sig); void signal_handler(int sig);
int run_tcp_server();
int init_mutex(); int init_mutex();
struct sigaction signal_action; struct sigaction signal_action;
@ -79,6 +81,18 @@ int init_mutex()
printf("\n mutex init failed\n"); printf("\n mutex init failed\n");
return 1; return 1;
} }
if (pthread_mutex_init(&tcp_array_mutex, NULL) != 0) {
printf("\n mutex init failed\n");
return 1;
}
return 0;
}
int run_tcp_server()
{
pthread_create(&tid_tcp_server, NULL, &run_tcp_socket, NULL);
start_umdns_update();
return 0; return 0;
} }
@ -107,15 +121,25 @@ int main(int argc, char **argv) {
struct time_config_s time_config = uci_get_time_config(); struct time_config_s time_config = uci_get_time_config();
timeout_config = time_config; // TODO: Refactor... timeout_config = time_config; // TODO: Refactor...
pthread_create(&tid_tcp_server, NULL, &run_tcp_socket, NULL);
pthread_create(&tid_connections, NULL, &update_connections_thread, NULL);
hostapd_dir_glob = uci_get_dawn_hostapd_dir(); hostapd_dir_glob = uci_get_dawn_hostapd_dir();
sort_string = (char*) uci_get_dawn_sort_order(); sort_string = (char*) uci_get_dawn_sort_order();
init_mutex(); init_mutex();
init_socket_runopts(net_config.broadcast_ip, net_config.broadcast_port, net_config.bool_multicast); switch(net_config.network_option)
{
case 0:
init_socket_runopts(net_config.broadcast_ip, net_config.broadcast_port, 0);
break;
case 1:
init_socket_runopts(net_config.broadcast_ip, net_config.broadcast_port, 1);
break;
case 2:
run_tcp_server();
break;
default:
exit(EXIT_FAILURE);
}
insert_macs_from_file(); insert_macs_from_file();
dawn_init_ubus(ubus_socket, hostapd_dir_glob); dawn_init_ubus(ubus_socket, hostapd_dir_glob);

View file

@ -1,3 +1,4 @@
// http://www.geeksforgeeks.org/socket-programming-in-cc-handling-multiple-clients-on-server-without-multi-threading/ // http://www.geeksforgeeks.org/socket-programming-in-cc-handling-multiple-clients-on-server-without-multi-threading/
#include "tcpsocket.h" #include "tcpsocket.h"

View file

@ -845,6 +845,7 @@ void remove_probe_array_cb(struct uloop_timeout *t) {
pthread_mutex_lock(&probe_array_mutex); pthread_mutex_lock(&probe_array_mutex);
printf("[Thread] : Removing old entries!\n"); printf("[Thread] : Removing old entries!\n");
remove_old_probe_entries(time(0), timeout_config.remove_probe); remove_old_probe_entries(time(0), timeout_config.remove_probe);
printf("[Thread] : Removing old FINISHED!\n");
pthread_mutex_unlock(&probe_array_mutex); pthread_mutex_unlock(&probe_array_mutex);
uloop_timeout_set(&probe_timeout, timeout_config.remove_probe * 1000); uloop_timeout_set(&probe_timeout, timeout_config.remove_probe * 1000);
} }

View file

@ -33,6 +33,7 @@ struct time_config_s uci_get_time_config() {
ret.remove_probe = uci_lookup_option_int(uci_ctx, s, "remove_probe"); ret.remove_probe = uci_lookup_option_int(uci_ctx, s, "remove_probe");
ret.update_hostapd = uci_lookup_option_int(uci_ctx, s, "update_hostapd"); ret.update_hostapd = uci_lookup_option_int(uci_ctx, s, "update_hostapd");
ret.remove_ap = uci_lookup_option_int(uci_ctx, s, "remove_ap"); ret.remove_ap = uci_lookup_option_int(uci_ctx, s, "remove_ap");
ret.update_tcp_con = uci_lookup_option_int(uci_ctx, s, "update_tcp_con");
return ret; return ret;
} }
} }
@ -90,6 +91,7 @@ struct network_config_s uci_get_dawn_network() {
printf("multicast: %s\n", ret.broadcast_ip); printf("multicast: %s\n", ret.broadcast_ip);
ret.shared_key = uci_lookup_option_string(uci_ctx, s, "shared_key"); ret.shared_key = uci_lookup_option_string(uci_ctx, s, "shared_key");
ret.iv = uci_lookup_option_string(uci_ctx, s, "iv"); ret.iv = uci_lookup_option_string(uci_ctx, s, "iv");
ret.network_option = uci_lookup_option_int(uci_ctx, s, "network_option");
return ret; return ret;
} }
} }

View file

@ -29,17 +29,19 @@ static struct blob_buf network_buf;
static struct blob_buf data_buf; static struct blob_buf data_buf;
static struct blob_buf b_probe; static struct blob_buf b_probe;
void update_clients(struct uloop_timeout *t); void update_clients(struct uloop_timeout *t);
void update_tcp_connections(struct uloop_timeout *t);
struct uloop_timeout client_timer = { struct uloop_timeout client_timer = {
.cb = update_clients .cb = update_clients
}; };
struct uloop_timeout hostapd_timer = { struct uloop_timeout hostapd_timer = {
.cb = update_hostapd_sockets .cb = update_hostapd_sockets
}; };
struct uloop_timeout umdns_timer = {
.cb = update_tcp_connections
};
#define MAX_HOSTAPD_SOCKETS 10 #define MAX_HOSTAPD_SOCKETS 10
uint32_t hostapd_sock_arr[MAX_HOSTAPD_SOCKETS]; uint32_t hostapd_sock_arr[MAX_HOSTAPD_SOCKETS];
@ -702,7 +704,6 @@ int dawn_init_ubus(const char *ubus_socket, const char *hostapd_dir) {
ctx_clients = ubus_connect(ubus_socket_clients); ctx_clients = ubus_connect(ubus_socket_clients);
uloop_timeout_add(&client_timer); uloop_timeout_add(&client_timer);
ubus_call_umdns(); ubus_call_umdns();
ubus_add_oject(); ubus_add_oject();
@ -863,13 +864,15 @@ void update_clients(struct uloop_timeout *t) {
uloop_timeout_set(&client_timer, timeout_config.update_client * 1000); uloop_timeout_set(&client_timer, timeout_config.update_client * 1000);
} }
void *update_connections_thread(void *arg) { void update_tcp_connections(struct uloop_timeout *t) {
while (1) { ubus_call_umdns();
sleep(TIME_THRESHOLD_CLIENT_KICK); uloop_timeout_set(&umdns_timer, timeout_config.update_tcp_con * 1000);
printf("[Thread] : Updating Connections!\n"); }
ubus_call_umdns();
} void start_umdns_update()
return 0; {
// update connections
uloop_timeout_add(&umdns_timer);
} }
void update_hostapd_sockets(struct uloop_timeout *t) { void update_hostapd_sockets(struct uloop_timeout *t) {