[LEDE-DEV] [PATCH netifd] proto: allow configuring deprecated static IPv6 addresses

Matthias Schiffer mschiffer at universe-factory.net
Wed Dec 21 13:36:55 PST 2016


On 12/21/2016 09:51 PM, Hans Dedecker wrote:
> On Mon, Dec 19, 2016 at 10:10 PM, Matthias Schiffer
> <mschiffer at 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
>>> <mschiffer at 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 <mschiffer at 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 at lists.infradead.org
>>>> http://lists.infradead.org/mailman/listinfo/lede-dev
>>
>>


-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: OpenPGP digital signature
URL: <http://lists.infradead.org/pipermail/lede-dev/attachments/20161221/c8d7ca1d/attachment.sig>


More information about the Lede-dev mailing list