29 Apr, 2019
7 commits
-
Now that tag drivers dynamically register, we don't need the static
table. Remove it. This also means the tag driver structures can be
made static.Signed-off-by: Andrew Lunn
Reviewed-by: Florian Fainelli
Signed-off-by: David S. Miller -
A DSA tag driver module will need to register the tag protocols it
implements with the DSA core. Add macros containing this boiler plate.The registration/unregistration code is currently just a stub. A Later
patch will add the real implementation.Signed-off-by: Andrew Lunn
Reviewed-by: Florian Fainelliv2
Fix indent of #endif
Rewrite to move list pointer into a new structure
v3
Move kdoc next to macro
Fix THIS_MODULE indentationSigned-off-by: David S. Miller
-
In order that we can match the tagging protocol a switch driver
request to the tagger, we need to know what protocol the tagger
supports. Add this information to the ops structure.Signed-off-by: Andrew Lunn
Reviewed-by: Florian Fainelliv2
More tag protocol to end of structure to keep hot members at the beginning.Signed-off-by: David S. Miller
-
All the tag drivers are some variant of GPL. Add a MODULE_LICENSE()
indicating this, so the drivers can later be compiled as modules.Signed-off-by: Andrew Lunn
Reviewed-by: Florian Fainelli
Signed-off-by: David S. Miller -
When the tag drivers become modules, we will need to dynamically load
them based on what the switch drivers need. Add aliases to map between
the TAG protocol and the driver.In order to do this, we need the tag protocol number as something
which the C pre-processor can stringinfy. Only the compiler knows the
value of an enum, CPP cannot use them. So add #defines.Signed-off-by: Andrew Lunn
Reviewed-by: Florian Fainelli
Signed-off-by: David S. Miller -
Rather than keep a list to map a tagger ops to a name, place the name
into the ops structure. This removes the hard coded list, a step
towards making the taggers more dynamic.Signed-off-by: Andrew Lunn
Reviewed-by: Florian Fainelliv2:
Move name to end of structure, keeping the hot entries at the beginning.Signed-off-by: David S. Miller
-
Add an SPDX header, and remove the license boilerplate text.
Signed-off-by: Andrew Lunn
Reviewed-by: Florian Fainelli
Signed-off-by: David S. Miller
07 Dec, 2018
1 commit
-
Each DSA tag protocol needs to add additional headers to the Ethernet
frame in order to direct it towards a specific switch egress port. It
must also remove the head from a frame received from a
switch. Indicate the maximum size of these headers in the tag protocol
ops structure, so the core can take these overheads into account.Signed-off-by: Andrew Lunn
Signed-off-by: David S. Miller
14 Nov, 2017
1 commit
-
The lan9303 set bits in the host CPU tag indicating if a ingress frame
is a trapped IGMP or STP frame. Use these bits to calculate
skb->offload_fwd_mark more efficiently.Signed-off-by: Egil Hjelmeland
Signed-off-by: David S. Miller
11 Nov, 2017
1 commit
-
Now that IGMP packets no longer is flooded in HW, we want the SW bridge to
forward packets based on bridge configuration. To make that happen,
IGMP packets must have skb->offload_fwd_mark = 0.Signed-off-by: Egil Hjelmeland
Signed-off-by: David S. Miller
08 Nov, 2017
1 commit
-
Remove scripts/checkpatch.pl CHECKs by adjusting indenting.
Signed-off-by: Egil Hjelmeland
Reviewed-by: Vivien Didelot
Signed-off-by: David S. Miller
01 Nov, 2017
3 commits
-
The chip flood broadcast and unknown multicast frames.
On receive set skb->offload_fwd_mark to prevent the SW from flooding to the
same ports.One exception: Because the ALR is set up to forward STP BPDUs only to CPU,
the SW bridge should flood STP BPDUs if local STP is not enabled.
This is archived by not setting skb->offload_fwd_mark on STP BPDUs.Signed-off-by: Egil Hjelmeland
Reviewed-by: Andrew Lunn
Signed-off-by: David S. Miller -
STP BPDUs arriving on user ports must sent to CPU port only,
for processing by the SW bridge.Add an ALR entry with STP state override to fix that.
Signed-off-by: Egil Hjelmeland
Reviewed-by: Andrew Lunn
Signed-off-by: David S. Miller -
lan9303_xmit_use_arl() introduced in previous patch set is wrong.
The chip flood broadcast and unknown multicast frames. The effect is that
broadcasts and multicasts are duplicated on egress. It is not possible to
configure the chip to direct unknown multicasts to CPU port only.This means that only unicast frames can be transmitted using ALR lookup.
Signed-off-by: Egil Hjelmeland
Reviewed-by: Andrew Lunn
Signed-off-by: David S. Miller
27 Oct, 2017
1 commit
-
When CPU transmit directly to port using tag, the LAN9303 does not
learn MAC addresses received on the CPU port into the ALR.
ALR learning is performed only when transmitting using ALR lookup.Solution:
If the two external ports are bridged and the packet is not STP BPDU,
then use ALR lookup to allow ALR learning on CPU port.
Otherwise transmit directly to port with STP state override.Signed-off-by: Egil Hjelmeland
Reviewed-by: Andrew Lunn
Signed-off-by: David S. Miller
18 Oct, 2017
2 commits
-
The dsa_master_get_slave is slightly confusing since the idiomatic "get"
term often suggests reference counting, in symmetry to "put".Rename it to dsa_master_find_slave to make the look up operation clear.
Signed-off-by: Vivien Didelot
Signed-off-by: David S. Miller -
Many portions of DSA core code require to get the dsa_port structure
corresponding to a slave net_device. For this purpose, introduce a
dsa_slave_to_port() helper.Signed-off-by: Vivien Didelot
Reviewed-by: Florian Fainelli
Signed-off-by: David S. Miller
01 Oct, 2017
1 commit
-
The DSA tagging code does not need to know about the DSA architecture,
it only needs to return the slave device corresponding to the source
port index (and eventually the source device index for cascade-capable
switches) parsed from the frame received on the master device.For this purpose, provide an inline dsa_master_get_slave helper which
validates the device and port indexes and look up the slave device.This makes the tagging rcv functions more concise and robust, and also
makes dsa_get_cpu_port obsolete.Signed-off-by: Vivien Didelot
Reviewed-by: Florian Fainelli
Signed-off-by: David S. Miller
22 Aug, 2017
1 commit
-
compile tested only, but saw no warnings/errors with
allmodconfig build.Signed-off-by: Florian Westphal
Signed-off-by: David S. Miller
09 Aug, 2017
1 commit
-
Save 2628 bytes on arm eabi by allocate only the required 3 ports.
Now that ds->num_ports is correct: In net/dsa/tag_lan9303.c
eliminate duplicate LAN9303_MAX_PORTS, use ds->num_ports.
(Matching the pattern of other net/dsa/tag_xxx.c files.)Signed-off-by: Egil Hjelmeland
Reviewed-by: Florian Fainelli
Reviewed-by: Vivien Didelot
Signed-off-by: David S. Miller
02 Jun, 2017
1 commit
-
As of a86d8becc3f0 ("net: dsa: Factor bottom tag receive functions"),
the rcv caller frees the original SKB in case or error.Be symmetric with that and make the xmit caller do the same.
At the same time, fix the checkpatch NULL comparison check:
CHECK: Comparison to NULL could be written "!nskb"
#208: FILE: net/dsa/tag_trailer.c:35:
+ if (nskb == NULL)Signed-off-by: Vivien Didelot
Reviewed-by: Florian Fainelli
Signed-off-by: David S. Miller
18 May, 2017
1 commit
-
The public include/net/dsa.h file is meant for DSA drivers, while all
DSA core files share a common private header net/dsa/dsa_priv.h file.Ensure that dsa_priv.h is the only DSA core file to include net/dsa.h,
and add a new line to separate absolute and relative headers at the same
time.Signed-off-by: Vivien Didelot
Signed-off-by: David S. Miller
21 Apr, 2017
2 commits
-
tag_lan9303.c does check for a NULL dst but that's already checked by
dsa_switch_rcv() one layer above.Signed-off-by: Florian Fainelli
Acked-by: Juergen Borleis
Signed-off-by: David S. Miller -
To define the outgoing port and to discover the incoming port a regular
VLAN tag is used by the LAN9303. But its VID meaning is 'special'.This tag handler/filter depends on some hardware features which must be
enabled in the device to provide and make use of this special VLAN tag
to control the destination and the source of an ethernet packet.Signed-off-by: Juergen Borleis
Reviewed-by: Florian Fainelli
Signed-off-by: David S. Miller