]> git.dujemihanovic.xyz Git - linux.git/commitdiff
net: dsa: add support for DCB get/set apptrust configuration
authorOleksij Rempel <o.rempel@pengutronix.de>
Fri, 3 May 2024 13:13:40 +0000 (15:13 +0200)
committerDavid S. Miller <davem@davemloft.net>
Wed, 8 May 2024 09:35:09 +0000 (10:35 +0100)
Add DCB support to get/set trust configuration for different packet
priority information sources. Some switch allow to chose different
source of packet priority classification. For example on KSZ switches it
is possible to configure VLAN PCP and/or DSCP sources.

Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de>
Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/net/dsa.h
net/dsa/user.c

index eef702dbea78bcb940f9726560d04efbfb1c8c62..40c127a3018789d805737193bea4c835e2c0c3a3 100644 (file)
@@ -955,6 +955,10 @@ struct dsa_switch_ops {
                                      u8 prio);
        int     (*port_del_dscp_prio)(struct dsa_switch *ds, int port, u8 dscp,
                                      u8 prio);
+       int     (*port_set_apptrust)(struct dsa_switch *ds, int port,
+                                    const u8 *sel, int nsel);
+       int     (*port_get_apptrust)(struct dsa_switch *ds, int port, u8 *sel,
+                                    int *nsel);
 
        /*
         * Suspend and resume
index 1f7b8f21db9e4ff5aa6f1870c16882af86fa9aab..89282c0867765836d9b594dcdc248acf3ee7f9ad 100644 (file)
@@ -2136,6 +2136,32 @@ out_conduit_failed:
        return err;
 }
 
+static int __maybe_unused
+dsa_user_dcbnl_set_apptrust(struct net_device *dev, u8 *sel, int nsel)
+{
+       struct dsa_port *dp = dsa_user_to_port(dev);
+       struct dsa_switch *ds = dp->ds;
+       int port = dp->index;
+
+       if (!ds->ops->port_set_apptrust)
+               return -EOPNOTSUPP;
+
+       return ds->ops->port_set_apptrust(ds, port, sel, nsel);
+}
+
+static int __maybe_unused
+dsa_user_dcbnl_get_apptrust(struct net_device *dev, u8 *sel, int *nsel)
+{
+       struct dsa_port *dp = dsa_user_to_port(dev);
+       struct dsa_switch *ds = dp->ds;
+       int port = dp->index;
+
+       if (!ds->ops->port_get_apptrust)
+               return -EOPNOTSUPP;
+
+       return ds->ops->port_get_apptrust(ds, port, sel, nsel);
+}
+
 static int __maybe_unused
 dsa_user_dcbnl_set_default_prio(struct net_device *dev, struct dcb_app *app)
 {
@@ -2376,6 +2402,8 @@ static const struct ethtool_ops dsa_user_ethtool_ops = {
 static const struct dcbnl_rtnl_ops __maybe_unused dsa_user_dcbnl_ops = {
        .ieee_setapp            = dsa_user_dcbnl_ieee_setapp,
        .ieee_delapp            = dsa_user_dcbnl_ieee_delapp,
+       .dcbnl_setapptrust      = dsa_user_dcbnl_set_apptrust,
+       .dcbnl_getapptrust      = dsa_user_dcbnl_get_apptrust,
 };
 
 static void dsa_user_get_stats64(struct net_device *dev,