X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fnetifd.git;a=blobdiff_plain;f=ubus.c;h=96bc2479e4a9eb01dceb2aa7db620f1cf3f572d6;hp=454b42d167562010ec53059bd157948d11e0de03;hb=1e2cf67ef36eaaed9a7f18898066df5c2366fd0d;hpb=6a84e770ed9f4ea0ffe9b20625f8f15868f5424b diff --git a/ubus.c b/ubus.c index 454b42d..96bc247 100644 --- a/ubus.c +++ b/ubus.c @@ -44,8 +44,10 @@ netifd_handle_reload(struct ubus_context *ctx, struct ubus_object *obj, struct ubus_request_data *req, const char *method, struct blob_attr *msg) { - netifd_reload(); - return 0; + if (netifd_reload()) + return UBUS_STATUS_NOT_FOUND; + + return UBUS_STATUS_OK; } enum { @@ -127,7 +129,6 @@ netifd_add_dynamic(struct ubus_context *ctx, struct ubus_object *obj, struct blob_attr *tb[__DI_MAX]; struct interface *iface; struct blob_attr *config; - struct device *dev; blobmsg_parse(dynamic_policy, __DI_MAX, tb, blob_data(msg), blob_len(msg)); @@ -155,10 +156,6 @@ netifd_add_dynamic(struct ubus_context *ctx, struct ubus_object *obj, // Set interface as dynamic interface_set_dynamic(iface); - dev = iface->main_dev.dev; - if (!dev || !dev->default_config) - return UBUS_STATUS_UNKNOWN_ERROR; - return UBUS_STATUS_OK; error: @@ -204,7 +201,7 @@ netifd_dev_status(struct ubus_context *ctx, struct ubus_object *obj, blobmsg_parse(dev_policy, __DEV_MAX, tb, blob_data(msg), blob_len(msg)); if (tb[DEV_NAME]) { - dev = device_get(blobmsg_data(tb[DEV_NAME]), false); + dev = device_find(blobmsg_data(tb[DEV_NAME])); if (!dev) return UBUS_STATUS_INVALID_ARGUMENT; } @@ -290,7 +287,7 @@ netifd_handle_set_state(struct ubus_context *ctx, struct ubus_object *obj, if (!cur) return UBUS_STATUS_INVALID_ARGUMENT; - dev = device_get(blobmsg_data(cur), false); + dev = device_find(blobmsg_data(cur)); if (!dev) return UBUS_STATUS_NOT_FOUND; @@ -376,6 +373,19 @@ netifd_handle_down(struct ubus_context *ctx, struct ubus_object *obj, return 0; } +static int +netifd_handle_renew(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); + interface_renew(iface); + + return 0; +} + static void netifd_add_interface_errors(struct blob_buf *b, struct interface *iface) { @@ -402,8 +412,7 @@ netifd_add_interface_errors(struct blob_buf *b, struct interface *iface) } static void -interface_ip_dump_address_list(struct interface_ip_settings *ip, bool v6, - bool enabled) +interface_ip_dump_address_list(struct interface_ip_settings *ip, bool v6, bool enabled) { struct device_addr *addr; char *buf; @@ -432,6 +441,12 @@ interface_ip_dump_address_list(struct interface_ip_settings *ip, bool v6, blobmsg_add_u32(&b, "mask", addr->mask); + if (addr->point_to_point) { + buf = blobmsg_alloc_string_buffer(&b, "ptpaddress", buflen); + inet_ntop(af, &addr->point_to_point, buf, buflen); + blobmsg_add_string_buffer(&b); + } + if (addr->preferred_until) { int preferred = addr->preferred_until - now; if (preferred < 0) @@ -486,6 +501,9 @@ interface_ip_dump_route_list(struct interface_ip_settings *ip, bool enabled) if (route->flags & DEVROUTE_TYPE) blobmsg_add_u32(&b, "type", route->type); + if (route->flags & DEVROUTE_PROTO) + blobmsg_add_u32(&b, "proto", route->proto); + if (route->flags & DEVROUTE_MTU) blobmsg_add_u32(&b, "mtu", route->mtu); @@ -600,15 +618,23 @@ interface_ip_dump_prefix_assignment_list(struct interface *iface) if (prefix->valid_until) blobmsg_add_u32(&b, "valid", prefix->valid_until - now); + void *c = blobmsg_open_table(&b, "local-address"); + if (assign->enabled) { + buf = blobmsg_alloc_string_buffer(&b, "address", buflen); + inet_ntop(AF_INET6, &assign->addr, buf, buflen); + blobmsg_add_string_buffer(&b); + + blobmsg_add_u32(&b, "mask", assign->length < 64 ? 64 : assign->length); + } + blobmsg_close_table(&b, c); + blobmsg_close_table(&b, a); } } } - static void -interface_ip_dump_dns_server_list(struct interface_ip_settings *ip, - bool enabled) +interface_ip_dump_dns_server_list(struct interface_ip_settings *ip, bool enabled) { struct dns_server *dns; int buflen = 128; @@ -625,8 +651,7 @@ interface_ip_dump_dns_server_list(struct interface_ip_settings *ip, } static void -interface_ip_dump_dns_search_list(struct interface_ip_settings *ip, - bool enabled) +interface_ip_dump_dns_search_list(struct interface_ip_settings *ip, bool enabled) { struct dns_search_domain *dns; @@ -685,9 +710,12 @@ netifd_dump_status(struct interface *iface) if (iface->ip4table) blobmsg_add_u32(&b, "ip4table", iface->ip4table); if (iface->ip6table) - blobmsg_add_u32(&b, "ip6table", iface->ip6table); + blobmsg_add_u32(&b, "ip6table", iface->ip6table); blobmsg_add_u32(&b, "metric", iface->metric); + blobmsg_add_u32(&b, "dns_metric", iface->dns_metric); blobmsg_add_u8(&b, "delegation", !iface->proto_ip.no_delegation); + if (iface->assignment_weight) + blobmsg_add_u32(&b, "ip6weight", iface->assignment_weight); 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); @@ -900,6 +928,7 @@ netifd_handle_set_data(struct ubus_context *ctx, struct ubus_object *obj, static struct ubus_method iface_object_methods[] = { { .name = "up", .handler = netifd_handle_up }, { .name = "down", .handler = netifd_handle_down }, + { .name = "renew", .handler = netifd_handle_renew }, { .name = "status", .handler = netifd_handle_status }, { .name = "prepare", .handler = netifd_handle_iface_prepare }, { .name = "dump", .handler = netifd_handle_dump }, @@ -969,6 +998,9 @@ static void netifd_add_iface_object(void) int i; methods = calloc(1, sizeof(iface_object_methods)); + if (!methods) + return; + memcpy(methods, iface_object_methods, sizeof(iface_object_methods)); iface_object.methods = methods;