add the status method to the signature
[project/netifd.git] / ubus.c
diff --git a/ubus.c b/ubus.c
index 0723300..1331d72 100644 (file)
--- a/ubus.c
+++ b/ubus.c
@@ -101,6 +101,9 @@ static const struct ubus_signature iface_object_sig[] = {
 
        UBUS_METHOD_START("down"),
        UBUS_METHOD_END(),
+
+       UBUS_METHOD_START("status"),
+       UBUS_METHOD_END(),
 };
 
 static struct ubus_object_type iface_object_type =
@@ -145,12 +148,22 @@ static int netifd_handle_status(struct ubus_context *ctx, struct ubus_object *ob
        blobmsg_add_u8(&b, "autostart", iface->autostart);
        if (iface->main_dev.dev) {
                struct device *dev = iface->main_dev.dev;
+               const char *field;
+               void *devinfo;
 
+               /* use a different field for virtual devices */
                if (dev->avl.key)
-                       blobmsg_add_string(&b, "device", dev->ifname);
+                       field = "device";
                else
-                       /* use a different field for virtual devices */
-                       blobmsg_add_string(&b, "link", dev->ifname);
+                       field = "link";
+
+               devinfo = blobmsg_open_table(&b, field);
+               blobmsg_add_string(&b, "name", dev->ifname);
+
+               if (dev->type->dump_status)
+                       dev->type->dump_status(dev, &b);
+
+               blobmsg_close_table(&b, devinfo);
        }
 
        ubus_send_reply(ctx, req, b.head);