21 Nov, 2008

1 commit

  • This patch moves neigh_setup and hard_start_xmit into the network device ops
    structure. For bisection, fix all the previously converted drivers as well.
    Bonding driver took the biggest hit on this.

    Added a prefetch of the hard_start_xmit in the fast path to try and reduce
    any impact this would have.

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

    Stephen Hemminger
     

20 Nov, 2008

1 commit


29 Oct, 2008

2 commits

  • The veth network device is stored in a list in the netdev private.
    AFAICS, this list is never used so I removed this list from the code.

    Signed-off-by: Daniel Lezcano
    Signed-off-by: David S. Miller

    Daniel Lezcano
     
  • The veth private structure contains a netdev pointer refering to its peer.
    This field is never used and it is pointless because if we can access,
    the veth_priv, that means we already have the netdev which is stored
    in veth_priv->dev.

    Signed-off-by: Daniel Lezcano
    Signed-off-by: David S. Miller

    Daniel Lezcano
     

26 Mar, 2008

1 commit


20 Feb, 2008

1 commit

  • When deleting the veth driver, veth_close calls netif_carrier_off
    for the two extremities of the network device. netif_carrier_off on
    the peer device will fire an event and hold a reference on the peer
    device. Just after, the peer is unregistered taking the rtnl_lock while
    the linkwatch_event is scheduled. If __linkwatch_run_queue does not
    occurs before the unregistering, unregister_netdevice will wait for
    the dev refcount to reach zero holding the rtnl_lock and linkwatch_event
    will wait for the rtnl_lock and hold the dev refcount.

    Signed-off-by: Daniel Lezcano
    Signed-off-by: David S. Miller

    Daniel Lezcano
     

21 Jan, 2008

1 commit

  • When unregistering the rtnl_link_ops, all existing devices using
    the ops are destroyed. With nested devices this may lead to a
    use-after-free despite the use of for_each_netdev_safe() in case
    the upper device is next in the device list and is destroyed
    by the NETDEV_UNREGISTER notifier.

    The easy fix is to restart scanning the device list after removing
    a device. Alternatively we could add new devices to the front of
    the list to avoid having dependant devices follow the device they
    depend on. A third option would be to only restart scanning if
    dev->iflink of the next device matches dev->ifindex of the current
    one. For now this seems like the safest solution.

    With this patch, the veth rtnl_link_ops unregistration can use
    rtnl_link_unregister() directly since it now also handles destruction
    of multiple devices at once.

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

    Patrick McHardy
     

27 Dec, 2007

1 commit


11 Oct, 2007

3 commits

  • These have been superceded by the new ->get_sset_count() hook.

    Signed-off-by: Jeff Garzik
    Signed-off-by: David S. Miller

    Jeff Garzik
     
  • 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
     
  • Veth stands for Virtual ETHernet. It is a simple tunnel driver
    that works at the link layer and looks like a pair of ethernet
    devices interconnected with each other.

    Mainly it allows to communicate between network namespaces but
    it can be used as is as well.

    The newlink callback is organized that way to make it easy to
    create the peer device in the separate namespace when we have
    them in kernel.

    This implementation uses another interface - the RTM_NRELINK
    message introduced by Patric.

    Bug fixes from Daniel Lezcano.

    Signed-off-by: Pavel Emelyanov
    Acked-by: Patrick McHardy
    Signed-off-by: David S. Miller

    Pavel Emelyanov