return UBUS_STATUS_INVALID_ARGUMENT;
if ((cur = tb[CONNECT_ATTR_ADDRESS]) == NULL ||
- network_get_endpoint(&ep, blobmsg_get_string(cur), UNETD_GLOBAL_PEX_PORT, 0) < 0 ||
+ network_get_endpoint(&ep, AF_UNSPEC, blobmsg_get_string(cur), UNETD_GLOBAL_PEX_PORT, 0) < 0 ||
!ep.in.sin_port)
return UBUS_STATUS_INVALID_ARGUMENT;
return 0;
}
+static int
+ubus_reload(struct ubus_context *ctx, struct ubus_object *obj,
+ struct ubus_request_data *req, const char *method,
+ struct blob_attr *msg)
+{
+ struct network *net;
+
+ avl_for_each_element(&networks, net, node)
+ network_soft_reload(net);
+
+ return 0;
+}
+
static const struct ubus_method unetd_methods[] = {
UBUS_METHOD("network_add", ubus_network_add, network_policy),
UBUS_METHOD_MASK("network_get", ubus_network_get, network_policy,
(1 << NETWORK_ATTR_NAME)),
UBUS_METHOD("network_connect", ubus_network_connect, connect_policy),
+ UBUS_METHOD_NOARG("reload", ubus_reload),
UBUS_METHOD("service_get", ubus_service_get, service_policy),
};
fprintf(stderr, "Failed to add object: %s\n", ubus_strerror(ret));
}
+void unetd_ubus_notify(struct network *net)
+{
+ blob_buf_init(&b, 0);
+ blobmsg_add_string(&b, "network", network_name(net));
+ ubus_notify(&conn.ctx, &unetd_object, "network_update", b.head, -1);
+}
+
void unetd_ubus_netifd_update(struct blob_attr *data)
{
uint32_t id;