X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fnetifd.git;a=blobdiff_plain;f=ubus.c;h=774f9d1e6befd5801f8a93baaeefa1640167cda1;hp=10368998c32b57db83387d5ec43de4833316536f;hb=0b66ee22a3a339188ab2b8661c6af62883be93c2;hpb=48ffedb4a2b6701eec99e32e91b8a66a0a4be950 diff --git a/ubus.c b/ubus.c index 1036899..774f9d1 100644 --- a/ubus.c +++ b/ubus.c @@ -50,12 +50,14 @@ netifd_handle_reload(struct ubus_context *ctx, struct ubus_object *obj, enum { HR_TARGET, HR_V6, + HR_INTERFACE, __HR_MAX }; static const struct blobmsg_policy route_policy[__HR_MAX] = { [HR_TARGET] = { .name = "target", .type = BLOBMSG_TYPE_STRING }, [HR_V6] = { .name = "v6", .type = BLOBMSG_TYPE_BOOL }, + [HR_INTERFACE] = { .name = "interface", .type = BLOBMSG_TYPE_STRING }, }; static int @@ -64,7 +66,7 @@ netifd_add_host_route(struct ubus_context *ctx, struct ubus_object *obj, struct blob_attr *msg) { struct blob_attr *tb[__HR_MAX]; - struct interface *iface; + struct interface *iface = NULL; union if_addr a; bool v6 = false; @@ -75,12 +77,15 @@ netifd_add_host_route(struct ubus_context *ctx, struct ubus_object *obj, if (tb[HR_V6]) v6 = blobmsg_get_bool(tb[HR_V6]); + if (tb[HR_INTERFACE]) + iface = vlist_find(&interfaces, blobmsg_data(tb[HR_INTERFACE]), iface, node); + memset(&a, 0, sizeof(a)); if (!inet_pton(v6 ? AF_INET6 : AF_INET, blobmsg_data(tb[HR_TARGET]), &a)) return UBUS_STATUS_INVALID_ARGUMENT; - iface = interface_ip_add_target_route(&a, v6); + iface = interface_ip_add_target_route(&a, v6, iface); if (!iface) return UBUS_STATUS_NOT_FOUND; @@ -419,6 +424,9 @@ interface_ip_dump_route_list(struct interface_ip_settings *ip, bool enabled) if (route->flags & DEVROUTE_METRIC) blobmsg_add_u32(&b, "metric", route->metric); + if (route->flags & DEVROUTE_TABLE) + blobmsg_add_u32(&b, "table", route->table); + if (route->valid_until) blobmsg_add_u32(&b, "valid", route->valid_until - now);