Re: [PATCH] ipv6: expose RFC4191 route preference via rtnetlink

From: Jiri Pirko
Date: Tue Mar 10 2015 - 12:04:32 EST


Tue, Mar 10, 2015 at 04:56:53PM CET, lkundrak@xxxxx wrote:
>On Tue, 2015-03-03 at 16:17 +0100, Jiri Pirko wrote:
>> Tue, Mar 03, 2015 at 11:01:52AM CET, lkundrak@xxxxx wrote:
>> >This makes it possible to retain the route preference when RAs are handled in
>> >userspace.
>> >
>> >Signed-off-by: Lubomir Rintel <lkundrak@xxxxx>
>> >---
>> > include/uapi/linux/rtnetlink.h | 1 +
>> > net/ipv6/route.c | 16 +++++++++++++++-
>> > 2 files changed, 16 insertions(+), 1 deletion(-)
>> >
>> >diff --git a/include/uapi/linux/rtnetlink.h b/include/uapi/linux/rtnetlink.h
>> >index 5cc5d66..0671524 100644
>> >--- a/include/uapi/linux/rtnetlink.h
>> >+++ b/include/uapi/linux/rtnetlink.h
>> >@@ -303,6 +303,7 @@ enum rtattr_type_t {
>> > RTA_TABLE,
>> > RTA_MARK,
>> > RTA_MFC_STATS,
>> >+ RTA_PREF,
>> > __RTA_MAX
>> > };
>> >
>> >diff --git a/net/ipv6/route.c b/net/ipv6/route.c
>> >index 47b5109..08f689e 100644
>> >--- a/net/ipv6/route.c
>> >+++ b/net/ipv6/route.c
>> >@@ -2401,6 +2401,7 @@ static const struct nla_policy rtm_ipv6_policy[RTA_MAX+1] = {
>> > [RTA_PRIORITY] = { .type = NLA_U32 },
>> > [RTA_METRICS] = { .type = NLA_NESTED },
>> > [RTA_MULTIPATH] = { .len = sizeof(struct rtnexthop) },
>> >+ [RTA_PREF] = { .type = NLA_U8 },
>> > };
>> >
>> > static int rtm_to_fib6_config(struct sk_buff *skb, struct nlmsghdr *nlh,
>> >@@ -2408,6 +2409,7 @@ static int rtm_to_fib6_config(struct sk_buff *skb, struct nlmsghdr *nlh,
>> > {
>> > struct rtmsg *rtm;
>> > struct nlattr *tb[RTA_MAX+1];
>> >+ unsigned int pref;
>> > int err;
>> >
>> > err = nlmsg_parse(nlh, sizeof(*rtm), tb, RTA_MAX, rtm_ipv6_policy);
>> >@@ -2483,6 +2485,14 @@ static int rtm_to_fib6_config(struct sk_buff *skb, struct nlmsghdr *nlh,
>> > cfg->fc_mp_len = nla_len(tb[RTA_MULTIPATH]);
>> > }
>> >
>> >+ if (tb[RTA_PREF]) {
>> >+ pref = nla_get_u8(tb[RTA_PREF]);
>> >+ if (pref == ICMPV6_ROUTER_PREF_LOW ||
>> >+ pref == ICMPV6_ROUTER_PREF_MEDIUM ||
>> >+ pref == ICMPV6_ROUTER_PREF_HIGH)
>> >+ cfg->fc_flags |= RTF_PREF(pref);
>>
>> Don't we want to do "goto errout;" in case pref is invalid ?
>
>I'm not sure. If RFC 4191 suggests that the invalid value ought to be
>ignored (treated as medium). It could be done in the userspace or the
>userspace could just relay whatever it got in the NDP message to the
>kernel.

In that case I would suggest in case of invalid value to set pref to
ICMPV6_ROUTER_PREF_MEDIUM.

>
>What is your opinion on this?
>
>Thank you,
>Lubo
>
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/