* [PATCH net-next 0/2] net: mpls: multipath route cleanups
@ 2017-03-24 22:21 David Ahern
2017-03-24 22:21 ` [PATCH net-next 1/2] net: mpls: Don't show nexthop if device has been deleted David Ahern
` (3 more replies)
0 siblings, 4 replies; 7+ messages in thread
From: David Ahern @ 2017-03-24 22:21 UTC (permalink / raw)
To: netdev; +Cc: rshearma, roopa, David Ahern
When a device associated with a nexthop is deleted, the nexthop in
the route is effectively removed, so remove it from the route dump.
Further, when all nexhops have been deleted the route is effectively
done, so remove the route.
David Ahern (2):
mpls: Don't show nexthop if device has been deleted
mpls: Delete route when all nexthops have been deleted
net/mpls/af_mpls.c | 17 +++++++++++++----
1 file changed, 13 insertions(+), 4 deletions(-)
--
2.1.4
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH net-next 1/2] net: mpls: Don't show nexthop if device has been deleted
2017-03-24 22:21 [PATCH net-next 0/2] net: mpls: multipath route cleanups David Ahern
@ 2017-03-24 22:21 ` David Ahern
2017-03-26 17:20 ` Roopa Prabhu
2017-03-24 22:21 ` [PATCH net-next 2/2] net: mpls: Delete route when all nexthops have " David Ahern
` (2 subsequent siblings)
3 siblings, 1 reply; 7+ messages in thread
From: David Ahern @ 2017-03-24 22:21 UTC (permalink / raw)
To: netdev; +Cc: rshearma, roopa, David Ahern
If the device for a nexthop in a multipath route is deleted, the nexthop
is effectively removed from the route. Currently, a route dump still
returns the nexhop though without the device set:
$ ip -f mpls ro ls
100
nexthopvia inet 10.11.1.2 dev br0
nexthopvia inet 10.100.3.1 dev eth3
$ ip li del br0
$ ip -f mpls ro ls
100
nexthopvia inet 10.11.1.2 dev * dead linkdown
nexthopvia inet 10.100.3.1 dev eth3
Since the nexthop is effectively deleted, drop the hop from the route
dump.
Signed-off-by: David Ahern <dsa@cumulusnetworks.com>
---
net/mpls/af_mpls.c | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/net/mpls/af_mpls.c b/net/mpls/af_mpls.c
index cd8be8d5e4ad..3861f8dfa9c1 100644
--- a/net/mpls/af_mpls.c
+++ b/net/mpls/af_mpls.c
@@ -1769,13 +1769,15 @@ static int mpls_dump_route(struct sk_buff *skb, u32 portid, u32 seq, int event,
goto nla_put_failure;
for_nexthops(rt) {
+ dev = rtnl_dereference(nh->nh_dev);
+ if (!dev)
+ continue;
+
rtnh = nla_reserve_nohdr(skb, sizeof(*rtnh));
if (!rtnh)
goto nla_put_failure;
- dev = rtnl_dereference(nh->nh_dev);
- if (dev)
- rtnh->rtnh_ifindex = dev->ifindex;
+ rtnh->rtnh_ifindex = dev->ifindex;
if (nh->nh_flags & RTNH_F_LINKDOWN) {
rtnh->rtnh_flags |= RTNH_F_LINKDOWN;
linkdown++;
--
2.1.4
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH net-next 2/2] net: mpls: Delete route when all nexthops have been deleted
2017-03-24 22:21 [PATCH net-next 0/2] net: mpls: multipath route cleanups David Ahern
2017-03-24 22:21 ` [PATCH net-next 1/2] net: mpls: Don't show nexthop if device has been deleted David Ahern
@ 2017-03-24 22:21 ` David Ahern
2017-03-26 17:26 ` Roopa Prabhu
2017-03-27 10:17 ` [PATCH net-next 0/2] net: mpls: multipath route cleanups Robert Shearman
2017-03-27 21:12 ` David Miller
3 siblings, 1 reply; 7+ messages in thread
From: David Ahern @ 2017-03-24 22:21 UTC (permalink / raw)
To: netdev; +Cc: rshearma, roopa, David Ahern
When all devices for all nexthops in a route have been deleted, the
route is effectively dead, so remove it.
Signed-off-by: David Ahern <dsa@cumulusnetworks.com>
---
net/mpls/af_mpls.c | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/net/mpls/af_mpls.c b/net/mpls/af_mpls.c
index 3861f8dfa9c1..74755920c689 100644
--- a/net/mpls/af_mpls.c
+++ b/net/mpls/af_mpls.c
@@ -1299,7 +1299,7 @@ static void mpls_ifdown(struct net_device *dev, int event)
struct mpls_route __rcu **platform_label;
struct net *net = dev_net(dev);
unsigned int nh_flags = RTNH_F_DEAD | RTNH_F_LINKDOWN;
- unsigned int alive;
+ unsigned int alive, deleted;
unsigned index;
platform_label = rtnl_dereference(net->mpls.platform_label);
@@ -1310,6 +1310,7 @@ static void mpls_ifdown(struct net_device *dev, int event)
continue;
alive = 0;
+ deleted = 0;
change_nexthops(rt) {
if (rtnl_dereference(nh->nh_dev) != dev)
goto next;
@@ -1328,9 +1329,15 @@ static void mpls_ifdown(struct net_device *dev, int event)
next:
if (!(nh->nh_flags & nh_flags))
alive++;
+ if (!rtnl_dereference(nh->nh_dev))
+ deleted++;
} endfor_nexthops(rt);
WRITE_ONCE(rt->rt_nhn_alive, alive);
+
+ /* if there are no more nexthops, delete the route */
+ if (event == NETDEV_UNREGISTER && deleted == rt->rt_nhn)
+ mpls_route_update(net, index, NULL, NULL);
}
}
--
2.1.4
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH net-next 1/2] net: mpls: Don't show nexthop if device has been deleted
2017-03-24 22:21 ` [PATCH net-next 1/2] net: mpls: Don't show nexthop if device has been deleted David Ahern
@ 2017-03-26 17:20 ` Roopa Prabhu
0 siblings, 0 replies; 7+ messages in thread
From: Roopa Prabhu @ 2017-03-26 17:20 UTC (permalink / raw)
To: David Ahern; +Cc: netdev, rshearma
On 3/24/17, 3:21 PM, David Ahern wrote:
> If the device for a nexthop in a multipath route is deleted, the nexthop
> is effectively removed from the route. Currently, a route dump still
> returns the nexhop though without the device set:
>
> $ ip -f mpls ro ls
> 100
> nexthopvia inet 10.11.1.2 dev br0
> nexthopvia inet 10.100.3.1 dev eth3
> $ ip li del br0
> $ ip -f mpls ro ls
> 100
> nexthopvia inet 10.11.1.2 dev * dead linkdown
> nexthopvia inet 10.100.3.1 dev eth3
>
> Since the nexthop is effectively deleted, drop the hop from the route
> dump.
>
> Signed-off-by: David Ahern <dsa@cumulusnetworks.com>
> ---
> net/mpls/af_mpls.c | 8 +++++---
> 1 file changed, 5 insertions(+), 3 deletions(-)
>
> diff --git a/net/mpls/af_mpls.c b/net/mpls/af_mpls.c
> index cd8be8d5e4ad..3861f8dfa9c1 100644
> --- a/net/mpls/af_mpls.c
> +++ b/net/mpls/af_mpls.c
> @@ -1769,13 +1769,15 @@ static int mpls_dump_route(struct sk_buff *skb, u32 portid, u32 seq, int event,
> goto nla_put_failure;
>
> for_nexthops(rt) {
> + dev = rtnl_dereference(nh->nh_dev);
> + if (!dev)
> + continue;
> +
size calculation may have to account for this too ?.
> rtnh = nla_reserve_nohdr(skb, sizeof(*rtnh));
> if (!rtnh)
> goto nla_put_failure;
>
> - dev = rtnl_dereference(nh->nh_dev);
> - if (dev)
> - rtnh->rtnh_ifindex = dev->ifindex;
> + rtnh->rtnh_ifindex = dev->ifindex;
> if (nh->nh_flags & RTNH_F_LINKDOWN) {
> rtnh->rtnh_flags |= RTNH_F_LINKDOWN;
> linkdown++;
Acked-by: Roopa Prabhu <roopa@cumulusnetworks.com>
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH net-next 2/2] net: mpls: Delete route when all nexthops have been deleted
2017-03-24 22:21 ` [PATCH net-next 2/2] net: mpls: Delete route when all nexthops have " David Ahern
@ 2017-03-26 17:26 ` Roopa Prabhu
0 siblings, 0 replies; 7+ messages in thread
From: Roopa Prabhu @ 2017-03-26 17:26 UTC (permalink / raw)
To: David Ahern; +Cc: netdev, rshearma
On 3/24/17, 3:21 PM, David Ahern wrote:
> When all devices for all nexthops in a route have been deleted, the
> route is effectively dead, so remove it.
>
> Signed-off-by: David Ahern <dsa@cumulusnetworks.com>
>
Acked-by: Roopa Prabhu <roopa@cumulusnetworks.com>
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH net-next 0/2] net: mpls: multipath route cleanups
2017-03-24 22:21 [PATCH net-next 0/2] net: mpls: multipath route cleanups David Ahern
2017-03-24 22:21 ` [PATCH net-next 1/2] net: mpls: Don't show nexthop if device has been deleted David Ahern
2017-03-24 22:21 ` [PATCH net-next 2/2] net: mpls: Delete route when all nexthops have " David Ahern
@ 2017-03-27 10:17 ` Robert Shearman
2017-03-27 21:12 ` David Miller
3 siblings, 0 replies; 7+ messages in thread
From: Robert Shearman @ 2017-03-27 10:17 UTC (permalink / raw)
To: David Ahern, netdev; +Cc: roopa
On 24/03/17 22:21, David Ahern wrote:
> When a device associated with a nexthop is deleted, the nexthop in
> the route is effectively removed, so remove it from the route dump.
>
> Further, when all nexhops have been deleted the route is effectively
> done, so remove the route.
>
> David Ahern (2):
> mpls: Don't show nexthop if device has been deleted
> mpls: Delete route when all nexthops have been deleted
>
> net/mpls/af_mpls.c | 17 +++++++++++++----
> 1 file changed, 13 insertions(+), 4 deletions(-)
>
Acked-by: Robert Shearman <rshearma@brocade.com>
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH net-next 0/2] net: mpls: multipath route cleanups
2017-03-24 22:21 [PATCH net-next 0/2] net: mpls: multipath route cleanups David Ahern
` (2 preceding siblings ...)
2017-03-27 10:17 ` [PATCH net-next 0/2] net: mpls: multipath route cleanups Robert Shearman
@ 2017-03-27 21:12 ` David Miller
3 siblings, 0 replies; 7+ messages in thread
From: David Miller @ 2017-03-27 21:12 UTC (permalink / raw)
To: dsa; +Cc: netdev, rshearma, roopa
From: David Ahern <dsa@cumulusnetworks.com>
Date: Fri, 24 Mar 2017 15:21:55 -0700
> When a device associated with a nexthop is deleted, the nexthop in
> the route is effectively removed, so remove it from the route dump.
>
> Further, when all nexhops have been deleted the route is effectively
> done, so remove the route.
Series applied, but I agree with Roopa that you need to add that nexthop
NULL device check to lfib_nlmsg_size() too.
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2017-03-27 21:13 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-03-24 22:21 [PATCH net-next 0/2] net: mpls: multipath route cleanups David Ahern
2017-03-24 22:21 ` [PATCH net-next 1/2] net: mpls: Don't show nexthop if device has been deleted David Ahern
2017-03-26 17:20 ` Roopa Prabhu
2017-03-24 22:21 ` [PATCH net-next 2/2] net: mpls: Delete route when all nexthops have " David Ahern
2017-03-26 17:26 ` Roopa Prabhu
2017-03-27 10:17 ` [PATCH net-next 0/2] net: mpls: multipath route cleanups Robert Shearman
2017-03-27 21:12 ` David Miller
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.