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-api" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html