igb: Enable the ethtool interface fo RX nfc filter
Subsystems (2)
PATCH 1/4 igb: Enable the ethtool interface fo RX nfc filter
From: Gangfeng Huang <[email protected]>
This patch is meant to allow for RX flow classification to insert and remove Rx filter by ethtool. Ethtool interface has it's own rules manager
Show all filters:
$ ethtool -n eth0 4 RX rings available Total 2 rules
--- drivers/net/ethernet/intel/igb/igb.h | 31 +++++ drivers/net/ethernet/intel/igb/igb_ethtool.c | 193 ++++++++++++++++++++++++++ drivers/net/ethernet/intel/igb/igb_main.c | 45 ++++++ 3 files changed, 269 insertions(+)
drivers/net/ethernet/intel/igb/igb.h +31 -0
@@ -352,6 +352,19 @@ struct hwmon_buff {#define IGB_N_SDP 4#define IGB_RETA_SIZE 128 +enum igb_filter_match_flags { +IGB_FILTER_FLAG_NONE =0x0 , +}; + +#define IGB_MAX_RXNFC_FILTERS 16 + +struct igb_nfc_input { +/* Byte layout in order, all values with MSB first: +* match_flags - 1 byte +*/ +u8 match_flags; +}; +/* board specific private data structure */ struct igb_adapter {unsigned long active_vlans[BITS_TO_LONGS (VLAN_N_VID )];
@@ -479,6 +492,19 @@ struct igb_adapter {struct mutex user_ring_mutex;/* protect tx/rx_uring_init */ bool cdev_in_use;struct mutex cdev_mutex;/* protect cdev_in_use */ + +/* rxnfc support */ +struct hlist_head nfc_filter_list; +unsigned int nfc_filter_count; +/* lock for nfc filter */ +spinlock_t nfc_lock; +}; + +struct igb_nfc_filter { +struct hlist_node nfc_node; +struct igb_nfc_input filter; +u16 sw_idx; +u16 action; };#define IGB_FLAG_HAS_MSI (1 << 0)
@@ -601,4 +627,9 @@ static inline struct netdev_queue *txring_txq(const struct igb_ring *tx_ring) return netdev_get_tx_queue(tx_ring->netdev, tx_ring->queue_index); } +int igb_add_filter (struct igb_adapter *adapter, +struct igb_nfc_filter *input); +int igb_erase_filter (struct igb_adapter *adapter, +struct igb_nfc_filter *input); +#endif /* _IGB_H_ */
drivers/net/ethernet/intel/igb/igb_ethtool.c +193 -0
217 lines not on this page · raw message
drivers/net/ethernet/intel/igb/igb_main.c +45 -0
79 lines not on this page · raw message
Signature · 1 line
1.7.9.5
PATCH 2/4 igb: add support of ethertype RX nfc filters
From: Gangfeng Huang <[email protected]>
This patch is meant to allow for RX flow classification to insert and remove ethertype filter by ethtool
Example:
Add an ethertype filter:
$ ethtool -N eth0 flow-type ether proto 0x88F8 action 2
Show all filters:
$ ethtool -n eth0 4 RX rings available Total 1 rules
Filter: 15
Flow Type: Raw Ethernet Src MAC addr: 00:00:00:00:00:00 mask: FF:FF:FF:FF:FF:FF Dest MAC addr: 00:00:00:00:00:00 mask: FF:FF:FF:FF:FF:FF Ethertype: 0x88F8 mask: 0x0 Action: Direct to queue 2
Delete the filter by location:
$ ethtool -N delete 15
--- drivers/net/ethernet/intel/igb/e1000_82575.h | 5 ++ drivers/net/ethernet/intel/igb/igb.h | 20 ++++++- drivers/net/ethernet/intel/igb/igb_ethtool.c | 77 +++++++++++++++++++++++++- drivers/net/ethernet/intel/igb/igb_ptp.c | 4 +- 4 files changed, 102 insertions(+), 4 deletions(-)
drivers/net/ethernet/intel/igb/e1000_82575.h +5 -0
@@ -187,7 +187,12 @@ struct e1000_adv_tx_context_desc {/* ETQF register bit definitions */ #define E1000_ETQF_FILTER_ENABLE (1 << 26) +#define E1000_ETQF_IMM_INT (1 << 29)#define E1000_ETQF_1588 (1 << 30) +#define E1000_ETQF_QUEUE_ENABLE (1 << 31) +#define E1000_ETQF_QUEUE_SHIFT 16 +#define E1000_ETQF_QUEUE_MASK 0x00070000 +#define E1000_ETQF_ETYPE_MASK 0x0000FFFF/* FTQF register bit definitions */ #define E1000_FTQF_VF_BP 0x00008000
drivers/net/ethernet/intel/igb/igb.h +19 -1
@@ -347,13 +347,27 @@ struct hwmon_buff { };#endif +/* The number of L2 ether-type filter registers, Index 3 is reserved +* for PTP 1588 timestamp +*/ +#define MAX_ETYPE_FILTER (4 - 1) + +/* ETQF filter list: one static filter per filter consumer. This is +* to avoid filter collisions later. Add new filters +* here!! +* +* Current filters: +* 1588 (0x88f7): Filter 3 +*/ +#define IGB_ETQF_FILTER_1588 3 +#define IGB_N_EXTTS 2#define IGB_N_PEROUT 2#define IGB_N_SDP 4#define IGB_RETA_SIZE 128enum igb_filter_match_flags { -IGB_FILTER_FLAG_NONE =0x0 , +IGB_FILTER_FLAG_ETHER_TYPE =0x1 , };#define IGB_MAX_RXNFC_FILTERS 16
@@ -361,8 +375,10 @@ enum igb_filter_match_flags {struct igb_nfc_input {/* Byte layout in order, all values with MSB first: * match_flags - 1 byte +* etype - 2 bytes */ u8 match_flags; +__be16 etype; };/* board specific private data structure */
@@ -498,11 +514,13 @@ struct igb_adapter {unsigned int nfc_filter_count;/* lock for nfc filter */ spinlock_t nfc_lock; +bool etype_bitmap[MAX_ETYPE_FILTER ]; };struct igb_nfc_filter {struct hlist_node nfc_node;struct igb_nfc_input filter; +u16 etype_reg_index;u16 sw_idx;u16 action; };
drivers/net/ethernet/intel/igb/igb_ethtool.c +76 -1
111 lines not on this page · raw message
drivers/net/ethernet/intel/igb/igb_ptp.c +2 -2
@@ -941,12 +941,12 @@ static int igb_ptp_set_timestamp_mode(struct igb_adapter *adapter,/* define ethertype filter for timestamped packets */ if (is_l2) -wr32 (E1000_ETQF (3 ), +wr32 (E1000_ETQF (IGB_ETQF_FILTER_1588 ), (E1000_ETQF_FILTER_ENABLE |/* enable filter */ E1000_ETQF_1588 |/* enable timestamping */ ETH_P_1588 ));/* 1588 eth protocol type */ else -wr32 (E1000_ETQF (3 ),0 ); +wr32 (E1000_ETQF (IGB_ETQF_FILTER_1588 ),0 );/* L4 Queue Filter[3]: filter by destination port and protocol */ if (is_l4) {
Signature · 1 line
1.7.9.5
PATCH 3/4 igb: add support of Rx VLAN priority filters
In reply to GangfengFrom: Gangfeng Huang <[email protected]>
This patch is meant to allow for nfc to insert and remove VLAN priority filter by ethtool
Example:
Add an VLAN priority filter:
$ ethtool -N eth0 flow-type ether vlan 0x6000 vlan-mask 0x1FFF action 2 loc 1
Show all filters:
$ ethtool -n eth0 4 RX rings available Total 1 rules
Filter: 1
Flow Type: Raw Ethernet Src MAC addr: 00:00:00:00:00:00 mask: FF:FF:FF:FF:FF:FF Dest MAC addr: 00:00:00:00:00:00 mask: FF:FF:FF:FF:FF:FF Ethertype: 0x0 mask: 0xFFFF VLAN EtherType: 0x0 mask: 0xffff VLAN: 0x6000 mask: 0x1fff User-defined: 0x0 mask: 0xffffffffffffffff Action: Direct to queue 2
Delete the filter by location:
$ ethtool -N delete 1
--- drivers/net/ethernet/intel/igb/e1000_defines.h | 5 ++ drivers/net/ethernet/intel/igb/e1000_regs.h | 1 + drivers/net/ethernet/intel/igb/igb.h | 3 + drivers/net/ethernet/intel/igb/igb_ethtool.c | 91 ++++++++++++++++++++++-- 4 files changed, 93 insertions(+), 7 deletions(-)
drivers/net/ethernet/intel/igb/e1000_defines.h +5 -0
@@ -1056,4 +1056,9 @@#define E1000_DTXMXPKTSZ_DEFAULT 0x00000098 +/* VLAN Priority Filter */ +#define E1000_VLAPQF_QUEUE_SEL (_n, q_idx) (q_idx << ((_n) * 4)) +#define E1000_VLAPQF_P_VALID (_n) (0x1 << (3 + (_n) * 4)) +#define E1000_VLAPQF_QUEUE_MASK 0x03 +#endif
drivers/net/ethernet/intel/igb/e1000_regs.h +1 -0
@@ -316,6 +316,7 @@ (0x054E0 + ((_i - 16) * 8)))#define E1000_RAH (_i) (((_i) <= 15) ? (0x05404 + ((_i) * 8)) : \ (0x054E4 + ((_i - 16) * 8))) +#define E1000_VLAPQF 0x055B0/* VLAN Priority Queue Filter VLAPQF */ #define E1000_IP4AT_REG (_i) (0x05840 + ((_i) * 8))#define E1000_IP6AT_REG (_i) (0x05880 + ((_i) * 4))#define E1000_WUPM_REG (_i) (0x05A00 + ((_i) * 4))
drivers/net/ethernet/intel/igb/igb.h +3 -0
@@ -368,6 +368,7 @@ struct hwmon_buff {enum igb_filter_match_flags {IGB_FILTER_FLAG_ETHER_TYPE =0x1 , +IGB_FILTER_FLAG_VLAN_TCI =0x2 , };#define IGB_MAX_RXNFC_FILTERS 16
@@ -376,9 +377,11 @@ struct igb_nfc_input {/* Byte layout in order, all values with MSB first: * match_flags - 1 byte * etype - 2 bytes +* vlan_tci - 2 bytes */ u8 match_flags;__be16 etype; +__be16 vlan_tci; };/* board specific private data structure */
drivers/net/ethernet/intel/igb/igb_ethtool.c +84 -7
139 lines not on this page · raw message
Signature · 1 line
1.7.9.5
PATCH 4/4 igb: fix error code in igb_add_ethtool_nfc_entry()
In reply to GangfengUse error "rmgr: Cannot insert RX class rule: Operation not supported" is more meaningful than "rmgr: Cannot insert RX class rule: Unknown error 524"
--- drivers/net/ethernet/intel/igb/igb_ethtool.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/net/ethernet/intel/igb/igb_ethtool.c +1 -1
@@ -3027,7 +3027,7 @@ static int igb_add_ethtool_nfc_entry(struct igb_adapter *adapter,int err =0 ;if (!(netdev->hw_features &NETIF_F_NTUPLE )) -return -ENOTSUPP ; +return -EOPNOTSUPP ;/* Don't allow programming if the action is a queue greater than * the number of online Rx queues.
Signature · 1 line
1.7.9.5
PATCH 1/4 igb: Enable the ethtool interface fo RX nfc filter
In reply to GangfengQuoted 11 lines · Gangfeng
From: Gangfeng Huang <[email protected]>
This patch is meant to allow for RX flow classification to insert and remove Rx filter by ethtool. Ethtool interface has it's own rules manager
Show all filters:
$ ethtool -n eth0 4 RX rings available Total 2 rules
Quoted 8 lines
Signed-off-by Ruhao Gao <[email protected]>Signed-off-by Gangfeng Huang <[email protected]>---
?drivers/net/ethernet/intel/igb/igb.h???????? |?? 31 +++++ ?drivers/net/ethernet/intel/igb/igb_ethtool.c |? 193
++++++++++++++++++++++++++
?drivers/net/ethernet/intel/igb/igb_main.c??? |?? 45 ++++++ ?3 files changed, 269 insertions(+)
This patch does not apply, because it is based on a igb driver that has your character device support in the driver (which was rejected by David Miller, and others).
Also you removed the reference to NFC in the patch description, so you could avoid actually defining what you mean by NFC. :-( ?But you forgot to remove the reference from the title of the patch.
Also you refer to "NFC" in your patch, but you never define what NFC stands for. ?So if you seriously want these changes in the igb driver, then you will have to make the following changes to this series:
? 1- Make sure they apply cleanly to my next-queue tree (dev-queue branch) before sending them out for review and testing
? 2- Define what NFC stands for in the patch description BEFORE you use the NFC acronym
? 3- Use proper versioning of your patch series. ?This is at least the third time you have sent out this series with changes, yet based on the series title, it would appear that this is the first time you sent it :-( Learn to use 'git format-patch -v 4 --cover-letter' options. ? 4- Provide a cover-letter with the detailed change history of the patch set as well as a lengthy description of why this patch series is needed for the igb driver
With ANY of the above missing from your next patch series submission
will be cause for the series to be dropped without any question from
the patch queue.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: This is a digitally signed message part
URL: <http://lists.osuosl.org/pipermail/intel-wired-lan/attachments/20160302/9cb70983/attachment.asc>