linux/net/netfilter/ipvs
Julian Anastasov f2edb9f770 ipvs: implement passive PMTUD for IPIP packets
IPVS is missing the logic to update PMTU in routing
for its IPIP packets. We monitor the dst_mtu and can return
FRAG_NEEDED messages but if the tunneled packets get ICMP
error we can not rely on other traffic to save the lowest
MTU.

	The following patch adds ICMP handling for IPIP
packets in incoming direction, from some remote host to
our local IP used as saddr in the outer header. By this
way we can forward any related ICMP traffic if it is for IPVS
TUN connection. For the special case of PMTUD we update the
routing and if client requested DF we can forward the
error.

	To properly update the routing we have to bind
the cached route (dest->dst_cache) to the selected saddr
because ipv4_update_pmtu uses saddr for dst lookup.
Add IP_VS_RT_MODE_CONNECT flag to force such binding with
second route.

	Update ip_vs_tunnel_xmit to provide IP_VS_RT_MODE_CONNECT
and change the code to copy DF. For now we prefer not to
force PMTU discovery (outer DF=1) because we don't have
configuration option to enable or disable PMTUD. As we
do not keep any packets to resend, we prefer not to
play games with packets without DF bit because the sender
is not informed when they are rejected.

	Also, change ops->update_pmtu to be called only
for local clients because there is no point to update
MTU for input routes, in our case skb->dst->dev is lo.
It seems the code is copied from ipip.c where the skb
dst points to tunnel device.

Signed-off-by: Julian Anastasov <ja@ssi.bg>
Signed-off-by: Simon Horman <horms@verge.net.au>
2012-08-10 10:35:03 +09:00
..
ip_vs_app.c ipvs: generalize app registration in netns 2012-08-10 10:34:51 +09:00
ip_vs_conn.c ipvs: optimize the use of flags in ip_vs_bind_dest 2012-05-08 19:40:49 +02:00
ip_vs_core.c ipvs: implement passive PMTUD for IPIP packets 2012-08-10 10:35:03 +09:00
ip_vs_ctl.c ipvs: fixed sparse warning 2012-08-10 10:34:51 +09:00
ip_vs_dh.c ipvs: DH scheduler does not need GFP_ATOMIC allocation 2012-05-08 19:37:20 +02:00
ip_vs_est.c IPVS: remove unused init and cleanup functions. 2011-06-14 09:07:32 +09:00
ip_vs_ftp.c ipvs: generalize app registration in netns 2012-08-10 10:34:51 +09:00
ip_vs_lblc.c ipvs: LBLC scheduler does not need GFP_ATOMIC allocation on init 2012-05-08 19:37:17 +02:00
ip_vs_lblcr.c ipvs: LBLCR scheduler does not need GFP_ATOMIC allocation on init 2012-05-08 19:37:26 +02:00
ip_vs_lc.c ipvs: unify the formula to estimate the overhead of processing connections 2011-02-25 11:35:41 +09:00
ip_vs_nfct.c ipvs: Remove unused parameter from ip_vs_confirm_conntrack() 2011-11-01 09:19:29 +01:00
ip_vs_nq.c ipvs: make "no destination available" message more informative 2011-02-16 14:53:33 +09:00
ip_vs_pe_sip.c net: fix assignment of 0/1 to bool variables. 2011-12-19 22:27:29 -05:00
ip_vs_pe.c IPVS: Backup, Adding Version 1 receive capability 2010-11-25 10:42:59 +09:00
ip_vs_proto_ah_esp.c IPVS: netns, connection hash got net as param. 2011-01-13 10:30:28 +09:00
ip_vs_proto_sctp.c ipvs: take care of return value from protocol init_netns 2012-04-30 10:40:35 +02:00
ip_vs_proto_tcp.c ipvs: take care of return value from protocol init_netns 2012-04-30 10:40:35 +02:00
ip_vs_proto_udp.c ipvs: take care of return value from protocol init_netns 2012-04-30 10:40:35 +02:00
ip_vs_proto.c ipvs: ip_vs_proto: local functions should not be exposed globally 2012-05-08 19:40:54 +02:00
ip_vs_rr.c ipvs: make "no destination available" message more informative 2011-02-16 14:53:33 +09:00
ip_vs_sched.c ipvs: make "no destination available" message more informative 2011-02-16 14:53:33 +09:00
ip_vs_sed.c ipvs: make "no destination available" message more informative 2011-02-16 14:53:33 +09:00
ip_vs_sh.c ipvs: SH scheduler does not need GFP_ATOMIC allocation 2012-05-08 19:37:28 +02:00
ip_vs_sync.c ipvs: add support for sync threads 2012-05-08 19:40:33 +02:00
ip_vs_wlc.c ipvs: unify the formula to estimate the overhead of processing connections 2011-02-25 11:35:41 +09:00
ip_vs_wrr.c ipvs: WRR scheduler does not need GFP_ATOMIC allocation 2012-05-08 19:37:22 +02:00
ip_vs_xmit.c ipvs: implement passive PMTUD for IPIP packets 2012-08-10 10:35:03 +09:00
Kconfig ipvs: ip_vs_ftp depends on nf_conntrack_ftp helper 2012-08-10 10:34:51 +09:00
Makefile IPVS: sip persistence engine 2010-10-04 22:45:24 +09:00