1. 21 10月, 2010 12 次提交
    • J
      ipvs: provide address family for debugging · 0d79641a
      Julian Anastasov 提交于
       	As skb->protocol is not valid in LOCAL_OUT add
      parameter for address family in packet debugging functions.
      Even if ports are not present in AH and ESP change them to
      use ip_vs_tcpudp_debug_packet to show at least valid addresses
      as before. This patch removes the last user of skb->protocol
      in IPVS.
      Signed-off-by: NJulian Anastasov <ja@ssi.bg>
      Signed-off-by: NSimon Horman <horms@verge.net.au>
      0d79641a
    • J
      ipvs: inherit forwarding method in backup · 3233759b
      Julian Anastasov 提交于
       	Connections in backup server should inherit the
      forwarding method from real server. It is a way to fix a
      problem where the forwarding method in backup connection
      is damaged by logical OR operation with the real server's
      connection flags. And the change is needed for setups
      where the backup server uses different forwarding method
      for the same real servers.
      Signed-off-by: NJulian Anastasov <ja@ssi.bg>
      Signed-off-by: NSimon Horman <horms@verge.net.au>
      3233759b
    • J
      ipvs: changes for local client · cb59155f
      Julian Anastasov 提交于
      	This patch deals with local client processing.
      
      	Prefer LOCAL_OUT hook for scheduling connections from
      local clients. LOCAL_IN is still supported if the packets are
      not marked as processed in LOCAL_OUT. The idea to process
      requests in LOCAL_OUT is to alter conntrack reply before
      it is confirmed at POST_ROUTING. If the local requests are
      processed in LOCAL_IN the conntrack can not be updated
      and matching by state is impossible.
      
      	Add the following handlers:
      
      - ip_vs_reply[46] at LOCAL_IN:99 to process replies from
      remote real servers to local clients. Now when both
      replies from remote real servers (ip_vs_reply*) and
      local real servers (ip_vs_local_reply*) are handled
      it is safe to remove the conn_out_get call from ip_vs_in
      because it does not support related ICMP packets.
      
      - ip_vs_local_request[46] at LOCAL_OUT:-98 to process
      requests from local client
      
      	Handling in LOCAL_OUT causes some changes:
      
      - as skb->dev, skb->protocol and skb->pkt_type are not defined
      in LOCAL_OUT make sure we set skb->dev before calling icmpv6_send,
      prefer skb_dst(skb) for struct net and remove the skb->protocol
      checks from TUN transmitters.
      
      [ horms@verge.net.au: removed trailing whitespace ]
      Signed-off-by: NJulian Anastasov <ja@ssi.bg>
      Signed-off-by: NSimon Horman <horms@verge.net.au>
      cb59155f
    • J
      ipvs: changes for local real server · fc604767
      Julian Anastasov 提交于
       	This patch deals with local real servers:
      
      - Add support for DNAT to local address (different real server port).
      It needs ip_vs_out hook in LOCAL_OUT for both families because
      skb->protocol is not set for locally generated packets and can not
      be used to set 'af'.
      
      - Skip packets in ip_vs_in marked with skb->ipvs_property because
      ip_vs_out processing can be executed in LOCAL_OUT but we still
      have the conn_out_get check in ip_vs_in.
      
      - Ignore packets with inet->nodefrag from local stack
      
      - Require skb_dst(skb) != NULL because we use it to get struct net
      
      - Add support for changing the route to local IPv4 stack after DNAT
      depending on the source address type. Local client sets output
      route and the remote client sets input route. It looks like
      IPv6 does not need such rerouting because the replies use
      addresses from initial incoming header, not from skb route.
      
      - All transmitters now have strict checks for the destination
      address type: redirect from non-local address to local real
      server requires NAT method, local address can not be used as
      source address when talking to remote real server.
      
      - Now LOCALNODE is not set explicitly as forwarding
      method in real server to allow the connections to provide
      correct forwarding method to the backup server. Not sure if
      this breaks tools that expect to see 'Local' real server type.
      If needed, this can be supported with new flag IP_VS_DEST_F_LOCAL.
      Now it should be possible connections in backup that lost
      their fwmark information during sync to be forwarded properly
      to their daddr, even if it is local address in the backup server.
      By this way backup could be used as real server for DR or TUN,
      for NAT there are some restrictions because tuple collisions
      in conntracks can create problems for the traffic.
      
      - Call ip_vs_dst_reset when destination is updated in case
      some real server IP type is changed between local and remote.
      
      [ horms@verge.net.au: removed trailing whitespace ]
      Signed-off-by: NJulian Anastasov <ja@ssi.bg>
      Signed-off-by: NSimon Horman <horms@verge.net.au>
      fc604767
    • J
      ipvs: move ip_route_me_harder for ICMP · f5a41847
      Julian Anastasov 提交于
       	Currently, ip_route_me_harder after ip_vs_out_icmp
      is called even if packet is not related to IPVS connection.
      Move it into handle_response_icmp. Also, force rerouting
      if sending to local client because IPv4 stack uses addresses
      from the route.
      Signed-off-by: NJulian Anastasov <ja@ssi.bg>
      Signed-off-by: NSimon Horman <horms@verge.net.au>
      f5a41847
    • J
      ipvs: create ip_vs_defrag_user · 1ca5bb54
      Julian Anastasov 提交于
       	Create new function ip_vs_defrag_user to return correct
      IP_DEFRAG_xxx user depending on the hooknum. It will be needed
      when we add handlers in LOCAL_OUT.
      Signed-off-by: NJulian Anastasov <ja@ssi.bg>
      Signed-off-by: NSimon Horman <horms@verge.net.au>
      1ca5bb54
    • J
      ipvs: fix CHECKSUM_PARTIAL for TUN method · 4256f1aa
      Julian Anastasov 提交于
       	The recent change in IP_VS_XMIT_TUNNEL to set
      CHECKSUM_NONE is not correct. After adding IPIP header
      skb->csum becomes invalid but the CHECKSUM_PARTIAL
      case must be supported. So, use skb_forward_csum() which is
      most suitable for us to allow local clients to send IPIP
      to remote real server.
      Signed-off-by: NJulian Anastasov <ja@ssi.bg>
      Signed-off-by: NSimon Horman <horms@verge.net.au>
      4256f1aa
    • J
      ipvs: stop ICMP from FORWARD to local · 489fdeda
      Julian Anastasov 提交于
       	Delivering locally ICMP from FORWARD hook is not supported.
      Signed-off-by: NJulian Anastasov <ja@ssi.bg>
      Signed-off-by: NSimon Horman <horms@verge.net.au>
      489fdeda
    • J
      ipvs: do not schedule conns from real servers · 190ecd27
      Julian Anastasov 提交于
       	This patch is needed to avoid scheduling of
      packets from local real server when we add ip_vs_in
      in LOCAL_OUT hook to support local client.
      
       	Currently, when ip_vs_in can not find existing
      connection it tries to create new one by calling ip_vs_schedule.
      
       	The default indication from ip_vs_schedule was if
      connection was scheduled to real server. If real server is
      not available we try to use the bypass forwarding method
      or to send ICMP error. But in some cases we do not want to use
      the bypass feature. So, add flag 'ignored' to indicate if
      the scheduler ignores this packet.
      
       	Make sure we do not create new connections from replies.
      We can hit this problem for persistent services and local real
      server when ip_vs_in is added to LOCAL_OUT hook to handle
      local clients.
      
       	Also, make sure ip_vs_schedule ignores SYN packets
      for Active FTP DATA from local real server. The FTP DATA
      connection should be created on SYN+ACK from client to assign
      correct connection daddr.
      Signed-off-by: NJulian Anastasov <ja@ssi.bg>
      Signed-off-by: NSimon Horman <horms@verge.net.au>
      190ecd27
    • J
      ipvs: switch to notrack mode · cf356d69
      Julian Anastasov 提交于
       	Change skb->ipvs_property semantic. This is preparation
      to support ip_vs_out processing in LOCAL_OUT. ipvs_property=1
      will be used to avoid expensive lookups for traffic sent by
      transmitters. Now when conntrack support is not used we call
      ip_vs_notrack method to avoid problems in OUTPUT and
      POST_ROUTING hooks instead of exiting POST_ROUTING as before.
      Signed-off-by: NJulian Anastasov <ja@ssi.bg>
      Signed-off-by: NSimon Horman <horms@verge.net.au>
      cf356d69
    • J
      ipvs: optimize checksums for apps · 8b27b10f
      Julian Anastasov 提交于
       	Avoid full checksum calculation for apps that can provide
      info whether csum was broken after payload mangling. For now only
      ip_vs_ftp mangles payload and it updates the csum, so the full
      recalculation is avoided for all packets.
      
       	Add CHECKSUM_UNNECESSARY for snat_handler (TCP and UDP).
      It is needed to support SNAT from local address for the case
      when csum is fully recalculated.
      Signed-off-by: NJulian Anastasov <ja@ssi.bg>
      Signed-off-by: NSimon Horman <horms@verge.net.au>
      8b27b10f
    • J
      ipvs: fix CHECKSUM_PARTIAL for TCP, UDP · 5bc9068e
      Julian Anastasov 提交于
       	Fix CHECKSUM_PARTIAL handling. Tested for IPv4 TCP,
      UDP not tested because it needs network card with HW CSUM support.
      May be fixes problem where IPVS can not be used in virtual boxes.
      Problem appears with DNAT to local address when the local stack
      sends reply in CHECKSUM_PARTIAL mode.
      
       	Fix tcp_dnat_handler and udp_dnat_handler to provide
      vaddr and daddr in right order (old and new IP) when calling
      tcp_partial_csum_update/udp_partial_csum_update (CHECKSUM_PARTIAL).
      Signed-off-by: NJulian Anastasov <ja@ssi.bg>
      Signed-off-by: NSimon Horman <horms@verge.net.au>
      5bc9068e
  2. 19 10月, 2010 3 次提交
    • E
      Fixed race condition at ip_vs.ko module init. · d86bef73
      Eduardo Blanco 提交于
      Lists were initialized after the module was registered.  Multiple ipvsadm
      processes at module load triggered a race condition that resulted in a null
      pointer dereference in do_ip_vs_get_ctl(). As a result, __ip_vs_mutex
      was left locked preventing all further ipvsadm commands.
      Signed-off-by: NEduardo J. Blanco <ejblanco@google.com>
      Signed-off-by: NSimon Horman <horms@verge.net.au>
      d86bef73
    • H
      ipvs: IPv6 tunnel mode · 714f095f
      Hans Schillstrom 提交于
      IPv6 encapsulation uses a bad source address for the tunnel.
      i.e. VIP will be used as local-addr and encap. dst addr.
      Decapsulation will not accept this.
      
      Example
      LVS (eth1 2003::2:0:1/96, VIP 2003::2:0:100)
         (eth0 2003::1:0:1/96)
      RS  (ethX 2003::1:0:5/96)
      
      tcpdump
      2003::2:0:100 > 2003::1:0:5: IP6 (hlim 63, next-header TCP (6) payload length: 40)  2003::3:0:10.50991 > 2003::2:0:100.http: Flags [S], cksum 0x7312 (correct), seq 3006460279, win 5760, options [mss 1440,sackOK,TS val 1904932 ecr 0,nop,wscale 3], length 0
      
      In Linux IPv6 impl. you can't have a tunnel with an any cast address
      receiving packets (I have not tried to interpret RFC 2473)
      To have receive capabilities the tunnel must have:
       - Local address set as multicast addr or an unicast addr
       - Remote address set as an unicast addr.
       - Loop back addres or Link local address are not allowed.
      
      This causes us to setup a tunnel in the Real Server with the
      LVS as the remote address, here you can't use the VIP address since it's
      used inside the tunnel.
      
      Solution
      Use outgoing interface IPv6 address (match against the destination).
      i.e. use ip6_route_output() to look up the route cache and
      then use ipv6_dev_get_saddr(...) to set the source address of the
      encapsulated packet.
      
      Additionally, cache the results in new destination
      fields: dst_cookie and dst_saddr and properly check the
      returned dst from ip6_route_output. We now add xfrm_lookup
      call only for the tunneling method where the source address
      is a local one.
      Signed-off-by: NHans Schillstrom <hans.schillstrom@ericsson.com>
      Signed-off-by: NPatrick McHardy <kaber@trash.net>
      714f095f
    • P
      netfilter: ctnetlink: add expectation deletion events · ebbf41df
      Pablo Neira Ayuso 提交于
      This patch allows to listen to events that inform about
      expectations destroyed.
      Signed-off-by: NPablo Neira Ayuso <pablo@netfilter.org>
      Signed-off-by: NPatrick McHardy <kaber@trash.net>
      ebbf41df
  3. 18 10月, 2010 2 次提交
  4. 14 10月, 2010 6 次提交
  5. 05 10月, 2010 5 次提交
  6. 04 10月, 2010 12 次提交