From: David Ahern <dsahern@gmail.com>
To: Praveen Chaudhary <praveen5582@gmail.com>,
davem@davemloft.net, kuba@kernel.org, corbet@lwn.net,
kuznet@ms2.inr.ac.ru, yoshfuji@linux-ipv6.org,
netdev@vger.kernel.org, linux-doc@vger.kernel.org,
linux-kernel@vger.kernel.org
Cc: Zhenggen Xu <zxu@linkedin.com>
Subject: Re: [PATCH v3 net-next 1/1] Allow user to set metric on default route learned via Router Advertisement.
Date: Fri, 22 Jan 2021 08:55:41 -0700 [thread overview]
Message-ID: <1cc9e887-a984-c14a-451c-60a202c4cf20@gmail.com> (raw)
In-Reply-To: <20210119212959.25917-1-pchaudhary@linkedin.com>
On 1/19/21 2:29 PM, Praveen Chaudhary wrote:
> For IPv4, default route is learned via DHCPv4 and user is allowed to change
> metric using config etc/network/interfaces. But for IPv6, default route can
> be learned via RA, for which, currently a fixed metric value 1024 is used.
>
> Ideally, user should be able to configure metric on default route for IPv6
> similar to IPv4. This fix adds sysctl for the same.
>
> Signed-off-by: Praveen Chaudhary <pchaudhary@linkedin.com>
> Signed-off-by: Zhenggen Xu <zxu@linkedin.com>
>
> Changes in v1.
> 1.) Correct the call to rt6_add_dflt_router.
>
> Changes in v2.
> 1.) Replace accept_ra_defrtr_metric to ra_defrtr_metric.
> 2.) Change Type to __u32 instead of __s32.
> 3.) Change description in Documentation/networking/ip-sysctl.rst.
> 4.) Use proc_douintvec instead of proc_dointvec.
> 5.) Code style in ndisc_router_discovery().
> 6.) Change Type to u32 instead of unsigned int.
>
> Changes in v3:
> 1.) Removed '---' and '```' from description.
> 2.) Remove stray ' after accept_ra_defrtr.
> 3.) Fix tab in net/ipv6/addrconf.c.
>
> Logs:
>
> For IPv4:
>
> Config in etc/network/interfaces:
> auto eth0
> iface eth0 inet dhcp
> metric 4261413864
>
> IPv4 Kernel Route Table:
> $ ip route list
> default via 172.21.47.1 dev eth0 metric 4261413864
>
> FRR Table, if a static route is configured:
> [In real scenario, it is useful to prefer BGP learned default route over DHCPv4 default route.]
> Codes: K - kernel route, C - connected, S - static, R - RIP,
> O - OSPF, I - IS-IS, B - BGP, P - PIM, E - EIGRP, N - NHRP,
> T - Table, v - VNC, V - VNC-Direct, A - Babel, D - SHARP,
> > - selected route, * - FIB route
>
> S>* 0.0.0.0/0 [20/0] is directly connected, eth0, 00:00:03
> K 0.0.0.0/0 [254/1000] via 172.21.47.1, eth0, 6d08h51m
>
> i.e. User can prefer Default Router learned via Routing Protocol in IPv4.
> Similar behavior is not possible for IPv6, without this fix.
>
> After fix [for IPv6]:
> sudo sysctl -w net.ipv6.conf.eth0.net.ipv6.conf.eth0.ra_defrtr_metric=1996489705
>
> IP monitor: [When IPv6 RA is received]
> default via fe80::xx16:xxxx:feb3:ce8e dev eth0 proto ra metric 1996489705 pref high
>
> Kernel IPv6 routing table
> $ ip -6 route list
> default via fe80::be16:65ff:feb3:ce8e dev eth0 proto ra metric 1996489705 expires 21sec hoplimit 64 pref high
>
> FRR Table, if a static route is configured:
> [In real scenario, it is useful to prefer BGP learned default route over IPv6 RA default route.]
> Codes: K - kernel route, C - connected, S - static, R - RIPng,
> O - OSPFv3, I - IS-IS, B - BGP, N - NHRP, T - Table,
> v - VNC, V - VNC-Direct, A - Babel, D - SHARP,
> > - selected route, * - FIB route
>
> S>* ::/0 [20/0] is directly connected, eth0, 00:00:06
> K ::/0 [119/1001] via fe80::xx16:xxxx:feb3:ce8e, eth0, 6d07h43m
>
> If the metric is changed later, the effect will be seen only when next IPv6
> RA is received, because the default route must be fully controlled by RA msg.
> Below metric is changed from 1996489705 to 1996489704.
>
> $ sudo sysctl -w net.ipv6.conf.eth0.ra_defrtr_metric=1996489704
> net.ipv6.conf.eth0.ra_defrtr_metric = 1996489704
>
> IP monitor:
> [On next IPv6 RA msg, Kernel deletes prev route and installs new route with updated metric]
>
> Deleted default via fe80::xx16:xxxx:feb3:ce8e dev eth0 proto ra metric 1996489705 expires 3sec hoplimit 64 pref high
> default via fe80::xx16:xxxx:feb3:ce8e dev eth0 proto ra metric 1996489704 pref high
> ---
> Documentation/networking/ip-sysctl.rst | 12 ++++++++++++
> include/linux/ipv6.h | 1 +
> include/net/ip6_route.h | 3 ++-
> include/uapi/linux/ipv6.h | 1 +
> include/uapi/linux/sysctl.h | 1 +
> net/ipv6/addrconf.c | 10 ++++++++++
> net/ipv6/ndisc.c | 14 ++++++++++----
> net/ipv6/route.c | 5 +++--
> 8 files changed, 40 insertions(+), 7 deletions(-)
>
LGTM. I can't think of a better way to do this than a sysctl. Shame that
the metric/priority is not an RA option.
Reviewed-by: David Ahern <dsahern@kernel.org>
next prev parent reply other threads:[~2021-01-22 17:21 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-01-19 21:29 [PATCH v3 net-next 1/1] Allow user to set metric on default route learned via Router Advertisement Praveen Chaudhary
2021-01-22 15:55 ` David Ahern [this message]
[not found] ` <CAHo-Oozz-mGNz4sphOJekNeAgGJCLmiZaiNccXjiQ02fQbfthQ@mail.gmail.com>
2021-01-23 5:16 ` David Ahern
2021-01-23 20:00 ` Jakub Kicinski
2021-01-24 1:13 ` David Ahern
2021-01-24 8:09 ` praveen chaudhary
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1cc9e887-a984-c14a-451c-60a202c4cf20@gmail.com \
--to=dsahern@gmail.com \
--cc=corbet@lwn.net \
--cc=davem@davemloft.net \
--cc=kuba@kernel.org \
--cc=kuznet@ms2.inr.ac.ru \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=praveen5582@gmail.com \
--cc=yoshfuji@linux-ipv6.org \
--cc=zxu@linkedin.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.