1. 05 Oct, 2005 1 commit
  2. 04 Oct, 2005 30 commits
  3. 03 Oct, 2005 9 commits
    • David S. Miller's avatar
      ed39f731
    • David S. Miller's avatar
      [IPV4]: Update icmp sysctl docs and disable broadcast ECHO/TIMESTAMP by default · 7ce31246
      David S. Miller authored
      It's not a good idea to be smurf'able by default.
      The few people who need this can turn it on.
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      7ce31246
    • Herbert Xu's avatar
      [IPV4]: Get rid of bogus __in_put_dev in pktgen · 3e56a40b
      Herbert Xu authored
      This patch gets rid of a bogus __in_dev_put() in pktgen.c.  This was
      spotted by Suzanne Wood.
      Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      3e56a40b
    • Herbert Xu's avatar
      [IPV4]: Replace __in_dev_get with __in_dev_get_rcu/rtnl · e5ed6399
      Herbert Xu authored
      The following patch renames __in_dev_get() to __in_dev_get_rtnl() and
      introduces __in_dev_get_rcu() to cover the second case.
      
      1) RCU with refcnt should use in_dev_get().
      2) RCU without refcnt should use __in_dev_get_rcu().
      3) All others must hold RTNL and use __in_dev_get_rtnl().
      
      There is one exception in net/ipv4/route.c which is in fact a pre-existing
      race condition.  I've marked it as such so that we remember to fix it.
      
      This patch is based on suggestions and prior work by Suzanne Wood and
      Paul McKenney.
      Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      e5ed6399
    • David S. Miller's avatar
      [IPV6]: Fix leak added by udp connect dst caching fix. · a5e7c210
      David S. Miller authored
      Based upon a patch from Mitsuru KANDA <mk@linux-ipv6.org>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      a5e7c210
    • Yan Zheng's avatar
      f36d6ab1
    • Herbert Xu's avatar
      [IPV4]: Fix "Proxy ARP seems broken" · 444fc8fc
      Herbert Xu authored
      Meelis Roos <mroos@linux.ee> wrote:
      > RK> My firewall setup relies on proxyarp working.  However, with 2.6.14-rc3,
      > RK> it appears to be completely broken.  The firewall is 212.18.232.186,
      > 
      > Same here with some kernel between 14-rc2 and 14-rc3 - no reposnse to
      > ARP on a proxyarp gateway. Sorry, no exact revison and no more debugging
      > yet since it'a a production gateway.
      
      The breakage is caused by the change to use the CB area for flagging
      whether a packet has been queued due to proxy_delay.  This area gets
      cleared every time arp_rcv gets called.  Unfortunately packets delayed
      due to proxy_delay also go through arp_rcv when they are reprocessed.
      
      In fact, I can't think of a reason why delayed proxy packets should go
      through netfilter again at all.  So the easiest solution is to bypass
      that and go straight to arp_process.
      
      This is essentially what would've happened before netfilter support
      was added to ARP.
      
      Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> 
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      444fc8fc
    • Russell King's avatar
      [NET]: Fix "sysctl_net.c:36: error: 'core_table' undeclared here" · 496a22b0
      Russell King authored
      During the build for ARM machine type "fortunet", this error occurred:
      
        CC      net/sysctl_net.o
      net/sysctl_net.c:36: error: 'core_table' undeclared here (not in a function)
      
      It appears that the following configuration settings cause this error
      due to a missing include:
      CONFIG_SYSCTL=y
      CONFIG_NET=y
      # CONFIG_INET is not set
      
      core_table appears to be declared in net/sock.h.  if CONFIG_INET were
      defined, net/sock.h would have been included via:
        sysctl_net.c -> net/ip.h -> linux/ip.h -> net/sock.h
      
      so include it directly.
      Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      496a22b0
    • Eric Dumazet's avatar
      [INET]: speedup inet (tcp/dccp) lookups · 81c3d547
      Eric Dumazet authored
      Arnaldo and I agreed it could be applied now, because I have other
      pending patches depending on this one (Thank you Arnaldo)
      
      (The other important patch moves skc_refcnt in a separate cache line,
      so that the SMP/NUMA performance doesnt suffer from cache line ping pongs)
      
      1) First some performance data :
      --------------------------------
      
      tcp_v4_rcv() wastes a *lot* of time in __inet_lookup_established()
      
      The most time critical code is :
      
      sk_for_each(sk, node, &head->chain) {
           if (INET_MATCH(sk, acookie, saddr, daddr, ports, dif))
               goto hit; /* You sunk my battleship! */
      }
      
      The sk_for_each() does use prefetch() hints but only the begining of
      "struct sock" is prefetched.
      
      As INET_MATCH first comparison uses inet_sk(__sk)->daddr, wich is far
      away from the begining of "struct sock", it has to bring into CPU
      cache cold cache line. Each iteration has to use at least 2 cache
      lines.
      
      This can be problematic if some chains are very long.
      
      2) The goal
      -----------
      
      The idea I had is to change things so that INET_MATCH() may return
      FALSE in 99% of cases only using the data already in the CPU cache,
      using one cache line per iteration.
      
      3) Description of the patch
      ---------------------------
      
      Adds a new 'unsigned int skc_hash' field in 'struct sock_common',
      filling a 32 bits hole on 64 bits platform.
      
      struct sock_common {
      	unsigned short		skc_family;
      	volatile unsigned char	skc_state;
      	unsigned char		skc_reuse;
      	int			skc_bound_dev_if;
      	struct hlist_node	skc_node;
      	struct hlist_node	skc_bind_node;
      	atomic_t		skc_refcnt;
      +	unsigned int		skc_hash;
      	struct proto		*skc_prot;
      };
      
      Store in this 32 bits field the full hash, not masked by (ehash_size -
      1) Using this full hash as the first comparison done in INET_MATCH
      permits us immediatly skip the element without touching a second cache
      line in case of a miss.
      
      Suppress the sk_hashent/tw_hashent fields since skc_hash (aliased to
      sk_hash and tw_hash) already contains the slot number if we mask with
      (ehash_size - 1)
      
      File include/net/inet_hashtables.h
      
      64 bits platforms :
      #define INET_MATCH(__sk, __hash, __cookie, __saddr, __daddr, __ports, __dif)\
           (((__sk)->sk_hash == (__hash))
           ((*((__u64 *)&(inet_sk(__sk)->daddr)))== (__cookie))   &&  \
           ((*((__u32 *)&(inet_sk(__sk)->dport))) == (__ports))   &&  \
           (!((__sk)->sk_bound_dev_if) || ((__sk)->sk_bound_dev_if == (__dif))))
      
      32bits platforms:
      #define TCP_IPV4_MATCH(__sk, __hash, __cookie, __saddr, __daddr, __ports, __dif)\
           (((__sk)->sk_hash == (__hash))                 &&  \
           (inet_sk(__sk)->daddr          == (__saddr))   &&  \
           (inet_sk(__sk)->rcv_saddr      == (__daddr))   &&  \
           (!((__sk)->sk_bound_dev_if) || ((__sk)->sk_bound_dev_if == (__dif))))
      
      
      - Adds a prefetch(head->chain.first) in 
      __inet_lookup_established()/__tcp_v4_check_established() and 
      __inet6_lookup_established()/__tcp_v6_check_established() and 
      __dccp_v4_check_established() to bring into cache the first element of the 
      list, before the {read|write}_lock(&head->lock);
      Signed-off-by: default avatarEric Dumazet <dada1@cosmosbay.com>
      Acked-by: default avatarArnaldo Carvalho de Melo <acme@ghostprotocols.net>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      81c3d547