24 Jul, 2009

1 commit


18 Jun, 2009

1 commit

  • commit 2b85a34e911bf483c27cfdd124aeb1605145dc80
    (net: No more expensive sock_hold()/sock_put() on each tx)
    changed initial sk_wmem_alloc value.

    We need to take into account this offset when reporting
    sk_wmem_alloc to user, in PROC_FS files or various
    ioctls (SIOCOUTQ/TIOCOUTQ)

    Signed-off-by: Eric Dumazet
    Signed-off-by: David S. Miller

    Eric Dumazet
     

03 Jun, 2009

1 commit

  • Define three accessors to get/set dst attached to a skb

    struct dst_entry *skb_dst(const struct sk_buff *skb)

    void skb_dst_set(struct sk_buff *skb, struct dst_entry *dst)

    void skb_dst_drop(struct sk_buff *skb)
    This one should replace occurrences of :
    dst_release(skb->dst)
    skb->dst = NULL;

    Delete skb->dst field

    Signed-off-by: Eric Dumazet
    Signed-off-by: David S. Miller

    Eric Dumazet
     

30 May, 2009

1 commit

  • This patch converts unicast address list to standard list_head using
    previously introduced struct netdev_hw_addr. It also relaxes the
    locking. Original spinlock (still used for multicast addresses) is not
    needed and is no longer used for a protection of this list. All
    reading and writing takes place under rtnl (with no changes).

    I also removed a possibility to specify the length of the address
    while adding or deleting unicast address. It's always dev->addr_len.

    The convertion touched especially e1000 and ixgbe codes when the
    change is not so trivial.

    Signed-off-by: Jiri Pirko

    drivers/net/bnx2.c | 13 +--
    drivers/net/e1000/e1000_main.c | 24 +++--
    drivers/net/ixgbe/ixgbe_common.c | 14 ++--
    drivers/net/ixgbe/ixgbe_common.h | 4 +-
    drivers/net/ixgbe/ixgbe_main.c | 6 +-
    drivers/net/ixgbe/ixgbe_type.h | 4 +-
    drivers/net/macvlan.c | 11 +-
    drivers/net/mv643xx_eth.c | 11 +-
    drivers/net/niu.c | 7 +-
    drivers/net/virtio_net.c | 7 +-
    drivers/s390/net/qeth_l2_main.c | 6 +-
    drivers/scsi/fcoe/fcoe.c | 16 ++--
    include/linux/netdevice.h | 18 ++--
    net/8021q/vlan.c | 4 +-
    net/8021q/vlan_dev.c | 10 +-
    net/core/dev.c | 195 +++++++++++++++++++++++++++-----------
    net/dsa/slave.c | 10 +-
    net/packet/af_packet.c | 4 +-
    18 files changed, 227 insertions(+), 137 deletions(-)
    Signed-off-by: David S. Miller

    Jiri Pirko
     

22 May, 2009

1 commit

  • The the PACKET_ADD_MEMBERSHIP and the PACKET_DROP_MEMBERSHIP setsockopt
    calls for af_packet already has all of the infrastructure needed to subscribe
    to multiple mac addresses. All that is missing is a flag to say that
    the address we want to listen on is a unicast address.

    So introduce PACKET_MR_UNICAST and wire it up to dev_unicast_add and
    dev_unicast_delete.

    Additionally I noticed that errors from dev_mc_add were not propagated
    from packet_dev_mc so fix that.

    Signed-off-by: Eric W. Biederman
    Signed-off-by: David S. Miller

    Eric W. Biederman
     

19 May, 2009

1 commit

  • New packet socket feature that makes packet socket more efficient for
    transmission.

    - It reduces number of system call through a PACKET_TX_RING mechanism,
    based on PACKET_RX_RING (Circular buffer allocated in kernel space
    which is mmapped from user space).

    - It minimizes CPU copy using fragmented SKB (almost zero copy).

    Signed-off-by: Johann Baudy
    Signed-off-by: David S. Miller

    Johann Baudy
     

15 Apr, 2009

1 commit

  • Latest tcpdump/libpcap triggers annoying messages because of high order page
    allocation failures (when lowmem exhausted or fragmented)

    These allocation errors are correctly handled so could be silent.

    [22660.208901] tcpdump: page allocation failure. order:5, mode:0xc0d0
    [22660.208921] Pid: 13866, comm: tcpdump Not tainted 2.6.30-rc2 #170
    [22660.208936] Call Trace:
    [22660.208950] [] ? printk+0x18/0x1a
    [22660.208965] [] __alloc_pages_internal+0x357/0x460
    [22660.208980] [] __get_free_pages+0x21/0x40
    [22660.208995] [] packet_set_ring+0x105/0x3d0
    [22660.209009] [] packet_setsockopt+0x21d/0x4d0
    [22660.209025] [] ? filemap_fault+0x0/0x450
    [22660.209040] [] sys_setsockopt+0x54/0xa0
    [22660.209053] [] sys_socketcall+0xef/0x270
    [22660.209067] [] sysenter_do_call+0x12/0x26

    Signed-off-by: Eric Dumazet
    Signed-off-by: David S. Miller

    Eric Dumazet
     

14 Mar, 2009

1 commit


27 Feb, 2009

1 commit


01 Feb, 2009

1 commit

  • packet_lookup_frames() fails to get user frame if current frame header
    status contains extra flags.
    This is due to the wrong assumption on the operators precedence during
    frame status tests.
    Fixed by forcing the right operators precedence order with explicit brackets.

    Signed-off-by: Paolo Abeni
    Signed-off-by: Sebastiano Di Paola
    Signed-off-by: David S. Miller

    Sebastiano Di Paola
     

31 Jan, 2009

1 commit

  • As the mmap handler gets called under mmap_sem, and we may grab
    mmap_sem elsewhere under the socket lock to access user data, we
    should avoid grabbing the socket lock in the mmap handler.

    Since the only thing we care about in the mmap handler is for
    pg_vec* to be invariant, i.e., to exclude packet_set_ring, we
    can achieve this by simply using a new mutex.

    Signed-off-by: Herbert Xu
    Tested-by: Martin MOKREJŠ
    Signed-off-by: David S. Miller

    Herbert Xu
     

24 Nov, 2008

1 commit

  • The rule of calling sock_prot_inuse_add() is that BHs must
    be disabled. Some new calls were added where this was not
    true and this tiggers warnings as reported by Ilpo.

    Fix this by adding explicit BH disabling around those call sites,
    or moving sock_prot_inuse_add() call inside an existing BH disabled
    section.

    Signed-off-by: Eric Dumazet
    Signed-off-by: David S. Miller

    Eric Dumazet
     

20 Nov, 2008

1 commit

  • This patch is a preparation to namespace conversion of /proc/net/protocols

    In order to have relevant information for PACKET protocols, we should use
    sock_prot_inuse_add() to update a (percpu and pernamespace) counter of
    inuse sockets.

    Signed-off-by: Eric Dumazet
    Signed-off-by: David S. Miller

    Eric Dumazet
     

26 Jul, 2008

1 commit

  • Removes legacy reinvent-the-wheel type thing. The generic
    machinery integrates much better to automated debugging aids
    such as kerneloops.org (and others), and is unambiguous due to
    better naming. Non-intuively BUG_TRAP() is actually equal to
    WARN_ON() rather than BUG_ON() though some might actually be
    promoted to BUG_ON() but I left that to future.

    I could make at least one BUILD_BUG_ON conversion.

    Signed-off-by: Ilpo Järvinen
    Signed-off-by: David S. Miller

    Ilpo Järvinen
     

20 Jul, 2008

1 commit


19 Jul, 2008

1 commit

  • Add new sockopt to reserve some headroom in the mmaped ring frames in
    front of the packet payload. This can be used f.i. when the VLAN header
    needs to be (re)constructed to avoid moving the entire payload.

    Signed-off-by: Patrick McHardy
    Signed-off-by: David S. Miller

    Patrick McHardy
     

15 Jul, 2008

3 commits

  • Store the VLAN tag in the auxillary data/tpacket2_hdr so userspace can
    properly deal with hardware VLAN tagging/stripping.

    Signed-off-by: Patrick McHardy
    Signed-off-by: David S. Miller

    Patrick McHardy
     
  • The tpacket_hdr is not 64 bit clean due to use of an unsigned long
    and can't be extended because the following struct sockaddr_ll needs
    to be at a fixed offset.

    Add support for a version 2 tpacket protocol that removes these
    limitations.

    Userspace can query the header size through a new getsockopt option
    and change the protocol version through a setsockopt option. The
    changes needed to switch to the new protocol version are:

    1. replace struct tpacket_hdr by struct tpacket2_hdr
    2. query header len and save
    3. set protocol version to 2
    - set up ring as usual
    4. for getting the sockaddr_ll, use (void *)hdr + TPACKET_ALIGN(hdrlen)
    instead of (void *)hdr + TPACKET_ALIGN(sizeof(struct tpacket_hdr))

    Steps 2 and 4 can be omitted if the struct sockaddr_ll isn't needed.

    Signed-off-by: Patrick McHardy
    Signed-off-by: David S. Miller

    Patrick McHardy
     
  • dev_set_promiscuity/allmulti might overflow. Commit: "netdevice: Fix
    promiscuity and allmulti overflow" in net-next makes
    dev_set_promiscuity/allmulti return error number if overflow happened.

    In af_packet, we check all positive increment for promiscuity and
    allmulti to get error return.

    Signed-off-by: Wang Chen
    Acked-by: Patrick McHardy
    Signed-off-by: David S. Miller

    Wang Chen
     

12 Jun, 2008

1 commit


13 May, 2008

1 commit

  • This patch adds needed_headroom/needed_tailroom members to struct
    net_device and updates many places that allocate sbks to use them. Not
    all of them can be converted though, and I'm sure I missed some (I
    mostly grepped for LL_RESERVED_SPACE)

    Signed-off-by: Johannes Berg
    Signed-off-by: David S. Miller

    Johannes Berg
     

26 Mar, 2008

2 commits


24 Mar, 2008

1 commit


29 Jan, 2008

5 commits


13 Nov, 2007

1 commit


11 Nov, 2007

2 commits


01 Nov, 2007

1 commit

  • Finally, the zero_it argument can be completely removed from
    the callers and from the function prototype.

    Besides, fix the checkpatch.pl warnings about using the
    assignments inside if-s.

    This patch is rather big, and it is a part of the previous one.
    I splitted it wishing to make the patches more readable. Hope
    this particular split helped.

    Signed-off-by: Pavel Emelyanov
    Signed-off-by: David S. Miller

    Pavel Emelyanov
     

19 Oct, 2007

1 commit


11 Oct, 2007

6 commits

  • Since hardware header operations are part of the protocol class
    not the device instance, make them into a separate object and
    save memory.

    Signed-off-by: Stephen Hemminger
    Signed-off-by: David S. Miller

    Stephen Hemminger
     
  • Wrap the hard_header_parse function to simplify next step of
    header_ops conversion.

    Signed-off-by: Stephen Hemminger
    Signed-off-by: David S. Miller

    Stephen Hemminger
     
  • Add inline for common usage of hardware header creation, and
    fix bug in IPV6 mcast where the assumption about negative return is
    an errno. Negative return from hard_header means not enough space
    was available,(ie -N bytes).

    Signed-off-by: Stephen Hemminger
    Signed-off-by: David S. Miller

    Stephen Hemminger
     
  • This patch makes most of the generic device layer network
    namespace safe. This patch makes dev_base_head a
    network namespace variable, and then it picks up
    a few associated variables. The functions:
    dev_getbyhwaddr
    dev_getfirsthwbytype
    dev_get_by_flags
    dev_get_by_name
    __dev_get_by_name
    dev_get_by_index
    __dev_get_by_index
    dev_ioctl
    dev_ethtool
    dev_load
    wireless_process_ioctl

    were modified to take a network namespace argument, and
    deal with it.

    vlan_ioctl_set and brioctl_set were modified so their
    hooks will receive a network namespace argument.

    So basically anthing in the core of the network stack that was
    affected to by the change of dev_base was modified to handle
    multiple network namespaces. The rest of the network stack was
    simply modified to explicitly use &init_net the initial network
    namespace. This can be fixed when those components of the network
    stack are modified to handle multiple network namespaces.

    For now the ifindex generator is left global.

    Fundametally ifindex numbers are per namespace, or else
    we will have corner case problems with migration when
    we get that far.

    At the same time there are assumptions in the network stack
    that the ifindex of a network device won't change. Making
    the ifindex number global seems a good compromise until
    the network stack can cope with ifindex changes when
    you change namespaces, and the like.

    Signed-off-by: Eric W. Biederman
    Signed-off-by: David S. Miller

    Eric W. Biederman
     
  • Every user of the network device notifiers is either a protocol
    stack or a pseudo device. If a protocol stack that does not have
    support for multiple network namespaces receives an event for a
    device that is not in the initial network namespace it quite possibly
    can get confused and do the wrong thing.

    To avoid problems until all of the protocol stacks are converted
    this patch modifies all netdev event handlers to ignore events on
    devices that are not in the initial network namespace.

    As the rest of the code is made network namespace aware these
    checks can be removed.

    Signed-off-by: Eric W. Biederman
    Signed-off-by: David S. Miller

    Eric W. Biederman
     
  • This patch modifies every packet receive function
    registered with dev_add_pack() to drop packets if they
    are not from the initial network namespace.

    This should ensure that the various network stacks do
    not receive packets in a anything but the initial network
    namespace until the code has been converted and is ready
    for them.

    Signed-off-by: Eric W. Biederman
    Signed-off-by: David S. Miller

    Eric W. Biederman