linux/drivers/net/ethernet
Vladimir Oltean 9403c158b8 net: mscc: ocelot: support IPv4, IPv6 and plain Ethernet mdb entries
The current procedure for installing a multicast address is hardcoded
for IPv4. But, in the ocelot hardware, there are 3 different procedures
for IPv4, IPv6 and for regular L2 multicast.

For IPv6 (33-33-xx-xx-xx-xx), it's the same as for IPv4
(01-00-5e-xx-xx-xx), except that the destination port mask is stuffed
into first 2 bytes of the MAC address except into first 3 bytes.

For plain Ethernet multicast, there's no port-in-address stuffing going
on, instead the DEST_IDX (pointer to PGID) is used there, just as for
unicast. So we have to use one of the nonreserved multicast PGIDs that
the hardware has allocated for this purpose.

This patch classifies the type of multicast address based on its first
bytes, then redirects to one of the 3 different hardware procedures.

Note that this gives us a really better way of redirecting PTP frames
sent at 01-1b-19-00-00-00 to the CPU. Previously, Yangbo Lu tried to add
a trapping rule for PTP EtherType but got a lot of pushback:

https://patchwork.ozlabs.org/project/netdev/patch/20190813025214.18601-5-yangbo.lu@nxp.com/

But right now, that isn't needed at all. The application stack (ptp4l)
does this for the PTP multicast addresses it's interested in (which are
configurable, and include 01-1b-19-00-00-00):

	memset(&mreq, 0, sizeof(mreq));
	mreq.mr_ifindex = index;
	mreq.mr_type = PACKET_MR_MULTICAST;
	mreq.mr_alen = MAC_LEN;
	memcpy(mreq.mr_address, addr1, MAC_LEN);

	err1 = setsockopt(fd, SOL_PACKET, PACKET_ADD_MEMBERSHIP, &mreq,
			  sizeof(mreq));

Into the kernel, this translates into a dev_mc_add on the switch network
interfaces, and our drivers know that it means they should translate it
into a host MDB address (make the CPU port be the destination).
Previously, this was broken because all mdb addresses were treated as
IPv4 (which 01-1b-19-00-00-00 obviously is not).

Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2020-06-22 20:41:05 -07:00
..
3com treewide: replace '---help---' in Kconfig files with 'help' 2020-06-14 01:57:21 +09:00
8390 treewide: replace '---help---' in Kconfig files with 'help' 2020-06-14 01:57:21 +09:00
adaptec treewide: replace '---help---' in Kconfig files with 'help' 2020-06-14 01:57:21 +09:00
aeroflex treewide: replace '---help---' in Kconfig files with 'help' 2020-06-14 01:57:21 +09:00
agere treewide: replace '---help---' in Kconfig files with 'help' 2020-06-14 01:57:21 +09:00
alacritech treewide: replace '---help---' in Kconfig files with 'help' 2020-06-14 01:57:21 +09:00
allwinner treewide: replace '---help---' in Kconfig files with 'help' 2020-06-14 01:57:21 +09:00
alteon treewide: replace '---help---' in Kconfig files with 'help' 2020-06-14 01:57:21 +09:00
altera treewide: replace '---help---' in Kconfig files with 'help' 2020-06-14 01:57:21 +09:00
amazon treewide: replace '---help---' in Kconfig files with 'help' 2020-06-14 01:57:21 +09:00
amd treewide: replace '---help---' in Kconfig files with 'help' 2020-06-14 01:57:21 +09:00
apm
apple treewide: replace '---help---' in Kconfig files with 'help' 2020-06-14 01:57:21 +09:00
aquantia treewide: replace '---help---' in Kconfig files with 'help' 2020-06-14 01:57:21 +09:00
arc treewide: replace '---help---' in Kconfig files with 'help' 2020-06-14 01:57:21 +09:00
atheros net: alx: fix race condition in alx_remove 2020-06-15 13:20:14 -07:00
aurora
broadcom bnxt_en: Add board.serial_number field to info_get cb 2020-06-22 16:15:05 -07:00
brocade treewide: replace '---help---' in Kconfig files with 'help' 2020-06-14 01:57:21 +09:00
cadence net: macb: Only disable NAPI on the actual error path 2020-06-15 13:10:34 -07:00
calxeda
cavium net: tso: cache transport header length 2020-06-18 20:46:23 -07:00
chelsio cxgb4: Use struct_size() helper 2020-06-19 13:42:08 -07:00
cirrus treewide: replace '---help---' in Kconfig files with 'help' 2020-06-14 01:57:21 +09:00
cisco treewide: replace '---help---' in Kconfig files with 'help' 2020-06-14 01:57:21 +09:00
cortina treewide: replace '---help---' in Kconfig files with 'help' 2020-06-14 01:57:21 +09:00
davicom treewide: replace '---help---' in Kconfig files with 'help' 2020-06-14 01:57:21 +09:00
dec treewide: replace '---help---' in Kconfig files with 'help' 2020-06-14 01:57:21 +09:00
dlink treewide: replace '---help---' in Kconfig files with 'help' 2020-06-14 01:57:21 +09:00
emulex treewide: replace '---help---' in Kconfig files with 'help' 2020-06-14 01:57:21 +09:00
ezchip treewide: replace '---help---' in Kconfig files with 'help' 2020-06-14 01:57:21 +09:00
faraday treewide: replace '---help---' in Kconfig files with 'help' 2020-06-14 01:57:21 +09:00
freescale net: qos offload add flow status with dropped count 2020-06-19 12:53:30 -07:00
fujitsu treewide: replace '---help---' in Kconfig files with 'help' 2020-06-14 01:57:21 +09:00
google
hisilicon net: hns3: streaming dma buffer sync between cpu and device 2020-06-18 20:43:10 -07:00
huawei treewide: replace '---help---' in Kconfig files with 'help' 2020-06-14 01:57:21 +09:00
i825xx treewide: replace '---help---' in Kconfig files with 'help' 2020-06-14 01:57:21 +09:00
ibm ibmvnic: Harden device login requests 2020-06-15 13:18:13 -07:00
intel ixgbe_ipsec: become aware of when running as a bonding slave 2020-06-22 15:38:57 -07:00
marvell net: mvpp2: set xlg flow control in mvpp2_mac_link_up() 2020-06-20 21:38:26 -07:00
mediatek net: ethernet: mtk-star-emac: simplify interrupt handling 2020-06-15 13:30:58 -07:00
mellanox mlxsw: spectrum_acl: Support FLOW_ACTION_MANGLE for TCP, UDP ports 2020-06-22 16:32:11 -07:00
micrel treewide: replace '---help---' in Kconfig files with 'help' 2020-06-14 01:57:21 +09:00
microchip lan743x: allow mac address to come from dt 2020-06-18 20:40:18 -07:00
moxa treewide: replace '---help---' in Kconfig files with 'help' 2020-06-14 01:57:21 +09:00
mscc net: mscc: ocelot: support IPv4, IPv6 and plain Ethernet mdb entries 2020-06-22 20:41:05 -07:00
myricom treewide: replace '---help---' in Kconfig files with 'help' 2020-06-14 01:57:21 +09:00
natsemi treewide: replace '---help---' in Kconfig files with 'help' 2020-06-14 01:57:21 +09:00
neterion treewide: replace '---help---' in Kconfig files with 'help' 2020-06-14 01:57:21 +09:00
netronome net: qos offload add flow status with dropped count 2020-06-19 12:53:30 -07:00
ni
nvidia treewide: replace '---help---' in Kconfig files with 'help' 2020-06-14 01:57:21 +09:00
nxp
oki-semi treewide: replace '---help---' in Kconfig files with 'help' 2020-06-14 01:57:21 +09:00
packetengines treewide: replace '---help---' in Kconfig files with 'help' 2020-06-14 01:57:21 +09:00
pasemi treewide: replace '---help---' in Kconfig files with 'help' 2020-06-14 01:57:21 +09:00
pensando ionic: add pcie_print_link_status 2020-06-11 18:26:19 -07:00
qlogic qlcnic: Use kobj_to_dev() instead 2020-06-15 13:05:50 -07:00
qualcomm treewide: replace '---help---' in Kconfig files with 'help' 2020-06-14 01:57:21 +09:00
rdc treewide: replace '---help---' in Kconfig files with 'help' 2020-06-14 01:57:21 +09:00
realtek r8169: improve rtl8169_runtime_resume 2020-06-22 16:26:02 -07:00
renesas treewide: replace '---help---' in Kconfig files with 'help' 2020-06-14 01:57:21 +09:00
rocker rocker: fix incorrect error handling in dma_rings_init 2020-06-15 13:37:36 -07:00
samsung treewide: replace '---help---' in Kconfig files with 'help' 2020-06-14 01:57:21 +09:00
seeq treewide: replace '---help---' in Kconfig files with 'help' 2020-06-14 01:57:21 +09:00
sfc treewide: replace '---help---' in Kconfig files with 'help' 2020-06-14 01:57:21 +09:00
sgi treewide: replace '---help---' in Kconfig files with 'help' 2020-06-14 01:57:21 +09:00
silan treewide: replace '---help---' in Kconfig files with 'help' 2020-06-14 01:57:21 +09:00
sis treewide: replace '---help---' in Kconfig files with 'help' 2020-06-14 01:57:21 +09:00
smsc treewide: replace '---help---' in Kconfig files with 'help' 2020-06-14 01:57:21 +09:00
socionext treewide: replace '---help---' in Kconfig files with 'help' 2020-06-14 01:57:21 +09:00
stmicro net: stmmac: dwmac-meson8b: add a compatible string for G12A SoCs 2020-06-22 16:24:10 -07:00
sun treewide: replace '---help---' in Kconfig files with 'help' 2020-06-14 01:57:21 +09:00
synopsys treewide: replace '---help---' in Kconfig files with 'help' 2020-06-14 01:57:21 +09:00
tehuti treewide: replace '---help---' in Kconfig files with 'help' 2020-06-14 01:57:21 +09:00
ti ethernet: ti: am65-cpsw-qos: Use struct_size() in devm_kzalloc() 2020-06-19 13:42:08 -07:00
toshiba treewide: replace '---help---' in Kconfig files with 'help' 2020-06-14 01:57:21 +09:00
tundra treewide: replace '---help---' in Kconfig files with 'help' 2020-06-14 01:57:21 +09:00
via treewide: replace '---help---' in Kconfig files with 'help' 2020-06-14 01:57:21 +09:00
wiznet treewide: replace '---help---' in Kconfig files with 'help' 2020-06-14 01:57:21 +09:00
xilinx net: axienet: fix spelling mistake in comment "Exteneded" -> "extended" 2020-06-15 13:02:03 -07:00
xircom treewide: replace '---help---' in Kconfig files with 'help' 2020-06-14 01:57:21 +09:00
xscale treewide: replace '---help---' in Kconfig files with 'help' 2020-06-14 01:57:21 +09:00
dnet.c
dnet.h
ec_bhf.c
ethoc.c
fealnx.c
jme.c
jme.h
Kconfig treewide: replace '---help---' in Kconfig files with 'help' 2020-06-14 01:57:21 +09:00
korina.c mm: reorder includes after introduction of linux/pgtable.h 2020-06-09 09:39:13 -07:00
lantiq_etop.c
lantiq_xrx200.c
Makefile