@@ -838,7 +838,8 @@ static inline int rtnl_vfinfo_size(const struct net_device *dev,
838
838
/* IFLA_VF_STATS_BROADCAST */
839
839
nla_total_size (sizeof (__u64 )) +
840
840
/* IFLA_VF_STATS_MULTICAST */
841
- nla_total_size (sizeof (__u64 )));
841
+ nla_total_size (sizeof (__u64 )) +
842
+ nla_total_size (sizeof (struct ifla_vf_trust )));
842
843
return size ;
843
844
} else
844
845
return 0 ;
@@ -1161,6 +1162,7 @@ static int rtnl_fill_ifinfo(struct sk_buff *skb, struct net_device *dev,
1161
1162
struct ifla_vf_link_state vf_linkstate ;
1162
1163
struct ifla_vf_rss_query_en vf_rss_query_en ;
1163
1164
struct ifla_vf_stats vf_stats ;
1165
+ struct ifla_vf_trust vf_trust ;
1164
1166
1165
1167
/*
1166
1168
* Not all SR-IOV capable drivers support the
@@ -1170,6 +1172,7 @@ static int rtnl_fill_ifinfo(struct sk_buff *skb, struct net_device *dev,
1170
1172
*/
1171
1173
ivi .spoofchk = -1 ;
1172
1174
ivi .rss_query_en = -1 ;
1175
+ ivi .trusted = -1 ;
1173
1176
memset (ivi .mac , 0 , sizeof (ivi .mac ));
1174
1177
/* The default value for VF link state is "auto"
1175
1178
* IFLA_VF_LINK_STATE_AUTO which equals zero
@@ -1183,7 +1186,8 @@ static int rtnl_fill_ifinfo(struct sk_buff *skb, struct net_device *dev,
1183
1186
vf_tx_rate .vf =
1184
1187
vf_spoofchk .vf =
1185
1188
vf_linkstate .vf =
1186
- vf_rss_query_en .vf = ivi .vf ;
1189
+ vf_rss_query_en .vf =
1190
+ vf_trust .vf = ivi .vf ;
1187
1191
1188
1192
memcpy (vf_mac .mac , ivi .mac , sizeof (ivi .mac ));
1189
1193
vf_vlan .vlan = ivi .vlan ;
@@ -1194,6 +1198,7 @@ static int rtnl_fill_ifinfo(struct sk_buff *skb, struct net_device *dev,
1194
1198
vf_spoofchk .setting = ivi .spoofchk ;
1195
1199
vf_linkstate .link_state = ivi .linkstate ;
1196
1200
vf_rss_query_en .setting = ivi .rss_query_en ;
1201
+ vf_trust .setting = ivi .trusted ;
1197
1202
vf = nla_nest_start (skb , IFLA_VF_INFO );
1198
1203
if (!vf ) {
1199
1204
nla_nest_cancel (skb , vfinfo );
@@ -1211,7 +1216,9 @@ static int rtnl_fill_ifinfo(struct sk_buff *skb, struct net_device *dev,
1211
1216
& vf_linkstate ) ||
1212
1217
nla_put (skb , IFLA_VF_RSS_QUERY_EN ,
1213
1218
sizeof (vf_rss_query_en ),
1214
- & vf_rss_query_en ))
1219
+ & vf_rss_query_en ) ||
1220
+ nla_put (skb , IFLA_VF_TRUST ,
1221
+ sizeof (vf_trust ), & vf_trust ))
1215
1222
goto nla_put_failure ;
1216
1223
memset (& vf_stats , 0 , sizeof (vf_stats ));
1217
1224
if (dev -> netdev_ops -> ndo_get_vf_stats )
@@ -1348,6 +1355,7 @@ static const struct nla_policy ifla_vf_policy[IFLA_VF_MAX+1] = {
1348
1355
[IFLA_VF_LINK_STATE ] = { .len = sizeof (struct ifla_vf_link_state ) },
1349
1356
[IFLA_VF_RSS_QUERY_EN ] = { .len = sizeof (struct ifla_vf_rss_query_en ) },
1350
1357
[IFLA_VF_STATS ] = { .type = NLA_NESTED },
1358
+ [IFLA_VF_TRUST ] = { .len = sizeof (struct ifla_vf_trust ) },
1351
1359
};
1352
1360
1353
1361
static const struct nla_policy ifla_vf_stats_policy [IFLA_VF_STATS_MAX + 1 ] = {
@@ -1587,6 +1595,16 @@ static int do_setvfinfo(struct net_device *dev, struct nlattr **tb)
1587
1595
return err ;
1588
1596
}
1589
1597
1598
+ if (tb [IFLA_VF_TRUST ]) {
1599
+ struct ifla_vf_trust * ivt = nla_data (tb [IFLA_VF_TRUST ]);
1600
+
1601
+ err = - EOPNOTSUPP ;
1602
+ if (ops -> ndo_set_vf_trust )
1603
+ err = ops -> ndo_set_vf_trust (dev , ivt -> vf , ivt -> setting );
1604
+ if (err < 0 )
1605
+ return err ;
1606
+ }
1607
+
1590
1608
return err ;
1591
1609
}
1592
1610
0 commit comments