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

Matthias Schiffer mschiffer at universe-factory.net
Mon Dec 19 13:10:49 PST 2016


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.

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/20161219/e22eb140/attachment.sig>


More information about the Lede-dev mailing list