net: dsa: resolve forwarding path for dsa slave ports
[linux-2.6-microblaze.git] / net / dsa / slave.c
index c51e524..7453cec 100644 (file)
@@ -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 = {