diff options
author | Felix Fietkau <nbd@openwrt.org> | 2011-10-02 22:18:50 +0200 |
---|---|---|
committer | Felix Fietkau <nbd@openwrt.org> | 2011-10-02 22:18:50 +0200 |
commit | f9d0f688fa84f53dfde9bb2c0f04ec2528cf8a14 (patch) | |
tree | e0660470d9829c244b8a8283e22c6d5261639379 | |
parent | b9f116ece5ca85c38105a8e33f0d9cc818a05694 (diff) |
add an ubus callback for removing an interface
-rw-r--r-- | ubus.c | 26 |
1 files changed, 26 insertions, 0 deletions
@@ -257,6 +257,31 @@ netifd_iface_notify_proto(struct ubus_context *ctx, struct ubus_object *obj, return iface->proto->notify(iface->proto, msg); } +static void +netifd_iface_do_remove(struct uloop_timeout *timeout) +{ + struct interface *iface; + + iface = container_of(timeout, struct interface, remove_timer); + vlist_delete(&interfaces, &iface->node); +} + +static int +netifd_iface_remove(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); + if (iface->remove_timer.cb) + return UBUS_STATUS_INVALID_ARGUMENT; + + iface->remove_timer.cb = netifd_iface_do_remove; + uloop_timeout_set(&iface->remove_timer, 100); + return 0; +} + static struct ubus_method iface_object_methods[] = { { .name = "up", .handler = netifd_handle_up }, { .name = "down", .handler = netifd_handle_down }, @@ -266,6 +291,7 @@ static struct ubus_method iface_object_methods[] = { { .name = "remove_device", .handler = netifd_iface_handle_device, .policy = dev_policy, .n_policy = __DEV_MAX_NOFORCE }, { .name = "notify_proto", .handler = netifd_iface_notify_proto }, + { .name = "remove", .handler = netifd_iface_remove } }; static struct ubus_object_type iface_object_type = |