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

Hans Dedecker dedeckeh at gmail.com
Wed Dec 21 12:51:40 PST 2016


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.
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
>
>



More information about the Lede-dev mailing list