1. 05 6月, 2010 1 次提交
  2. 01 6月, 2010 1 次提交
  3. 31 5月, 2010 1 次提交
  4. 29 5月, 2010 2 次提交
  5. 28 5月, 2010 1 次提交
  6. 27 5月, 2010 1 次提交
    • E
      net: fix lock_sock_bh/unlock_sock_bh · 8a74ad60
      Eric Dumazet 提交于
      This new sock lock primitive was introduced to speedup some user context
      socket manipulation. But it is unsafe to protect two threads, one using
      regular lock_sock/release_sock, one using lock_sock_bh/unlock_sock_bh
      
      This patch changes lock_sock_bh to be careful against 'owned' state.
      If owned is found to be set, we must take the slow path.
      lock_sock_bh() now returns a boolean to say if the slow path was taken,
      and this boolean is used at unlock_sock_bh time to call the appropriate
      unlock function.
      
      After this change, BH are either disabled or enabled during the
      lock_sock_bh/unlock_sock_bh protected section. This might be misleading,
      so we rename these functions to lock_sock_fast()/unlock_sock_fast().
      Reported-by: NAnton Blanchard <anton@samba.org>
      Signed-off-by: NEric Dumazet <eric.dumazet@gmail.com>
      Tested-by: NAnton Blanchard <anton@samba.org>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      8a74ad60
  7. 26 5月, 2010 1 次提交
  8. 19 5月, 2010 4 次提交
  9. 18 5月, 2010 4 次提交
  10. 16 5月, 2010 1 次提交
    • E
      net: Introduce sk_route_nocaps · a465419b
      Eric Dumazet 提交于
      TCP-MD5 sessions have intermittent failures, when route cache is
      invalidated. ip_queue_xmit() has to find a new route, calls
      sk_setup_caps(sk, &rt->u.dst), destroying the 
      
      sk->sk_route_caps &= ~NETIF_F_GSO_MASK
      
      that MD5 desperately try to make all over its way (from
      tcp_transmit_skb() for example)
      
      So we send few bad packets, and everything is fine when
      tcp_transmit_skb() is called again for this socket.
      
      Since ip_queue_xmit() is at a lower level than TCP-MD5, I chose to use a
      socket field, sk_route_nocaps, containing bits to mask on sk_route_caps.
      Reported-by: NBhaskar Dutta <bhaskie@gmail.com>
      Signed-off-by: NEric Dumazet <eric.dumazet@gmail.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      a465419b
  11. 13 5月, 2010 3 次提交
  12. 12 5月, 2010 5 次提交
  13. 11 5月, 2010 6 次提交
    • P
      ipv6: ip6mr: add support for dumping routing tables over netlink · 5b285cac
      Patrick McHardy 提交于
      The ip6mr /proc interface (ip6_mr_cache) can't be extended to dump routes
      from any tables but the main table in a backwards compatible fashion since
      the output format ends in a variable amount of output interfaces.
      
      Introduce a new netlink interface to dump multicast routes from all tables,
      similar to the netlink interface for regular routes.
      Signed-off-by: NPatrick McHardy <kaber@trash.net>
      5b285cac
    • P
      ipv6: ip6mr: support multiple tables · d1db275d
      Patrick McHardy 提交于
      This patch adds support for multiple independant multicast routing instances,
      named "tables".
      
      Userspace multicast routing daemons can bind to a specific table instance by
      issuing a setsockopt call using a new option MRT6_TABLE. The table number is
      stored in the raw socket data and affects all following ip6mr setsockopt(),
      getsockopt() and ioctl() calls. By default, a single table (RT6_TABLE_DFLT)
      is created with a default routing rule pointing to it. Newly created pim6reg
      devices have the table number appended ("pim6regX"), with the exception of
      devices created in the default table, which are named just "pim6reg" for
      compatibility reasons.
      
      Packets are directed to a specific table instance using routing rules,
      similar to how regular routing rules work. Currently iif, oif and mark
      are supported as keys, source and destination addresses could be supported
      additionally.
      
      Example usage:
      
      - bind pimd/xorp/... to a specific table:
      
      uint32_t table = 123;
      setsockopt(fd, SOL_IPV6, MRT6_TABLE, &table, sizeof(table));
      
      - create routing rules directing packets to the new table:
      
      # ip -6 mrule add iif eth0 lookup 123
      # ip -6 mrule add oif eth0 lookup 123
      Signed-off-by: NPatrick McHardy <kaber@trash.net>
      d1db275d
    • P
      6bd52143
    • P
      f30a7784
    • P
      ipv6: ip6mr: remove net pointer from struct mfc6_cache · b5aa30b1
      Patrick McHardy 提交于
      Now that cache entries in unres_queue don't need to be distinguished by their
      network namespace pointer anymore, we can remove it from struct mfc6_cache
      add pass the namespace as function argument to the functions that need it.
      Signed-off-by: NPatrick McHardy <kaber@trash.net>
      b5aa30b1
    • P
      ipv6: ip6mr: move unres_queue and timer to per-namespace data · c476efbc
      Patrick McHardy 提交于
      The unres_queue is currently shared between all namespaces. Following patches
      will additionally allow to create multiple multicast routing tables in each
      namespace. Having a single shared queue for all these users seems to excessive,
      move the queue and the cleanup timer to the per-namespace data to unshare it.
      
      As a side-effect, this fixes a bug in the seq file iteration functions: the
      first entry returned is always from the current namespace, entries returned
      after that may belong to any namespace.
      Signed-off-by: NPatrick McHardy <kaber@trash.net>
      c476efbc
  14. 07 5月, 2010 1 次提交
  15. 06 5月, 2010 1 次提交
    • B
      IPv6: fix IPV6_RECVERR handling of locally-generated errors · d40a4de0
      Brian Haley 提交于
      I noticed when I added support for IPV6_DONTFRAG that if you set
      IPV6_RECVERR and tried to send a UDP packet larger than 64K to an
      IPv6 destination, you'd correctly get an EMSGSIZE, but reading from
      MSG_ERRQUEUE returned the incorrect address in the cmsg:
      
      struct msghdr:
      	 msg_name         0x7fff8f3c96d0
      	 msg_namelen      28
      struct sockaddr_in6:
      	 sin6_family      10
      	 sin6_port        7639
      	 sin6_flowinfo    0
      	 sin6_addr        ::ffff:38.32.0.0
      	 sin6_scope_id    0  ((null))
      
      It should have returned this in my case:
      
      struct msghdr:
      	 msg_name         0x7fffd866b510
      	 msg_namelen      28
      struct sockaddr_in6:
      	 sin6_family      10
      	 sin6_port        7639
      	 sin6_flowinfo    0
      	 sin6_addr        2620:0:a09:e000:21f:29ff:fe57:f88b
      	 sin6_scope_id    0  ((null))
      
      The problem is that ipv6_recv_error() assumes that if the error
      wasn't generated by ICMPv6, it's an IPv4 address sitting there,
      and proceeds to create a v4-mapped address from it.
      
      Change ipv6_icmp_error() and ipv6_local_error() to set skb->protocol
      to htons(ETH_P_IPV6) so that ipv6_recv_error() knows the address
      sitting right after the extended error is IPv6, else it will
      incorrectly map the first octet into an IPv4-mapped IPv6 address
      in the cmsg structure returned in a recvmsg() call to obtain
      the error.
      Signed-off-by: NBrian Haley <brian.haley@hp.com>
      
      --
      To unsubscribe from this list: send the line "unsubscribe netdev" in
      the body of a message to majordomo@vger.kernel.org
      More majordomo info at  http://vger.kernel.org/majordomo-info.htmlSigned-off-by: NDavid S. Miller <davem@davemloft.net>
      d40a4de0
  16. 04 5月, 2010 2 次提交
  17. 02 5月, 2010 1 次提交
  18. 01 5月, 2010 1 次提交
  19. 29 4月, 2010 3 次提交
    • E
      net: ip_queue_rcv_skb() helper · f84af32c
      Eric Dumazet 提交于
      When queueing a skb to socket, we can immediately release its dst if
      target socket do not use IP_CMSG_PKTINFO.
      
      tcp_data_queue() can drop dst too.
      
      This to benefit from a hot cache line and avoid the receiver, possibly
      on another cpu, to dirty this cache line himself.
      Signed-off-by: NEric Dumazet <eric.dumazet@gmail.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      f84af32c
    • E
      net: speedup udp receive path · 4b0b72f7
      Eric Dumazet 提交于
      Since commit 95766fff ([UDP]: Add memory accounting.), 
      each received packet needs one extra sock_lock()/sock_release() pair.
      
      This added latency because of possible backlog handling. Then later,
      ticket spinlocks added yet another latency source in case of DDOS.
      
      This patch introduces lock_sock_bh() and unlock_sock_bh()
      synchronization primitives, avoiding one atomic operation and backlog
      processing.
      
      skb_free_datagram_locked() uses them instead of full blown
      lock_sock()/release_sock(). skb is orphaned inside locked section for
      proper socket memory reclaim, and finally freed outside of it.
      
      UDP receive path now take the socket spinlock only once.
      Signed-off-by: NEric Dumazet <eric.dumazet@gmail.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      4b0b72f7
    • D
      Revert "tcp: bind() fix when many ports are bound" · 8d238b25
      David S. Miller 提交于
      This reverts two commits:
      
      fda48a0d
      tcp: bind() fix when many ports are bound
      
      and a follow-on fix for it:
      
      6443bb1f
      ipv6: Fix inet6_csk_bind_conflict()
      
      It causes problems with binding listening sockets when time-wait
      sockets from a previous instance still are alive.
      
      It's too late to keep fiddling with this so late in the -rc
      series, and we'll deal with it in net-next-2.6 instead.
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      8d238b25