> Subject: Re: [Intel-wired-lan] [PATCH v6 1/3] if_link: Add control trust VF > > On 06/17/2015 04:41 AM, Hiroshi Shimamoto wrote: > > From: Hiroshi Shimamoto <h-shimam...@ct.jp.nec.com> > > > > Add netlink directives and ndo entry to trust VF user. > > > > This controls the special permission of VF user. > > The administrator will dedicatedly trust VF user to use some features > > which impacts security and/or performance. > > > > The administrator never turn it on unless VF user is fully trusted. > > > > Signed-off-by: Hiroshi Shimamoto <h-shimam...@ct.jp.nec.com> > > Reviewed-by: Hayato Momma <h-mo...@ce.jp.nec.com> > > CC: Choi, Sy Jong <sy.jong.c...@intel.com> > > --- > > include/linux/if_link.h | 1 + > > include/linux/netdevice.h | 3 +++ > > include/uapi/linux/if_link.h | 6 ++++++ > > net/core/rtnetlink.c | 19 +++++++++++++++++-- > > 4 files changed, 27 insertions(+), 2 deletions(-) > > > > diff --git a/include/linux/if_link.h b/include/linux/if_link.h > > index ae5d0d2..f923d15 100644 > > --- a/include/linux/if_link.h > > +++ b/include/linux/if_link.h > > @@ -24,5 +24,6 @@ struct ifla_vf_info { > > __u32 min_tx_rate; > > __u32 max_tx_rate; > > __u32 rss_query_en; > > + __u32 trusted; > > }; > > #endif /* _LINUX_IF_LINK_H */ > > diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h > > index e20979d..a034fb8 100644 > > --- a/include/linux/netdevice.h > > +++ b/include/linux/netdevice.h > > @@ -873,6 +873,7 @@ typedef u16 (*select_queue_fallback_t)(struct > > net_device *dev, > > * int (*ndo_set_vf_rate)(struct net_device *dev, int vf, int min_tx_rate, > > * int max_tx_rate); > > * int (*ndo_set_vf_spoofchk)(struct net_device *dev, int vf, bool > > setting); > > + * int (*ndo_set_vf_trust)(struct net_device *dev, int vf, bool setting); > > * int (*ndo_get_vf_config)(struct net_device *dev, > > * int vf, struct ifla_vf_info *ivf); > > * int (*ndo_set_vf_link_state)(struct net_device *dev, int vf, int > > link_state); > > @@ -1095,6 +1096,8 @@ struct net_device_ops { > > int max_tx_rate); > > int (*ndo_set_vf_spoofchk)(struct net_device *dev, > > int vf, bool setting); > > + int (*ndo_set_vf_trust)(struct net_device *dev, > > + int vf, bool setting); > > int (*ndo_get_vf_config)(struct net_device *dev, > > int vf, > > struct ifla_vf_info *ivf); > > diff --git a/include/uapi/linux/if_link.h b/include/uapi/linux/if_link.h > > index 2c7e8e3..891050c 100644 > > --- a/include/uapi/linux/if_link.h > > +++ b/include/uapi/linux/if_link.h > > @@ -485,6 +485,7 @@ enum { > > * on/off switch > > */ > > IFLA_VF_STATS, /* network device statistics */ > > + IFLA_VF_TRUST, /* Trust VF */ > > __IFLA_VF_MAX, > > }; > > > > @@ -546,6 +547,11 @@ enum { > > > > #define IFLA_VF_STATS_MAX (__IFLA_VF_STATS_MAX - 1) > > > > +struct ifla_vf_trust { > > + __u32 vf; > > + __u32 setting; > > +}; > > + > > /* VF ports management section > > * > > * Nested layout of set/get msg is: > > diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c > > index 2d102ce..abd1a75 100644 > > --- a/net/core/rtnetlink.c > > +++ b/net/core/rtnetlink.c > > @@ -831,7 +831,8 @@ static inline int rtnl_vfinfo_size(const struct > > net_device *dev, > > /* IFLA_VF_STATS_BROADCAST */ > > nla_total_size(sizeof(__u64)) + > > /* IFLA_VF_STATS_MULTICAST */ > > - nla_total_size(sizeof(__u64))); > > + nla_total_size(sizeof(__u64)) + > > + nla_total_size(sizeof(struct ifla_vf_trust))); > > return size; > > } else > > return 0; > > @@ -1151,6 +1152,7 @@ static int rtnl_fill_ifinfo(struct sk_buff *skb, > > struct net_device *dev, > > struct ifla_vf_link_state vf_linkstate; > > struct ifla_vf_rss_query_en vf_rss_query_en; > > struct ifla_vf_stats vf_stats; > > + struct ifla_vf_trust vf_trust; > > > > /* > > * Not all SR-IOV capable drivers support the > > @@ -1160,6 +1162,7 @@ static int rtnl_fill_ifinfo(struct sk_buff *skb, > > struct net_device *dev, > > */ > > ivi.spoofchk = -1; > > ivi.rss_query_en = -1; > > + ivi.trusted = -1; > > memset(ivi.mac, 0, sizeof(ivi.mac)); > > /* The default value for VF link state is "auto" > > * IFLA_VF_LINK_STATE_AUTO which equals zero > > @@ -1173,7 +1176,8 @@ static int rtnl_fill_ifinfo(struct sk_buff *skb, > > struct net_device *dev, > > vf_tx_rate.vf = > > vf_spoofchk.vf = > > vf_linkstate.vf = > > - vf_rss_query_en.vf = ivi.vf; > > + vf_rss_query_en.vf = > > + vf_trust.vf = ivi.vf; > > > > memcpy(vf_mac.mac, ivi.mac, sizeof(ivi.mac)); > > vf_vlan.vlan = ivi.vlan; > > @@ -1184,6 +1188,7 @@ static int rtnl_fill_ifinfo(struct sk_buff *skb, > > struct net_device *dev, > > vf_spoofchk.setting = ivi.spoofchk; > > vf_linkstate.link_state = ivi.linkstate; > > vf_rss_query_en.setting = ivi.rss_query_en; > > + vf_trust.setting = ivi.trusted; > > vf = nla_nest_start(skb, IFLA_VF_INFO); > > if (!vf) { > > nla_nest_cancel(skb, vfinfo); > > Don't you also need to define a section in ifla_vf_policy for > IFLA_VF_TRUST? Otherwise I thought the .len value gets configured as 0.
Yes, I will check and add codes. thanks, Hiroshi > > > @@ -1571,6 +1576,16 @@ static int do_setvfinfo(struct net_device *dev, > > struct nlattr *attr) > > ivrssq_en->setting); > > break; > > } > > + case IFLA_VF_TRUST: { > > + struct ifla_vf_trust *ivt; > > + > > + ivt = nla_data(vf); > > + err = -EOPNOTSUPP; > > + if (ops->ndo_set_vf_trust) > > + err = ops->ndo_set_vf_trust(dev, ivt->vf, > > + ivt->setting); > > + break; > > + } > > default: > > err = -EINVAL; > > break; > > -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html