Re: [PATCH v4 net-next 1/1] Allow user to set metric on default route learned via Router Advertisement.

2021-01-27 Thread patchwork-bot+netdevbpf
Hello:

This patch was applied to netdev/net-next.git (refs/heads/master):

On Mon, 25 Jan 2021 13:44:30 -0800 you 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.
> 
> [...]

Here is the summary with links:
  - [v4,net-next,1/1] Allow user to set metric on default route learned via 
Router Advertisement.
https://git.kernel.org/netdev/net-next/c/6b2e04bc240f

You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html




Re: [PATCH v4 net-next 1/1] Allow user to set metric on default route learned via Router Advertisement.

2021-01-26 Thread Jakub Kicinski
On Mon, 25 Jan 2021 20:34:56 -0700 David Ahern wrote:
> On 1/25/21 2:44 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 
> > Signed-off-by: Zhenggen Xu 
> > 
> > Reviewed-by: David Ahern 
> > 
> > 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.
> > 
> > Changes in v4:
> > 1.) Remove special case of 0 and use IP6_RT_PRIO_USER as default.
> > 2.) Do not allow 0.
> > 3.) Change Documentation accordingly.
> > 4.) Remove extra brackets and compare with zero in ndisc_router_discovery().
> > 5.) Remove compare with zero in rt6_add_dflt_router().
> > 
> > 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::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::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::feb3:ce8e dev eth0 proto ra metric 
> > 1996489705  expires 3sec hoplimit 64 pref high
> > default via fe80::xx16::feb3:ce8e dev eth0 proto ra metric 1996489704  
> > pref high
> > ---
> >  Documentation/networking/ip-sysctl.rst | 10 ++
> >  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| 11 +++
> >  net/ipv6/ndisc.c   | 12 
> >  net/ipv6/route.c   |  5 +++--
> >  8 files changed, 37 insertions(+), 7 deletions(-)
> >   
> 
> Reviewed-by: David Ahern 

Did my best to untangle the commit message and applied.

Thanks!


Re: [PATCH v4 net-next 1/1] Allow user to set metric on default route learned via Router Advertisement.

2021-01-26 Thread David Ahern
On 1/25/21 2:44 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 
> Signed-off-by: Zhenggen Xu 
> 
> Reviewed-by: David Ahern 
> 
> 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.
> 
> Changes in v4:
> 1.) Remove special case of 0 and use IP6_RT_PRIO_USER as default.
> 2.) Do not allow 0.
> 3.) Change Documentation accordingly.
> 4.) Remove extra brackets and compare with zero in ndisc_router_discovery().
> 5.) Remove compare with zero in rt6_add_dflt_router().
> 
> 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::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::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::feb3:ce8e dev eth0 proto ra metric 
> 1996489705  expires 3sec hoplimit 64 pref high
> default via fe80::xx16::feb3:ce8e dev eth0 proto ra metric 1996489704  
> pref high
> ---
>  Documentation/networking/ip-sysctl.rst | 10 ++
>  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| 11 +++
>  net/ipv6/ndisc.c   | 12 
>  net/ipv6/route.c   |  5 +++--
>  8 files changed, 37 insertions(+), 7 deletions(-)
> 

Reviewed-by: David Ahern 




[PATCH v4 net-next 1/1] Allow user to set metric on default route learned via Router Advertisement.

2021-01-25 Thread Praveen Chaudhary
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 
Signed-off-by: Zhenggen Xu 

Reviewed-by: David Ahern 

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.

Changes in v4:
1.) Remove special case of 0 and use IP6_RT_PRIO_USER as default.
2.) Do not allow 0.
3.) Change Documentation accordingly.
4.) Remove extra brackets and compare with zero in ndisc_router_discovery().
5.) Remove compare with zero in rt6_add_dflt_router().

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::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::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::feb3:ce8e dev eth0 proto ra metric 
1996489705  expires 3sec hoplimit 64 pref high
default via fe80::xx16::feb3:ce8e dev eth0 proto ra metric 1996489704  pref 
high
---
 Documentation/networking/ip-sysctl.rst | 10 ++
 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| 11 +++
 net/ipv6/ndisc.c   | 12 
 net/ipv6/route.c   |  5 +++--
 8 files changed, 37 insertions(+), 7 deletions(-)

diff --git a/Documentation/networking/ip-sysctl.rst 
b/Documentation/networking/ip-sysctl.rst
index dd2b12a32b73..0e51ddd9a2f1 100644
--- a/Documentation/networking/ip-sysctl.rst
+++ b/Documentation/networking/ip-sysctl.rst
@@ -1871,6 +1871,16 @@ accept_ra_defrtr - BOOLEAN
- enabled if accept_ra is enabled.
- disabled if accept_ra is disabled.
 
+ra_defrtr_metric - UNSIGNED INTEGER
+   Route metric for default route learned in Router Advertisement. This 
value
+   will be assigned as metric for the default route learned via IPv6 Router
+   Advertisement. Takes affect only if accept_ra_defrtr is enabled.
+
+   Possible values:
+   1 to 0x
+
+   Default: IP6_RT_PRIO_USER i.e. 1024.
+
 accept_ra_from_local - BOOLEAN
Accept RA with source-address that is found on local machine
if the RA is otherwise proper and able to be accepted.
diff --git