mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-21 06:33:41 +00:00
63 lines
1.6 KiB
Diff
63 lines
1.6 KiB
Diff
|
From: Felix Fietkau <nbd@nbd.name>
|
||
|
Date: Mon, 7 Dec 2020 20:31:48 +0100
|
||
|
Subject: [PATCH] net: dsa: resolve forwarding path for dsa slave ports
|
||
|
|
||
|
Add .ndo_fill_forward_path for dsa slave port devices
|
||
|
|
||
|
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||
|
---
|
||
|
|
||
|
--- a/include/linux/netdevice.h
|
||
|
+++ b/include/linux/netdevice.h
|
||
|
@@ -837,6 +837,7 @@ enum net_device_path_type {
|
||
|
DEV_PATH_ETHERNET = 0,
|
||
|
DEV_PATH_VLAN,
|
||
|
DEV_PATH_BRIDGE,
|
||
|
+ DEV_PATH_DSA,
|
||
|
};
|
||
|
|
||
|
struct net_device_path {
|
||
|
@@ -856,6 +857,10 @@ struct net_device_path {
|
||
|
u16 vlan_id;
|
||
|
__be16 vlan_proto;
|
||
|
} bridge;
|
||
|
+ struct {
|
||
|
+ int port;
|
||
|
+ u16 proto;
|
||
|
+ } dsa;
|
||
|
};
|
||
|
};
|
||
|
|
||
|
--- a/net/dsa/slave.c
|
||
|
+++ b/net/dsa/slave.c
|
||
|
@@ -1582,6 +1582,21 @@ static struct devlink_port *dsa_slave_ge
|
||
|
return dp->ds->devlink ? &dp->devlink_port : NULL;
|
||
|
}
|
||
|
|
||
|
+static int dsa_slave_fill_forward_path(struct net_device_path_ctx *ctx,
|
||
|
+ struct net_device_path *path)
|
||
|
+{
|
||
|
+ struct dsa_port *dp = dsa_slave_to_port(ctx->dev);
|
||
|
+ struct dsa_port *cpu_dp = dp->cpu_dp;
|
||
|
+
|
||
|
+ path->dev = ctx->dev;
|
||
|
+ path->type = DEV_PATH_DSA;
|
||
|
+ path->dsa.proto = cpu_dp->tag_ops->proto;
|
||
|
+ path->dsa.port = dp->index;
|
||
|
+ ctx->dev = cpu_dp->master;
|
||
|
+
|
||
|
+ return 0;
|
||
|
+}
|
||
|
+
|
||
|
static const struct net_device_ops dsa_slave_netdev_ops = {
|
||
|
.ndo_open = dsa_slave_open,
|
||
|
.ndo_stop = dsa_slave_close,
|
||
|
@@ -1607,6 +1622,7 @@ static const struct net_device_ops dsa_s
|
||
|
.ndo_vlan_rx_kill_vid = dsa_slave_vlan_rx_kill_vid,
|
||
|
.ndo_get_devlink_port = dsa_slave_get_devlink_port,
|
||
|
.ndo_change_mtu = dsa_slave_change_mtu,
|
||
|
+ .ndo_fill_forward_path = dsa_slave_fill_forward_path,
|
||
|
};
|
||
|
|
||
|
static struct device_type dsa_type = {
|