not force network
This commit is contained in:
parent
a2dba85251
commit
a4961cc6f2
|
@ -14,3 +14,7 @@ bool config_client_force_probe = false;
|
||||||
bool config_client_probe_steering = true;
|
bool config_client_probe_steering = true;
|
||||||
// steering contains learning already
|
// steering contains learning already
|
||||||
bool config_client_probe_learning = false;
|
bool config_client_probe_learning = false;
|
||||||
|
|
||||||
|
#ifndef MINI
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
@ -27,4 +27,8 @@ extern bool config_client_probe_steering;
|
||||||
*/
|
*/
|
||||||
extern bool config_client_probe_learning;
|
extern bool config_client_probe_learning;
|
||||||
|
|
||||||
|
#ifndef MINI
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -8,6 +8,11 @@
|
||||||
#include "socket.h"
|
#include "socket.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
char *ifname = "br-lan";
|
||||||
|
char *addr = "::";
|
||||||
|
char *maddr = "ff02::31f1";
|
||||||
|
char *port = "1000";
|
||||||
|
|
||||||
struct option longopts[] = {
|
struct option longopts[] = {
|
||||||
{"verbose", no_argument, 0, 'v'},
|
{"verbose", no_argument, 0, 'v'},
|
||||||
{"help", no_argument, 0, 'h'},
|
{"help", no_argument, 0, 'h'},
|
||||||
|
@ -22,6 +27,11 @@ struct option longopts[] = {
|
||||||
{"clean-every", required_argument, 0, 3},
|
{"clean-every", required_argument, 0, 3},
|
||||||
{"clean-older-then", required_argument, 0, 4},
|
{"clean-older-then", required_argument, 0, 4},
|
||||||
{"clean-authed", optional_argument, 0, 5},
|
{"clean-authed", optional_argument, 0, 5},
|
||||||
|
// network options
|
||||||
|
{"addr", required_argument, 0, 6},
|
||||||
|
{"maddr", required_argument, 0, 7},
|
||||||
|
{"port", required_argument, 0, 8},
|
||||||
|
{"ifname", required_argument, 0, 9},
|
||||||
};
|
};
|
||||||
|
|
||||||
void usage(int c) {
|
void usage(int c) {
|
||||||
|
@ -44,7 +54,12 @@ void usage(int c) {
|
||||||
printf(" --clean-every run cleaning every (current: %ds)\n", config_client_clean_every);
|
printf(" --clean-every run cleaning every (current: %ds)\n", config_client_clean_every);
|
||||||
printf(" --clean-older-then clean unseen for secound (current: %ds)\n", config_client_clean_older_then);
|
printf(" --clean-older-then clean unseen for secound (current: %ds)\n", config_client_clean_older_then);
|
||||||
printf(" --clean-authed clean already authed also (not only learned by probes) (current: %s)\n", BOOL2STR(config_client_clean_authed));
|
printf(" --clean-authed clean already authed also (not only learned by probes) (current: %s)\n", BOOL2STR(config_client_clean_authed));
|
||||||
printf("\nConfig could be changed by ubus, see `ubus -v list wifictld`\n");
|
printf("\nnetwork options:\n");
|
||||||
|
printf(" --addr listen on ip address (current: %s)\n", addr);
|
||||||
|
printf(" --maddr listen and request on multcast address (current: %s)\n", maddr);
|
||||||
|
printf(" --port listen on port (current: %s)\n", port);
|
||||||
|
printf(" --ifname listen on interface for multicast (current: %s)\n", ifname);
|
||||||
|
printf("\nSome config could be changed by ubus, see `ubus -v list wifictld`\n");
|
||||||
if(c)
|
if(c)
|
||||||
printf("Invalid parameter %c ignored.\n", c);
|
printf("Invalid parameter %c ignored.\n", c);
|
||||||
}
|
}
|
||||||
|
@ -128,6 +143,19 @@ int main(int argc, char *argv[])
|
||||||
else
|
else
|
||||||
config_client_clean_authed = !config_client_clean_authed;
|
config_client_clean_authed = !config_client_clean_authed;
|
||||||
break;
|
break;
|
||||||
|
// network options
|
||||||
|
case 6:
|
||||||
|
addr = optarg;
|
||||||
|
break;
|
||||||
|
case 7:
|
||||||
|
maddr = optarg;
|
||||||
|
break;
|
||||||
|
case 8:
|
||||||
|
port = optarg;
|
||||||
|
break;
|
||||||
|
case 9:
|
||||||
|
ifname = optarg;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
usage(c);
|
usage(c);
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -155,7 +183,7 @@ int main(int argc, char *argv[])
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
#ifndef MINI
|
#ifndef MINI
|
||||||
ret = socket_init("br-lan");
|
ret = socket_init(ifname, addr, maddr, port);
|
||||||
if (ret)
|
if (ret)
|
||||||
{
|
{
|
||||||
socket_close();
|
socket_close();
|
||||||
|
|
|
@ -121,19 +121,19 @@ static void server_cb(struct uloop_fd *fd, unsigned int events) {
|
||||||
log_info("socket: send answer\n");
|
log_info("socket: send answer\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
int socket_init(char *ifname) {
|
int socket_init(char *ifname, char *socket_bind, char *socket_maddr, char *socket_port) {
|
||||||
server.cb = server_cb;
|
server.cb = server_cb;
|
||||||
server.fd = usock(USOCK_UDP | USOCK_SERVER | USOCK_IPV6ONLY | USOCK_NUMERIC, SOCKET_ADDR, SOCKET_PORT);
|
server.fd = usock(USOCK_UDP | USOCK_SERVER | USOCK_IPV6ONLY | USOCK_NUMERIC, socket_bind, socket_port);
|
||||||
if (server.fd < 0) {
|
if (server.fd < 0) {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
client_addr.sin6_family = AF_INET6;
|
client_addr.sin6_family = AF_INET6;
|
||||||
client_addr.sin6_port = htons(atoi(SOCKET_PORT));
|
client_addr.sin6_port = htons(atoi(socket_port));
|
||||||
client_addr.sin6_scope_id = if_nametoindex(ifname);
|
client_addr.sin6_scope_id = if_nametoindex(ifname);
|
||||||
|
|
||||||
// listen multicast
|
// listen multicast
|
||||||
if (!inet_pton(AF_INET6, SOCKET_MADDR, &client_addr.sin6_addr)) {
|
if (!inet_pton(AF_INET6, socket_maddr, &client_addr.sin6_addr)) {
|
||||||
log_error("socket: invalid multicast group\n");
|
log_error("socket: invalid multicast group\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,10 +4,6 @@
|
||||||
#include "include.h"
|
#include "include.h"
|
||||||
#include "socket_msg.h"
|
#include "socket_msg.h"
|
||||||
|
|
||||||
#define SOCKET_ADDR "::"
|
|
||||||
#define SOCKET_MADDR "ff02::31f1"
|
|
||||||
#define SOCKET_PORT "1000"
|
|
||||||
|
|
||||||
int socket_init();
|
int socket_init();
|
||||||
void socket_close();
|
void socket_close();
|
||||||
|
|
||||||
|
|
|
@ -87,6 +87,8 @@ static int ubus_get_config(struct ubus_context *ctx, struct ubus_object *obj,
|
||||||
blobmsg_add_bool(&b, "client_force_probe", config_client_force_probe);
|
blobmsg_add_bool(&b, "client_force_probe", config_client_force_probe);
|
||||||
blobmsg_add_bool(&b, "client_probe_steering", config_client_probe_steering);
|
blobmsg_add_bool(&b, "client_probe_steering", config_client_probe_steering);
|
||||||
blobmsg_add_bool(&b, "client_probe_learning", config_client_probe_learning);
|
blobmsg_add_bool(&b, "client_probe_learning", config_client_probe_learning);
|
||||||
|
#ifndef MINI
|
||||||
|
#endif
|
||||||
|
|
||||||
blobmsg_close_table(&b, list);
|
blobmsg_close_table(&b, list);
|
||||||
|
|
||||||
|
@ -107,6 +109,8 @@ enum {
|
||||||
SET_CONFIG_CLIENT_FORCE_PROBE,
|
SET_CONFIG_CLIENT_FORCE_PROBE,
|
||||||
SET_CONFIG_CLIENT_PROBE_STEERING,
|
SET_CONFIG_CLIENT_PROBE_STEERING,
|
||||||
SET_CONFIG_CLIENT_PROBE_LEARNING,
|
SET_CONFIG_CLIENT_PROBE_LEARNING,
|
||||||
|
#ifndef MINI
|
||||||
|
#endif
|
||||||
__SET_CONFIG_MAX
|
__SET_CONFIG_MAX
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -121,6 +125,8 @@ static const struct blobmsg_policy ubus_set_config_policy[__SET_CONFIG_MAX] = {
|
||||||
[SET_CONFIG_CLIENT_FORCE_PROBE] = { "client_force_probe", BLOBMSG_TYPE_BOOL },
|
[SET_CONFIG_CLIENT_FORCE_PROBE] = { "client_force_probe", BLOBMSG_TYPE_BOOL },
|
||||||
[SET_CONFIG_CLIENT_PROBE_STEERING] = { "client_probe_steering", BLOBMSG_TYPE_BOOL },
|
[SET_CONFIG_CLIENT_PROBE_STEERING] = { "client_probe_steering", BLOBMSG_TYPE_BOOL },
|
||||||
[SET_CONFIG_CLIENT_PROBE_LEARNING] = { "client_probe_learning", BLOBMSG_TYPE_BOOL },
|
[SET_CONFIG_CLIENT_PROBE_LEARNING] = { "client_probe_learning", BLOBMSG_TYPE_BOOL },
|
||||||
|
#ifndef MINI
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
static int ubus_set_config(struct ubus_context *ctx, struct ubus_object *obj,
|
static int ubus_set_config(struct ubus_context *ctx, struct ubus_object *obj,
|
||||||
|
@ -139,7 +145,11 @@ static int ubus_set_config(struct ubus_context *ctx, struct ubus_object *obj,
|
||||||
!tb[SET_CONFIG_CLIENT_FORCE] &&
|
!tb[SET_CONFIG_CLIENT_FORCE] &&
|
||||||
!tb[SET_CONFIG_CLIENT_FORCE_PROBE] &&
|
!tb[SET_CONFIG_CLIENT_FORCE_PROBE] &&
|
||||||
!tb[SET_CONFIG_CLIENT_PROBE_STEERING] &&
|
!tb[SET_CONFIG_CLIENT_PROBE_STEERING] &&
|
||||||
!tb[SET_CONFIG_CLIENT_PROBE_LEARNING])
|
!tb[SET_CONFIG_CLIENT_PROBE_LEARNING]
|
||||||
|
#ifndef MINI
|
||||||
|
// &&
|
||||||
|
#endif
|
||||||
|
)
|
||||||
return UBUS_STATUS_INVALID_ARGUMENT;
|
return UBUS_STATUS_INVALID_ARGUMENT;
|
||||||
if (tb[SET_CONFIG_VERBOSE])
|
if (tb[SET_CONFIG_VERBOSE])
|
||||||
config_verbose = blobmsg_get_bool(tb[SET_CONFIG_VERBOSE]);
|
config_verbose = blobmsg_get_bool(tb[SET_CONFIG_VERBOSE]);
|
||||||
|
@ -161,6 +171,8 @@ static int ubus_set_config(struct ubus_context *ctx, struct ubus_object *obj,
|
||||||
config_client_probe_steering = blobmsg_get_bool(tb[SET_CONFIG_CLIENT_PROBE_STEERING]);
|
config_client_probe_steering = blobmsg_get_bool(tb[SET_CONFIG_CLIENT_PROBE_STEERING]);
|
||||||
if (tb[SET_CONFIG_CLIENT_PROBE_LEARNING])
|
if (tb[SET_CONFIG_CLIENT_PROBE_LEARNING])
|
||||||
config_client_probe_learning = blobmsg_get_bool(tb[SET_CONFIG_CLIENT_PROBE_LEARNING]);
|
config_client_probe_learning = blobmsg_get_bool(tb[SET_CONFIG_CLIENT_PROBE_LEARNING]);
|
||||||
|
#ifndef MINI
|
||||||
|
#endif
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -111,10 +111,15 @@ struct wifi_client *__get_client(struct hostapd_client *hclient){
|
||||||
}, resp = {
|
}, resp = {
|
||||||
.client = malloc(sizeof(*client)),
|
.client = malloc(sizeof(*client)),
|
||||||
};
|
};
|
||||||
|
|
||||||
if(socket_request(&req, &resp) == 0){
|
if(socket_request(&req, &resp) == 0){
|
||||||
log_debug("wifi_clients.__get_client("MACSTR"): get client from neigbour\n", MAC2STR(hclient->address));
|
log_debug("wifi_clients.__get_client("MACSTR"): get client from neigbour\n", MAC2STR(hclient->address));
|
||||||
return resp.client;
|
if (client->freq_highest < resp.client->freq_highest) {
|
||||||
|
client->freq_highest = resp.client->freq_highest;
|
||||||
|
}
|
||||||
|
if(!client->authed) {
|
||||||
|
client->authed = resp.client->authed;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -173,19 +178,19 @@ int wifi_clients_try(struct hostapd_client *hclient) {
|
||||||
if (config_client_force || config_client_force_probe && !hclient->auth) {
|
if (config_client_force || config_client_force_probe && !hclient->auth) {
|
||||||
if(!hclient->auth){
|
if(!hclient->auth){
|
||||||
log_verbose("reject - force\n");
|
log_verbose("reject - force\n");
|
||||||
returnINFO_CLIENT -1;
|
return -1;
|
||||||
}
|
}
|
||||||
log_info("reject - force\n");
|
log_info("reject - force\n");
|
||||||
returnINFO_CLIENT -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (hclient->ssi_signal > config_client_signal_threashold) {
|
if (hclient->ssi_signal > config_client_signal_threashold) {
|
||||||
if(!hclient->auth){
|
if(!hclient->auth){
|
||||||
log_verbose("reject - learned higher freq + ssi is high enough\n");
|
log_verbose("reject - learned higher freq + ssi is high enough\n");
|
||||||
returnINFO_CLIENT -1;
|
return -1;
|
||||||
}
|
}
|
||||||
log_info("reject - learned higher freq + ssi is high enough\n");
|
log_info("reject - learned higher freq + ssi is high enough\n");
|
||||||
returnINFO_CLIENT -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -195,19 +200,19 @@ int wifi_clients_try(struct hostapd_client *hclient) {
|
||||||
if(!hclient->auth){
|
if(!hclient->auth){
|
||||||
client->try_probe = 0;
|
client->try_probe = 0;
|
||||||
log_verbose("accept - threashold\n");
|
log_verbose("accept - threashold\n");
|
||||||
returnINFO_CLIENT 0;
|
return 0;
|
||||||
}
|
}
|
||||||
log_info("accept - threashold\n");
|
log_info("accept - threashold\n");
|
||||||
client->try_auth = 0;
|
client->try_auth = 0;
|
||||||
client->connected = 1;
|
client->connected = 1;
|
||||||
returnINFO_CLIENT 0;
|
return 0;
|
||||||
}
|
}
|
||||||
if(!hclient->auth){
|
if(!hclient->auth){
|
||||||
log_verbose("reject\n");
|
log_verbose("reject\n");
|
||||||
returnINFO_CLIENT client->try_probe;
|
return client->try_probe;
|
||||||
}
|
}
|
||||||
log_info("reject\n");
|
log_info("reject\n");
|
||||||
returnINFO_CLIENT client->try_auth;
|
return client->try_auth;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue