X-Git-Url: https://git.archive.openwrt.org/?p=project%2Fnetifd.git;a=blobdiff_plain;f=ubus.c;h=513b40cc25ccd988ff28d87462b2548bf7c39856;hp=d24554198897ef6bb713d529e640a76227e93b91;hb=e93c42c036c4b4df1f65f261def31cf1a429e942;hpb=266d92dd83bd5bfe520f3e2838794bf9bb827c07 diff --git a/ubus.c b/ubus.c index d245541..513b40c 100644 --- a/ubus.c +++ b/ubus.c @@ -488,6 +488,11 @@ interface_ip_dump_route_list(struct interface_ip_settings *ip, bool enabled) if (route->valid_until) blobmsg_add_u32(&b, "valid", route->valid_until - now); + buf = blobmsg_alloc_string_buffer(&b, "source", buflen); + inet_ntop(af, &route->source, buf, buflen); + snprintf(buf + strlen(buf), 4, "/%u", route->sourcemask); + blobmsg_add_string_buffer(&b); + blobmsg_close_table(&b, r); } } @@ -630,7 +635,6 @@ netifd_dump_status(struct interface *iface) struct device *dev; void *a, *inactive; - blobmsg_add_string(&b, "name", iface->name); blobmsg_add_u8(&b, "up", iface->state == IFS_UP); blobmsg_add_u8(&b, "pending", iface->state == IFS_SETUP); blobmsg_add_u8(&b, "available", iface->available); @@ -728,6 +732,7 @@ netifd_handle_status(struct ubus_context *ctx, struct ubus_object *obj, return 0; } + static int netifd_handle_dump(struct ubus_context *ctx, struct ubus_object *obj, struct ubus_request_data *req, const char *method, @@ -739,6 +744,7 @@ netifd_handle_dump(struct ubus_context *ctx, struct ubus_object *obj, struct interface *iface; vlist_for_each_element(&interfaces, iface, node) { void *i = blobmsg_open_table(&b, NULL); + blobmsg_add_string(&b, "interface", iface->name); netifd_dump_status(iface); blobmsg_close_table(&b, i); } @@ -997,6 +1003,17 @@ netifd_ubus_interface_event(struct interface *iface, bool up) } void +netifd_ubus_interface_notify(struct interface *iface, bool up) +{ + const char *event = (up) ? "update" : "down"; + blob_buf_init(&b, 0); + blobmsg_add_string(&b, "interface", iface->name); + netifd_dump_status(iface); + ubus_notify(ctx, &iface_object, event, b.head, -1); + ubus_notify(ctx, &iface->ubus, event, b.head, -1); +} + +void netifd_ubus_add_interface(struct interface *iface) { struct ubus_object *obj = &iface->ubus;