ipvs: make drop_entry protection effective for SIP-pe
authorMarco Angaroni <marcoangaroni@gmail.com>
Tue, 26 Apr 2016 19:20:22 +0000 (21:20 +0200)
committerSimon Horman <horms@verge.net.au>
Fri, 6 May 2016 07:26:23 +0000 (16:26 +0900)
commit698e2a8dca98e4de32f3f630e6d9cd93753c52e1
treeadcf878967c55682778b37c828e4d388456bc6e8
parentcb39ad8b8ef224c544074962780bf763077d6141
ipvs: make drop_entry protection effective for SIP-pe

DoS protection policy that deletes connections to avoid out of memory is
currently not effective for SIP-pe plus OPS-mode for two reasons:
  1) connection templates (holding SIP call-id) are always skipped in
     ip_vs_random_dropentry()
  2) in_pkts counter (used by drop_entry algorithm) is not incremented
     for connection templates

This patch addresses such problems with the following changes:
  a) connection templates associated (via their dest) to virtual-services
     configured in OPS mode are included in ip_vs_random_dropentry()
     monitoring. This applies to SIP-pe over UDP (which requires OPS mode),
     but is more general principle: when OPS is controlled by templates
     memory can be used only by templates themselves, since OPS conns are
     deleted after packet is forwarded.
  b) OPS connections, if controlled by a template, cause increment of
     in_pkts counter of their template. This is already happening but only
     in case director is in master-slave mode (see ip_vs_sync_conn()).

Signed-off-by: Marco Angaroni <marcoangaroni@gmail.com>
Acked-by: Julian Anastasov <ja@ssi.bg>
Signed-off-by: Simon Horman <horms@verge.net.au>
net/netfilter/ipvs/ip_vs_conn.c
net/netfilter/ipvs/ip_vs_core.c