[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