diff options
author | Dmitry Bogdanov <dmitry.bogdanov@aquantia.com> | 2018-11-12 18:46:07 +0300 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2018-11-14 19:48:37 +0300 |
commit | 9a8cac4b4dae9d5717d4e5f38e0a5ce41de501ee (patch) | |
tree | f77a2d3366c43243d85ca52c05fcbf218bf07183 /drivers/net/ethernet/aquantia/atlantic/aq_hw.h | |
parent | 54bcb3d162a884adb91a53cc58412093ad64dc11 (diff) | |
download | linux-9a8cac4b4dae9d5717d4e5f38e0a5ce41de501ee.tar.xz |
net: aquantia: add ethertype and PCP to rx flow filters
L2 EtherType filters allows to filter packet by EtherType field or
both EtherType and User Priority (PCP) field of 802.1Q.
UserPriority (vlan) parameter must be accompanied by mask 0x1FFF. That
is to distinguish VLAN filter from L2 Ethertype filter with
UserPriority since both User Priority and VLAN ID are passed in the
same 'vlan' parameter.
Example:
To add a filter that directs IP4 packess of priority 3 to queue 3:
ethtool -N <ethX> flow-type ether proto 0x800 vlan 0x600 m 0x1FFF \
action 3 loc 16
Signed-off-by: Dmitry Bogdanov <dmitry.bogdanov@aquantia.com>
Signed-off-by: Igor Russkikh <igor.russkikh@aquantia.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/aquantia/atlantic/aq_hw.h')
-rw-r--r-- | drivers/net/ethernet/aquantia/atlantic/aq_hw.h | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/drivers/net/ethernet/aquantia/atlantic/aq_hw.h b/drivers/net/ethernet/aquantia/atlantic/aq_hw.h index d31474c8a498..b0a48956e22f 100644 --- a/drivers/net/ethernet/aquantia/atlantic/aq_hw.h +++ b/drivers/net/ethernet/aquantia/atlantic/aq_hw.h @@ -20,6 +20,8 @@ #define AQ_RX_FIRST_LOC_FVLANID 0U #define AQ_RX_LAST_LOC_FVLANID 15U +#define AQ_RX_FIRST_LOC_FETHERT 16U +#define AQ_RX_LAST_LOC_FETHERT 31U #define AQ_RX_FIRST_LOC_FL3L4 32U #define AQ_RX_LAST_LOC_FL3L4 39U #define AQ_RX_MAX_RXNFC_LOC AQ_RX_LAST_LOC_FL3L4 @@ -198,6 +200,12 @@ struct aq_hw_ops { int (*hw_filter_l3l4_clear)(struct aq_hw_s *self, struct aq_rx_filter_l3l4 *data); + int (*hw_filter_l2_set)(struct aq_hw_s *self, + struct aq_rx_filter_l2 *data); + + int (*hw_filter_l2_clear)(struct aq_hw_s *self, + struct aq_rx_filter_l2 *data); + int (*hw_filter_vlan_set)(struct aq_hw_s *self, struct aq_rx_filter_vlan *aq_vlans); |