summaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorOleksij Rempel <o.rempel@pengutronix.de>2022-04-13 10:21:52 +0200
committerSascha Hauer <s.hauer@pengutronix.de>2022-04-14 09:42:09 +0200
commitdec9b064d84ee7a3c7167cb42d1d3e8e09df07f9 (patch)
tree5408c644dc0ff92928cce84bcfdc04e9a0431b53 /net
parentec3dd1aea7c178e9d18e385b85392d63c49b4f23 (diff)
downloadbarebox-dec9b064d84ee7a3c7167cb42d1d3e8e09df07f9.tar.gz
barebox-dec9b064d84ee7a3c7167cb42d1d3e8e09df07f9.tar.xz
net: add RX preprocessor support
Add callback for optional rx_preprocessor. This is needed to add DSA switch support and demultiplex traffic received from different switch ports. Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de> Link: https://lore.barebox.org/20220413082205.429509-2-o.rempel@pengutronix.de Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'net')
-rw-r--r--net/net.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/net/net.c b/net/net.c
index fdb9ab826c..0b8e4caa0e 100644
--- a/net/net.c
+++ b/net/net.c
@@ -708,6 +708,17 @@ int net_receive(struct eth_device *edev, unsigned char *pkt, int len)
goto out;
}
+ if (edev->rx_preprocessor) {
+ ret = edev->rx_preprocessor(edev, &pkt, &len);
+ if (ret == -ENOMSG)
+ return 0;
+ if (ret) {
+ pr_debug("%s: rx_preprocessor failed %pe\n", __func__,
+ ERR_PTR(ret));
+ return ret;
+ }
+ }
+
switch (et_protlen) {
case PROT_ARP:
ret = net_handle_arp(edev, pkt, len);