rpcd-mod-luci: report the interface for leases
authorDavid Härdeman <[email protected]>
Sun, 30 Nov 2025 18:43:29 +0000 (19:43 +0100)
committerPaul Donald <[email protected]>
Wed, 3 Dec 2025 12:36:29 +0000 (13:36 +0100)
This adds support to rpcd-mod-luci's ubus interface to report also which
interface a given lease corresponds to, which will make it possible to
expose that information in LuCI.

Signed-off-by: David Härdeman <[email protected]>
libs/rpcd-mod-luci/src/luci.c

index f5527a8a947896625957c2ccdd7a96cb5510efec..2abb5a81ff5c6d8e299f6ea0a245389dd098dc1b 100644 (file)
@@ -353,6 +353,7 @@ struct lease_entry {
        char buf[512];
        int32_t expire;
        struct ether_addr mac;
+       char *iface;
        char *hostname;
        char *duid;
        char *iaid;
@@ -486,8 +487,13 @@ lease_next(void)
                        ea = NULL;
 
                        if (lease_state.files[lease_state.off].odhcpd) {
-                               strtok(e.buf, " \t\n"); /* # */
-                               strtok(NULL, " \t\n"); /* iface */
+                               p = strtok(e.buf, " \t\n"); /* # */
+                               if (!p || strcmp(p, "#"))
+                                       continue;
+
+                               e.iface = strtok(NULL, " \t\n"); /* iface */
+                               if (!e.iface)
+                                       continue;
 
                                e.duid = strtok(NULL, " \t\n"); /* duid or MAC */
                                if (!e.duid)
@@ -1859,6 +1865,9 @@ rpc_luci_get_duid_hints(struct ubus_context *ctx, struct ubus_object *obj,
 
                o = blobmsg_open_table(&blob, key);
 
+               if (lease->iface)
+                       blobmsg_add_string(&blob, "interface", lease->iface);
+
                blobmsg_add_string(&blob, "duid", lease->duid);
 
                if (lease->iaid)
@@ -1972,6 +1981,9 @@ rpc_luci_get_dhcp_leases(struct ubus_context *ctx, struct ubus_object *obj,
                        else
                                blobmsg_add_u32(&blob, "expires", lease->expire);
 
+                       if (lease->iface)
+                               blobmsg_add_string(&blob, "interface", lease->iface);
+
                        if (lease->hostname)
                                blobmsg_add_string(&blob, "hostname", lease->hostname);