X-Git-Url: https://git.archive.openwrt.org/?a=blobdiff_plain;f=ubus.c;h=340a8e417110b2cabc4b388d7da1dad1d54009e9;hb=5e43781680f9f55e0ae7c1b681465d64882e3b8c;hp=513b40cc25ccd988ff28d87462b2548bf7c39856;hpb=e93c42c036c4b4df1f65f261def31cf1a429e942;p=project%2Fnetifd.git diff --git a/ubus.c b/ubus.c index 513b40c..340a8e4 100644 --- a/ubus.c +++ b/ubus.c @@ -135,11 +135,11 @@ netifd_add_dynamic(struct ubus_context *ctx, struct ubus_object *obj, const char *name = blobmsg_get_string(tb[DI_NAME]); - iface = calloc(1, sizeof(*iface)); + iface = interface_alloc(name, msg); if (!iface) return UBUS_STATUS_UNKNOWN_ERROR; - interface_init(iface, name, msg, true); + interface_set_dynamic(iface); iface->device_config = true; config = blob_memdup(msg); @@ -441,6 +441,9 @@ interface_ip_dump_address_list(struct interface_ip_settings *ip, bool v6, if (addr->valid_until) blobmsg_add_u32(&b, "valid", addr->valid_until - now); + if (addr->pclass) + blobmsg_add_string(&b, "class", addr->pclass); + blobmsg_close_table(&b, a); } } @@ -656,6 +659,7 @@ netifd_dump_status(struct interface *iface) if (iface->state == IFS_UP) { blobmsg_add_u32(&b, "metric", iface->metric); + blobmsg_add_u8(&b, "delegation", !iface->proto_ip.no_delegation); a = blobmsg_open_array(&b, "ipv4-address"); interface_ip_dump_address_list(&iface->config_ip, false, true); interface_ip_dump_address_list(&iface->proto_ip, false, true); @@ -762,9 +766,7 @@ netifd_iface_handle_device(struct ubus_context *ctx, struct ubus_object *obj, { struct blob_attr *tb[__DEV_MAX]; struct interface *iface; - struct device *dev; bool add = !strncmp(method, "add", 3); - int ret; iface = container_of(obj, struct interface, ubus); @@ -773,29 +775,7 @@ netifd_iface_handle_device(struct ubus_context *ctx, struct ubus_object *obj, if (!tb[DEV_NAME]) return UBUS_STATUS_INVALID_ARGUMENT; - device_lock(); - - dev = device_get(blobmsg_data(tb[DEV_NAME]), add ? 2 : 0); - if (!dev) { - ret = UBUS_STATUS_NOT_FOUND; - goto out; - } - - if (add) { - device_set_present(dev, true); - if (iface->device_config) - device_set_config(dev, &simple_device_type, iface->config); - - system_if_apply_settings(dev, &dev->settings); - ret = interface_add_link(iface, dev); - } else { - ret = interface_remove_link(iface, dev); - } - -out: - device_unlock(); - - return ret; + return interface_handle_link(iface, blobmsg_data(tb[DEV_NAME]), add); }