X-Git-Url: http://git.openwrt.org/?a=blobdiff_plain;f=ubus.c;h=41843011c376d26b22a08bb223cac4330537ea0a;hb=cb03623bf254975f3660211580f441d860b27359;hp=422b652250a38c3b8fe813ae74c6f4a3a6c33fd3;hpb=8b468ec5022834d04b6be1cf45b4fe4f092c692e;p=project%2Fnetifd.git diff --git a/ubus.c b/ubus.c index 422b652..4184301 100644 --- a/ubus.c +++ b/ubus.c @@ -166,38 +166,12 @@ error: return UBUS_STATUS_UNKNOWN_ERROR; } -static int -netifd_del_dynamic(struct ubus_context *ctx, struct ubus_object *obj, - struct ubus_request_data *req, const char *method, - struct blob_attr *msg) -{ - struct blob_attr *tb[__DI_MAX]; - struct interface *iface; - - blobmsg_parse(dynamic_policy, __DI_MAX, tb, blob_data(msg), blob_len(msg)); - - if (!tb[DI_NAME]) - return UBUS_STATUS_INVALID_ARGUMENT; - - const char *name = blobmsg_get_string(tb[DI_NAME]); - iface = vlist_find(&interfaces, name, iface, node); - - if (!iface) - return UBUS_STATUS_NOT_FOUND; - else if (!iface->dynamic) - return UBUS_STATUS_INVALID_COMMAND; - - vlist_delete(&interfaces, &iface->node); - return UBUS_STATUS_OK; -} - 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 }, UBUS_METHOD("add_dynamic", netifd_add_dynamic, dynamic_policy), - UBUS_METHOD("del_dynamic", netifd_del_dynamic, dynamic_policy), }; static struct ubus_object_type main_object_type = @@ -675,6 +649,7 @@ netifd_dump_status(struct interface *iface) blobmsg_add_u8(&b, "pending", iface->state == IFS_SETUP); blobmsg_add_u8(&b, "available", iface->available); blobmsg_add_u8(&b, "autostart", iface->autostart); + blobmsg_add_u8(&b, "dynamic", iface->dynamic); if (iface->state == IFS_UP) { time_t cur = system_get_rtime(); @@ -843,7 +818,7 @@ netifd_iface_handle_device(struct ubus_context *ctx, struct ubus_object *obj, cur = tb[DEV_LINK_EXT]; if (cur) - link_ext = !!blobmsg_get_u8(cur); + link_ext = blobmsg_get_bool(cur); return interface_handle_link(iface, blobmsg_data(tb[DEV_LINK_NAME]), add, link_ext); } @@ -916,18 +891,10 @@ netifd_handle_set_data(struct ubus_context *ctx, struct ubus_object *obj, struct blob_attr *msg) { struct interface *iface; - struct blob_attr *cur; - int rem, ret; iface = container_of(obj, struct interface, ubus); - blob_for_each_attr(cur, msg, rem) { - ret = interface_add_data(iface, cur); - if (ret) - return ret; - } - - return 0; + return interface_parse_data(iface, msg); } static struct ubus_method iface_object_methods[] = { @@ -1002,6 +969,9 @@ static void netifd_add_iface_object(void) int i; methods = calloc(1, sizeof(iface_object_methods)); + if (!methods) + return; + memcpy(methods, iface_object_methods, sizeof(iface_object_methods)); iface_object.methods = methods;