|
@@ -178,6 +178,7 @@ static const struct nla_policy dcbnl_ieee_policy[DCB_ATTR_IEEE_MAX + 1] = {
|
|
|
[DCB_ATTR_IEEE_ETS] = {.len = sizeof(struct ieee_ets)},
|
|
|
[DCB_ATTR_IEEE_PFC] = {.len = sizeof(struct ieee_pfc)},
|
|
|
[DCB_ATTR_IEEE_APP_TABLE] = {.type = NLA_NESTED},
|
|
|
+ [DCB_ATTR_IEEE_MAXRATE] = {.len = sizeof(struct ieee_maxrate)},
|
|
|
};
|
|
|
|
|
|
static const struct nla_policy dcbnl_ieee_app[DCB_ATTR_IEEE_APP_MAX + 1] = {
|
|
@@ -1246,6 +1247,17 @@ static int dcbnl_ieee_fill(struct sk_buff *skb, struct net_device *netdev)
|
|
|
goto nla_put_failure;
|
|
|
}
|
|
|
|
|
|
+ if (ops->ieee_getmaxrate) {
|
|
|
+ struct ieee_maxrate maxrate;
|
|
|
+ err = ops->ieee_getmaxrate(netdev, &maxrate);
|
|
|
+ if (!err) {
|
|
|
+ err = nla_put(skb, DCB_ATTR_IEEE_MAXRATE,
|
|
|
+ sizeof(maxrate), &maxrate);
|
|
|
+ if (err)
|
|
|
+ goto nla_put_failure;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
if (ops->ieee_getpfc) {
|
|
|
struct ieee_pfc pfc;
|
|
|
err = ops->ieee_getpfc(netdev, &pfc);
|
|
@@ -1601,6 +1613,14 @@ static int dcbnl_ieee_set(struct net_device *netdev, struct nlattr **tb,
|
|
|
goto err;
|
|
|
}
|
|
|
|
|
|
+ if (ieee[DCB_ATTR_IEEE_MAXRATE] && ops->ieee_setmaxrate) {
|
|
|
+ struct ieee_maxrate *maxrate =
|
|
|
+ nla_data(ieee[DCB_ATTR_IEEE_MAXRATE]);
|
|
|
+ err = ops->ieee_setmaxrate(netdev, maxrate);
|
|
|
+ if (err)
|
|
|
+ goto err;
|
|
|
+ }
|
|
|
+
|
|
|
if (ieee[DCB_ATTR_IEEE_PFC] && ops->ieee_setpfc) {
|
|
|
struct ieee_pfc *pfc = nla_data(ieee[DCB_ATTR_IEEE_PFC]);
|
|
|
err = ops->ieee_setpfc(netdev, pfc);
|