On 12/21/2016 09:51 PM, Hans Dedecker wrote: > On Mon, Dec 19, 2016 at 10:10 PM, Matthias Schiffer > <mschif...@universe-factory.net> wrote: >> On 12/19/2016 10:02 PM, Hans Dedecker wrote: >>> On Sun, Dec 11, 2016 at 3:03 AM, Matthias Schiffer >>> <mschif...@universe-factory.net> wrote: >>>> Add a new boolean attribute ip6preferred to the static protocol which can >>>> be set to 0 to mark IPv6 addresses as deprecated (set the preferred >>>> lifetime to 0). This is useful to configure addresses that may be used for >>>> incoming, but not for outgoing connections unless bound explicitly. >>> Hi, >>> >>> Thx for the patch but for greater flexibility I would rather prefer >>> being able to configure the preferred and valid lifetime of the IPv6 >>> address. In case no preferred and valid lifetime is configured the >>> IPv6 address has an infinite lifetime as now; setting the IPv6 address >>> as deprecated can then be done by setting preferred lifetime to 0. >>> >>> Hans >> >> For dynamically assigned addresses (from proto handlers), lifetimes are >> already configurable. >> >> For static addresses, a finite lifetime doesn't really make sense IMO, as >> it would be relative to... the time netifd was reading the configuration or >> something? What might make a little sense would be an option to specify an >> absolute time as EOL, but I don't see a usecase for that either. > Sorry for the long time it took to reply; I see your point in your reply. > My main motivation is the extra flexibility in case the preferred and > valid lifetime is > configurable as I wanted to avoid a possible overlap of uci parameters > in the future > if preferred and valid lifetime need to be configurable. Obviously the > specified time > for such parameters need to be absolute time.
Hmm, many of our devices don't have a RTC, so lifetimes based on absolute times are fragile as well... If we care about conflicts with future extensions, we could negate the logic and call the attribute "ip6deprecated". Matthias > Felix what's your opinion on this topic ? > > Hans >> >> Matthias >> >> >>>> >>>> Signed-off-by: Matthias Schiffer <mschif...@universe-factory.net> >>>> --- >>>> proto.c | 18 +++++++++++++----- >>>> 1 file changed, 13 insertions(+), 5 deletions(-) >>>> >>>> diff --git a/proto.c b/proto.c >>>> index 23304f3..a8642db 100644 >>>> --- a/proto.c >>>> +++ b/proto.c >>>> @@ -36,6 +36,7 @@ enum { >>>> OPT_GATEWAY, >>>> OPT_IP6GW, >>>> OPT_IP6PREFIX, >>>> + OPT_IP6PREFERRED, >>>> __OPT_MAX, >>>> }; >>>> >>>> @@ -47,6 +48,7 @@ static const struct blobmsg_policy >>>> proto_ip_attributes[__OPT_MAX] = { >>>> [OPT_GATEWAY] = { .name = "gateway", .type = BLOBMSG_TYPE_STRING }, >>>> [OPT_IP6GW] = { .name = "ip6gw", .type = BLOBMSG_TYPE_STRING }, >>>> [OPT_IP6PREFIX] = { .name = "ip6prefix", .type = >>>> BLOBMSG_TYPE_ARRAY }, >>>> + [OPT_IP6PREFERRED] = { .name = "ip6preferred", .type = >>>> BLOBMSG_TYPE_BOOL }, >>>> }; >>>> >>>> static const struct uci_blob_param_info proto_ip_attr_info[__OPT_MAX] = { >>>> @@ -113,7 +115,7 @@ alloc_device_addr(bool v6, bool ext) >>>> >>>> static bool >>>> parse_addr(struct interface *iface, const char *str, bool v6, int mask, >>>> - bool ext, uint32_t broadcast) >>>> + bool ext, uint32_t broadcast, bool pref) >>>> { >>>> struct device_addr *addr; >>>> int af = v6 ? AF_INET6 : AF_INET; >>>> @@ -136,6 +138,9 @@ parse_addr(struct interface *iface, const char *str, >>>> bool v6, int mask, >>>> if (broadcast) >>>> addr->broadcast = broadcast; >>>> >>>> + if (!pref) >>>> + addr->preferred_until = system_get_rtime(); >>>> + >>>> vlist_add(&iface->proto_ip.addr, &addr->node, &addr->flags); >>>> return true; >>>> >>>> @@ -148,7 +153,7 @@ error: >>>> >>>> static int >>>> parse_static_address_option(struct interface *iface, struct blob_attr >>>> *attr, >>>> - bool v6, int netmask, bool ext, uint32_t >>>> broadcast) >>>> + bool v6, int netmask, bool ext, uint32_t >>>> broadcast, bool pref) >>>> { >>>> struct blob_attr *cur; >>>> int n_addr = 0; >>>> @@ -160,7 +165,7 @@ parse_static_address_option(struct interface *iface, >>>> struct blob_attr *attr, >>>> >>>> n_addr++; >>>> if (!parse_addr(iface, blobmsg_data(cur), v6, netmask, ext, >>>> - broadcast)) >>>> + broadcast, pref)) >>>> return -1; >>>> } >>>> >>>> @@ -400,6 +405,7 @@ proto_apply_static_ip_settings(struct interface >>>> *iface, struct blob_attr *attr) >>>> struct blob_attr *cur; >>>> const char *error; >>>> unsigned int netmask = 32; >>>> + bool ip6pref; >>>> int n_v4 = 0, n_v6 = 0; >>>> struct in_addr bcast = {}; >>>> >>>> @@ -420,13 +426,15 @@ proto_apply_static_ip_settings(struct interface >>>> *iface, struct blob_attr *attr) >>>> } >>>> } >>>> >>>> + ip6pref = blobmsg_get_bool_default(tb[OPT_IP6PREFERRED], true); >>>> + >>>> if ((cur = tb[OPT_IPADDR])) >>>> n_v4 = parse_static_address_option(iface, cur, false, >>>> - netmask, false, bcast.s_addr); >>>> + netmask, false, bcast.s_addr, true); >>>> >>>> if ((cur = tb[OPT_IP6ADDR])) >>>> n_v6 = parse_static_address_option(iface, cur, true, >>>> - 128, false, 0); >>>> + 128, false, 0, ip6pref); >>>> >>>> if ((cur = tb[OPT_IP6PREFIX])) >>>> if (parse_prefix_list(iface, cur) < 0) >>>> -- >>>> 2.10.2 >>>> >>>> >>>> _______________________________________________ >>>> Lede-dev mailing list >>>> Lede-dev@lists.infradead.org >>>> http://lists.infradead.org/mailman/listinfo/lede-dev >> >>
signature.asc
Description: OpenPGP digital signature
_______________________________________________ Lede-dev mailing list Lede-dev@lists.infradead.org http://lists.infradead.org/mailman/listinfo/lede-dev