An error occurred fetching the project authors.
  1. 06 Apr, 2016 1 commit
  2. 18 Aug, 2015 1 commit
  3. 07 Oct, 2014 1 commit
    • Eric Dumazet's avatar
      net: better IFF_XMIT_DST_RELEASE support · 02875878
      Eric Dumazet authored
      Testing xmit_more support with netperf and connected UDP sockets,
      I found strange dst refcount false sharing.
      
      Current handling of IFF_XMIT_DST_RELEASE is not optimal.
      
      Dropping dst in validate_xmit_skb() is certainly too late in case
      packet was queued by cpu X but dequeued by cpu Y
      
      The logical point to take care of drop/force is in __dev_queue_xmit()
      before even taking qdisc lock.
      
      As Julian Anastasov pointed out, need for skb_dst() might come from some
      packet schedulers or classifiers.
      
      This patch adds new helper to cleanly express needs of various drivers
      or qdiscs/classifiers.
      
      Drivers that need skb_dst() in their ndo_start_xmit() should call
      following helper in their setup instead of the prior :
      
      	dev->priv_flags &= ~IFF_XMIT_DST_RELEASE;
      ->
      	netif_keep_dst(dev);
      
      Instead of using a single bit, we use two bits, one being
      eventually rebuilt in bonding/team drivers.
      
      The other one, is permanent and blocks IFF_XMIT_DST_RELEASE being
      rebuilt in bonding/team. Eventually, we could add something
      smarter later.
      Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
      Cc: Julian Anastasov <ja@ssi.bg>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      02875878
  4. 15 Jul, 2014 1 commit
    • Tom Gundersen's avatar
      net: set name_assign_type in alloc_netdev() · c835a677
      Tom Gundersen authored
      Extend alloc_netdev{,_mq{,s}}() to take name_assign_type as argument, and convert
      all users to pass NET_NAME_UNKNOWN.
      
      Coccinelle patch:
      
      @@
      expression sizeof_priv, name, setup, txqs, rxqs, count;
      @@
      
      (
      -alloc_netdev_mqs(sizeof_priv, name, setup, txqs, rxqs)
      +alloc_netdev_mqs(sizeof_priv, name, NET_NAME_UNKNOWN, setup, txqs, rxqs)
      |
      -alloc_netdev_mq(sizeof_priv, name, setup, count)
      +alloc_netdev_mq(sizeof_priv, name, NET_NAME_UNKNOWN, setup, count)
      |
      -alloc_netdev(sizeof_priv, name, setup)
      +alloc_netdev(sizeof_priv, name, NET_NAME_UNKNOWN, setup)
      )
      
      v9: move comments here from the wrong commit
      Signed-off-by: default avatarTom Gundersen <teg@jklm.no>
      Reviewed-by: default avatarDavid Herrmann <dh.herrmann@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      c835a677
  5. 15 Mar, 2014 1 commit
  6. 25 Feb, 2014 1 commit
    • Daniel Borkmann's avatar
      loopback: sctp: add NETIF_F_SCTP_CSUM to device features · b17c7069
      Daniel Borkmann authored
      Drivers are allowed to set NETIF_F_SCTP_CSUM if they have
      hardware crc32c checksumming support for the SCTP protocol.
      Currently, NETIF_F_SCTP_CSUM flag is available in igb,
      ixgbe, i40e/i40evf drivers and for vlan devices.
      
      If we don't have NETIF_F_SCTP_CSUM then crc32c is done
      through CPU instructions, invoked from crypto layer, or
      if not available as slow-path fallback in software.
      
      Currently, loopback device propagates checksum offloading
      feature flags in dev->features, but is missing SCTP checksum
      offloading. Therefore, account for NETIF_F_SCTP_CSUM as
      well.
      
      Before patch:
      
      ./netperf_sctp -H 192.168.0.100 -t SCTP_STREAM_MANY
      SCTP 1-TO-MANY STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 192.168.0.100 () port 0 AF_INET
      Recv   Send    Send
      Socket Socket  Message  Elapsed
      Size   Size    Size     Time     Throughput
      bytes  bytes   bytes    secs.    10^6bits/sec
      
      4194304 4194304   4096    10.00    4683.50
      
      After patch:
      
      ./netperf_sctp -H 192.168.0.100 -t SCTP_STREAM_MANY
      SCTP 1-TO-MANY STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 192.168.0.100 () port 0 AF_INET
      Recv   Send    Send
      Socket Socket  Message  Elapsed
      Size   Size    Size     Time     Throughput
      bytes  bytes   bytes    secs.    10^6bits/sec
      
      4194304 4194304   4096    10.00    15348.26
      Signed-off-by: default avatarDaniel Borkmann <dborkman@redhat.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      b17c7069
  7. 14 Feb, 2014 1 commit
  8. 13 Feb, 2014 1 commit
    • WANG Cong's avatar
      net: allow setting mac address of loopback device · 25f929fb
      WANG Cong authored
      We are trying to mirror the local traffic from lo to eth0,
      allowing setting mac address of lo to eth0 would make
      the ether addresses in these packets correct, so that
      we don't have to modify the ether header again.
      
      Since usually no one cares about its mac address (all-zero),
      it is safe to allow those who care to set its mac address.
      
      Cc: Hannes Frederic Sowa <hannes@stressinduktion.org>
      Cc: Neil Horman <nhorman@tuxdriver.com>
      Cc: Stephen Hemminger <stephen@networkplumber.org>
      Cc: Eric Dumazet <edumazet@google.com>
      Cc: David S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarCong Wang <xiyou.wangcong@gmail.com>
      Acked-by: default avatarNeil Horman <nhorman@tuxdriver.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      25f929fb
  9. 16 Jan, 2014 1 commit
  10. 06 Nov, 2013 1 commit
    • John Stultz's avatar
      net: Explicitly initialize u64_stats_sync structures for lockdep · 827da44c
      John Stultz authored
      In order to enable lockdep on seqcount/seqlock structures, we
      must explicitly initialize any locks.
      
      The u64_stats_sync structure, uses a seqcount, and thus we need
      to introduce a u64_stats_init() function and use it to initialize
      the structure.
      
      This unfortunately adds a lot of fairly trivial initialization code
      to a number of drivers. But the benefit of ensuring correctness makes
      this worth while.
      
      Because these changes are required for lockdep to be enabled, and the
      changes are quite trivial, I've not yet split this patch out into 30-some
      separate patches, as I figured it would be better to get the various
      maintainers thoughts on how to best merge this change along with
      the seqcount lockdep enablement.
      
      Feedback would be appreciated!
      Signed-off-by: default avatarJohn Stultz <john.stultz@linaro.org>
      Acked-by: default avatarJulian Anastasov <ja@ssi.bg>
      Signed-off-by: default avatarPeter Zijlstra <peterz@infradead.org>
      Cc: Alexey Kuznetsov <kuznet@ms2.inr.ac.ru>
      Cc: "David S. Miller" <davem@davemloft.net>
      Cc: Eric Dumazet <eric.dumazet@gmail.com>
      Cc: Hideaki YOSHIFUJI <yoshfuji@linux-ipv6.org>
      Cc: James Morris <jmorris@namei.org>
      Cc: Jesse Gross <jesse@nicira.com>
      Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
      Cc: "Michael S. Tsirkin" <mst@redhat.com>
      Cc: Mirko Lindner <mlindner@marvell.com>
      Cc: Patrick McHardy <kaber@trash.net>
      Cc: Roger Luethi <rl@hellgate.ch>
      Cc: Rusty Russell <rusty@rustcorp.com.au>
      Cc: Simon Horman <horms@verge.net.au>
      Cc: Stephen Hemminger <stephen@networkplumber.org>
      Cc: Steven Rostedt <rostedt@goodmis.org>
      Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
      Cc: Wensong Zhang <wensong@linux-vs.org>
      Cc: netdev@vger.kernel.org
      Link: http://lkml.kernel.org/r/1381186321-4906-2-git-send-email-john.stultz@linaro.orgSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
      827da44c
  11. 17 Sep, 2013 1 commit
  12. 27 Jan, 2013 1 commit
    • Eric Dumazet's avatar
      net: loopback: fix a dst refcounting issue · 794ed393
      Eric Dumazet authored
      Ben Greear reported crashes in ip_rcv_finish() on a stress
      test involving many macvlans.
      
      We tracked the bug to a dst use after free. ip_rcv_finish()
      was calling dst->input() and got garbage for dst->input value.
      
      It appears the bug is in loopback driver, lacking
      a skb_dst_force() before calling netif_rx().
      
      As a result, a non refcounted dst, normally protected by a
      RCU read_lock section, was escaping this section and could
      be freed before the packet being processed.
      
        [<ffffffff813a3c4d>] loopback_xmit+0x64/0x83
        [<ffffffff81477364>] dev_hard_start_xmit+0x26c/0x35e
        [<ffffffff8147771a>] dev_queue_xmit+0x2c4/0x37c
        [<ffffffff81477456>] ? dev_hard_start_xmit+0x35e/0x35e
        [<ffffffff8148cfa6>] ? eth_header+0x28/0xb6
        [<ffffffff81480f09>] neigh_resolve_output+0x176/0x1a7
        [<ffffffff814ad835>] ip_finish_output2+0x297/0x30d
        [<ffffffff814ad6d5>] ? ip_finish_output2+0x137/0x30d
        [<ffffffff814ad90e>] ip_finish_output+0x63/0x68
        [<ffffffff814ae412>] ip_output+0x61/0x67
        [<ffffffff814ab904>] dst_output+0x17/0x1b
        [<ffffffff814adb6d>] ip_local_out+0x1e/0x23
        [<ffffffff814ae1c4>] ip_queue_xmit+0x315/0x353
        [<ffffffff814adeaf>] ? ip_send_unicast_reply+0x2cc/0x2cc
        [<ffffffff814c018f>] tcp_transmit_skb+0x7ca/0x80b
        [<ffffffff814c3571>] tcp_connect+0x53c/0x587
        [<ffffffff810c2f0c>] ? getnstimeofday+0x44/0x7d
        [<ffffffff810c2f56>] ? ktime_get_real+0x11/0x3e
        [<ffffffff814c6f9b>] tcp_v4_connect+0x3c2/0x431
        [<ffffffff814d6913>] __inet_stream_connect+0x84/0x287
        [<ffffffff814d6b38>] ? inet_stream_connect+0x22/0x49
        [<ffffffff8108d695>] ? _local_bh_enable_ip+0x84/0x9f
        [<ffffffff8108d6c8>] ? local_bh_enable+0xd/0x11
        [<ffffffff8146763c>] ? lock_sock_nested+0x6e/0x79
        [<ffffffff814d6b38>] ? inet_stream_connect+0x22/0x49
        [<ffffffff814d6b49>] inet_stream_connect+0x33/0x49
        [<ffffffff814632c6>] sys_connect+0x75/0x98
      
      This bug was introduced in linux-2.6.35, in commit
      7fee226a (net: add a noref bit on skb dst)
      
      skb_dst_force() is enforced in dev_queue_xmit() for devices having a
      qdisc.
      Reported-by: default avatarBen Greear <greearb@candelatech.com>
      Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
      Tested-by: default avatarBen Greear <greearb@candelatech.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      794ed393
  13. 24 Sep, 2012 1 commit
    • Eric Dumazet's avatar
      net: loopback: set default mtu to 64K · 0cf833ae
      Eric Dumazet authored
      loopback current mtu of 16436 bytes allows no more than 3 MSS TCP
      segments per frame, or 48 Kbytes. Changing mtu to 64K allows TCP
      stack to build large frames and significantly reduces stack overhead.
      
      Performance boost on bulk TCP transferts can be up to 30 %, partly
      because we now have one ACK message for two 64KB segments, and a lower
      probability of hitting /proc/sys/net/ipv4/tcp_reordering default limit.
      Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      0cf833ae
  14. 09 Aug, 2012 1 commit
  15. 22 Jul, 2012 1 commit
  16. 28 Mar, 2012 1 commit
  17. 16 Nov, 2011 1 commit
  18. 08 May, 2011 1 commit
    • Mahesh Bandewar's avatar
      net: Allow ethtool to set interface in loopback mode. · eed2a12f
      Mahesh Bandewar authored
      This patch enables ethtool to set the loopback mode on a given interface.
      By configuring the interface in loopback mode in conjunction with a policy
      route / rule, a userland application can stress the egress / ingress path
      exposing the flows of the change in progress and potentially help developer(s)
      understand the impact of those changes without even sending a packet out
      on the network.
      
      Following set of commands illustrates one such example -
          a) ip -4 addr add 192.168.1.1/24 dev eth1
          b) ip -4 rule add from all iif eth1 lookup 250
          c) ip -4 route add local 0/0 dev lo proto kernel scope host table 250
          d) arp -Ds 192.168.1.100 eth1
          e) arp -Ds 192.168.1.200 eth1
          f) sysctl -w net.ipv4.ip_nonlocal_bind=1
          g) sysctl -w net.ipv4.conf.all.accept_local=1
          # Assuming that the machine has 8 cores
          h) taskset 000f netserver -L 192.168.1.200
          i) taskset 00f0 netperf -t TCP_CRR -L 192.168.1.100 -H 192.168.1.200 -l 30
      Signed-off-by: default avatarMahesh Bandewar <maheshb@google.com>
      Acked-by: default avatarBen Hutchings <bhutchings@solarflare.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      eed2a12f
  19. 18 Apr, 2011 1 commit
    • Krishna Kumar's avatar
      ip6_pol_route panic: Do not allow VLAN on loopback · 0553c891
      Krishna Kumar authored
      Several tests in the ipv6 routing code check IFF_LOOPBACK, and
      allowing stacking such as VLAN'ing on top of loopback results in a
      netdevice which reports IFF_LOOPBACK but really isn't the loopback
      device.
      
      Instead of spamming the ipv6 routing code with even more special tests,
      simply disallow VLAN over loopback.
      
      The result of this patch is:
      
      # modprobe 8021q
      # vconfig add lo 43
      ERROR: trying to add VLAN #43 to IF -:lo:-  error: Operation not supported
      Signed-off-by: default avatarKrishna Kumar <krkumar2@in.ibm.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      0553c891
  20. 17 Feb, 2011 1 commit
  21. 05 Oct, 2010 1 commit
    • Eric Dumazet's avatar
      net: add a core netdev->rx_dropped counter · caf586e5
      Eric Dumazet authored
      In various situations, a device provides a packet to our stack and we
      drop it before it enters protocol stack :
      - softnet backlog full (accounted in /proc/net/softnet_stat)
      - bad vlan tag (not accounted)
      - unknown/unregistered protocol (not accounted)
      
      We can handle a per-device counter of such dropped frames at core level,
      and automatically adds it to the device provided stats (rx_dropped), so
      that standard tools can be used (ifconfig, ip link, cat /proc/net/dev)
      
      This is a generalization of commit 8990f468 (net: rx_dropped
      accounting), thus reverting it.
      Signed-off-by: default avatarEric Dumazet <eric.dumazet@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      caf586e5
  22. 27 Sep, 2010 1 commit
  23. 07 Jul, 2010 1 commit
    • Eric Dumazet's avatar
      net: fix 64 bit counters on 32 bit arches · 28172739
      Eric Dumazet authored
      There is a small possibility that a reader gets incorrect values on 32
      bit arches. SNMP applications could catch incorrect counters when a
      32bit high part is changed by another stats consumer/provider.
      
      One way to solve this is to add a rtnl_link_stats64 param to all
      ndo_get_stats64() methods, and also add such a parameter to
      dev_get_stats().
      
      Rule is that we are not allowed to use dev->stats64 as a temporary
      storage for 64bit stats, but a caller provided area (usually on stack)
      
      Old drivers (only providing get_stats() method) need no changes.
      Signed-off-by: default avatarEric Dumazet <eric.dumazet@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      28172739
  24. 26 Jun, 2010 1 commit
  25. 15 Jun, 2010 1 commit
  26. 17 Feb, 2010 1 commit
  27. 02 Dec, 2009 1 commit
  28. 25 Nov, 2009 1 commit
  29. 03 Oct, 2009 1 commit
  30. 01 Sep, 2009 1 commit
  31. 06 Jul, 2009 1 commit
  32. 19 May, 2009 1 commit
    • Eric Dumazet's avatar
      net: release dst entry in dev_hard_start_xmit() · 93f154b5
      Eric Dumazet authored
      One point of contention in high network loads is the dst_release() performed
      when a transmited skb is freed. This is because NIC tx completion calls
      dev_kree_skb() long after original call to dev_queue_xmit(skb).
      
      CPU cache is cold and the atomic op in dst_release() stalls. On SMP, this is
      quite visible if one CPU is 100% handling softirqs for a network device,
      since dst_clone() is done by other cpus, involving cache line ping pongs.
      
      It seems right place to release dst is in dev_hard_start_xmit(), for most
      devices but ones that are virtual, and some exceptions.
      
      David Miller suggested to define a new device flag, set in alloc_netdev_mq()
      (so that most devices set it at init time), and carefuly unset in devices
      which dont want a NULL skb->dst in their ndo_start_xmit().
      
      List of devices that must clear this flag is :
      
      - loopback device, because it calls netif_rx() and quoting Patrick :
          "ip_route_input() doesn't accept loopback addresses, so loopback packets
           already need to have a dst_entry attached."
      - appletalk/ipddp.c : needs skb->dst in its xmit function
      
      - And all devices that call again dev_queue_xmit() from their xmit function
      (as some classifiers need skb->dst) : bonding, vlan, macvlan, eql, ifb, hdlc_fr
      Signed-off-by: default avatarEric Dumazet <dada1@cosmosbay.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      93f154b5
  33. 20 Apr, 2009 1 commit
    • Eric Dumazet's avatar
      loopback: packet drops accounting · 7eebb0b2
      Eric Dumazet authored
      We can in some situations drop packets in netif_rx()
      
      loopback driver does not report these (unlikely) drops to its stats,
      and incorrectly change packets/bytes counts.
      
      After this patch applied, "ifconfig lo" can reports these drops as in :
      
      # ifconfig lo
      lo        Link encap:Local Loopback
                inet addr:127.0.0.1  Mask:255.0.0.0
                UP LOOPBACK RUNNING  MTU:16436  Metric:1
                RX packets:692562900 errors:3228 dropped:3228 overruns:0 frame:0
                TX packets:692562900 errors:0 dropped:0 overruns:0 carrier:0
                collisions:0 txqueuelen:0
                RX bytes:2865674174 (2.6 GiB)  TX bytes:2865674174 (2.6 GiB)
      
      I initialy chose to reflect those errors only in tx_dropped/tx_errors, but David
      convinced me that it was really RX errors, as loopback_xmit() really starts
      a RX process. (calling eth_type_trans() for example, that itself pulls the ethernet header)
      
      These errors are accounted in rx_dropped/rx_errors.
      Signed-off-by: default avatarEric Dumazet <dada1@cosmosbay.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      7eebb0b2
  34. 21 Nov, 2008 1 commit
  35. 20 Nov, 2008 1 commit
  36. 08 Nov, 2008 2 commits
  37. 06 Nov, 2008 1 commit
    • Eric W. Biederman's avatar
      net: Guaranetee the proper ordering of the loopback device. · ae33bc40
      Eric W. Biederman authored
      I was recently hunting a bug that occurred in network namespace
      cleanup.  In looking at the code it became apparrent that we have
      and will continue to have cases where if we have anything going
      on in a network namespace there will be assumptions that the
      loopback device is present.   Things like sending igmp unsubscribe
      messages when we bring down network devices invokes the routing
      code which assumes that at least the loopback driver is present.
      
      Therefore to avoid magic initcall ordering hackery that is hard
      to follow and hard to get right insert a call to register the
      loopback device directly from net_dev_init().    This guarantes
      that the loopback device is the first device registered and
      the last network device to go away.
      Signed-off-by: default avatarEric W. Biederman <ebiederm@xmission.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      ae33bc40
  38. 04 Nov, 2008 1 commit
  39. 31 Oct, 2008 1 commit