opensync: extend ubus API

We need to be able to pass a different ev_loop context.

Signed-off-by: John Crispin <john@phrozen.org>
This commit is contained in:
John Crispin 2020-07-22 12:50:57 +02:00
parent bd28d088fc
commit 43444774f0
3 changed files with 13 additions and 8 deletions

View File

@ -13,12 +13,13 @@ struct ubus_watch_list {
struct ubus_instance {
ubus_connect_handler_t connect;
ubus_handler_t notify;
void (*subscribed)(const char *path, uint32_t id, int add);
int len;
struct ubus_watch_list list[];
};
extern int ubus_init(struct ubus_instance *instance);
extern int ubus_init(struct ubus_instance *instance, struct ev_loop *_loop);
extern uint32_t ubus_lookup_remote(char *name);
#endif

View File

@ -4,6 +4,7 @@
#include "radio.h"
#include "ubus.h"
static struct ubus_context *ubus;
extern struct ev_loop *wifihal_evloop;
int hapd_rrm_enable(char *name, int neighbor, int beacon)
{
@ -140,5 +141,5 @@ static struct ubus_instance ubus_instance = {
int radio_ubus_init(void)
{
return ubus_init(&ubus_instance);
return ubus_init(&ubus_instance, wifihal_evloop);
}

View File

@ -13,7 +13,7 @@ struct ubus_remote {
uint32_t id;
};
extern struct ev_loop *wifihal_evloop;
struct ev_loop *loop;
static ev_io ubus_io;
static struct ubus_context ubus;
@ -79,6 +79,9 @@ static void ubus_handle_subscribe(const char *path, uint32_t id, int add)
avl_delete(&ubus_tree, &remote->avl);
free(remote);
}
if (ubus_instance->subscribed)
ubus_instance->subscribed(path, id, add);
}
static void ubus_event_handler_cb(struct ubus_context *ctx, struct ubus_event_handler *ev,
@ -128,7 +131,7 @@ static void ubus_reconnect_cb(void *arg);
static void ubus_connection_lost_cb(struct ubus_context *ctx)
{
ev_io_stop(wifihal_evloop, &ubus_io);
ev_io_stop(loop, &ubus_io);
evsched_task(&ubus_reconnect_cb, NULL, EVSCHED_SEC(1));
}
@ -144,7 +147,7 @@ static void ubus_reconnect_cb(void *arg)
ubus.connection_lost = ubus_connection_lost_cb;
ev_io_init(&ubus_io, ubus_ev, ubus.sock.fd, EV_READ);
ev_io_start(wifihal_evloop, &ubus_io);
ev_io_start(loop, &ubus_io);
if (ubus_instance->connect)
ubus_instance->connect(&ubus);
@ -162,11 +165,11 @@ static void ubus_reconnect_cb(void *arg)
ubus_lookup(&ubus, NULL, ubus_lookup_cb, NULL);
}
int ubus_init(struct ubus_instance *instance)
int ubus_init(struct ubus_instance *instance, struct ev_loop *_loop)
{
ubus_instance = instance;
evsched_task(&ubus_reconnect_cb, NULL, EVSCHED_SEC(1));
loop = _loop;
evsched_task(&ubus_reconnect_cb, NULL, EVSCHED_SEC(2));
return 0;
}