From: Felix Fietkau <n...@nbd.name>

Add .ndo_fill_forward_path for dsa slave port devices

Signed-off-by: Felix Fietkau <n...@nbd.name>
Signed-off-by: Pablo Neira Ayuso <pa...@netfilter.org>
---
v2: no changes.

 include/linux/netdevice.h |  5 +++++
 net/dsa/slave.c           | 16 ++++++++++++++++
 2 files changed, 21 insertions(+)

diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
index cf1041756438..7ad7df75aaaa 100644
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
@@ -853,6 +853,7 @@ enum net_device_path_type {
        DEV_PATH_VLAN,
        DEV_PATH_BRIDGE,
        DEV_PATH_PPPOE,
+       DEV_PATH_DSA,
 };
 
 struct net_device_path {
@@ -873,6 +874,10 @@ struct net_device_path {
                        u16             vlan_id;
                        __be16          vlan_proto;
                } bridge;
+               struct {
+                       int port;
+                       u16 proto;
+               } dsa;
        };
 };
 
diff --git a/net/dsa/slave.c b/net/dsa/slave.c
index 992fcab4b552..df7d789236fe 100644
--- a/net/dsa/slave.c
+++ b/net/dsa/slave.c
@@ -1654,6 +1654,21 @@ static void dsa_slave_get_stats64(struct net_device *dev,
                dev_get_tstats64(dev, s);
 }
 
+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,
@@ -1679,6 +1694,7 @@ static const struct net_device_ops dsa_slave_netdev_ops = 
{
        .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 = {
-- 
2.20.1

Reply via email to