On Sat, Apr 09, 2016 at 01:13:02PM +0300, Julian Anastasov wrote: > > Hello, > > On Tue, 5 Apr 2016, Marco Angaroni wrote: > > > When using LVS-NAT and SIP persistence-egine over UDP, the following > > limitations are present with current implementation: > > > > 1) To actually have load-balancing based on Call-ID header, you need to > > use one-packet-scheduling mode. But with one-packet-scheduling the > > connection is deleted just after packet is forwarded, so SIP responses > > coming from real-servers do not match any connection and SNAT is > > not applied. > > > > 2) If you do not use "-o" option, IPVS behaves as normal UDP load > > balancer, so different SIP calls (each one identified by a different > > Call-ID) coming from the same ip-address/port go to the same > > real-server. So basically you don’t have load-balancing based on > > Call-ID as intended. > > > > 3) Call-ID is not learned when a new SIP call is started by a real-server > > (inside-to-outside direction), but only in the outside-to-inside > > direction. This would be a general problem for all SIP servers acting > > as Back2BackUserAgent. > > > > This patch aims to solve problems 1) and 3) while keeping OPS mode > > mandatory for SIP-UDP, so that 2) is not a problem anymore. > > > > The basic mechanism implemented is to make packets, that do not match any > > existent connection but come from real-servers, create new connections > > instead of let them pass without any effect. > > When such packets pass through ip_vs_out(), if their source ip address and > > source port match a configured real-server, a new connection is > > automatically created in the same way as it would have happened if the > > packet had come from outside-to-inside direction. A new connection template > > is created too if the virtual-service is persistent and there is no > > matching connection template found. The new connection automatically > > created, if the service had "-o" option, is an OPS connection that lasts > > only the time to forward the packet, just like it happens on the > > ingress side. > > > > The main part of this mechanism is implemented inside a persistent-engine > > specific callback (at the moment only SIP persistent engine exists) and > > is triggered only for UDP packets, since connection oriented protocols, by > > using different set of ports (typically ephemeral ports) to open new > > outgoing connections, should not need this feature. > > > > The following requisites are needed for automatic connection creation; if > > any is missing the packet simply goes the same way as before. > > a) virtual-service is not fwmark based (this is because fwmark services > > do not store address and port of the virtual-service, required to > > build the connection data). > > b) virtual-service and real-servers must not have been configured with > > omitted port (this is again to have all data to create the connection). > > > > Signed-off-by: Marco Angaroni <marcoangaroni@xxxxxxxxx> > > Nice addition, thanks! Simon, please apply. > > Acked-by: Julian Anastasov <ja@xxxxxx> Thanks, applied. -- To unsubscribe from this list: send the line "unsubscribe lvs-devel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html