[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. */
 /* 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 dcbx;
        int err;
 
        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, i;
+
+               apptrust = nla_nest_start(skb, DCB_ATTR_DCB_APP_TRUST_TABLE);
+               if (!apptrust)
+                       return -EMSGSIZE;
+
+               err = ops->dcbnl_getapptrust(netdev, selectors, &nselectors);
+               if (!err) {
+                       for (i = 0; i < nselectors; i++) {
+                               enum ieee_attrs_app type =
+                                       dcbnl_app_attr_type_get(selectors[i]);
+                               err = nla_put_u8(skb, type, selectors[i]);
+                               if (err) {
+                                       nla_nest_cancel(skb, apptrust);
+                                       return err;
+                               }
+                       }
+               }
+
+               nla_nest_end(skb, apptrust);
+       }
+
        /* get peer info if available */
        if (ops->ieee_peer_getets) {
                struct ieee_ets ets;
                }
        }
 
+       if (ieee[DCB_ATTR_DCB_APP_TRUST_TABLE]) {
+               u8 selectors[IEEE_8021QAZ_APP_SEL_MAX + 1] = {0};
+               struct nlattr *attr;
+               int nselectors = 0;
+               int rem;
+
+               if (!ops->dcbnl_setapptrust) {
+                       err = -EOPNOTSUPP;
+                       goto err;
+               }
+
+               nla_for_each_nested(attr, ieee[DCB_ATTR_DCB_APP_TRUST_TABLE],
+                                   rem) {
+                       enum ieee_attrs_app type = nla_type(attr);
+                       u8 selector;
+                       int i;
+
+                       if (!dcbnl_app_attr_type_validate(type) ||
+                           nla_len(attr) != 1 ||
+                           nselectors >= sizeof(selectors)) {
+                               err = -EINVAL;
+                               goto err;
+                       }
+
+                       selector = nla_get_u8(attr);
+
+                       if (!dcbnl_app_selector_validate(type, selector)) {
+                               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);