X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fnetifd.git;a=blobdiff_plain;f=proto.c;h=0ba2fbe908486516c237e6999168938c1f1f7141;hp=e4465eb14e2a1900d3b38a3296dfc4c75f6ea47e;hb=9d8dd091f8f336b111364ed211165b5ec9842a24;hpb=05e0d8f717f16e2076599742191e497cf8d04f0a diff --git a/proto.c b/proto.c index e4465eb..0ba2fbe 100644 --- a/proto.c +++ b/proto.c @@ -55,9 +55,20 @@ static const struct uci_blob_param_info proto_ip_attr_info[__OPT_MAX] = { [OPT_IP6PREFIX] = { .type = BLOBMSG_TYPE_STRING }, }; +static const char * const proto_ip_validate[__OPT_MAX] = { + [OPT_IPADDR] = "ip4addr", + [OPT_IP6ADDR] = "ip6addr", + [OPT_NETMASK] = "netmask", + [OPT_BROADCAST] = "ipaddr", + [OPT_GATEWAY] = "ip4addr", + [OPT_IP6GW] = "ip6addr", + [OPT_IP6PREFIX] = "ip6addr", +}; + const struct uci_blob_param_list proto_ip_attr = { .n_params = __OPT_MAX, .params = proto_ip_attributes, + .validate = proto_ip_validate, .info = proto_ip_attr_info, }; @@ -259,6 +270,7 @@ parse_gateway_option(struct interface *iface, struct blob_attr *attr, bool v6) route->mask = 0; route->flags = (v6 ? DEVADDR_INET6 : DEVADDR_INET4); + route->metric = iface->metric; unsigned int table = (v6) ? iface->ip6table : iface->ip4table; if (table) { @@ -604,6 +616,9 @@ interface_proto_event(struct interface_proto_state *proto, case PROTO_CMD_TEARDOWN: ev = IFPEV_DOWN; break; + case PROTO_CMD_RENEW: + ev = IFPEV_RENEW; + break; default: return -EINVAL; }