* [PATCH ethtool 0/3] ethtool: Wake-on-LAN using filters
@ 2018-08-08 18:22 Florian Fainelli
2018-08-08 18:22 ` [PATCH ethtool 1/3] ethtool-copy.h: sync with net-next Florian Fainelli
` (2 more replies)
0 siblings, 3 replies; 7+ messages in thread
From: Florian Fainelli @ 2018-08-08 18:22 UTC (permalink / raw)
To: netdev; +Cc: linville, andrew, davem, Florian Fainelli
Hi John,
This patch series syncs up ethtool-copy.h to get the new definitions
required for supporting wake-on-LAN using filters: WAKE_FILTER and
RX_CLS_FLOW_WAKE and then updates the rxclass.c code to allow us to
specify action -2 (RX_CLS_FLOW_WAKE).
Let me know if you would like this to be done differently.
Thanks!
Florian Fainelli (3):
ethtool-copy.h: sync with net-next
ethtool: Add support for WAKE_FILTER (WoL using filters)
ethtool: Add support for action value -2 (wake-up filter)
ethtool-copy.h | 15 +++++++++++----
ethtool.8.in | 4 +++-
ethtool.c | 5 +++++
rxclass.c | 8 +++++---
4 files changed, 24 insertions(+), 8 deletions(-)
--
2.17.1
^ permalink raw reply [flat|nested] 7+ messages in thread* [PATCH ethtool 1/3] ethtool-copy.h: sync with net-next 2018-08-08 18:22 [PATCH ethtool 0/3] ethtool: Wake-on-LAN using filters Florian Fainelli @ 2018-08-08 18:22 ` Florian Fainelli 2018-08-08 18:22 ` [PATCH ethtool 2/3] ethtool: Add support for WAKE_FILTER (WoL using filters) Florian Fainelli 2018-08-08 18:22 ` [PATCH ethtool 3/3] ethtool: Add support for action value -2 (wake-up filter) Florian Fainelli 2 siblings, 0 replies; 7+ messages in thread From: Florian Fainelli @ 2018-08-08 18:22 UTC (permalink / raw) To: netdev; +Cc: linville, andrew, davem, Florian Fainelli This covers kernel changes up to commit 6cfef793b558: ethtool: Add WAKE_FILTER and RX_CLS_FLOW_WAKE Signed-off-by: Florian Fainelli <f.fainelli@gmail.com> --- ethtool-copy.h | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/ethtool-copy.h b/ethtool-copy.h index 8cc61e9ab40b..6bfbb85f9402 100644 --- a/ethtool-copy.h +++ b/ethtool-copy.h @@ -215,12 +215,16 @@ struct ethtool_value { __u32 data; }; +#define PFC_STORM_PREVENTION_AUTO 0xffff +#define PFC_STORM_PREVENTION_DISABLE 0 + enum tunable_id { ETHTOOL_ID_UNSPEC, ETHTOOL_RX_COPYBREAK, ETHTOOL_TX_COPYBREAK, + ETHTOOL_PFC_PREVENTION_TOUT, /* timeout in msecs */ /* - * Add your fresh new tubale attribute above and remember to update + * Add your fresh new tunable attribute above and remember to update * tunable_strings[] in net/core/ethtool.c */ __ETHTOOL_TUNABLE_COUNT, @@ -864,7 +868,8 @@ struct ethtool_flow_ext { * includes the %FLOW_EXT or %FLOW_MAC_EXT flag * (see &struct ethtool_flow_ext description). * @ring_cookie: RX ring/queue index to deliver to, or %RX_CLS_FLOW_DISC - * if packets should be discarded + * if packets should be discarded, or %RX_CLS_FLOW_WAKE if the + * packets should be used for Wake-on-LAN with %WAKE_FILTER * @location: Location of rule in the table. Locations must be * numbered such that a flow matching multiple rules will be * classified according to the first (lowest numbered) rule. @@ -896,13 +901,13 @@ struct ethtool_rx_flow_spec { static __inline__ __u64 ethtool_get_flow_spec_ring(__u64 ring_cookie) { return ETHTOOL_RX_FLOW_SPEC_RING & ring_cookie; -}; +} static __inline__ __u64 ethtool_get_flow_spec_ring_vf(__u64 ring_cookie) { return (ETHTOOL_RX_FLOW_SPEC_RING_VF & ring_cookie) >> ETHTOOL_RX_FLOW_SPEC_RING_VF_OFF; -}; +} /** * struct ethtool_rxnfc - command to get or set RX flow classification rules @@ -1628,6 +1633,7 @@ static __inline__ int ethtool_validate_duplex(__u8 duplex) #define WAKE_ARP (1 << 4) #define WAKE_MAGIC (1 << 5) #define WAKE_MAGICSECURE (1 << 6) /* only meaningful if WAKE_MAGIC */ +#define WAKE_FILTER (1 << 7) /* L2-L4 network traffic flow types */ #define TCP_V4_FLOW 0x01 /* hash or spec (tcp_ip4_spec) */ @@ -1665,6 +1671,7 @@ static __inline__ int ethtool_validate_duplex(__u8 duplex) #define RXH_DISCARD (1 << 31) #define RX_CLS_FLOW_DISC 0xffffffffffffffffULL +#define RX_CLS_FLOW_WAKE 0xfffffffffffffffeULL /* Special RX classification rule insert location values */ #define RX_CLS_LOC_SPECIAL 0x80000000 /* flag */ -- 2.17.1 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH ethtool 2/3] ethtool: Add support for WAKE_FILTER (WoL using filters) 2018-08-08 18:22 [PATCH ethtool 0/3] ethtool: Wake-on-LAN using filters Florian Fainelli 2018-08-08 18:22 ` [PATCH ethtool 1/3] ethtool-copy.h: sync with net-next Florian Fainelli @ 2018-08-08 18:22 ` Florian Fainelli 2018-08-08 18:25 ` Florian Fainelli 2018-08-08 18:22 ` [PATCH ethtool 3/3] ethtool: Add support for action value -2 (wake-up filter) Florian Fainelli 2 siblings, 1 reply; 7+ messages in thread From: Florian Fainelli @ 2018-08-08 18:22 UTC (permalink / raw) To: netdev; +Cc: linville, andrew, davem, Florian Fainelli Add a new character 'f' which can be used to configure an Ethernet controller to support Wake-on-LAN using filters programmed with the ethtool::rxnfc and the special action -2 (wake-up filter). This is useful in particular in the context of devices that must support wake-up on more complex patterns such as multicast DNS packets. Signed-off-by: Florian Fainelli <f.fainelli@gmail.com> --- ethtool.8.in | 4 +++- ethtool.c | 5 +++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/ethtool.8.in b/ethtool.8.in index 0a366aa536ae..97c7330fd373 100644 --- a/ethtool.8.in +++ b/ethtool.8.in @@ -58,7 +58,7 @@ .\" .\" \(*WO - wol flags .\" -.ds WO \fBp\fP|\fBu\fP|\fBm\fP|\fBb\fP|\fBa\fP|\fBg\fP|\fBs\fP|\fBd\fP... +.ds WO \fBp\fP|\fBu\fP|\fBm\fP|\fBb\fP|\fBa\fP|\fBg\fP|\fBs\fP|\fBf|\fBd\fP... .\" .\" \(*FL - flow type values .\" @@ -679,6 +679,7 @@ b Wake on broadcast messages a Wake on ARP g Wake on MagicPacket\[tm] s Enable SecureOn\[tm] password for MagicPacket\[tm] +f Wake on filter(s) d T{ Disable (wake on nothing). This option clears all previous options. T} @@ -870,6 +871,7 @@ Specifies the Rx queue to send packets to, or some other action. nokeep; lB l. -1 Drop the matched flow +-2 Use the matched flow as a Wake-on-LAN filter 0 or higher Rx queue to route the flow .TE .TP diff --git a/ethtool.c b/ethtool.c index fb93ae898312..aa2bbe9e4c65 100644 --- a/ethtool.c +++ b/ethtool.c @@ -931,6 +931,9 @@ static int parse_wolopts(char *optstr, u32 *data) case 's': *data |= WAKE_MAGICSECURE; break; + case 'f': + *data |= WAKE_FILTER; + break; case 'd': *data = 0; break; @@ -964,6 +967,8 @@ static char *unparse_wolopts(int wolopts) *p++ = 'g'; if (wolopts & WAKE_MAGICSECURE) *p++ = 's'; + if (wolopts & WAKE_FILTER) + *p++ = 'f'; } else { *p = 'd'; } -- 2.17.1 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH ethtool 2/3] ethtool: Add support for WAKE_FILTER (WoL using filters) 2018-08-08 18:22 ` [PATCH ethtool 2/3] ethtool: Add support for WAKE_FILTER (WoL using filters) Florian Fainelli @ 2018-08-08 18:25 ` Florian Fainelli 0 siblings, 0 replies; 7+ messages in thread From: Florian Fainelli @ 2018-08-08 18:25 UTC (permalink / raw) To: netdev; +Cc: linville, andrew, davem On 08/08/2018 11:22 AM, Florian Fainelli wrote: > Add a new character 'f' which can be used to configure an Ethernet > controller to support Wake-on-LAN using filters programmed with the > ethtool::rxnfc and the special action -2 (wake-up filter). This is > useful in particular in the context of devices that must support wake-up > on more complex patterns such as multicast DNS packets. > > Signed-off-by: Florian Fainelli <f.fainelli@gmail.com> > --- > ethtool.8.in | 4 +++- > ethtool.c | 5 +++++ > 2 files changed, 8 insertions(+), 1 deletion(-) > > diff --git a/ethtool.8.in b/ethtool.8.in > index 0a366aa536ae..97c7330fd373 100644 > --- a/ethtool.8.in > +++ b/ethtool.8.in > @@ -58,7 +58,7 @@ > .\" > .\" \(*WO - wol flags > .\" > -.ds WO \fBp\fP|\fBu\fP|\fBm\fP|\fBb\fP|\fBa\fP|\fBg\fP|\fBs\fP|\fBd\fP... > +.ds WO \fBp\fP|\fBu\fP|\fBm\fP|\fBb\fP|\fBa\fP|\fBg\fP|\fBs\fP|\fBf|\fBd\fP... > .\" > .\" \(*FL - flow type values > .\" > @@ -679,6 +679,7 @@ b Wake on broadcast messages > a Wake on ARP > g Wake on MagicPacket\[tm] > s Enable SecureOn\[tm] password for MagicPacket\[tm] > +f Wake on filter(s) > d T{ > Disable (wake on nothing). This option clears all previous options. > T} > @@ -870,6 +871,7 @@ Specifies the Rx queue to send packets to, or some other action. > nokeep; > lB l. > -1 Drop the matched flow > +-2 Use the matched flow as a Wake-on-LAN filter Humm, this hunk belongs in patch #3, I will re-submit that series after you give me some feedback. Thanks! -- Florian ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH ethtool 3/3] ethtool: Add support for action value -2 (wake-up filter) 2018-08-08 18:22 [PATCH ethtool 0/3] ethtool: Wake-on-LAN using filters Florian Fainelli 2018-08-08 18:22 ` [PATCH ethtool 1/3] ethtool-copy.h: sync with net-next Florian Fainelli 2018-08-08 18:22 ` [PATCH ethtool 2/3] ethtool: Add support for WAKE_FILTER (WoL using filters) Florian Fainelli @ 2018-08-08 18:22 ` Florian Fainelli 2 siblings, 0 replies; 7+ messages in thread From: Florian Fainelli @ 2018-08-08 18:22 UTC (permalink / raw) To: netdev; +Cc: linville, andrew, davem, Florian Fainelli Add the ability to program special filters using ethtool::rxnfc which are meant to be used for wake-up purposes (in conjuction with WAKE_FILTER) using the special action value: -2 (RX_CLS_FLOW_WAKE). Signed-off-by: Florian Fainelli <f.fainelli@gmail.com> --- rxclass.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/rxclass.c b/rxclass.c index 42d122d1ed86..79972651e706 100644 --- a/rxclass.c +++ b/rxclass.c @@ -251,7 +251,11 @@ static void rxclass_print_nfc_rule(struct ethtool_rx_flow_spec *fsp, if (fsp->flow_type & FLOW_RSS) fprintf(stdout, "\tRSS Context ID: %u\n", rss_context); - if (fsp->ring_cookie != RX_CLS_FLOW_DISC) { + if (fsp->ring_cookie == RX_CLS_FLOW_DISC) { + fprintf(stdout, "\tAction: Drop\n"); + } else if (fsp->ring_cookie == RX_CLS_FLOW_WAKE) { + fprintf(stdout, "\tAction: Wake-on-LAN\n"); + } else { u64 vf = ethtool_get_flow_spec_ring_vf(fsp->ring_cookie); u64 queue = ethtool_get_flow_spec_ring(fsp->ring_cookie); @@ -266,8 +270,6 @@ static void rxclass_print_nfc_rule(struct ethtool_rx_flow_spec *fsp, else fprintf(stdout, "\tAction: Direct to queue %llu\n", queue); - } else { - fprintf(stdout, "\tAction: Drop\n"); } fprintf(stdout, "\n"); -- 2.17.1 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH ethtool 0/3] RSS ntuple filters
@ 2018-03-09 15:01 Edward Cree
2018-03-09 15:03 ` [PATCH ethtool 1/3] ethtool-copy.h: sync with net-next Edward Cree
0 siblings, 1 reply; 7+ messages in thread
From: Edward Cree @ 2018-03-09 15:01 UTC (permalink / raw)
To: John W. Linville; +Cc: netdev
This series adds support for the management of extra RSS contexts and RSS
spreading of ntuple/NFC filters introduced in kernel commit 84a1d9c48200
("net: ethtool: extend RXNFC API to support RSS spreading of filter matches").
Edward Cree (3):
ethtool-copy.h: sync with net-next
ethtool: add support for extra RSS contexts and RSS steering filters
ethtool.8: Document RSS context control and RSS filters
ethtool-copy.h | 32 ++++++++++---
ethtool.8.in | 28 ++++++++++++
ethtool.c | 141 +++++++++++++++++++++++++++++++++++++++++++++++++--------
internal.h | 4 +-
rxclass.c | 58 ++++++++++++++++++++----
5 files changed, 227 insertions(+), 36 deletions(-)
^ permalink raw reply [flat|nested] 7+ messages in thread* [PATCH ethtool 1/3] ethtool-copy.h: sync with net-next 2018-03-09 15:01 [PATCH ethtool 0/3] RSS ntuple filters Edward Cree @ 2018-03-09 15:03 ` Edward Cree 0 siblings, 0 replies; 7+ messages in thread From: Edward Cree @ 2018-03-09 15:03 UTC (permalink / raw) To: John W. Linville; +Cc: netdev This covers kernel changes up to commit 84a1d9c48200, net: ethtool: extend RXNFC API to support RSS spreading of filter matches Signed-off-by: Edward Cree <ecree@solarflare.com> --- ethtool-copy.h | 32 ++++++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/ethtool-copy.h b/ethtool-copy.h index f4e7bb2..8cc61e9 100644 --- a/ethtool-copy.h +++ b/ethtool-copy.h @@ -912,12 +912,15 @@ static __inline__ __u64 ethtool_get_flow_spec_ring_vf(__u64 ring_cookie) * @flow_type: Type of flow to be affected, e.g. %TCP_V4_FLOW * @data: Command-dependent value * @fs: Flow classification rule + * @rss_context: RSS context to be affected * @rule_cnt: Number of rules to be affected * @rule_locs: Array of used rule locations * * For %ETHTOOL_GRXFH and %ETHTOOL_SRXFH, @data is a bitmask indicating * the fields included in the flow hash, e.g. %RXH_IP_SRC. The following - * structure fields must not be used. + * structure fields must not be used, except that if @flow_type includes + * the %FLOW_RSS flag, then @rss_context determines which RSS context to + * act on. * * For %ETHTOOL_GRXRINGS, @data is set to the number of RX rings/queues * on return. @@ -929,7 +932,9 @@ static __inline__ __u64 ethtool_get_flow_spec_ring_vf(__u64 ring_cookie) * set in @data then special location values should not be used. * * For %ETHTOOL_GRXCLSRULE, @fs.@location specifies the location of an - * existing rule on entry and @fs contains the rule on return. + * existing rule on entry and @fs contains the rule on return; if + * @fs.@flow_type includes the %FLOW_RSS flag, then @rss_context is + * filled with the RSS context ID associated with the rule. * * For %ETHTOOL_GRXCLSRLALL, @rule_cnt specifies the array size of the * user buffer for @rule_locs on entry. On return, @data is the size @@ -940,7 +945,11 @@ static __inline__ __u64 ethtool_get_flow_spec_ring_vf(__u64 ring_cookie) * For %ETHTOOL_SRXCLSRLINS, @fs specifies the rule to add or update. * @fs.@location either specifies the location to use or is a special * location value with %RX_CLS_LOC_SPECIAL flag set. On return, - * @fs.@location is the actual rule location. + * @fs.@location is the actual rule location. If @fs.@flow_type + * includes the %FLOW_RSS flag, @rss_context is the RSS context ID to + * use for flow spreading traffic which matches this rule. The value + * from the rxfh indirection table will be added to @fs.@ring_cookie + * to choose which ring to deliver to. * * For %ETHTOOL_SRXCLSRLDEL, @fs.@location specifies the location of an * existing rule on entry. @@ -961,7 +970,10 @@ struct ethtool_rxnfc { __u32 flow_type; __u64 data; struct ethtool_rx_flow_spec fs; - __u32 rule_cnt; + union { + __u32 rule_cnt; + __u32 rss_context; + }; __u32 rule_locs[0]; }; @@ -988,7 +1000,11 @@ struct ethtool_rxfh_indir { /** * struct ethtool_rxfh - command to get/set RX flow hash indir or/and hash key. * @cmd: Specific command number - %ETHTOOL_GRSSH or %ETHTOOL_SRSSH - * @rss_context: RSS context identifier. + * @rss_context: RSS context identifier. Context 0 is the default for normal + * traffic; other contexts can be referenced as the destination for RX flow + * classification rules. %ETH_RXFH_CONTEXT_ALLOC is used with command + * %ETHTOOL_SRSSH to allocate a new RSS context; on return this field will + * contain the ID of the newly allocated context. * @indir_size: On entry, the array size of the user buffer for the * indirection table, which may be zero, or (for %ETHTOOL_SRSSH), * %ETH_RXFH_INDIR_NO_CHANGE. On return from %ETHTOOL_GRSSH, @@ -1007,7 +1023,8 @@ struct ethtool_rxfh_indir { * size should be returned. For %ETHTOOL_SRSSH, an @indir_size of * %ETH_RXFH_INDIR_NO_CHANGE means that indir table setting is not requested * and a @indir_size of zero means the indir table should be reset to default - * values. An hfunc of zero means that hash function setting is not requested. + * values (if @rss_context == 0) or that the RSS context should be deleted. + * An hfunc of zero means that hash function setting is not requested. */ struct ethtool_rxfh { __u32 cmd; @@ -1019,6 +1036,7 @@ struct ethtool_rxfh { __u32 rsvd32; __u32 rss_config[0]; }; +#define ETH_RXFH_CONTEXT_ALLOC 0xffffffff #define ETH_RXFH_INDIR_NO_CHANGE 0xffffffff /** @@ -1633,6 +1651,8 @@ static __inline__ int ethtool_validate_duplex(__u8 duplex) /* Flag to enable additional fields in struct ethtool_rx_flow_spec */ #define FLOW_EXT 0x80000000 #define FLOW_MAC_EXT 0x40000000 +/* Flag to enable RSS spreading of traffic matching rule (nfc only) */ +#define FLOW_RSS 0x20000000 /* L3-L4 network traffic flow hash options */ #define RXH_L2DA (1 << 1) ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH ethtool 0/3] IPv6 RXNFC @ 2016-02-15 14:56 Edward Cree 2016-02-15 14:59 ` [PATCH ethtool 1/3] ethtool-copy.h: sync with net-next Edward Cree 0 siblings, 1 reply; 7+ messages in thread From: Edward Cree @ 2016-02-15 14:56 UTC (permalink / raw) To: Ben Hutchings; +Cc: netdev This series adds support for steering of IPv6 receive flows. Edward Cree (3): ethtool-copy.h: sync with net-next Add IPv6 support to NFC Documentation for IPv6 NFC ethtool-copy.h | 149 +++++++++++++++++++++++++++++-- ethtool.8.in | 34 ++++++-- ethtool.c | 25 +++++- rxclass.c | 272 ++++++++++++++++++++++++++++++++++++++++++++++++++++++--- 4 files changed, 449 insertions(+), 31 deletions(-) ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH ethtool 1/3] ethtool-copy.h: sync with net-next 2016-02-15 14:56 [PATCH ethtool 0/3] IPv6 RXNFC Edward Cree @ 2016-02-15 14:59 ` Edward Cree 0 siblings, 0 replies; 7+ messages in thread From: Edward Cree @ 2016-02-15 14:59 UTC (permalink / raw) To: Ben Hutchings; +Cc: netdev This covers kernel changes up to: commit 72bb68721f80a1441e871b6afc9ab0b3793d5031 Author: Edward Cree <ecree@solarflare.com> Date: Fri Feb 5 11:16:21 2016 +0000 ethtool: add IPv6 to the NFC API Signed-off-by: Edward Cree <ecree@solarflare.com> --- ethtool-copy.h | 149 ++++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 142 insertions(+), 7 deletions(-) diff --git a/ethtool-copy.h b/ethtool-copy.h index d23ffc4..39e89e3 100644 --- a/ethtool-copy.h +++ b/ethtool-copy.h @@ -215,6 +215,11 @@ enum tunable_id { ETHTOOL_ID_UNSPEC, ETHTOOL_RX_COPYBREAK, ETHTOOL_TX_COPYBREAK, + /* + * Add your fresh new tubale attribute above and remember to update + * tunable_strings[] in net/core/ethtool.c + */ + __ETHTOOL_TUNABLE_COUNT, }; enum tunable_type_id { @@ -537,6 +542,7 @@ struct ethtool_pauseparam { * now deprecated * @ETH_SS_FEATURES: Device feature names * @ETH_SS_RSS_HASH_FUNCS: RSS hush function names + * @ETH_SS_PHY_STATS: Statistic names, for use with %ETHTOOL_GPHYSTATS */ enum ethtool_stringset { ETH_SS_TEST = 0, @@ -545,6 +551,8 @@ enum ethtool_stringset { ETH_SS_NTUPLE_FILTERS, ETH_SS_FEATURES, ETH_SS_RSS_HASH_FUNCS, + ETH_SS_TUNABLES, + ETH_SS_PHY_STATS, }; /** @@ -740,6 +748,56 @@ struct ethtool_usrip4_spec { __u8 proto; }; +/** + * struct ethtool_tcpip6_spec - flow specification for TCP/IPv6 etc. + * @ip6src: Source host + * @ip6dst: Destination host + * @psrc: Source port + * @pdst: Destination port + * @tclass: Traffic Class + * + * This can be used to specify a TCP/IPv6, UDP/IPv6 or SCTP/IPv6 flow. + */ +struct ethtool_tcpip6_spec { + __be32 ip6src[4]; + __be32 ip6dst[4]; + __be16 psrc; + __be16 pdst; + __u8 tclass; +}; + +/** + * struct ethtool_ah_espip6_spec - flow specification for IPsec/IPv6 + * @ip6src: Source host + * @ip6dst: Destination host + * @spi: Security parameters index + * @tclass: Traffic Class + * + * This can be used to specify an IPsec transport or tunnel over IPv6. + */ +struct ethtool_ah_espip6_spec { + __be32 ip6src[4]; + __be32 ip6dst[4]; + __be32 spi; + __u8 tclass; +}; + +/** + * struct ethtool_usrip6_spec - general flow specification for IPv6 + * @ip6src: Source host + * @ip6dst: Destination host + * @l4_4_bytes: First 4 bytes of transport (layer 4) header + * @tclass: Traffic Class + * @l4_proto: Transport protocol number (nexthdr after any Extension Headers) + */ +struct ethtool_usrip6_spec { + __be32 ip6src[4]; + __be32 ip6dst[4]; + __be32 l4_4_bytes; + __u8 tclass; + __u8 l4_proto; +}; + union ethtool_flow_union { struct ethtool_tcpip4_spec tcp_ip4_spec; struct ethtool_tcpip4_spec udp_ip4_spec; @@ -747,6 +805,12 @@ union ethtool_flow_union { struct ethtool_ah_espip4_spec ah_ip4_spec; struct ethtool_ah_espip4_spec esp_ip4_spec; struct ethtool_usrip4_spec usr_ip4_spec; + struct ethtool_tcpip6_spec tcp_ip6_spec; + struct ethtool_tcpip6_spec udp_ip6_spec; + struct ethtool_tcpip6_spec sctp_ip6_spec; + struct ethtool_ah_espip6_spec ah_ip6_spec; + struct ethtool_ah_espip6_spec esp_ip6_spec; + struct ethtool_usrip6_spec usr_ip6_spec; struct ethhdr ether_spec; __u8 hdata[52]; }; @@ -796,6 +860,31 @@ struct ethtool_rx_flow_spec { __u32 location; }; +/* How rings are layed out when accessing virtual functions or + * offloaded queues is device specific. To allow users to do flow + * steering and specify these queues the ring cookie is partitioned + * into a 32bit queue index with an 8 bit virtual function id. + * This also leaves the 3bytes for further specifiers. It is possible + * future devices may support more than 256 virtual functions if + * devices start supporting PCIe w/ARI. However at the moment I + * do not know of any devices that support this so I do not reserve + * space for this at this time. If a future patch consumes the next + * byte it should be aware of this possiblity. + */ +#define ETHTOOL_RX_FLOW_SPEC_RING 0x00000000FFFFFFFFLL +#define ETHTOOL_RX_FLOW_SPEC_RING_VF 0x000000FF00000000LL +#define ETHTOOL_RX_FLOW_SPEC_RING_VF_OFF 32 +static __inline__ __u64 ethtool_get_flow_spec_ring(__u64 ring_cookie) +{ + return ETHTOOL_RX_FLOW_SPEC_RING & ring_cookie; +}; + +static __inline__ __u64 ethtool_get_flow_spec_ring_vf(__u64 ring_cookie) +{ + return (ETHTOOL_RX_FLOW_SPEC_RING_VF & ring_cookie) >> + ETHTOOL_RX_FLOW_SPEC_RING_VF_OFF; +}; + /** * struct ethtool_rxnfc - command to get or set RX flow classification rules * @cmd: Specific command number - %ETHTOOL_GRXFH, %ETHTOOL_SRXFH, @@ -1062,6 +1151,11 @@ struct ethtool_sfeatures { * the 'hwtstamp_tx_types' and 'hwtstamp_rx_filters' enumeration values, * respectively. For example, if the device supports HWTSTAMP_TX_ON, * then (1 << HWTSTAMP_TX_ON) in 'tx_types' will be set. + * + * Drivers should only report the filters they actually support without + * upscaling in the SIOCSHWTSTAMP ioctl. If the SIOCSHWSTAMP request for + * HWTSTAMP_FILTER_V1_SYNC is supported by HWTSTAMP_FILTER_V1_EVENT, then the + * driver should only report HWTSTAMP_FILTER_V1_EVENT in this op. */ struct ethtool_ts_info { __u32 cmd; @@ -1189,6 +1283,7 @@ enum ethtool_sfeatures_retval_bits { #define ETHTOOL_SRSSH 0x00000047 /* Set RX flow hash configuration */ #define ETHTOOL_GTUNABLE 0x00000048 /* Get tunable configuration */ #define ETHTOOL_STUNABLE 0x00000049 /* Set tunable configuration */ +#define ETHTOOL_GPHYSTATS 0x0000004a /* get PHY-specific statistics */ /* compatibility with older code */ #define SPARC_ETH_GSET ETHTOOL_GSET @@ -1264,23 +1359,61 @@ enum ethtool_sfeatures_retval_bits { * it was forced up into this mode or autonegotiated. */ -/* The forced speed, 10Mb, 100Mb, gigabit, [2.5|10|20|40|56]GbE. */ +/* The forced speed, 10Mb, 100Mb, gigabit, [2.5|5|10|20|25|40|50|56|100]GbE. */ #define SPEED_10 10 #define SPEED_100 100 #define SPEED_1000 1000 #define SPEED_2500 2500 +#define SPEED_5000 5000 #define SPEED_10000 10000 #define SPEED_20000 20000 +#define SPEED_25000 25000 #define SPEED_40000 40000 +#define SPEED_50000 50000 #define SPEED_56000 56000 +#define SPEED_100000 100000 #define SPEED_UNKNOWN -1 +static __inline__ int ethtool_validate_speed(__u32 speed) +{ + switch (speed) { + case SPEED_10: + case SPEED_100: + case SPEED_1000: + case SPEED_2500: + case SPEED_5000: + case SPEED_10000: + case SPEED_20000: + case SPEED_25000: + case SPEED_40000: + case SPEED_50000: + case SPEED_56000: + case SPEED_100000: + case SPEED_UNKNOWN: + return 1; + } + + return 0; +} + /* Duplex, half or full. */ #define DUPLEX_HALF 0x00 #define DUPLEX_FULL 0x01 #define DUPLEX_UNKNOWN 0xff +static __inline__ int ethtool_validate_duplex(__u8 duplex) +{ + switch (duplex) { + case DUPLEX_HALF: + case DUPLEX_FULL: + case DUPLEX_UNKNOWN: + return 1; + } + + return 0; +} + /* Which connector port. */ #define PORT_TP 0x00 #define PORT_AUI 0x01 @@ -1324,15 +1457,17 @@ enum ethtool_sfeatures_retval_bits { #define UDP_V4_FLOW 0x02 /* hash or spec (udp_ip4_spec) */ #define SCTP_V4_FLOW 0x03 /* hash or spec (sctp_ip4_spec) */ #define AH_ESP_V4_FLOW 0x04 /* hash only */ -#define TCP_V6_FLOW 0x05 /* hash only */ -#define UDP_V6_FLOW 0x06 /* hash only */ -#define SCTP_V6_FLOW 0x07 /* hash only */ +#define TCP_V6_FLOW 0x05 /* hash or spec (tcp_ip6_spec; nfc only) */ +#define UDP_V6_FLOW 0x06 /* hash or spec (udp_ip6_spec; nfc only) */ +#define SCTP_V6_FLOW 0x07 /* hash or spec (sctp_ip6_spec; nfc only) */ #define AH_ESP_V6_FLOW 0x08 /* hash only */ #define AH_V4_FLOW 0x09 /* hash or spec (ah_ip4_spec) */ #define ESP_V4_FLOW 0x0a /* hash or spec (esp_ip4_spec) */ -#define AH_V6_FLOW 0x0b /* hash only */ -#define ESP_V6_FLOW 0x0c /* hash only */ -#define IP_USER_FLOW 0x0d /* spec only (usr_ip4_spec) */ +#define AH_V6_FLOW 0x0b /* hash or spec (ah_ip6_spec; nfc only) */ +#define ESP_V6_FLOW 0x0c /* hash or spec (esp_ip6_spec; nfc only) */ +#define IPV4_USER_FLOW 0x0d /* spec only (usr_ip4_spec) */ +#define IP_USER_FLOW IPV4_USER_FLOW +#define IPV6_USER_FLOW 0x0e /* spec only (usr_ip6_spec; nfc only) */ #define IPV4_FLOW 0x10 /* hash only */ #define IPV6_FLOW 0x11 /* hash only */ #define ETHER_FLOW 0x12 /* spec only (ether_spec) */ ^ permalink raw reply related [flat|nested] 7+ messages in thread
end of thread, other threads:[~2018-08-08 20:46 UTC | newest] Thread overview: 7+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2018-08-08 18:22 [PATCH ethtool 0/3] ethtool: Wake-on-LAN using filters Florian Fainelli 2018-08-08 18:22 ` [PATCH ethtool 1/3] ethtool-copy.h: sync with net-next Florian Fainelli 2018-08-08 18:22 ` [PATCH ethtool 2/3] ethtool: Add support for WAKE_FILTER (WoL using filters) Florian Fainelli 2018-08-08 18:25 ` Florian Fainelli 2018-08-08 18:22 ` [PATCH ethtool 3/3] ethtool: Add support for action value -2 (wake-up filter) Florian Fainelli -- strict thread matches above, loose matches on Subject: below -- 2018-03-09 15:01 [PATCH ethtool 0/3] RSS ntuple filters Edward Cree 2018-03-09 15:03 ` [PATCH ethtool 1/3] ethtool-copy.h: sync with net-next Edward Cree 2016-02-15 14:56 [PATCH ethtool 0/3] IPv6 RXNFC Edward Cree 2016-02-15 14:59 ` [PATCH ethtool 1/3] ethtool-copy.h: sync with net-next Edward Cree
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).