Mailing List Archive

[lvs-users] Problem with LVS and IPV6 DR
Hi All - We are having a problem with IPV6 DR, I seem unable to get it to work
using the latest kernels. So far I have tried 3.9.7,3.10.14 and 3.11.4
and all appear to produce the same results I see SYN_RECV in the
connection table for all connections from my test client. Looking at
packet captures from our appliance it looks like the packet is not
getting forwarded. You can see SYN packet come in from the client
making the request but no data is forwarded to the real server. Using
the same server and the same configuration all I do is reboot to
switch between the kernels It works straight away on 2.6.35. My
configuration is as follows -

APPLIANCE CONFIG ---------------------------------

loadbalancer eth0 - fde6:d14c:3089::6061/123 scope global
loadbalancer eth0 vip - fde6:d14c:3089::6063/123 scope global

ipvsadm config - IP Virtual Server version 1.2.1 (size=32768)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP [fde6:d14c:3089::6063]:80 wlc
-> [fde6:d14c:3089::6070]:80 Route 100 0 0
-> [fde6:d14c:3089::6071]:80 Route 100 0 0

--------------------------------------------------

Real server 1 -
eth1 - inet6 fde6:d14c:3089::6070/123 scope global
lo - inet6 fde6:d14c:3089::6063/128 scope global

Real server 2 -
eth1 - inet6 fde6:d14c:3089::6071/123 scope global
lo - inet6 fde6:d14c:3089::6063/128 scope global

Thanks

Mark

_______________________________________________
Please read the documentation before posting - it's available at:
http://www.linuxvirtualserver.org/

LinuxVirtualServer.org mailing list - lvs-users@LinuxVirtualServer.org
Send requests to lvs-users-request@LinuxVirtualServer.org
or go to http://lists.graemef.net/mailman/listinfo/lvs-users
Re: [lvs-users] Problem with LVS and IPV6 DR [ In reply to ]
On Mon, Oct 14, 2013 at 02:32:21PM +0100, Mark Brooks wrote:
> Hi All - We are having a problem with IPV6 DR, I seem unable to get it to work
> using the latest kernels. So far I have tried 3.9.7,3.10.14 and 3.11.4
> and all appear to produce the same results I see SYN_RECV in the
> connection table for all connections from my test client. Looking at
> packet captures from our appliance it looks like the packet is not
> getting forwarded. You can see SYN packet come in from the client
> making the request but no data is forwarded to the real server. Using
> the same server and the same configuration all I do is reboot to
> switch between the kernels It works straight away on 2.6.35. My
> configuration is as follows -
>
> APPLIANCE CONFIG ---------------------------------
>
> loadbalancer eth0 - fde6:d14c:3089::6061/123 scope global
> loadbalancer eth0 vip - fde6:d14c:3089::6063/123 scope global
>
> ipvsadm config - IP Virtual Server version 1.2.1 (size=32768)
> Prot LocalAddress:Port Scheduler Flags
> -> RemoteAddress:Port Forward Weight ActiveConn InActConn
> TCP [fde6:d14c:3089::6063]:80 wlc
> -> [fde6:d14c:3089::6070]:80 Route 100 0 0
> -> [fde6:d14c:3089::6071]:80 Route 100 0 0
>
> --------------------------------------------------
>
> Real server 1 -
> eth1 - inet6 fde6:d14c:3089::6070/123 scope global
> lo - inet6 fde6:d14c:3089::6063/128 scope global
>
> Real server 2 -
> eth1 - inet6 fde6:d14c:3089::6071/123 scope global
> lo - inet6 fde6:d14c:3089::6063/128 scope global

It seems that this problem was introduced between v3.8 and v3.9
by the following commit.

For 3.9 at least a possible work around is to reverse the commit.

But before I make any further progress I must go to dinner.


>From 6fd6ce2056de27090f4723138e0ce0a816f4ba0d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?YOSHIFUJI=20Hideaki=20/=20=E5=90=89=E8=97=A4=E8=8B=B1?=
=?UTF-8?q?=E6=98=8E?= <yoshfuji@linux-ipv6.org>
Date: Thu, 17 Jan 2013 12:54:00 +0000
Subject: [PATCH] ipv6: Do not depend on rt->n in ip6_finish_output2().

If neigh is not found, create new one.

Signed-off-by: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
---
net/ipv6/ip6_output.c | 18 +++++++++++++-----
1 file changed, 13 insertions(+), 5 deletions(-)

diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c
index 7c00edb..b0895f5 100644
--- a/net/ipv6/ip6_output.c
+++ b/net/ipv6/ip6_output.c
@@ -88,7 +88,8 @@ static int ip6_finish_output2(struct sk_buff *skb)
struct dst_entry *dst = skb_dst(skb);
struct net_device *dev = dst->dev;
struct neighbour *neigh;
- struct rt6_info *rt;
+ struct in6_addr *nexthop;
+ int ret;

skb->protocol = htons(ETH_P_IPV6);
skb->dev = dev;
@@ -123,10 +124,17 @@ static int ip6_finish_output2(struct sk_buff *skb)
skb->len);
}

- rt = (struct rt6_info *) dst;
- neigh = rt->n;
- if (neigh)
- return dst_neigh_output(dst, neigh, skb);
+ rcu_read_lock_bh();
+ nexthop = rt6_nexthop((struct rt6_info *)dst, &ipv6_hdr(skb)->daddr);
+ neigh = __ipv6_neigh_lookup_noref(dst->dev, nexthop);
+ if (unlikely(!neigh))
+ neigh = __neigh_create(&nd_tbl, nexthop, dst->dev, false);
+ if (!IS_ERR(neigh)) {
+ ret = dst_neigh_output(dst, neigh, skb);
+ rcu_read_unlock_bh();
+ return ret;
+ }
+ rcu_read_unlock_bh();

IP6_INC_STATS_BH(dev_net(dst->dev),
ip6_dst_idev(dst), IPSTATS_MIB_OUTNOROUTES);
--
1.8.4


_______________________________________________
Please read the documentation before posting - it's available at:
http://www.linuxvirtualserver.org/

LinuxVirtualServer.org mailing list - lvs-users@LinuxVirtualServer.org
Send requests to lvs-users-request@LinuxVirtualServer.org
or go to http://lists.graemef.net/mailman/listinfo/lvs-users