diff options
-rw-r--r-- | proto.c | 13 | ||||
-rw-r--r-- | proto.h | 2 | ||||
-rw-r--r-- | ubus.c | 13 |
3 files changed, 27 insertions, 1 deletions
@@ -450,6 +450,19 @@ get_proto_handler(const char *name) } void +proto_dump_handlers(struct blob_buf *b) +{ + struct proto_handler *p; + void *c; + + avl_for_each_element(&handlers, p, avl) { + c = blobmsg_open_table(b, p->name); + blobmsg_add_u8(b, "no_device", !!(p->flags & PROTO_FLAG_NODEV)); + blobmsg_close_table(b, c); + } +} + +void proto_init_interface(struct interface *iface, struct blob_attr *attr) { const struct proto_handler *proto = iface->proto_handler; @@ -72,6 +72,6 @@ int interface_proto_event(struct interface_proto_state *proto, unsigned int parse_netmask_string(const char *str, bool v6); int proto_apply_static_ip_settings(struct interface *iface, struct blob_attr *attr); int proto_apply_ip_settings(struct interface *iface, struct blob_attr *attr, bool ext); - +void proto_dump_handlers(struct blob_buf *b); #endif @@ -92,10 +92,23 @@ netifd_add_host_route(struct ubus_context *ctx, struct ubus_object *obj, return 0; } +static int +netifd_get_proto_handlers(struct ubus_context *ctx, struct ubus_object *obj, + struct ubus_request_data *req, const char *method, + struct blob_attr *msg) +{ + blob_buf_init(&b, 0); + proto_dump_handlers(&b); + ubus_send_reply(ctx, req, b.head); + + return 0; +} + static struct ubus_method main_object_methods[] = { { .name = "restart", .handler = netifd_handle_restart }, { .name = "reload", .handler = netifd_handle_reload }, UBUS_METHOD("add_host_route", netifd_add_host_route, route_policy), + { .name = "get_proto_handlers", .handler = netifd_get_proto_handlers }, }; static struct ubus_object_type main_object_type = |