> -----Original Message----- > From: Intel-wired-lan [mailto:intel-wired-lan-boun...@lists.osuosl.org] On > Behalf Of Hiroshi Shimamoto > Sent: Tuesday, May 19, 2015 5:04 PM > To: Kirsher, Jeffrey T; intel-wired-...@lists.osuosl.org > Cc: nhor...@redhat.com; jogre...@redhat.com; Choi, Sy Jong; Rony Efraim; > David Miller; Linux Netdev List; Edward Cree; Or Gerlitz; > sassm...@redhat.com > Subject: [Intel-wired-lan] [PATCH v5 2/3] if_link: Add control trust VF > > 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. >
This patch looks pretty good to me - it definitely fills a requirement for our needs. Acked-by: Greg Rose <gregory.v.r...@intel.com> > 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 > da49299..f3d2d2f 100644 > --- a/include/linux/if_link.h > +++ b/include/linux/if_link.h > @@ -15,5 +15,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 > 51f8d2f..0875149 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 afccc93..f05549c 100644 > --- a/include/uapi/linux/if_link.h > +++ b/include/uapi/linux/if_link.h > @@ -480,6 +480,7 @@ enum { > IFLA_VF_RSS_QUERY_EN, /* RSS Redirection Table and Hash Key query > * on/off switch > */ > + IFLA_VF_TRUST, /* Trust VF */ > __IFLA_VF_MAX, > }; > > @@ -529,6 +530,11 @@ struct ifla_vf_rss_query_en { > __u32 setting; > }; > > +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 > 141ccc3..1d9205a 100644 > --- a/net/core/rtnetlink.c > +++ b/net/core/rtnetlink.c > @@ -819,7 +819,8 @@ static inline int rtnl_vfinfo_size(const struct > net_device *dev, > nla_total_size(sizeof(struct ifla_vf_spoofchk)) + > nla_total_size(sizeof(struct ifla_vf_rate)) + > nla_total_size(sizeof(struct ifla_vf_link_state)) + > - nla_total_size(sizeof(struct ifla_vf_rss_query_en))); > + nla_total_size(sizeof(struct ifla_vf_rss_query_en)) + > + nla_total_size(sizeof(struct ifla_vf_trust))); > return size; > } else > return 0; > @@ -1138,6 +1139,7 @@ static int rtnl_fill_ifinfo(struct sk_buff *skb, > struct net_device *dev, > struct ifla_vf_spoofchk vf_spoofchk; > struct ifla_vf_link_state vf_linkstate; > struct ifla_vf_rss_query_en vf_rss_query_en; > + struct ifla_vf_trust vf_trust; > > /* > * Not all SR-IOV capable drivers support the @@ -1147,6 > +1149,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 @@ -1160,7 > +1163,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; > @@ -1171,6 +1175,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); > @@ -1524,6 +1529,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; > -- > 1.8.3.1 > > _______________________________________________ > Intel-wired-lan mailing list > intel-wired-...@lists.osuosl.org > http://lists.osuosl.org/mailman/listinfo/intel-wired-lan -- 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