Add the ethtool ops to VF driver to allow querying the RSS indirection table
and RSS Random Key.
- PF driver: Add new VF-PF channel commands.
- VF driver: Utilize these new commands and add the corresponding
ethtool callbacks.
New in v3:
- Added a missing support for x550 devices.
- Mask the indirection table values according to PSRTYPE[n].RQPL.
- Minimized the number of added VF-PF commands.
New in v2:
- Added a detailed description to patches 4 and 5.
New in v1 (compared to RFC):
- Use "if-else" statement instead of a "switch-case" for a single option case.
More specifically: in cases where the newly added API version is the only one
allowed. We may consider using a "switch-case" back again when the list of
allowed API versions in these specific places grows up.
Vlad Zolotarov (5):
ixgbe: Add a RETA query command to VF-PF channel API
ixgbevf: Add a RETA query code
ixgbe: Add GET_RSS_KEY command to VF-PF channel commands set
ixgbevf: Add RSS Key query code
ixgbevf: Add the appropriate ethtool ops to query RSS indirection
table and key
drivers/net/ethernet/intel/ixgbe/ixgbe_mbx.h | 10 ++
drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c | 91 +++++++++++++++
drivers/net/ethernet/intel/ixgbevf/ethtool.c | 43 +++++++
drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c | 4 +-
drivers/net/ethernet/intel/ixgbevf/mbx.h | 10 ++
drivers/net/ethernet/intel/ixgbevf/vf.c | 132 ++++++++++++++++++++++
drivers/net/ethernet/intel/ixgbevf/vf.h | 2 +
7 files changed, 291 insertions(+), 1 deletion(-)
--
2.1.0
82599 and x540 VFs and PF share the same RSS redirection table (RETA). Therefore we
just return it for all VFs. x550 on the other hand provides a separate redirection
table for each VF (there is a per-pool RETA table).
For 82599 and x540 RETA table is an array of 32 registers (128 bytes) and the maximum number of
registers that may be delivered in a single VF-PF channel command is 15. Therefore
we will deliver the whole table in 3 steps: 12, 12 and 8 registers in each
step correspondingly.
For x550 VFs RETA is a 64 byte array, so we may deliver it in two steps: 12 and 4 registers
correspondingly.
Thus this patch does the following:
- Adds a new API version (to specify a new commands set).
- Adds the IXGBE_VF_GET_RETA command to the VF-PF commands set.
Signed-off-by: Vlad Zolotarov <redacted>
---
New in v3:
- Pass the number of dwords and offset in RETA in the IXGBE_VF_GET_RETA request message.
This allows to reduce the added command set to a single command.
- Added a support for all devices supported by the ixgbe driver that have
SR-IOV functions support: 82599, x540 and x550. The original code supported
only 82599 and x540.
- Added the masking of the RETA entries according to the PSRTYPE[n].RQPL
value.
New in v1 (compared to RFC):
- Use "if-else" statement instead of a "switch-case" for a single option case
(in ixgbe_get_vf_reta()).
---
drivers/net/ethernet/intel/ixgbe/ixgbe_mbx.h | 8 ++++
drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c | 65 ++++++++++++++++++++++++++
2 files changed, 73 insertions(+)
@@ -73,6 +73,7 @@ enum ixgbe_pfvf_api_rev {ixgbe_mbox_api_10,/* API version 1.0, linux/freebsd VF driver */ixgbe_mbox_api_20,/* API version 2.0, solaris Phase1 VF driver */ixgbe_mbox_api_11,/* API version 1.1, linux/freebsd VF driver */+ixgbe_mbox_api_12,/* API version 1.2, linux/freebsd VF driver *//* This value should always be last */ixgbe_mbox_api_unknown,/* indicates that API version is not known */};
@@ -97,6 +98,13 @@ enum ixgbe_pfvf_api_rev {#define IXGBE_VF_TRANS_VLAN 3 /* Indication of port vlan */#define IXGBE_VF_DEF_QUEUE 4 /* Default queue offset */+/* mailbox API, version 1.2 VF requests */+#define IXGBE_VF_GET_RETA 0x0a /* VF request for RETA */++/* GET_RETA request data indices within the mailbox */+#define IXGBE_VF_RETA_SZ 1 /* Number of RETA DWs to bring */+#define IXGBE_VF_RETA_OFFSET 2 /* Offset in RETA */+/* length of permanent address message returned from PF */#define IXGBE_VF_PERMADDR_MSG_LEN 4/* word in permanent address message with the current multicast type */
@@ -894,6 +895,7 @@ static int ixgbe_negotiate_vf_api(struct ixgbe_adapter *adapter,switch(api){caseixgbe_mbox_api_10:caseixgbe_mbox_api_11:+caseixgbe_mbox_api_12:adapter->vfinfo[vf].vf_api=api;return0;default:
@@ -917,6 +919,7 @@ static int ixgbe_get_vf_queues(struct ixgbe_adapter *adapter,switch(adapter->vfinfo[vf].vf_api){caseixgbe_mbox_api_20:caseixgbe_mbox_api_11:+caseixgbe_mbox_api_12:break;default:return-1;
@@ -944,6 +947,65 @@ static int ixgbe_get_vf_queues(struct ixgbe_adapter *adapter,return0;}+staticintixgbe_get_vf_reta(structixgbe_adapter*adapter,u32*msgbuf,u32vf)+{+structixgbe_hw*hw=&adapter->hw;+inti,j;+u32*reta=&msgbuf[1];+u32mask=0;+u32psrtype;+u32reta_offset_dw=msgbuf[IXGBE_VF_RETA_OFFSET];+u32dwords=msgbuf[IXGBE_VF_RETA_SZ];++/* verify the PF is supporting the correct API */+if(adapter->vfinfo[vf].vf_api!=ixgbe_mbox_api_12)+return-EPERM;++psrtype=IXGBE_READ_REG(hw,IXGBE_PSRTYPE(vf));++/* The redirection table is composed as follows:+*82598:128(8bitwide)entriescontainingpairof4bitRSSindices+*82599/X540:128(8bitwide)entriescontaining4bitRSSindexX550:+*512(8bitwide)entriescontaining6bitRSSindex+*+*PSRTYPE[n].RQPLdefinesif0,1or2bitsfromtheredirectiontable+*valueshouldbeused.+*/++if((psrtype&(1<<29))==(1<<29))+mask=0x01010101;+elseif((psrtype&(2<<29))==(2<<29))+mask=0x03030303;+else+mask=0;++switch(hw->mac.type){+caseixgbe_mac_82599EB:+caseixgbe_mac_X540:+/* Read the appropriate portion of RETA */+for(i=0;i<dwords;i++)+reta[i]=IXGBE_READ_REG(hw,+IXGBE_RETA(i+reta_offset_dw));+break;+caseixgbe_mac_X550:+caseixgbe_mac_X550EM_x:+/* X550 has a per-VF RETA */+for(i=0,j=reta_offset_dw;i<dwords;i++,j++)+reta[i]=IXGBE_READ_REG(hw,+IXGBE_PFVFRETA(j,vf));+break;+default:+return-1;++}++/* Mask the relevant bits */+for(i=0;i<dwords;i++)+reta[i]&=mask;++return0;+}+staticintixgbe_rcv_msg_from_vf(structixgbe_adapter*adapter,u32vf){u32mbx_size=IXGBE_VFMAILBOX_SIZE;
- Added a new API version support.
- Added the query implementation in the ixgbevf.
Signed-off-by: Vlad Zolotarov <redacted>
---
New in v3:
- Adjusted to the new interface IXGBE_VF_GET_RETA command.
- Added a proper support for x550 devices.
New in v1 (compared to RFC):
- Use "if-else" statement instead of a "switch-case" for a single option case
(in ixgbevf_get_reta()).
---
drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c | 4 +-
drivers/net/ethernet/intel/ixgbevf/mbx.h | 8 +++
drivers/net/ethernet/intel/ixgbevf/vf.c | 88 +++++++++++++++++++++++
drivers/net/ethernet/intel/ixgbevf/vf.h | 1 +
4 files changed, 100 insertions(+), 1 deletion(-)
@@ -86,6 +86,7 @@ enum ixgbe_pfvf_api_rev {ixgbe_mbox_api_10,/* API version 1.0, linux/freebsd VF driver */ixgbe_mbox_api_20,/* API version 2.0, solaris Phase1 VF driver */ixgbe_mbox_api_11,/* API version 1.1, linux/freebsd VF driver */+ixgbe_mbox_api_12,/* API version 1.2, linux/freebsd VF driver *//* This value should always be last */ixgbe_mbox_api_unknown,/* indicates that API version is not known */};
@@ -110,6 +111,13 @@ enum ixgbe_pfvf_api_rev {#define IXGBE_VF_TRANS_VLAN 3 /* Indication of port vlan */#define IXGBE_VF_DEF_QUEUE 4 /* Default queue offset */+/* mailbox API, version 1.2 VF requests */+#define IXGBE_VF_GET_RETA 0x0a /* VF request for RETA */++/* GET_RETA request data indices within the mailbox */+#define IXGBE_VF_RETA_SZ 1 /* Number of RETA DWs to bring */+#define IXGBE_VF_RETA_OFFSET 2 /* Offset in RETA */+/* length of permanent address message returned from PF */#define IXGBE_VF_PERMADDR_MSG_LEN 4/* word in permanent address message with the current multicast type */
@@ -258,6 +258,93 @@ static s32 ixgbevf_set_uc_addr_vf(struct ixgbe_hw *hw, u32 index, u8 *addr)returnret_val;}+staticinlineint_ixgbevf_get_reta(structixgbe_hw*hw,u32*msgbuf,+u32*reta,u32reta_offset_dw,u32dwords)+{+interr;++msgbuf[0]=IXGBE_VF_GET_RETA;+msgbuf[IXGBE_VF_RETA_SZ]=dwords;+msgbuf[IXGBE_VF_RETA_OFFSET]=reta_offset_dw;++err=hw->mbx.ops.write_posted(hw,msgbuf,3);++if(err)+returnerr;++err=hw->mbx.ops.read_posted(hw,msgbuf,1+dwords);++if(err)+returnerr;++msgbuf[0]&=~IXGBE_VT_MSGTYPE_CTS;++/* If we didn't get an ACK there must have been+*somesortofmailboxerrorsoweshouldtreatit+*assuch.+*/+if(msgbuf[0]!=(IXGBE_VF_GET_RETA|IXGBE_VT_MSGTYPE_ACK))+returnIXGBE_ERR_MBX;++memcpy(reta+reta_offset_dw,msgbuf+1,4*dwords);++return0;+}++/**+*ixgbevf_get_reta-gettheRSSredirectiontable(RETA)contents.+*@hw:pointertotheHWstructure+*@reta:buffertofillwithRETAcontents.+*+*The"reta"buffershouldbebigenoughtocontain32registers.+*+*Returns:0onsuccess.+*ifAPIdoesn'tsupportthisoperation-(-EPERM).+*/+intixgbevf_get_reta(structixgbe_hw*hw,u32*reta)+{+interr;+u32msgbuf[IXGBE_VFMAILBOX_SIZE];++/* Return an error if API doesn't RETA querying. */+if(hw->api_version!=ixgbe_mbox_api_12)+return-EPERM;++/* x550 devices have a separate RETA for each VF: 64 bytes each.+*+*We'llgetitin2stepsduetomailboxsizelimitation-wecanbring+*upto15dwordseverytime.Thereforewe'llbring12and4dwords.+*+*OlderdevicesshareaRETAtablewiththePF:128bytes.+*+*Forthemwedoitin3steps.Thereforewe'llbringitin3steps:+*12,12and8dwordsineachstepcorrespondingly.+*/++/* RETA[0..11] */+err=_ixgbevf_get_reta(hw,msgbuf,reta,0,12);+if(err)+returnerr;++if(hw->mac.type>=ixgbe_mac_X550_vf){+/* RETA[12..15] */+err=_ixgbevf_get_reta(hw,msgbuf,reta,12,4);+if(err)+returnerr;++}else{+/* RETA[12..23] */+err=_ixgbevf_get_reta(hw,msgbuf,reta,12,12);+if(err)+returnerr;++/* RETA[24..31] */+err=_ixgbevf_get_reta(hw,msgbuf,reta,24,8);+}++returnerr;+}+/***ixgbevf_set_rar_vf-setdeviceMACaddress*@hw:pointertohardwarestructure
@@ -545,6 +632,7 @@ int ixgbevf_get_queues(struct ixgbe_hw *hw, unsigned int *num_tcs,/* do nothing if API doesn't support ixgbevf_get_queues */switch(hw->api_version){caseixgbe_mbox_api_11:+caseixgbe_mbox_api_12:break;default:return0;
For 82599 and x540 VFs and PF share the same RSS Key. Therefore we will return
the same RSS key for all VFs.
x550 on the other hand has a separate RSS Key for every pool.
Signed-off-by: Vlad Zolotarov <redacted>
---
New in v3:
- Added a support for x550 devices.
New in v1 (compared to RFC):
- Use "if-else" statement instead of a "switch-case" for a single option case
(in ixgbe_get_vf_rss_key()).
---
drivers/net/ethernet/intel/ixgbe/ixgbe_mbx.h | 2 ++
drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c | 26 ++++++++++++++++++++++++++
2 files changed, 28 insertions(+)
@@ -105,6 +105,8 @@ enum ixgbe_pfvf_api_rev {#define IXGBE_VF_RETA_SZ 1 /* Number of RETA DWs to bring */#define IXGBE_VF_RETA_OFFSET 2 /* Offset in RETA */+#define IXGBE_VF_GET_RSS_KEY 0x0b /* get RSS key */+/* length of permanent address message returned from PF */#define IXGBE_VF_PERMADDR_MSG_LEN 4/* word in permanent address message with the current multicast type */
@@ -1006,6 +1006,29 @@ static int ixgbe_get_vf_reta(struct ixgbe_adapter *adapter, u32 *msgbuf, u32 vf)return0;}+staticintixgbe_get_vf_rss_key(structixgbe_adapter*adapter,+u32*msgbuf,u32vf)+{+structixgbe_hw*hw=&adapter->hw;+inti;+u32*rss_key=&msgbuf[1];++/* verify the PF is supporting the correct API */+if(adapter->vfinfo[vf].vf_api!=ixgbe_mbox_api_12)+return-EPERM;++/* Read the RSS KEY */+if(hw->mac.type>=ixgbe_mac_X550){+for(i=0;i<10;i++)+rss_key[i]=IXGBE_READ_REG(hw,+IXGBE_PFVFRSSRK(i,vf));+}else+for(i=0;i<10;i++)+rss_key[i]=IXGBE_READ_REG(hw,IXGBE_RSSRK(i));++return0;+}+staticintixgbe_rcv_msg_from_vf(structixgbe_adapter*adapter,u32vf){u32mbx_size=IXGBE_VFMAILBOX_SIZE;
Add the ixgbevf_get_rss_key() function that queries the PF for an RSS Random Key
using a new VF-PF channel IXGBE_VF_GET_RSS_KEY command.
Signed-off-by: Vlad Zolotarov <redacted>
---
New in v2:
- Added a more detailed patch description.
New in v1 (compared to RFC):
- Use "if-else" statement instead of a "switch-case" for a single option case
(in ixgbevf_get_rss_key()).
---
drivers/net/ethernet/intel/ixgbevf/mbx.h | 2 ++
drivers/net/ethernet/intel/ixgbevf/vf.c | 44 ++++++++++++++++++++++++++++++++
drivers/net/ethernet/intel/ixgbevf/vf.h | 1 +
3 files changed, 47 insertions(+)
@@ -118,6 +118,8 @@ enum ixgbe_pfvf_api_rev {#define IXGBE_VF_RETA_SZ 1 /* Number of RETA DWs to bring */#define IXGBE_VF_RETA_OFFSET 2 /* Offset in RETA */+#define IXGBE_VF_GET_RSS_KEY 0x0b /* get RSS hash key */+/* length of permanent address message returned from PF */#define IXGBE_VF_PERMADDR_MSG_LEN 4/* word in permanent address message with the current multicast type */
@@ -292,6 +292,50 @@ static inline int _ixgbevf_get_reta(struct ixgbe_hw *hw, u32 *msgbuf,}/**+*ixgbevf_get_rss_key-gettheRSSRandomKey+*@hw:pointertotheHWstructure+*@reta:buffertofillwithRETAcontents.+*+*The"rss_key"buffershouldbebigenoughtocontain10registers.+*+*Returns:0onsuccess.+*ifAPIdoesn'tsupportthisoperation-(-EPERM).+*/+intixgbevf_get_rss_key(structixgbe_hw*hw,u8*rss_key)+{+interr;+u32msgbuf[IXGBE_VFMAILBOX_SIZE];++/* Return and error if API doesn't support RSS Random Key retrieval */+if(hw->api_version!=ixgbe_mbox_api_12)+return-EPERM;++msgbuf[0]=IXGBE_VF_GET_RSS_KEY;+err=hw->mbx.ops.write_posted(hw,msgbuf,1);++if(err)+returnerr;++err=hw->mbx.ops.read_posted(hw,msgbuf,11);++if(err)+returnerr;++msgbuf[0]&=~IXGBE_VT_MSGTYPE_CTS;++/* If we didn't get an ACK there must have been+*somesortofmailboxerrorsoweshouldtreatit+*assuch.+*/+if(msgbuf[0]!=(IXGBE_VF_GET_RSS_KEY|IXGBE_VT_MSGTYPE_ACK))+returnIXGBE_ERR_MBX;++memcpy(rss_key,msgbuf+1,40);++return0;+}++/***ixgbevf_get_reta-gettheRSSredirectiontable(RETA)contents.*@hw:pointertotheHWstructure*@reta:buffertofillwithRETAcontents.
Added get_rxfh_indir_size, get_rxfh_key_size and get_rxfh ethtool_ops callbacks
implementations.
This enables the ethtool's "-x" and "-n rx-flow-hash" options for 82599 VF devices.
Signed-off-by: Vlad Zolotarov <redacted>
---
New in v3:
- Added a proper support for x550 devices: return the correct redirection table size.
New in v2:
- Added a detailed description to the patch.
---
drivers/net/ethernet/intel/ixgbevf/ethtool.c | 43 ++++++++++++++++++++++++++++
1 file changed, 43 insertions(+)
Add the ethtool ops to VF driver to allow querying the RSS indirection table
and RSS Random Key.
- PF driver: Add new VF-PF channel commands.
- VF driver: Utilize these new commands and add the corresponding
ethtool callbacks.
Oops - forgot to run checkpatch before sending and there were some
issues with styling... ;)
Have just sent v4 with all styling issues fixed... ;)
New in v3:
- Added a missing support for x550 devices.
- Mask the indirection table values according to PSRTYPE[n].RQPL.
- Minimized the number of added VF-PF commands.
New in v2:
- Added a detailed description to patches 4 and 5.
New in v1 (compared to RFC):
- Use "if-else" statement instead of a "switch-case" for a single option case.
More specifically: in cases where the newly added API version is the only one
allowed. We may consider using a "switch-case" back again when the list of
allowed API versions in these specific places grows up.
Vlad Zolotarov (5):
ixgbe: Add a RETA query command to VF-PF channel API
ixgbevf: Add a RETA query code
ixgbe: Add GET_RSS_KEY command to VF-PF channel commands set
ixgbevf: Add RSS Key query code
ixgbevf: Add the appropriate ethtool ops to query RSS indirection
table and key
drivers/net/ethernet/intel/ixgbe/ixgbe_mbx.h | 10 ++
drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c | 91 +++++++++++++++
drivers/net/ethernet/intel/ixgbevf/ethtool.c | 43 +++++++
drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c | 4 +-
drivers/net/ethernet/intel/ixgbevf/mbx.h | 10 ++
drivers/net/ethernet/intel/ixgbevf/vf.c | 132 ++++++++++++++++++++++
drivers/net/ethernet/intel/ixgbevf/vf.h | 2 +
7 files changed, 291 insertions(+), 1 deletion(-)
From: Greg Rose <hidden> Date: 2015-01-05 23:54:53
On Mon, Jan 5, 2015 at 6:15 AM, Vlad Zolotarov
[off-list ref] wrote:
Add the ethtool ops to VF driver to allow querying the RSS indirection table
and RSS Random Key.
- PF driver: Add new VF-PF channel commands.
- VF driver: Utilize these new commands and add the corresponding
ethtool callbacks.
New in v3:
- Added a missing support for x550 devices.
- Mask the indirection table values according to PSRTYPE[n].RQPL.
- Minimized the number of added VF-PF commands.
New in v2:
- Added a detailed description to patches 4 and 5.
New in v1 (compared to RFC):
- Use "if-else" statement instead of a "switch-case" for a single option case.
More specifically: in cases where the newly added API version is the only one
allowed. We may consider using a "switch-case" back again when the list of
allowed API versions in these specific places grows up.
Vlad Zolotarov (5):
ixgbe: Add a RETA query command to VF-PF channel API
ixgbevf: Add a RETA query code
ixgbe: Add GET_RSS_KEY command to VF-PF channel commands set
ixgbevf: Add RSS Key query code
ixgbevf: Add the appropriate ethtool ops to query RSS indirection
table and key
drivers/net/ethernet/intel/ixgbe/ixgbe_mbx.h | 10 ++
drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c | 91 +++++++++++++++
drivers/net/ethernet/intel/ixgbevf/ethtool.c | 43 +++++++
drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c | 4 +-
drivers/net/ethernet/intel/ixgbevf/mbx.h | 10 ++
drivers/net/ethernet/intel/ixgbevf/vf.c | 132 ++++++++++++++++++++++
drivers/net/ethernet/intel/ixgbevf/vf.h | 2 +
7 files changed, 291 insertions(+), 1 deletion(-)
I've given this code a review and I don't see a way to
set a policy in the PF driver as to whether this request should be
allowed or not. We cannot enable this query by default - it is a
security risk. To make this acceptable you need to do a
couple of things.
A) Have the query disabled by default such that when a VF driver
requests the RSS info the request is denied.
B) Add hooks to allow system admins to set the policy in the PF driver
as to whether the RSS info requests from the VFs are allowed or
denied. Only provide the VF the privilege to request the RSS info if
the system admin has explicitly set the policy to allow it. All other
times the request should be denied.
As it stands this is a non-starter. Privileged information cannot be
made available to VFs without a way for the system admin to set
policy as to whether the information should be made available or not.
- Greg Rose
Intel Corp
Networking Division
[off-list ref]
--
2.1.0
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
On Mon, Jan 05, 2015 at 03:54:52PM -0800, Greg Rose wrote:
On Mon, Jan 5, 2015 at 6:15 AM, Vlad Zolotarov
[off-list ref] wrote:
quoted
Add the ethtool ops to VF driver to allow querying the RSS indirection table
and RSS Random Key.
- PF driver: Add new VF-PF channel commands.
- VF driver: Utilize these new commands and add the corresponding
ethtool callbacks.
New in v3:
- Added a missing support for x550 devices.
- Mask the indirection table values according to PSRTYPE[n].RQPL.
- Minimized the number of added VF-PF commands.
New in v2:
- Added a detailed description to patches 4 and 5.
New in v1 (compared to RFC):
- Use "if-else" statement instead of a "switch-case" for a single option case.
More specifically: in cases where the newly added API version is the only one
allowed. We may consider using a "switch-case" back again when the list of
allowed API versions in these specific places grows up.
Vlad Zolotarov (5):
ixgbe: Add a RETA query command to VF-PF channel API
ixgbevf: Add a RETA query code
ixgbe: Add GET_RSS_KEY command to VF-PF channel commands set
ixgbevf: Add RSS Key query code
ixgbevf: Add the appropriate ethtool ops to query RSS indirection
table and key
drivers/net/ethernet/intel/ixgbe/ixgbe_mbx.h | 10 ++
drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c | 91 +++++++++++++++
drivers/net/ethernet/intel/ixgbevf/ethtool.c | 43 +++++++
drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c | 4 +-
drivers/net/ethernet/intel/ixgbevf/mbx.h | 10 ++
drivers/net/ethernet/intel/ixgbevf/vf.c | 132 ++++++++++++++++++++++
drivers/net/ethernet/intel/ixgbevf/vf.h | 2 +
7 files changed, 291 insertions(+), 1 deletion(-)
I've given this code a review and I don't see a way to
set a policy in the PF driver as to whether this request should be
allowed or not. We cannot enable this query by default - it is a
security risk. To make this acceptable you need to do a
couple of things.
On Mon, Jan 05, 2015 at 03:54:52PM -0800, Greg Rose wrote:
quoted
On Mon, Jan 5, 2015 at 6:15 AM, Vlad Zolotarov
[off-list ref] wrote:
quoted
Add the ethtool ops to VF driver to allow querying the RSS indirection table
and RSS Random Key.
- PF driver: Add new VF-PF channel commands.
- VF driver: Utilize these new commands and add the corresponding
ethtool callbacks.
New in v3:
- Added a missing support for x550 devices.
- Mask the indirection table values according to PSRTYPE[n].RQPL.
- Minimized the number of added VF-PF commands.
New in v2:
- Added a detailed description to patches 4 and 5.
New in v1 (compared to RFC):
- Use "if-else" statement instead of a "switch-case" for a single option case.
More specifically: in cases where the newly added API version is the only one
allowed. We may consider using a "switch-case" back again when the list of
allowed API versions in these specific places grows up.
Vlad Zolotarov (5):
ixgbe: Add a RETA query command to VF-PF channel API
ixgbevf: Add a RETA query code
ixgbe: Add GET_RSS_KEY command to VF-PF channel commands set
ixgbevf: Add RSS Key query code
ixgbevf: Add the appropriate ethtool ops to query RSS indirection
table and key
drivers/net/ethernet/intel/ixgbe/ixgbe_mbx.h | 10 ++
drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c | 91 +++++++++++++++
drivers/net/ethernet/intel/ixgbevf/ethtool.c | 43 +++++++
drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c | 4 +-
drivers/net/ethernet/intel/ixgbevf/mbx.h | 10 ++
drivers/net/ethernet/intel/ixgbevf/vf.c | 132 ++++++++++++++++++++++
drivers/net/ethernet/intel/ixgbevf/vf.h | 2 +
7 files changed, 291 insertions(+), 1 deletion(-)
I've given this code a review and I don't see a way to
set a policy in the PF driver as to whether this request should be
allowed or not. We cannot enable this query by default - it is a
security risk. To make this acceptable you need to do a
couple of things.
I agree with Gleb here: when we started with just thinking about the
idea of this patch the possible security issue was the first thing that
came into our minds.
But eventually we couldn't come up with any security risk or attack
example that is exclusively caused by the fact that VF knows the
indirection table and/or RSS hash key of the PF.
So, Greg, if we have missed anything and your have such an example could
you share it here, please?
Thanks,
vlad
From: Greg Rose <hidden> Date: 2015-01-06 16:59:42
On Tue, Jan 6, 2015 at 2:58 AM, Vlad Zolotarov
[off-list ref] wrote:
On 01/06/15 08:55, Gleb Natapov wrote:
quoted
On Mon, Jan 05, 2015 at 03:54:52PM -0800, Greg Rose wrote:
quoted
On Mon, Jan 5, 2015 at 6:15 AM, Vlad Zolotarov
[off-list ref] wrote:
quoted
Add the ethtool ops to VF driver to allow querying the RSS indirection
table
and RSS Random Key.
- PF driver: Add new VF-PF channel commands.
- VF driver: Utilize these new commands and add the corresponding
ethtool callbacks.
New in v3:
- Added a missing support for x550 devices.
- Mask the indirection table values according to PSRTYPE[n].RQPL.
- Minimized the number of added VF-PF commands.
New in v2:
- Added a detailed description to patches 4 and 5.
New in v1 (compared to RFC):
- Use "if-else" statement instead of a "switch-case" for a single
option case.
More specifically: in cases where the newly added API version is
the only one
allowed. We may consider using a "switch-case" back again when the
list of
allowed API versions in these specific places grows up.
Vlad Zolotarov (5):
ixgbe: Add a RETA query command to VF-PF channel API
ixgbevf: Add a RETA query code
ixgbe: Add GET_RSS_KEY command to VF-PF channel commands set
ixgbevf: Add RSS Key query code
ixgbevf: Add the appropriate ethtool ops to query RSS indirection
table and key
drivers/net/ethernet/intel/ixgbe/ixgbe_mbx.h | 10 ++
drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c | 91
+++++++++++++++
drivers/net/ethernet/intel/ixgbevf/ethtool.c | 43 +++++++
drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c | 4 +-
drivers/net/ethernet/intel/ixgbevf/mbx.h | 10 ++
drivers/net/ethernet/intel/ixgbevf/vf.c | 132
++++++++++++++++++++++
drivers/net/ethernet/intel/ixgbevf/vf.h | 2 +
7 files changed, 291 insertions(+), 1 deletion(-)
I've given this code a review and I don't see a way to
set a policy in the PF driver as to whether this request should be
allowed or not. We cannot enable this query by default - it is a
security risk. To make this acceptable you need to do a
couple of things.
I agree with Gleb here: when we started with just thinking about the idea of
this patch the possible security issue was the first thing that came into
our minds.
But eventually we couldn't come up with any security risk or attack example
that is exclusively caused by the fact that VF knows the indirection table
and/or RSS hash key of the PF.
So, Greg, if we have missed anything and your have such an example could you
share it here, please?
I don't have any examples and that is not my area of expertise. But
just because we can't think of a security risk or attack example
doesn't mean there isn't one.
Just add a policy hook so that the system admin can decide whether
this information should be shared with the VFs and then we're covered
for cases of both known and unknown exploits, risks, etc.
Thanks,
- Greg
On Tue, Jan 6, 2015 at 2:58 AM, Vlad Zolotarov
[off-list ref] wrote:
quoted
On 01/06/15 08:55, Gleb Natapov wrote:
quoted
On Mon, Jan 05, 2015 at 03:54:52PM -0800, Greg Rose wrote:
quoted
On Mon, Jan 5, 2015 at 6:15 AM, Vlad Zolotarov
[off-list ref] wrote:
quoted
Add the ethtool ops to VF driver to allow querying the RSS indirection
table
and RSS Random Key.
- PF driver: Add new VF-PF channel commands.
- VF driver: Utilize these new commands and add the corresponding
ethtool callbacks.
New in v3:
- Added a missing support for x550 devices.
- Mask the indirection table values according to PSRTYPE[n].RQPL.
- Minimized the number of added VF-PF commands.
New in v2:
- Added a detailed description to patches 4 and 5.
New in v1 (compared to RFC):
- Use "if-else" statement instead of a "switch-case" for a single
option case.
More specifically: in cases where the newly added API version is
the only one
allowed. We may consider using a "switch-case" back again when the
list of
allowed API versions in these specific places grows up.
Vlad Zolotarov (5):
ixgbe: Add a RETA query command to VF-PF channel API
ixgbevf: Add a RETA query code
ixgbe: Add GET_RSS_KEY command to VF-PF channel commands set
ixgbevf: Add RSS Key query code
ixgbevf: Add the appropriate ethtool ops to query RSS indirection
table and key
drivers/net/ethernet/intel/ixgbe/ixgbe_mbx.h | 10 ++
drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c | 91
+++++++++++++++
drivers/net/ethernet/intel/ixgbevf/ethtool.c | 43 +++++++
drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c | 4 +-
drivers/net/ethernet/intel/ixgbevf/mbx.h | 10 ++
drivers/net/ethernet/intel/ixgbevf/vf.c | 132
++++++++++++++++++++++
drivers/net/ethernet/intel/ixgbevf/vf.h | 2 +
7 files changed, 291 insertions(+), 1 deletion(-)
I've given this code a review and I don't see a way to
set a policy in the PF driver as to whether this request should be
allowed or not. We cannot enable this query by default - it is a
security risk. To make this acceptable you need to do a
couple of things.
I agree with Gleb here: when we started with just thinking about the idea of
this patch the possible security issue was the first thing that came into
our minds.
But eventually we couldn't come up with any security risk or attack example
that is exclusively caused by the fact that VF knows the indirection table
and/or RSS hash key of the PF.
So, Greg, if we have missed anything and your have such an example could you
share it here, please?
I don't have any examples and that is not my area of expertise. But
just because we can't think of a security risk or attack example
doesn't mean there isn't one.
Just add a policy hook so that the system admin can decide whether
this information should be shared with the VFs and then we're covered
for cases of both known and unknown exploits, risks, etc.
I absolutely disagree with u in regard of defining an RSS redirection
table and RSS hash key as a security sensitive data. I don't know how u
got to this conclusion.
However I don't want to argue about any longer. Let's move on.
Let's clarify one thing about this "hook". Do u agree that it should
cover only the cases when VF shares the mentioned above data with PF -
namely for all devices but x550?
thanks,
vlad
On Tue, Jan 06, 2015 at 08:59:41AM -0800, Greg Rose wrote:
On Tue, Jan 6, 2015 at 2:58 AM, Vlad Zolotarov
[off-list ref] wrote:
quoted
On 01/06/15 08:55, Gleb Natapov wrote:
quoted
On Mon, Jan 05, 2015 at 03:54:52PM -0800, Greg Rose wrote:
quoted
On Mon, Jan 5, 2015 at 6:15 AM, Vlad Zolotarov
[off-list ref] wrote:
quoted
Add the ethtool ops to VF driver to allow querying the RSS indirection
table
and RSS Random Key.
- PF driver: Add new VF-PF channel commands.
- VF driver: Utilize these new commands and add the corresponding
ethtool callbacks.
New in v3:
- Added a missing support for x550 devices.
- Mask the indirection table values according to PSRTYPE[n].RQPL.
- Minimized the number of added VF-PF commands.
New in v2:
- Added a detailed description to patches 4 and 5.
New in v1 (compared to RFC):
- Use "if-else" statement instead of a "switch-case" for a single
option case.
More specifically: in cases where the newly added API version is
the only one
allowed. We may consider using a "switch-case" back again when the
list of
allowed API versions in these specific places grows up.
Vlad Zolotarov (5):
ixgbe: Add a RETA query command to VF-PF channel API
ixgbevf: Add a RETA query code
ixgbe: Add GET_RSS_KEY command to VF-PF channel commands set
ixgbevf: Add RSS Key query code
ixgbevf: Add the appropriate ethtool ops to query RSS indirection
table and key
drivers/net/ethernet/intel/ixgbe/ixgbe_mbx.h | 10 ++
drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c | 91
+++++++++++++++
drivers/net/ethernet/intel/ixgbevf/ethtool.c | 43 +++++++
drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c | 4 +-
drivers/net/ethernet/intel/ixgbevf/mbx.h | 10 ++
drivers/net/ethernet/intel/ixgbevf/vf.c | 132
++++++++++++++++++++++
drivers/net/ethernet/intel/ixgbevf/vf.h | 2 +
7 files changed, 291 insertions(+), 1 deletion(-)
I've given this code a review and I don't see a way to
set a policy in the PF driver as to whether this request should be
allowed or not. We cannot enable this query by default - it is a
security risk. To make this acceptable you need to do a
couple of things.
I agree with Gleb here: when we started with just thinking about the idea of
this patch the possible security issue was the first thing that came into
our minds.
But eventually we couldn't come up with any security risk or attack example
that is exclusively caused by the fact that VF knows the indirection table
and/or RSS hash key of the PF.
So, Greg, if we have missed anything and your have such an example could you
share it here, please?
I don't have any examples and that is not my area of expertise. But
just because we can't think of a security risk or attack example
doesn't mean there isn't one.
Is RSS hash security feature at all? Against what kind of attack? It
looks like some drivers (igb among them) use non random value for the key.
Just add a policy hook so that the system admin can decide whether
this information should be shared with the VFs and then we're covered
for cases of both known and unknown exploits, risks, etc.
Default off means that it will stay that way for most installations and
information will not be available for "cloud" users. It is hard to get
proper support on public cloud for less trivial issues than changing
host HW configuration.
--
Gleb.
From: Greg Rose <hidden> Date: 2015-01-06 18:22:14
I accidentally replied just to Vlad - here is a reply to all.
On Tue, Jan 6, 2015 at 9:30 AM, Vlad Zolotarov
[off-list ref] wrote:
On 01/06/15 18:59, Greg Rose wrote:
quoted
[snip]
quoted
I don't have any examples and that is not my area of expertise. But
just because we can't think of a security risk or attack example
doesn't mean there isn't one.
Just add a policy hook so that the system admin can decide whether
this information should be shared with the VFs and then we're covered
for cases of both known and unknown exploits, risks, etc.
I absolutely disagree with u in regard of defining an RSS redirection table
and RSS hash key as a security sensitive data. I don't know how u got to
this conclusion.
I have not reached any such conclusion - let me reiterate: I have no
idea. It is not my area of expertise. However, to take the lowest
risk route just add a policy hook so that a system admin can turn the
feature on through the PF driver (which is acknowledged as secure) if
they wish then there is no worry.
However I don't want to argue about any longer. Let's move on.
Let's clarify one thing about this "hook". Do u agree that it should cover
only the cases when VF shares the mentioned above data with PF - namely for
all devices but x550?
Look at how spoof checking is turned off/on for each VF using the "ip
link set" commands. That's what I'm envisioning - some way to decide
on a per VF basis which VFs should be allowed to perform the query.
Thanks,
- Greg
From: Greg Rose <hidden> Date: 2015-01-06 18:31:00
On Tue, Jan 6, 2015 at 10:04 AM, Gleb Natapov [off-list ref] wrote:
On Tue, Jan 06, 2015 at 08:59:41AM -0800, Greg Rose wrote:
quoted
On Tue, Jan 6, 2015 at 2:58 AM, Vlad Zolotarov
[off-list ref] wrote:
quoted
I agree with Gleb here: when we started with just thinking about the idea of
this patch the possible security issue was the first thing that came into
our minds.
But eventually we couldn't come up with any security risk or attack example
that is exclusively caused by the fact that VF knows the indirection table
and/or RSS hash key of the PF.
So, Greg, if we have missed anything and your have such an example could you
share it here, please?
I don't have any examples and that is not my area of expertise. But
just because we can't think of a security risk or attack example
doesn't mean there isn't one.
Is RSS hash security feature at all? Against what kind of attack? It
looks like some drivers (igb among them) use non random value for the key.
I don't believe RSS hashing itself is a security feature - I don't
know that sharing the RSS info with a VF is a security risk. I'm just
asking that we preserve default behavior to avoid the possibility.
quoted
Just add a policy hook so that the system admin can decide whether
this information should be shared with the VFs and then we're covered
for cases of both known and unknown exploits, risks, etc.
Default off means that it will stay that way for most installations and
information will not be available for "cloud" users. It is hard to get
proper support on public cloud for less trivial issues than changing
host HW configuration.
Someone in the host is configuring the VF HW to begin with. Someone
had to create the VFs in the first place so I presume they could set
the policy for this feature as well at the same time. To return to an
example I provided to Vlad - anti-spoof checking is on by default but
we allow system admins to turn it off so that other features, such as
bonding, can be used. I just want to preserve current behavior while
allowing the feature you want to add to be available for those who
want it.
If Dave and the rest of community feel that there is no risk to these
patches and that they should be applied then I'll go away and shut up
about it. But for now I'm just approaching this from a "better safe
than sorry" viewpoint.
Thanks,
- Greg
On Tue, Jan 06, 2015 at 10:30:59AM -0800, Greg Rose wrote:
On Tue, Jan 6, 2015 at 10:04 AM, Gleb Natapov [off-list ref] wrote:
quoted
On Tue, Jan 06, 2015 at 08:59:41AM -0800, Greg Rose wrote:
quoted
On Tue, Jan 6, 2015 at 2:58 AM, Vlad Zolotarov
[off-list ref] wrote:
quoted
I agree with Gleb here: when we started with just thinking about the idea of
this patch the possible security issue was the first thing that came into
our minds.
But eventually we couldn't come up with any security risk or attack example
that is exclusively caused by the fact that VF knows the indirection table
and/or RSS hash key of the PF.
So, Greg, if we have missed anything and your have such an example could you
share it here, please?
I don't have any examples and that is not my area of expertise. But
just because we can't think of a security risk or attack example
doesn't mean there isn't one.
Is RSS hash security feature at all? Against what kind of attack? It
looks like some drivers (igb among them) use non random value for the key.
I don't believe RSS hashing itself is a security feature - I don't
know that sharing the RSS info with a VF is a security risk. I'm just
asking that we preserve default behavior to avoid the possibility.
quoted
quoted
Just add a policy hook so that the system admin can decide whether
this information should be shared with the VFs and then we're covered
for cases of both known and unknown exploits, risks, etc.
Default off means that it will stay that way for most installations and
information will not be available for "cloud" users. It is hard to get
proper support on public cloud for less trivial issues than changing
host HW configuration.
Someone in the host is configuring the VF HW to begin with. Someone
had to create the VFs in the first place so I presume they could set
the policy for this feature as well at the same time. To return to an
example I provided to Vlad - anti-spoof checking is on by default but
we allow system admins to turn it off so that other features, such as
bonding, can be used. I just want to preserve current behavior while
allowing the feature you want to add to be available for those who
want it.
If Dave and the rest of community feel that there is no risk to these
patches and that they should be applied then I'll go away and shut up
about it. But for now I'm just approaching this from a "better safe
than sorry" viewpoint.
Thanks Greg for explaining your position clearly on this matter. I CCed
Dave to get his opinion. Vlad is going to work on adding this knob
anyway meanwhile, but we still have a hope that default could be "on".
--
Gleb.
I accidentally replied just to Vlad - here is a reply to all.
On Tue, Jan 6, 2015 at 9:30 AM, Vlad Zolotarov
[off-list ref] wrote:
quoted
On 01/06/15 18:59, Greg Rose wrote:
[snip]
quoted
quoted
I don't have any examples and that is not my area of expertise. But
just because we can't think of a security risk or attack example
doesn't mean there isn't one.
Just add a policy hook so that the system admin can decide whether
this information should be shared with the VFs and then we're covered
for cases of both known and unknown exploits, risks, etc.
I absolutely disagree with u in regard of defining an RSS redirection table
and RSS hash key as a security sensitive data. I don't know how u got to
this conclusion.
I have not reached any such conclusion - let me reiterate: I have no
idea. It is not my area of expertise. However, to take the lowest
risk route just add a policy hook so that a system admin can turn the
feature on through the PF driver (which is acknowledged as secure) if
they wish then there is no worry.
NP. Let's move on.
quoted
However I don't want to argue about any longer. Let's move on.
Let's clarify one thing about this "hook". Do u agree that it should cover
only the cases when VF shares the mentioned above data with PF - namely for
all devices but x550?
Look at how spoof checking is turned off/on for each VF using the "ip
link set" commands. That's what I'm envisioning - some way to decide
on a per VF basis which VFs should be allowed to perform the query.
I will but let's agree that x550 VFs should be out of this since their
RSS indirection table and Key belong to the specific domain and don't
impose any even theoretical thread.
thanks,
vlad
From: Greg Rose <hidden> Date: 2015-01-06 21:13:52
On Tue, Jan 6, 2015 at 12:13 PM, Vlad Zolotarov
[off-list ref] wrote:
On 01/06/15 20:22, Greg Rose wrote:
quoted
[snip]
quoted
I have not reached any such conclusion - let me reiterate: I have no
idea. It is not my area of expertise. However, to take the lowest
risk route just add a policy hook so that a system admin can turn the
feature on through the PF driver (which is acknowledged as secure) if
they wish then there is no worry.
NP. Let's move on.
quoted
quoted
However I don't want to argue about any longer. Let's move on.
Let's clarify one thing about this "hook". Do u agree that it should
cover
only the cases when VF shares the mentioned above data with PF - namely
for
all devices but x550?
Look at how spoof checking is turned off/on for each VF using the "ip
link set" commands. That's what I'm envisioning - some way to decide
on a per VF basis which VFs should be allowed to perform the query.
I will but let's agree that x550 VFs should be out of this since their RSS
indirection table and Key belong to the specific domain and don't impose any
even theoretical thread.