From: Petr Machata <petrm@nvidia.com>
To: Daniel Machon <daniel.machon@microchip.com>
Cc: <netdev@vger.kernel.org>, <davem@davemloft.net>,
<petrm@nvidia.com>, <maxime.chevallier@bootlin.com>,
<thomas.petazzoni@bootlin.com>, <edumazet@google.com>,
<kuba@kernel.org>, <pabeni@redhat.com>,
<lars.povlsen@microchip.com>, <Steen.Hegelund@microchip.com>,
<UNGLinuxDriver@microchip.com>, <joe@perches.com>,
<linux@armlinux.org.uk>, <horatiu.vultur@microchip.com>,
<Julia.Lawall@inria.fr>, <vladimir.oltean@nxp.com>,
<linux-kernel@vger.kernel.org>,
<linux-arm-kernel@lists.infradead.org>
Subject: Re: [net-next v3 2/6] net: dcb: add new apptrust attribute
Date: Wed, 26 Oct 2022 13:06:13 +0200 [thread overview]
Message-ID: <87zgdizvfq.fsf@nvidia.com> (raw)
In-Reply-To: <20221024091333.1048061-3-daniel.machon@microchip.com>
Daniel Machon <daniel.machon@microchip.com> writes:
> Add new apptrust extension attributes to the 8021Qaz APP managed object.
>
> Two new attributes, DCB_ATTR_DCB_APP_TRUST_TABLE and
> DCB_ATTR_DCB_APP_TRUST, has been added. Trusted selectors are passed in
> the nested attribute DCB_ATTR_DCB_APP_TRUST, in order of precedence.
>
> The new attributes are meant to allow drivers, whose hw supports the
> notion of trust, to be able to set whether a particular app selector is
> trusted - and in which order.
>
> Signed-off-by: Daniel Machon <daniel.machon@microchip.com>
> ---
> include/net/dcbnl.h | 4 ++
> include/uapi/linux/dcbnl.h | 10 +++++
> net/dcb/dcbnl.c | 77 ++++++++++++++++++++++++++++++++++++--
> 3 files changed, 87 insertions(+), 4 deletions(-)
>
> diff --git a/include/net/dcbnl.h b/include/net/dcbnl.h
> index 2b2d86fb3131..8841ab6c2de7 100644
> --- a/include/net/dcbnl.h
> +++ b/include/net/dcbnl.h
> @@ -109,6 +109,10 @@ struct dcbnl_rtnl_ops {
> /* buffer settings */
> int (*dcbnl_getbuffer)(struct net_device *, struct dcbnl_buffer *);
> int (*dcbnl_setbuffer)(struct net_device *, struct dcbnl_buffer *);
> +
> + /* apptrust */
> + int (*dcbnl_setapptrust)(struct net_device *, u8 *, int);
> + int (*dcbnl_getapptrust)(struct net_device *, u8 *, int *);
> };
>
> #endif /* __NET_DCBNL_H__ */
> diff --git a/include/uapi/linux/dcbnl.h b/include/uapi/linux/dcbnl.h
> index dc7ef96207ca..9344e3ba5768 100644
> --- a/include/uapi/linux/dcbnl.h
> +++ b/include/uapi/linux/dcbnl.h
> @@ -410,6 +410,7 @@ enum dcbnl_attrs {
> * @DCB_ATTR_IEEE_PEER_ETS: peer ETS configuration - get only
> * @DCB_ATTR_IEEE_PEER_PFC: peer PFC configuration - get only
> * @DCB_ATTR_IEEE_PEER_APP: peer APP tlv - get only
> + * @DCB_ATTR_DCB_APP_TRUST_TABLE: selector trust table
> */
> enum ieee_attrs {
> DCB_ATTR_IEEE_UNSPEC,
> @@ -423,6 +424,7 @@ enum ieee_attrs {
> DCB_ATTR_IEEE_QCN,
> DCB_ATTR_IEEE_QCN_STATS,
> DCB_ATTR_DCB_BUFFER,
> + DCB_ATTR_DCB_APP_TRUST_TABLE,
> __DCB_ATTR_IEEE_MAX
> };
> #define DCB_ATTR_IEEE_MAX (__DCB_ATTR_IEEE_MAX - 1)
> @@ -435,6 +437,14 @@ enum ieee_attrs_app {
> };
> #define DCB_ATTR_IEEE_APP_MAX (__DCB_ATTR_IEEE_APP_MAX - 1)
>
> +enum dcbnl_attrs_apptrust {
> + DCB_ATTR_DCB_APP_TRUST_UNSPEC,
> + DCB_ATTR_DCB_APP_TRUST,
> + __DCB_ATTR_DCB_APP_TRUST_MAX
> +};
> +
> +#define DCB_ATTR_DCB_APP_TRUST_MAX (__DCB_ATTR_DCB_APP_TRUST_MAX - 1)
> +
> /**
> * enum cee_attrs - CEE DCBX get attributes.
> *
> diff --git a/net/dcb/dcbnl.c b/net/dcb/dcbnl.c
> index 92c32bc11374..01310edf6d1b 100644
> --- a/net/dcb/dcbnl.c
> +++ b/net/dcb/dcbnl.c
> @@ -166,6 +166,7 @@ static const struct nla_policy dcbnl_ieee_policy[DCB_ATTR_IEEE_MAX + 1] = {
> [DCB_ATTR_IEEE_QCN] = {.len = sizeof(struct ieee_qcn)},
> [DCB_ATTR_IEEE_QCN_STATS] = {.len = sizeof(struct ieee_qcn_stats)},
> [DCB_ATTR_DCB_BUFFER] = {.len = sizeof(struct dcbnl_buffer)},
> + [DCB_ATTR_DCB_APP_TRUST_TABLE] = {.type = NLA_NESTED},
> };
>
> /* DCB number of traffic classes nested attributes. */
> @@ -1057,11 +1058,11 @@ static int dcbnl_build_peer_app(struct net_device *netdev, struct sk_buff* skb,
> /* Handle IEEE 802.1Qaz/802.1Qau/802.1Qbb GET commands. */
> static int dcbnl_ieee_fill(struct sk_buff *skb, struct net_device *netdev)
> {
> - struct nlattr *ieee, *app;
> - struct dcb_app_type *itr;
> const struct dcbnl_rtnl_ops *ops = netdev->dcbnl_ops;
> + struct nlattr *ieee, *app, *apptrust;
> + struct dcb_app_type *itr;
> + int err, i;
> int dcbx;
> - int err;
>
> if (nla_put_string(skb, DCB_ATTR_IFNAME, netdev->name))
> return -EMSGSIZE;
> @@ -1161,6 +1162,24 @@ static int dcbnl_ieee_fill(struct sk_buff *skb, struct net_device *netdev)
> spin_unlock_bh(&dcb_lock);
> nla_nest_end(skb, app);
>
> + if (ops->dcbnl_getapptrust) {
> + u8 selectors[IEEE_8021QAZ_APP_SEL_MAX + 1] = {0};
> + int nselectors;
> +
> + apptrust = nla_nest_start(skb, DCB_ATTR_DCB_APP_TRUST_TABLE);
> + if (!app)
> + return -EMSGSIZE;
> +
> + err = ops->dcbnl_getapptrust(netdev, selectors, &nselectors);
> + if (err)
> + return -EMSGSIZE;
This should return the error coming from the driver instead of
-EMSGSIZE.
Also, it should cancel the nest before returning.
> +
> + for (i = 0; i < nselectors; i++)
> + nla_put_u8(skb, DCB_ATTR_DCB_APP_TRUST, selectors[i]);
> +
> + nla_nest_end(skb, apptrust);
> + }
> +
> /* get peer info if available */
> if (ops->ieee_peer_getets) {
> struct ieee_ets ets;
> @@ -1454,8 +1473,8 @@ static int dcbnl_ieee_set(struct net_device *netdev, struct nlmsghdr *nlh,
> {
> const struct dcbnl_rtnl_ops *ops = netdev->dcbnl_ops;
> struct nlattr *ieee[DCB_ATTR_IEEE_MAX + 1];
> + int err, i;
> int prio;
> - int err;
I don't really mind, but I have to wonder why this new variable is not
with the rest of them in the trust table scope.
>
> if (!ops)
> return -EOPNOTSUPP;
> @@ -1541,6 +1560,56 @@ static int dcbnl_ieee_set(struct net_device *netdev, struct nlmsghdr *nlh,
> }
> }
>
> + if (ieee[DCB_ATTR_DCB_APP_TRUST_TABLE]) {
> + u8 selectors[IEEE_8021QAZ_APP_SEL_MAX + 1] = {0};
> + struct nlattr *attr;
> + int nselectors = 0;
> + u8 selector;
> + int rem;
> +
> + if (!ops->dcbnl_setapptrust) {
> + err = -EOPNOTSUPP;
> + goto err;
> + }
> +
> + nla_for_each_nested(attr, ieee[DCB_ATTR_DCB_APP_TRUST_TABLE],
> + rem) {
> + if (nla_type(attr) != DCB_ATTR_DCB_APP_TRUST ||
> + nla_len(attr) != 1 ||
> + nselectors >= sizeof(selectors)) {
> + err = -EINVAL;
> + goto err;
> + }
> +
> + selector = nla_get_u8(attr);
> + switch (selector) {
> + case IEEE_8021QAZ_APP_SEL_ETHERTYPE:
> + case IEEE_8021QAZ_APP_SEL_STREAM:
> + case IEEE_8021QAZ_APP_SEL_DGRAM:
> + case IEEE_8021QAZ_APP_SEL_ANY:
> + case IEEE_8021QAZ_APP_SEL_DSCP:
> + case DCB_APP_SEL_PCP:
> + break;
> + default:
> + err = -EINVAL;
> + goto err;
> + }
> + /* Duplicate selector ? */
> + for (i = 0; i < nselectors; i++) {
> + if (selectors[i] == selector) {
> + err = -EINVAL;
> + goto err;
> + }
> + }
> +
> + selectors[nselectors++] = selector;
> + }
> +
> + err = ops->dcbnl_setapptrust(netdev, selectors, nselectors);
> + if (err)
> + goto err;
> + }
> +
> err:
> err = nla_put_u8(skb, DCB_ATTR_IEEE, err);
> dcbnl_ieee_notify(netdev, RTM_SETDCB, DCB_CMD_IEEE_SET, seq, 0);
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
WARNING: multiple messages have this Message-ID (diff)
From: Petr Machata <petrm@nvidia.com>
To: Daniel Machon <daniel.machon@microchip.com>
Cc: <netdev@vger.kernel.org>, <davem@davemloft.net>,
<petrm@nvidia.com>, <maxime.chevallier@bootlin.com>,
<thomas.petazzoni@bootlin.com>, <edumazet@google.com>,
<kuba@kernel.org>, <pabeni@redhat.com>,
<lars.povlsen@microchip.com>, <Steen.Hegelund@microchip.com>,
<UNGLinuxDriver@microchip.com>, <joe@perches.com>,
<linux@armlinux.org.uk>, <horatiu.vultur@microchip.com>,
<Julia.Lawall@inria.fr>, <vladimir.oltean@nxp.com>,
<linux-kernel@vger.kernel.org>,
<linux-arm-kernel@lists.infradead.org>
Subject: Re: [net-next v3 2/6] net: dcb: add new apptrust attribute
Date: Wed, 26 Oct 2022 13:06:13 +0200 [thread overview]
Message-ID: <87zgdizvfq.fsf@nvidia.com> (raw)
In-Reply-To: <20221024091333.1048061-3-daniel.machon@microchip.com>
Daniel Machon <daniel.machon@microchip.com> writes:
> Add new apptrust extension attributes to the 8021Qaz APP managed object.
>
> Two new attributes, DCB_ATTR_DCB_APP_TRUST_TABLE and
> DCB_ATTR_DCB_APP_TRUST, has been added. Trusted selectors are passed in
> the nested attribute DCB_ATTR_DCB_APP_TRUST, in order of precedence.
>
> The new attributes are meant to allow drivers, whose hw supports the
> notion of trust, to be able to set whether a particular app selector is
> trusted - and in which order.
>
> Signed-off-by: Daniel Machon <daniel.machon@microchip.com>
> ---
> include/net/dcbnl.h | 4 ++
> include/uapi/linux/dcbnl.h | 10 +++++
> net/dcb/dcbnl.c | 77 ++++++++++++++++++++++++++++++++++++--
> 3 files changed, 87 insertions(+), 4 deletions(-)
>
> diff --git a/include/net/dcbnl.h b/include/net/dcbnl.h
> index 2b2d86fb3131..8841ab6c2de7 100644
> --- a/include/net/dcbnl.h
> +++ b/include/net/dcbnl.h
> @@ -109,6 +109,10 @@ struct dcbnl_rtnl_ops {
> /* buffer settings */
> int (*dcbnl_getbuffer)(struct net_device *, struct dcbnl_buffer *);
> int (*dcbnl_setbuffer)(struct net_device *, struct dcbnl_buffer *);
> +
> + /* apptrust */
> + int (*dcbnl_setapptrust)(struct net_device *, u8 *, int);
> + int (*dcbnl_getapptrust)(struct net_device *, u8 *, int *);
> };
>
> #endif /* __NET_DCBNL_H__ */
> diff --git a/include/uapi/linux/dcbnl.h b/include/uapi/linux/dcbnl.h
> index dc7ef96207ca..9344e3ba5768 100644
> --- a/include/uapi/linux/dcbnl.h
> +++ b/include/uapi/linux/dcbnl.h
> @@ -410,6 +410,7 @@ enum dcbnl_attrs {
> * @DCB_ATTR_IEEE_PEER_ETS: peer ETS configuration - get only
> * @DCB_ATTR_IEEE_PEER_PFC: peer PFC configuration - get only
> * @DCB_ATTR_IEEE_PEER_APP: peer APP tlv - get only
> + * @DCB_ATTR_DCB_APP_TRUST_TABLE: selector trust table
> */
> enum ieee_attrs {
> DCB_ATTR_IEEE_UNSPEC,
> @@ -423,6 +424,7 @@ enum ieee_attrs {
> DCB_ATTR_IEEE_QCN,
> DCB_ATTR_IEEE_QCN_STATS,
> DCB_ATTR_DCB_BUFFER,
> + DCB_ATTR_DCB_APP_TRUST_TABLE,
> __DCB_ATTR_IEEE_MAX
> };
> #define DCB_ATTR_IEEE_MAX (__DCB_ATTR_IEEE_MAX - 1)
> @@ -435,6 +437,14 @@ enum ieee_attrs_app {
> };
> #define DCB_ATTR_IEEE_APP_MAX (__DCB_ATTR_IEEE_APP_MAX - 1)
>
> +enum dcbnl_attrs_apptrust {
> + DCB_ATTR_DCB_APP_TRUST_UNSPEC,
> + DCB_ATTR_DCB_APP_TRUST,
> + __DCB_ATTR_DCB_APP_TRUST_MAX
> +};
> +
> +#define DCB_ATTR_DCB_APP_TRUST_MAX (__DCB_ATTR_DCB_APP_TRUST_MAX - 1)
> +
> /**
> * enum cee_attrs - CEE DCBX get attributes.
> *
> diff --git a/net/dcb/dcbnl.c b/net/dcb/dcbnl.c
> index 92c32bc11374..01310edf6d1b 100644
> --- a/net/dcb/dcbnl.c
> +++ b/net/dcb/dcbnl.c
> @@ -166,6 +166,7 @@ static const struct nla_policy dcbnl_ieee_policy[DCB_ATTR_IEEE_MAX + 1] = {
> [DCB_ATTR_IEEE_QCN] = {.len = sizeof(struct ieee_qcn)},
> [DCB_ATTR_IEEE_QCN_STATS] = {.len = sizeof(struct ieee_qcn_stats)},
> [DCB_ATTR_DCB_BUFFER] = {.len = sizeof(struct dcbnl_buffer)},
> + [DCB_ATTR_DCB_APP_TRUST_TABLE] = {.type = NLA_NESTED},
> };
>
> /* DCB number of traffic classes nested attributes. */
> @@ -1057,11 +1058,11 @@ static int dcbnl_build_peer_app(struct net_device *netdev, struct sk_buff* skb,
> /* Handle IEEE 802.1Qaz/802.1Qau/802.1Qbb GET commands. */
> static int dcbnl_ieee_fill(struct sk_buff *skb, struct net_device *netdev)
> {
> - struct nlattr *ieee, *app;
> - struct dcb_app_type *itr;
> const struct dcbnl_rtnl_ops *ops = netdev->dcbnl_ops;
> + struct nlattr *ieee, *app, *apptrust;
> + struct dcb_app_type *itr;
> + int err, i;
> int dcbx;
> - int err;
>
> if (nla_put_string(skb, DCB_ATTR_IFNAME, netdev->name))
> return -EMSGSIZE;
> @@ -1161,6 +1162,24 @@ static int dcbnl_ieee_fill(struct sk_buff *skb, struct net_device *netdev)
> spin_unlock_bh(&dcb_lock);
> nla_nest_end(skb, app);
>
> + if (ops->dcbnl_getapptrust) {
> + u8 selectors[IEEE_8021QAZ_APP_SEL_MAX + 1] = {0};
> + int nselectors;
> +
> + apptrust = nla_nest_start(skb, DCB_ATTR_DCB_APP_TRUST_TABLE);
> + if (!app)
> + return -EMSGSIZE;
> +
> + err = ops->dcbnl_getapptrust(netdev, selectors, &nselectors);
> + if (err)
> + return -EMSGSIZE;
This should return the error coming from the driver instead of
-EMSGSIZE.
Also, it should cancel the nest before returning.
> +
> + for (i = 0; i < nselectors; i++)
> + nla_put_u8(skb, DCB_ATTR_DCB_APP_TRUST, selectors[i]);
> +
> + nla_nest_end(skb, apptrust);
> + }
> +
> /* get peer info if available */
> if (ops->ieee_peer_getets) {
> struct ieee_ets ets;
> @@ -1454,8 +1473,8 @@ static int dcbnl_ieee_set(struct net_device *netdev, struct nlmsghdr *nlh,
> {
> const struct dcbnl_rtnl_ops *ops = netdev->dcbnl_ops;
> struct nlattr *ieee[DCB_ATTR_IEEE_MAX + 1];
> + int err, i;
> int prio;
> - int err;
I don't really mind, but I have to wonder why this new variable is not
with the rest of them in the trust table scope.
>
> if (!ops)
> return -EOPNOTSUPP;
> @@ -1541,6 +1560,56 @@ static int dcbnl_ieee_set(struct net_device *netdev, struct nlmsghdr *nlh,
> }
> }
>
> + if (ieee[DCB_ATTR_DCB_APP_TRUST_TABLE]) {
> + u8 selectors[IEEE_8021QAZ_APP_SEL_MAX + 1] = {0};
> + struct nlattr *attr;
> + int nselectors = 0;
> + u8 selector;
> + int rem;
> +
> + if (!ops->dcbnl_setapptrust) {
> + err = -EOPNOTSUPP;
> + goto err;
> + }
> +
> + nla_for_each_nested(attr, ieee[DCB_ATTR_DCB_APP_TRUST_TABLE],
> + rem) {
> + if (nla_type(attr) != DCB_ATTR_DCB_APP_TRUST ||
> + nla_len(attr) != 1 ||
> + nselectors >= sizeof(selectors)) {
> + err = -EINVAL;
> + goto err;
> + }
> +
> + selector = nla_get_u8(attr);
> + switch (selector) {
> + case IEEE_8021QAZ_APP_SEL_ETHERTYPE:
> + case IEEE_8021QAZ_APP_SEL_STREAM:
> + case IEEE_8021QAZ_APP_SEL_DGRAM:
> + case IEEE_8021QAZ_APP_SEL_ANY:
> + case IEEE_8021QAZ_APP_SEL_DSCP:
> + case DCB_APP_SEL_PCP:
> + break;
> + default:
> + err = -EINVAL;
> + goto err;
> + }
> + /* Duplicate selector ? */
> + for (i = 0; i < nselectors; i++) {
> + if (selectors[i] == selector) {
> + err = -EINVAL;
> + goto err;
> + }
> + }
> +
> + selectors[nselectors++] = selector;
> + }
> +
> + err = ops->dcbnl_setapptrust(netdev, selectors, nselectors);
> + if (err)
> + goto err;
> + }
> +
> err:
> err = nla_put_u8(skb, DCB_ATTR_IEEE, err);
> dcbnl_ieee_notify(netdev, RTM_SETDCB, DCB_CMD_IEEE_SET, seq, 0);
next prev parent reply other threads:[~2022-10-26 11:18 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-10-24 9:13 [net-next v3 0/6] Add new PCP and APPTRUST attributes to dcbnl Daniel Machon
2022-10-24 9:13 ` Daniel Machon
2022-10-24 9:13 ` [net-next v3 1/6] net: dcb: add new pcp selector to app object Daniel Machon
2022-10-24 9:13 ` Daniel Machon
2022-10-26 10:11 ` Petr Machata
2022-10-26 10:11 ` Petr Machata
2022-10-26 11:19 ` Daniel.Machon
2022-10-26 11:19 ` Daniel.Machon
2022-10-26 14:51 ` Petr Machata
2022-10-26 14:51 ` Petr Machata
2022-10-27 9:00 ` Daniel.Machon
2022-10-27 9:00 ` Daniel.Machon
2022-10-27 9:59 ` Petr Machata
2022-10-27 9:59 ` Petr Machata
2022-10-24 9:13 ` [net-next v3 2/6] net: dcb: add new apptrust attribute Daniel Machon
2022-10-24 9:13 ` Daniel Machon
2022-10-26 11:06 ` Petr Machata [this message]
2022-10-26 11:06 ` Petr Machata
2022-10-26 12:10 ` Daniel.Machon
2022-10-26 12:10 ` Daniel.Machon
2022-10-26 14:55 ` Petr Machata
2022-10-26 14:55 ` Petr Machata
2022-10-24 9:13 ` [net-next v3 3/6] net: microchip: sparx5: add support for offloading pcp table Daniel Machon
2022-10-24 9:13 ` Daniel Machon
2022-10-24 9:13 ` [net-next v3 4/6] net: microchip: sparx5: add support for apptrust Daniel Machon
2022-10-24 9:13 ` Daniel Machon
2022-10-24 9:13 ` [net-next v3 5/6] net: microchip: sparx5: add support for offloading dscp table Daniel Machon
2022-10-24 9:13 ` Daniel Machon
2022-10-24 9:13 ` [net-next v3 6/6] net: microchip: sparx5: add support for offloading default prio Daniel Machon
2022-10-24 9:13 ` Daniel Machon
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87zgdizvfq.fsf@nvidia.com \
--to=petrm@nvidia.com \
--cc=Julia.Lawall@inria.fr \
--cc=Steen.Hegelund@microchip.com \
--cc=UNGLinuxDriver@microchip.com \
--cc=daniel.machon@microchip.com \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=horatiu.vultur@microchip.com \
--cc=joe@perches.com \
--cc=kuba@kernel.org \
--cc=lars.povlsen@microchip.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux@armlinux.org.uk \
--cc=maxime.chevallier@bootlin.com \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=thomas.petazzoni@bootlin.com \
--cc=vladimir.oltean@nxp.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.