15 Jul, 2016
1 commit
-
This helper serves to know if two switchdev port netdevices belong to the
same HW ASIC, e.g to figure out if forwarding offload is possible between them.Signed-off-by: Or Gerlitz
Signed-off-by: Saeed Mahameed
Signed-off-by: David S. Miller
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
15 May, 2016
1 commit
-
Switchdev has been around for quite a while now, putting "EXPERIMENTAL"
in the description is no longer accurate, drop it.Signed-off-by: Florian Fainelli
Acked-by: Jiri Pirko
Signed-off-by: David S. Miller
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
25 Mar, 2016
1 commit
-
Two minor typo.
Signed-off-by: Nicolas Dichtel
Signed-off-by: David S. Miller
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
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
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
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
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
30 Oct, 2015
3 commits
-
Fixes: 4d429c5dd ("switchdev: introduce possibility to defer obj_add/del")
Signed-off-by: Scott Feldman
Acked-by: Jiri Pirko
Signed-off-by: David S. Miller -
When adding vlans with multiple IFLA_BRIDGE_VLAN_INFO attrs set in AFSPEC,
we would wipe the vlan obj struct after the first IFLA_BRIDGE_VLAN_INFO.
Fix this by only clearing what's necessary on each IFLA_BRIDGE_VLAN_INFO
iteration.Fixes: 9e8f4a54 ("switchdev: push object ID back to object structure")
Signed-off-by: Scott Feldman
Acked-by: Jiri Pirko
Signed-off-by: David S. Miller -
Allow devices supporting this feature to control the flooding of unknown
unicast traffic, by making switchdev infrastructure propagate this setting
to the switch driver.Signed-off-by: Ido Schimmel
Signed-off-by: Jiri Pirko
Signed-off-by: David S. Miller
20 Oct, 2015
1 commit
-
Conflicts:
drivers/net/usb/asix_common.c
net/ipv4/inet_connection_sock.c
net/switchdev/switchdev.cIn the inet_connection_sock.c case the request socket hashing scheme
is completely different in net-next.The other two conflicts were overlapping changes.
Signed-off-by: David S. Miller
15 Oct, 2015
6 commits
-
netdev_for_each_lower_dev has to be called with rtnl mutex held. So
better enforce it in switchdev functions.Signed-off-by: Jiri Pirko
Signed-off-by: David S. Miller -
Similar to the attr usecase, the caller knows if he is holding RTNL and is
in atomic section. So let the called to decide the correct call variant.This allows drivers to sleep inside their ops and wait for hw to get the
operation status. Then the status is propagated into switchdev core.
This avoids silent errors in drivers.Signed-off-by: Jiri Pirko
Signed-off-by: David S. Miller -
When object is used in deferred work, we cannot use pointers in
switchdev object structures because the memory they point at may be already
used by someone else. So rather do local copy of the value.Signed-off-by: Jiri Pirko
Acked-by: Scott Feldman
Reviewed-by: John Fastabend
Signed-off-by: David S. Miller -
Caller should know if he can call attr_set directly (when holding RTNL)
or if he has to defer the att_set processing for later.This also allows drivers to sleep inside attr_set and report operation
status back to switchdev core. Switchdev core then warns if status is
not ok, instead of silent errors happening in drivers.Benefit from newly introduced switchdev deferred ops infrastructure.
Signed-off-by: Jiri Pirko
Signed-off-by: David S. Miller -
Signed-off-by: Jiri Pirko
Reviewed-by: Vivien Didelot
Signed-off-by: David S. Miller -
Introduce infrastructure which will be used internally to defer ops.
Note that the deferred ops are queued up and either are processed by
scheduled work or explicitly by user calling deferred_process function.Signed-off-by: Jiri Pirko
Signed-off-by: David S. Miller
13 Oct, 2015
2 commits
-
VLANs 0 and 4095 are reserved and shouldn't be used, add checks to
switchdev similar to the bridge. Also make sure ids above 4095 cannot
be passed either.Fixes: 47f8328bb1a4 ("switchdev: add new switchdev bridge setlink")
Signed-off-by: Nikolay Aleksandrov
Acked-by: Scott Feldman
Signed-off-by: David S. Miller -
We shouldn't allow BRIDGE_VLAN_INFO_PVID flag in VLAN ranges.
Signed-off-by: Nikolay Aleksandrov
Acked-by: Elad Raz
Acked-by: Jiri Pirko
Signed-off-by: David S. Miller
12 Oct, 2015
1 commit
-
This allows us to recurse over all the ports, skipping over unsupporting
ports. Without the change, the recursion would stop at first unsupported
port.Signed-off-by: Scott Feldman
Acked-by: Jiri Pirko
Signed-off-by: David S. Miller
03 Oct, 2015
6 commits
-
Suggested-by: Scott Feldman
Signed-off-by: Jiri Pirko
Acked-by: Scott Feldman
Reviewed-by: Vivien Didelot
Signed-off-by: David S. Miller -
Replace "void *obj" with a generic structure. Introduce couple of
helpers along that.Signed-off-by: Jiri Pirko
Acked-by: Scott Feldman
Reviewed-by: Vivien Didelot
Signed-off-by: David S. Miller -
Make the struct name in sync with object id name.
Suggested-by: Vivien Didelot
Signed-off-by: Jiri Pirko
Acked-by: Scott Feldman
Reviewed-by: Vivien Didelot
Signed-off-by: David S. Miller -
Make the struct name in sync with object id name.
Suggested-by: Vivien Didelot
Signed-off-by: Jiri Pirko
Acked-by: Scott Feldman
Reviewed-by: Vivien Didelot
Signed-off-by: David S. Miller -
To be aligned with obj.
Signed-off-by: Jiri Pirko
Acked-by: Scott Feldman
Reviewed-by: Vivien Didelot
Signed-off-by: David S. Miller -
Suggested-by: Vivien Didelot
Signed-off-by: Jiri Pirko
Acked-by: Scott Feldman
Reviewed-by: Vivien Didelot
Signed-off-by: David S. Miller
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 -
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 -
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 -
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 -
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
25 Sep, 2015
5 commits
-
Now, since we have only 2 values for transaction phase, just use bool.
Signed-off-by: Jiri Pirko
Signed-off-by: David S. Miller -
No longer used by drivers, as transaction queue with item destructors
takes care of abort phase internally in switchdev code. So kill it.Signed-off-by: Jiri Pirko
Signed-off-by: David S. Miller -
Before it disappears completely, move transaction phase enum under
transaction structure and make attr/obj structures a bit cleaner.Signed-off-by: Jiri Pirko
Signed-off-by: David S. Miller -
Now, the memory allocation in prepare/commit state is done separatelly
in each driver (rocker). Introduce the similar mechanism in generic
switchdev code, in form of queue. That can be used not only for memory
allocations, but also for different items. Abort item destruction
is handled as well.Signed-off-by: Jiri Pirko
Signed-off-by: David S. Miller -
This is temporary, name "trans" will be used for something else and
"trans_ph" will eventually disappear.Signed-off-by: Jiri Pirko
Signed-off-by: David S. Miller
06 Sep, 2015
1 commit
-
switchdev_port_fdb_dump is used as .ndo_fdb_dump. Its return value is
idx, so we cannot return errval.Fixes: 45d4122ca7cd ("switchdev: add support for fdb add/del/dump via switchdev_port_obj ops.")
Signed-off-by: Jiri Pirko
Acked-by: Sridhar Samudrala
Acked-by: Scott Feldman
Signed-off-by: David S. Miller