15 Jul, 2016

1 commit


18 May, 2016

1 commit

  • The problem is that fib_info->nh is [0] so the struct fib_info
    allocation size depends on number of nexthops. If we just copy fib_info,
    we do not copy the nexthops info and driver accesses memory which is not
    ours.

    Given the fact that fib4 does not defer operations and therefore it does
    not need copy, just pass the pointer down to drivers as it was done
    before.

    Fixes: 850d0cbc91 ("switchdev: remove pointers from switchdev objects")
    Signed-off-by: Jiri Pirko
    Signed-off-by: David S. Miller

    Jiri Pirko
     

15 May, 2016

1 commit


25 Apr, 2016

1 commit

  • When using switchdev deferred operation (SWITCHDEV_F_DEFER), the operation
    is executed in different context and the application doesn't have any way
    to get the operation real status.

    Adding a completion callback fixes that. This patch adds fields to
    switchdev_attr and switchdev_obj "complete_priv" field which is used by
    the "complete" callback.

    Application can set a complete function which will be called once the
    operation executed.

    Signed-off-by: Elad Raz
    Signed-off-by: Jiri Pirko
    Reviewed-by: Ido Schimmel
    Acked-by: Nikolay Aleksandrov
    Signed-off-by: David S. Miller

    Elad Raz
     

25 Mar, 2016

1 commit


27 Feb, 2016

1 commit

  • When the send skbuff reaches the end, nlmsg_put and friends returns
    -EMSGSIZE but it is silently thrown away in ndo_fdb_dump. It is called
    within a for_each_netdev loop and the first fdb entry of a following
    netdev could fit in the remaining skbuff. This breaks the mechanism
    of cb->args[0] and idx to keep track of the entries that are already
    dumped, which results missing entries in bridge fdb show command.

    Signed-off-by: Minoura Makoto
    Signed-off-by: David S. Miller

    MINOURA Makoto / 箕浦 真
     

29 Jan, 2016

1 commit

  • When switchdev drivers process FDB notifications from the underlying
    device they resolve the netdev to which the entry points to and notify
    the bridge using the switchdev notifier.

    However, since the RTNL mutex is not held there is nothing preventing
    the netdev from disappearing in the middle, which will cause
    br_switchdev_event() to dereference a non-existing netdev.

    Make switchdev drivers hold the lock at the beginning of the
    notification processing session and release it once it ends, after
    notifying the bridge.

    Also, remove switchdev_mutex and fdb_lock, as they are no longer needed
    when RTNL mutex is held.

    Fixes: 03bf0c281234 ("switchdev: introduce switchdev notifier")
    Signed-off-by: Ido Schimmel
    Signed-off-by: Jiri Pirko
    Signed-off-by: David S. Miller

    Ido Schimmel
     

11 Jan, 2016

1 commit

  • Define HW multicast entry: MAC and VID.
    Using a MAC address simplifies support for both IPV4 and IPv6.

    Signed-off-by: Elad Raz
    Signed-off-by: Ido Schimmel
    Signed-off-by: Jiri Pirko
    Signed-off-by: David S. Miller

    Elad Raz
     

16 Dec, 2015

1 commit

  • switchdev drivers need to know the netdev on which the switchdev op was
    invoked. For example, the STP state of a VLAN interface configured on top
    of a port can change while being member in a bridge. In this case, the
    underlying driver should only change the STP state of that particular
    VLAN and not of all the VLANs configured on the port.

    However, current switchdev infrastructure only passes the port netdev down
    to the driver. Solve that by passing the original device down to the
    driver as part of the required switchdev object / attribute.

    This doesn't entail any change in current switchdev drivers. It simply
    enables those supporting stacked devices to know the originating device
    and act accordingly.

    Signed-off-by: Ido Schimmel
    Signed-off-by: Jiri Pirko
    Signed-off-by: David S. Miller

    Ido Schimmel
     

04 Nov, 2015

1 commit

  • Caller passing down the SKIP_EOPNOTSUPP switchdev flag expects that
    -EOPNOTSUPP cannot be returned. But in case of direct op call without
    recurtion, this may happen. So fix this by checking it always on the
    end of __switchdev_port_attr_set function.

    Fixes: 464314ea6c11 ("switchdev: skip over ports returning -EOPNOTSUPP when recursing ports")
    Signed-off-by: Jiri Pirko
    Signed-off-by: David S. Miller

    Jiri Pirko
     

30 Oct, 2015

3 commits


20 Oct, 2015

1 commit


15 Oct, 2015

6 commits


13 Oct, 2015

2 commits


12 Oct, 2015

1 commit


03 Oct, 2015

6 commits


30 Sep, 2015

5 commits

  • Similar to the notifier_call callback of a notifier_block, change the
    function signature of switchdev add and del operations to:

    int switchdev_port_obj_add/del(struct net_device *dev,
    enum switchdev_obj_id id, void *obj);

    This allows the caller to pass a specific switchdev_obj_* structure
    instead of the generic switchdev_obj one.

    Drivers implementation of these operations and switchdev have been
    changed accordingly.

    Signed-off-by: Vivien Didelot
    Signed-off-by: David S. Miller

    Vivien Didelot
     
  • Similar to the notifier_call callback of a notifier_block, change the
    function signature of switchdev dump operation to:

    int switchdev_port_obj_dump(struct net_device *dev,
    enum switchdev_obj_id id, void *obj,
    int (*cb)(void *obj));

    This allows the caller to pass and expect back a specific
    switchdev_obj_* structure instead of the generic switchdev_obj one.

    Drivers implementation of dump operation can now expect this specific
    structure and call the callback with it. Drivers have been changed
    accordingly.

    Signed-off-by: Vivien Didelot
    Signed-off-by: David S. Miller

    Vivien Didelot
     
  • The net_device associated to a dump operation does not have to be passed
    to the callback. switchdev stores it in a superset struct, if needed.

    Also some drivers (such as DSA drivers) may not have easy access to it.

    This will simplify pushing the callback function down to the drivers.

    Signed-off-by: Vivien Didelot
    Signed-off-by: David S. Miller

    Vivien Didelot
     
  • The FDB dump callback requires the related net_device so move it to the
    struct switchdev_fdb_dump superset instead of using a callback param.

    With this done, it'll be simpler to change the dump function signature.

    Signed-off-by: Vivien Didelot
    Signed-off-by: David S. Miller

    Vivien Didelot
     
  • The static switchdev_port_vlan_dump_put function does not need the
    net_device parameter, so remove it.

    Signed-off-by: Vivien Didelot
    Signed-off-by: David S. Miller

    Vivien Didelot
     

25 Sep, 2015

5 commits


06 Sep, 2015

1 commit