X-Git-Url: https://git.archive.openwrt.org/?p=project%2Fnetifd.git;a=blobdiff_plain;f=ubus.c;h=cec2e8881629091d2cb356f7f83e992fbcbde098;hp=b81136b6d4a1207ea12436e8247b5cf6af88018f;hb=f5a15b82dab84a6783bf0edf6f6fae1641725b2c;hpb=047a1ee7680e9a668896a12e2773d6544669d0e9 diff --git a/ubus.c b/ubus.c index b81136b..cec2e88 100644 --- a/ubus.c +++ b/ubus.c @@ -147,13 +147,16 @@ netifd_add_dynamic(struct ubus_context *ctx, struct ubus_object *obj, goto error; interface_add(iface, config); - interface_set_dynamic(iface); - // need to look up the interface name again, in case of config update, + // need to look up the interface name again, in case of config update + // the pointer will have changed iface = vlist_find(&interfaces, name, iface, node); if (!iface) return UBUS_STATUS_UNKNOWN_ERROR; + // Set interface as dynamic + interface_set_dynamic(iface); + dev = iface->main_dev.dev; if (!dev || !dev->default_config) return UBUS_STATUS_UNKNOWN_ERROR; @@ -650,7 +653,8 @@ netifd_dump_status(struct interface *iface) if (iface->state == IFS_UP) { time_t cur = system_get_rtime(); blobmsg_add_u32(&b, "uptime", cur - iface->start_time); - blobmsg_add_string(&b, "l3_device", iface->l3_dev.dev->ifname); + if (iface->l3_dev.dev) + blobmsg_add_string(&b, "l3_device", iface->l3_dev.dev->ifname); } if (iface->proto_handler) @@ -737,11 +741,11 @@ netifd_dump_status(struct interface *iface) a = blobmsg_open_table(&b, "data"); avl_for_each_element(&iface->data, data, node) - blob_put(&b, blob_id(data->data), blob_data(data->data), blob_len(data->data)); + blobmsg_add_blob(&b, data->data); blobmsg_close_table(&b, a); - if (!list_is_empty(&iface->errors)) + if (!list_empty(&iface->errors)) netifd_add_interface_errors(&b, iface); } @@ -1160,7 +1164,7 @@ 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"; + const char *event = (up) ? "interface.update" : "interface.down"; blob_buf_init(&b, 0); blobmsg_add_string(&b, "interface", iface->name); netifd_dump_status(iface);