hostapd: fix ubus reconnect handling
[openwrt/staging/yousong.git] / package / network / services / hostapd / patches / 700-ubus_support.patch
index 8e6f6c08bc7766e09dc5cc29fe7f115f2acdf39b..c1759c8fb8e085d328fe00465f74dfc49a989556 100644 (file)
@@ -40,7 +40,7 @@
        struct hostapd_data **bss;
 --- /dev/null
 +++ b/src/ap/ubus.c
-@@ -0,0 +1,356 @@
+@@ -0,0 +1,373 @@
 +/*
 + * hostapd / ubus support
 + * Copyright (c) 2013, Felix Fietkau <nbd@openwrt.org>
 +      ubus_handle_event(ctx);
 +}
 +
++static void ubus_reconnect_timeout(void *eloop_data, void *user_ctx)
++{
++      if (ubus_reconnect(ctx, NULL)) {
++              eloop_register_timeout(1, 0, ubus_reconnect_timeout, ctx, NULL);
++              return;
++      }
++
++      eloop_register_read_sock(ctx->sock.fd, ubus_receive, ctx, NULL);
++}
++
++static void hostapd_ubus_connection_lost(struct ubus_context *ctx)
++{
++      eloop_unregister_read_sock(ctx->sock.fd);
++      eloop_register_timeout(1, 0, ubus_reconnect_timeout, ctx, NULL);
++}
++
 +static bool hostapd_ubus_init(void)
 +{
 +      if (ctx)
@@ -81,6 +97,7 @@
 +      if (!ctx)
 +              return false;
 +
++      ctx->connection_lost = hostapd_ubus_connection_lost;
 +      eloop_register_read_sock(ctx->sock.fd, ubus_receive, ctx, NULL);
 +      return true;
 +}