]> git.karo-electronics.de Git - karo-tx-linux.git/commit
[PATCH] ipvs: ip_vs_ftp breaks connections using persistence
authorJulian Anastasov <ja@ssi.bg>
Mon, 3 Oct 2005 23:27:18 +0000 (16:27 -0700)
committerChris Wright <chrisw@osdl.org>
Mon, 3 Oct 2005 23:27:18 +0000 (16:27 -0700)
commit17d6b7c89bee5d10632bd9d05cd79b943f5794a4
tree86d46b7983941aa856b9cdef7e973906b10a5980
parent6ce0c8dfdfdacc4d370ccd51fa5d4cd28118a9cf
[PATCH] ipvs: ip_vs_ftp breaks connections using persistence

ip_vs_ftp when loaded can create NAT connections with unknown
client port for passive FTP. For such expectations we lookup with
cport=0 on incoming packet but it matches the format of the persistence
templates causing packets to other persistent virtual servers to be
forwarded to real server without creating connection. Later the
reply packets are treated as foreign and not SNAT-ed.

If the IPVS box serves both FTP and other services (eg. HTTP)
for the time we wait for first packet for the FTP data connections with
unknown client port (there can be many), other HTTP connections
that have nothing common to the FTP conn break, i.e. HTTP client
sends SYN to the virtual IP but the SYN+ACK is not NAT-ed properly
in IPVS box and the client box returns RST to real server IP. I.e.
the result can be 10% broken HTTP traffic if 10% of the time
there are passive FTP connections in connecting state. It hurts
only IPVS connections.

This patch changes the connection lookup for packets from
clients:

* introduce IP_VS_CONN_F_TEMPLATE connection flag to mark the
connection as template
* create new connection lookup function just for templates - ip_vs_ct_in_get
* make sure ip_vs_conn_in_get hits only connections with
IP_VS_CONN_F_NO_CPORT flag set when s_port is 0. By this way
we avoid returning template when looking for cport=0 (ftp)

Signed-off-by: Julian Anastasov <ja@ssi.bg>
Signed-off-by: Chris Wright <chrisw@osdl.org>
include/net/ip_vs.h
net/ipv4/ipvs/ip_vs_conn.c
net/ipv4/ipvs/ip_vs_core.c
net/ipv4/ipvs/ip_vs_sync.c