#include "ubus.h"
static struct ubus_context *ctx = NULL;
+static struct blob_buf b;
/* global object */
UBUS_METHOD_START("down"),
UBUS_METHOD_END(),
+
+ UBUS_METHOD_START("status"),
+ UBUS_METHOD_END(),
};
static struct ubus_object_type iface_object_type =
return 0;
}
+static int netifd_handle_status(struct ubus_context *ctx, struct ubus_object *obj,
+ struct ubus_request_data *req, const char *method,
+ struct blob_attr *msg)
+{
+ struct interface *iface;
+
+ iface = container_of(obj, struct interface, ubus);
+
+ blob_buf_init(&b, 0);
+ blobmsg_add_u8(&b, "up", iface->up);
+ blobmsg_add_u8(&b, "active", iface->active);
+ 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)
+ field = "device";
+ else
+ 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);
+
+ return 0;
+}
+
static struct ubus_method iface_object_methods[] = {
{ .name = "up", .handler = netifd_handle_up },
{ .name = "down", .handler = netifd_handle_down },
+ { .name = "status", .handler = netifd_handle_status },
};