Message ID | 1566582703-26567-1-git-send-email-alexey.kodanev@oracle.com |
---|---|
State | Accepted |
Delegated to: | David Miller |
Headers | show |
Series | [net] ipv4: mpls: fix mpls_xmit for iptunnel | expand |
On 8/23/19 1:51 PM, Alexey Kodanev wrote: > When using mpls over gre/gre6 setup, rt->rt_gw4 address is not set, the > same for rt->rt_gw_family. Therefore, when rt->rt_gw_family is checked > in mpls_xmit(), neigh_xmit() call is skipped. As a result, such setup > doesn't work anymore. > > This issue was found with LTP mpls03 tests. > > Fixes: 1550c171935d ("ipv4: Prepare rtable for IPv6 gateway") > Signed-off-by: Alexey Kodanev <alexey.kodanev@oracle.com> > --- > net/mpls/mpls_iptunnel.c | 8 ++++---- > 1 file changed, 4 insertions(+), 4 deletions(-) > Thanks for the report and patch. On first glance, it seems odd that neigh_xmit could be called with rt_gw4 (formerly rt_gateway) set to 0 and if it is non-zero, why isn't family set. I am traveling today and doubt I will be able to take a deep look at this until Monday.
From: David Ahern <dsahern@gmail.com> Date: Fri, 23 Aug 2019 13:59:05 -0400 > I am traveling today and doubt I will be able to take a deep look at > this until Monday. I'll wait until you've had a chance to review this properly.
On 8/23/19 11:51 AM, Alexey Kodanev wrote: > When using mpls over gre/gre6 setup, rt->rt_gw4 address is not set, the > same for rt->rt_gw_family. Therefore, when rt->rt_gw_family is checked > in mpls_xmit(), neigh_xmit() call is skipped. As a result, such setup > doesn't work anymore. > > This issue was found with LTP mpls03 tests. > > Fixes: 1550c171935d ("ipv4: Prepare rtable for IPv6 gateway") > Signed-off-by: Alexey Kodanev <alexey.kodanev@oracle.com> > --- > net/mpls/mpls_iptunnel.c | 8 ++++---- > 1 file changed, 4 insertions(+), 4 deletions(-) ok, I see now. This is a device only route with MPLS encap: 10.23.0.1 encap mpls 60 dev ltp_v0 scope link and the change reverts to 5.1 behavior unless the gateway is IPv6 (new behavior). Thanks for the patch. Reviewed-by: David Ahern <dsahern@gmail.com>
From: Alexey Kodanev <alexey.kodanev@oracle.com> Date: Fri, 23 Aug 2019 20:51:43 +0300 > When using mpls over gre/gre6 setup, rt->rt_gw4 address is not set, the > same for rt->rt_gw_family. Therefore, when rt->rt_gw_family is checked > in mpls_xmit(), neigh_xmit() call is skipped. As a result, such setup > doesn't work anymore. > > This issue was found with LTP mpls03 tests. > > Fixes: 1550c171935d ("ipv4: Prepare rtable for IPv6 gateway") > Signed-off-by: Alexey Kodanev <alexey.kodanev@oracle.com> Applied and queued up for v5.2 -stable. Thanks.
diff --git a/net/mpls/mpls_iptunnel.c b/net/mpls/mpls_iptunnel.c index d25e91d..44b6750 100644 --- a/net/mpls/mpls_iptunnel.c +++ b/net/mpls/mpls_iptunnel.c @@ -133,12 +133,12 @@ static int mpls_xmit(struct sk_buff *skb) mpls_stats_inc_outucastpkts(out_dev, skb); if (rt) { - if (rt->rt_gw_family == AF_INET) - err = neigh_xmit(NEIGH_ARP_TABLE, out_dev, &rt->rt_gw4, - skb); - else if (rt->rt_gw_family == AF_INET6) + if (rt->rt_gw_family == AF_INET6) err = neigh_xmit(NEIGH_ND_TABLE, out_dev, &rt->rt_gw6, skb); + else + err = neigh_xmit(NEIGH_ARP_TABLE, out_dev, &rt->rt_gw4, + skb); } else if (rt6) { if (ipv6_addr_v4mapped(&rt6->rt6i_gateway)) { /* 6PE (RFC 4798) */
When using mpls over gre/gre6 setup, rt->rt_gw4 address is not set, the same for rt->rt_gw_family. Therefore, when rt->rt_gw_family is checked in mpls_xmit(), neigh_xmit() call is skipped. As a result, such setup doesn't work anymore. This issue was found with LTP mpls03 tests. Fixes: 1550c171935d ("ipv4: Prepare rtable for IPv6 gateway") Signed-off-by: Alexey Kodanev <alexey.kodanev@oracle.com> --- net/mpls/mpls_iptunnel.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)