diff options
author | Xin Long <lucien.xin@gmail.com> | 2015-12-16 17:50:11 +0800 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2015-12-17 15:08:51 -0500 |
commit | 32bc201e1974976b7d3fea9a9b17bb7392ca6394 (patch) | |
tree | 638ac4a2106795aac740c6c9fd6c9b9e6a2818da /net/ipv6 | |
parent | b3379041ddf68ba46c31fce741ddb71675b39d23 (diff) | |
download | linux-32bc201e1974976b7d3fea9a9b17bb7392ca6394.tar.bz2 |
ipv6: allow routes to be configured with expire values
Add the support for adding expire value to routes, requested by
Tom Gundersen <teg@jklm.no> for systemd-networkd, and NetworkManager
wants it too.
implement it by adding the new RTNETLINK attribute RTA_EXPIRES.
Signed-off-by: Xin Long <lucien.xin@gmail.com>
Acked-by: Hannes Frederic Sowa <hannes@stressinduktion.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv6')
-rw-r--r-- | net/ipv6/route.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/net/ipv6/route.c b/net/ipv6/route.c index c83b6a5b3604..3c8834bc822d 100644 --- a/net/ipv6/route.c +++ b/net/ipv6/route.c @@ -2709,6 +2709,7 @@ static const struct nla_policy rtm_ipv6_policy[RTA_MAX+1] = { [RTA_PREF] = { .type = NLA_U8 }, [RTA_ENCAP_TYPE] = { .type = NLA_U16 }, [RTA_ENCAP] = { .type = NLA_NESTED }, + [RTA_EXPIRES] = { .type = NLA_U32 }, }; static int rtm_to_fib6_config(struct sk_buff *skb, struct nlmsghdr *nlh, @@ -2809,6 +2810,15 @@ static int rtm_to_fib6_config(struct sk_buff *skb, struct nlmsghdr *nlh, if (tb[RTA_ENCAP_TYPE]) cfg->fc_encap_type = nla_get_u16(tb[RTA_ENCAP_TYPE]); + if (tb[RTA_EXPIRES]) { + unsigned long timeout = addrconf_timeout_fixup(nla_get_u32(tb[RTA_EXPIRES]), HZ); + + if (addrconf_finite_timeout(timeout)) { + cfg->fc_expires = jiffies_to_clock_t(timeout * HZ); + cfg->fc_flags |= RTF_EXPIRES; + } + } + err = 0; errout: return err; |