* [dpdk-dev] [PATCH 1/2] ethdev: add tunnel and port RSS offload types @ 2016-03-26 17:55 Jerin Jacob 2016-03-26 17:55 ` [dpdk-dev] [PATCH 2/2] ethdev: add ETH_RSS_RETA_SIZE_256 Jerin Jacob 2016-03-29 11:20 ` [dpdk-dev] [PATCH v2 0/2] New RSS offload flags Jerin Jacob 0 siblings, 2 replies; 25+ messages in thread From: Jerin Jacob @ 2016-03-26 17:55 UTC (permalink / raw) To: dev; +Cc: thomas.monjalon, bruce.richardson, Jerin Jacob - added VXLAN, GENEVE and NVGRE tunnel flow types - added PORT flow type for accounting physical/virtual port or channel number in flow creation Signed-off-by: Jerin Jacob <jerin.jacob@caviumnetworks.com> --- app/test-pmd/config.c | 5 +++++ lib/librte_ether/rte_eth_ctrl.h | 6 +++++- lib/librte_ether/rte_ethdev.h | 16 +++++++++++++++- 3 files changed, 25 insertions(+), 2 deletions(-) diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c index b1bbec6..479d26c 100644 --- a/app/test-pmd/config.c +++ b/app/test-pmd/config.c @@ -137,6 +137,11 @@ static const struct rss_type_info rss_type_table[] = { { "ipv6-ex", ETH_RSS_IPV6_EX }, { "ipv6-tcp-ex", ETH_RSS_IPV6_TCP_EX }, { "ipv6-udp-ex", ETH_RSS_IPV6_UDP_EX }, + { "port", ETH_RSS_PORT }, + { "vxlan", ETH_RSS_VXLAN }, + { "geneve", ETH_RSS_GENEVE }, + { "nvgre", ETH_RSS_NVGRE }, + }; static void diff --git a/lib/librte_ether/rte_eth_ctrl.h b/lib/librte_ether/rte_eth_ctrl.h index aabd724..2b70676 100644 --- a/lib/librte_ether/rte_eth_ctrl.h +++ b/lib/librte_ether/rte_eth_ctrl.h @@ -74,7 +74,11 @@ extern "C" { #define RTE_ETH_FLOW_IPV6_EX 15 #define RTE_ETH_FLOW_IPV6_TCP_EX 16 #define RTE_ETH_FLOW_IPV6_UDP_EX 17 -#define RTE_ETH_FLOW_MAX 18 +#define RTE_ETH_FLOW_PORT 18 +#define RET_ETH_FLOW_VXLAN 19 +#define RET_ETH_FLOW_GENEVE 20 +#define RET_ETH_FLOW_NVGRE 21 +#define RTE_ETH_FLOW_MAX 22 /** * Feature filter types diff --git a/lib/librte_ether/rte_ethdev.h b/lib/librte_ether/rte_ethdev.h index e7de34a..cf2e7f4 100644 --- a/lib/librte_ether/rte_ethdev.h +++ b/lib/librte_ether/rte_ethdev.h @@ -406,6 +406,10 @@ struct rte_eth_rss_conf { #define ETH_RSS_IPV6_EX (1ULL << RTE_ETH_FLOW_IPV6_EX) #define ETH_RSS_IPV6_TCP_EX (1ULL << RTE_ETH_FLOW_IPV6_TCP_EX) #define ETH_RSS_IPV6_UDP_EX (1ULL << RTE_ETH_FLOW_IPV6_UDP_EX) +#define ETH_RSS_PORT (1ULL << RTE_ETH_FLOW_PORT) +#define ETH_RSS_VXLAN (1ULL << RET_ETH_FLOW_VXLAN) +#define ETH_RSS_GENEVE (1ULL << RET_ETH_FLOW_GENEVE) +#define ETH_RSS_NVGRE (1ULL << RET_ETH_FLOW_NVGRE) #define ETH_RSS_IP ( \ ETH_RSS_IPV4 | \ @@ -430,6 +434,12 @@ struct rte_eth_rss_conf { ETH_RSS_NONFRAG_IPV4_SCTP | \ ETH_RSS_NONFRAG_IPV6_SCTP) +#define ETH_RSS_TUNNEL ( \ + ETH_RSS_VXLAN | \ + ETH_RSS_GENEVE | \ + ETH_RSS_NVGRE) + + /**< Mask of valid RSS hash protocols */ #define ETH_RSS_PROTO_MASK ( \ ETH_RSS_IPV4 | \ @@ -447,7 +457,11 @@ struct rte_eth_rss_conf { ETH_RSS_L2_PAYLOAD | \ ETH_RSS_IPV6_EX | \ ETH_RSS_IPV6_TCP_EX | \ - ETH_RSS_IPV6_UDP_EX) + ETH_RSS_IPV6_UDP_EX | \ + ETH_RSS_PORT | \ + ETH_RSS_VXLAN | \ + ETH_RSS_GENEVE | \ + ETH_RSS_NVGRE) /* * Definitions used for redirection table entry size. -- 2.1.0 ^ permalink raw reply [flat|nested] 25+ messages in thread
* [dpdk-dev] [PATCH 2/2] ethdev: add ETH_RSS_RETA_SIZE_256 2016-03-26 17:55 [dpdk-dev] [PATCH 1/2] ethdev: add tunnel and port RSS offload types Jerin Jacob @ 2016-03-26 17:55 ` Jerin Jacob 2016-03-29 11:20 ` [dpdk-dev] [PATCH v2 0/2] New RSS offload flags Jerin Jacob 1 sibling, 0 replies; 25+ messages in thread From: Jerin Jacob @ 2016-03-26 17:55 UTC (permalink / raw) To: dev; +Cc: thomas.monjalon, bruce.richardson, Jerin Jacob Signed-off-by: Jerin Jacob <jerin.jacob@caviumnetworks.com> --- lib/librte_ether/rte_ethdev.h | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/librte_ether/rte_ethdev.h b/lib/librte_ether/rte_ethdev.h index cf2e7f4..2f4cd09 100644 --- a/lib/librte_ether/rte_ethdev.h +++ b/lib/librte_ether/rte_ethdev.h @@ -470,6 +470,7 @@ struct rte_eth_rss_conf { */ #define ETH_RSS_RETA_SIZE_64 64 #define ETH_RSS_RETA_SIZE_128 128 +#define ETH_RSS_RETA_SIZE_256 256 #define ETH_RSS_RETA_SIZE_512 512 #define RTE_RETA_GROUP_SIZE 64 -- 2.1.0 ^ permalink raw reply [flat|nested] 25+ messages in thread
* [dpdk-dev] [PATCH v2 0/2] New RSS offload flags 2016-03-26 17:55 [dpdk-dev] [PATCH 1/2] ethdev: add tunnel and port RSS offload types Jerin Jacob 2016-03-26 17:55 ` [dpdk-dev] [PATCH 2/2] ethdev: add ETH_RSS_RETA_SIZE_256 Jerin Jacob @ 2016-03-29 11:20 ` Jerin Jacob 2016-03-29 11:20 ` [dpdk-dev] [PATCH v2 1/2] ethdev: add tunnel and port RSS offload types Jerin Jacob 2016-03-29 11:20 ` [dpdk-dev] [PATCH v2 " Jerin Jacob 1 sibling, 2 replies; 25+ messages in thread From: Jerin Jacob @ 2016-03-29 11:20 UTC (permalink / raw) To: dev; +Cc: thomas.monjalon, bruce.richardson, Jerin Jacob v1..v2 - Added cover letter - Corrected typo in RET_ETH_FLOW_VXLAN name - Updated test-pmd application to access newly defined RSS offload flags Jerin Jacob (2): ethdev: add tunnel and port RSS offload types ethdev: add ETH_RSS_RETA_SIZE_256 app/test-pmd/cmdline.c | 18 +++++++++++++++--- app/test-pmd/config.c | 9 +++++++++ lib/librte_ether/rte_eth_ctrl.h | 6 +++++- lib/librte_ether/rte_ethdev.h | 17 ++++++++++++++++- 4 files changed, 45 insertions(+), 5 deletions(-) -- 2.1.0 ^ permalink raw reply [flat|nested] 25+ messages in thread
* [dpdk-dev] [PATCH v2 1/2] ethdev: add tunnel and port RSS offload types 2016-03-29 11:20 ` [dpdk-dev] [PATCH v2 0/2] New RSS offload flags Jerin Jacob @ 2016-03-29 11:20 ` Jerin Jacob 2016-03-29 11:26 ` Mcnamara, John ` (2 more replies) 2016-03-29 11:20 ` [dpdk-dev] [PATCH v2 " Jerin Jacob 1 sibling, 3 replies; 25+ messages in thread From: Jerin Jacob @ 2016-03-29 11:20 UTC (permalink / raw) To: dev; +Cc: thomas.monjalon, bruce.richardson, Jerin Jacob - added VXLAN, GENEVE and NVGRE tunnel flow types - added PORT flow type for accounting physical/virtual port or channel number in flow creation Signed-off-by: Jerin Jacob <jerin.jacob@caviumnetworks.com> --- app/test-pmd/cmdline.c | 18 +++++++++++++++--- app/test-pmd/config.c | 9 +++++++++ lib/librte_ether/rte_eth_ctrl.h | 6 +++++- lib/librte_ether/rte_ethdev.h | 16 +++++++++++++++- 4 files changed, 44 insertions(+), 5 deletions(-) diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c index 93203f4..5fe8239 100644 --- a/app/test-pmd/cmdline.c +++ b/app/test-pmd/cmdline.c @@ -565,7 +565,7 @@ static void cmd_help_long_parsed(void *parsed_result, " Set crc-strip/rx-checksum/hardware-vlan/drop_en" " for ports.\n\n" - "port config all rss (all|ip|tcp|udp|sctp|ether|none)\n" + "port config all rss (all|ip|tcp|udp|sctp|ether|port|vxlan|geneve|nvgre|none)\n" " Set the RSS mode.\n\n" "port config port-id rss reta (hash,queue)[,(hash,queue)]\n" @@ -1545,6 +1545,14 @@ cmd_config_rss_parsed(void *parsed_result, rss_conf.rss_hf = ETH_RSS_SCTP; else if (!strcmp(res->value, "ether")) rss_conf.rss_hf = ETH_RSS_L2_PAYLOAD; + else if (!strcmp(res->value, "port")) + rss_conf.rss_hf = ETH_RSS_PORT; + else if (!strcmp(res->value, "vxlan")) + rss_conf.rss_hf = ETH_RSS_VXLAN; + else if (!strcmp(res->value, "geneve")) + rss_conf.rss_hf = ETH_RSS_GENEVE; + else if (!strcmp(res->value, "nvgre")) + rss_conf.rss_hf = ETH_RSS_NVGRE; else if (!strcmp(res->value, "none")) rss_conf.rss_hf = 0; else { @@ -1566,12 +1574,12 @@ cmdline_parse_token_string_t cmd_config_rss_name = TOKEN_STRING_INITIALIZER(struct cmd_config_rss, name, "rss"); cmdline_parse_token_string_t cmd_config_rss_value = TOKEN_STRING_INITIALIZER(struct cmd_config_rss, value, - "all#ip#tcp#udp#sctp#ether#none"); + "all#ip#tcp#udp#sctp#ether#port#vxlan#geneve#nvgre#none"); cmdline_parse_inst_t cmd_config_rss = { .f = cmd_config_rss_parsed, .data = NULL, - .help_str = "port config all rss all|ip|tcp|udp|sctp|ether|none", + .help_str = "port config all rss all|ip|tcp|udp|sctp|ether|port|vxlan|geneve|nvgre|none", .tokens = { (void *)&cmd_config_rss_port, (void *)&cmd_config_rss_keyword, @@ -9304,6 +9312,10 @@ flowtype_to_str(uint16_t ftype) {"ipv6-sctp", RTE_ETH_FLOW_NONFRAG_IPV6_SCTP}, {"ipv6-other", RTE_ETH_FLOW_NONFRAG_IPV6_OTHER}, {"l2_payload", RTE_ETH_FLOW_L2_PAYLOAD}, + {"port", RTE_ETH_FLOW_PORT}, + {"vxlan", RTE_ETH_FLOW_VXLAN}, + {"geneve", RTE_ETH_FLOW_GENEVE}, + {"nvgre", RTE_ETH_FLOW_NVGRE}, }; for (i = 0; i < RTE_DIM(ftype_table); i++) { diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c index b1bbec6..0b3619d 100644 --- a/app/test-pmd/config.c +++ b/app/test-pmd/config.c @@ -137,6 +137,11 @@ static const struct rss_type_info rss_type_table[] = { { "ipv6-ex", ETH_RSS_IPV6_EX }, { "ipv6-tcp-ex", ETH_RSS_IPV6_TCP_EX }, { "ipv6-udp-ex", ETH_RSS_IPV6_UDP_EX }, + { "port", ETH_RSS_PORT }, + { "vxlan", ETH_RSS_VXLAN }, + { "geneve", ETH_RSS_GENEVE }, + { "nvgre", ETH_RSS_NVGRE }, + }; static void @@ -2028,6 +2033,10 @@ flowtype_to_str(uint16_t flow_type) {"ipv6-sctp", RTE_ETH_FLOW_NONFRAG_IPV6_SCTP}, {"ipv6-other", RTE_ETH_FLOW_NONFRAG_IPV6_OTHER}, {"l2_payload", RTE_ETH_FLOW_L2_PAYLOAD}, + {"port", RTE_ETH_FLOW_PORT}, + {"vxlan", RTE_ETH_FLOW_VXLAN}, + {"geneve", RTE_ETH_FLOW_GENEVE}, + {"nvgre", RTE_ETH_FLOW_NVGRE}, }; for (i = 0; i < RTE_DIM(flowtype_str_table); i++) { diff --git a/lib/librte_ether/rte_eth_ctrl.h b/lib/librte_ether/rte_eth_ctrl.h index aabd724..d57e967 100644 --- a/lib/librte_ether/rte_eth_ctrl.h +++ b/lib/librte_ether/rte_eth_ctrl.h @@ -74,7 +74,11 @@ extern "C" { #define RTE_ETH_FLOW_IPV6_EX 15 #define RTE_ETH_FLOW_IPV6_TCP_EX 16 #define RTE_ETH_FLOW_IPV6_UDP_EX 17 -#define RTE_ETH_FLOW_MAX 18 +#define RTE_ETH_FLOW_PORT 18 +#define RTE_ETH_FLOW_VXLAN 19 +#define RTE_ETH_FLOW_GENEVE 20 +#define RTE_ETH_FLOW_NVGRE 21 +#define RTE_ETH_FLOW_MAX 22 /** * Feature filter types diff --git a/lib/librte_ether/rte_ethdev.h b/lib/librte_ether/rte_ethdev.h index e7de34a..a4eeeba 100644 --- a/lib/librte_ether/rte_ethdev.h +++ b/lib/librte_ether/rte_ethdev.h @@ -406,6 +406,10 @@ struct rte_eth_rss_conf { #define ETH_RSS_IPV6_EX (1ULL << RTE_ETH_FLOW_IPV6_EX) #define ETH_RSS_IPV6_TCP_EX (1ULL << RTE_ETH_FLOW_IPV6_TCP_EX) #define ETH_RSS_IPV6_UDP_EX (1ULL << RTE_ETH_FLOW_IPV6_UDP_EX) +#define ETH_RSS_PORT (1ULL << RTE_ETH_FLOW_PORT) +#define ETH_RSS_VXLAN (1ULL << RTE_ETH_FLOW_VXLAN) +#define ETH_RSS_GENEVE (1ULL << RTE_ETH_FLOW_GENEVE) +#define ETH_RSS_NVGRE (1ULL << RTE_ETH_FLOW_NVGRE) #define ETH_RSS_IP ( \ ETH_RSS_IPV4 | \ @@ -430,6 +434,12 @@ struct rte_eth_rss_conf { ETH_RSS_NONFRAG_IPV4_SCTP | \ ETH_RSS_NONFRAG_IPV6_SCTP) +#define ETH_RSS_TUNNEL ( \ + ETH_RSS_VXLAN | \ + ETH_RSS_GENEVE | \ + ETH_RSS_NVGRE) + + /**< Mask of valid RSS hash protocols */ #define ETH_RSS_PROTO_MASK ( \ ETH_RSS_IPV4 | \ @@ -447,7 +457,11 @@ struct rte_eth_rss_conf { ETH_RSS_L2_PAYLOAD | \ ETH_RSS_IPV6_EX | \ ETH_RSS_IPV6_TCP_EX | \ - ETH_RSS_IPV6_UDP_EX) + ETH_RSS_IPV6_UDP_EX | \ + ETH_RSS_PORT | \ + ETH_RSS_VXLAN | \ + ETH_RSS_GENEVE | \ + ETH_RSS_NVGRE) /* * Definitions used for redirection table entry size. -- 2.1.0 ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [dpdk-dev] [PATCH v2 1/2] ethdev: add tunnel and port RSS offload types 2016-03-29 11:20 ` [dpdk-dev] [PATCH v2 1/2] ethdev: add tunnel and port RSS offload types Jerin Jacob @ 2016-03-29 11:26 ` Mcnamara, John 2016-03-29 11:58 ` De Lara Guarch, Pablo 2016-03-30 20:51 ` [dpdk-dev] [PATCH v3 0/2] New RSS offload flags Jerin Jacob 2 siblings, 0 replies; 25+ messages in thread From: Mcnamara, John @ 2016-03-29 11:26 UTC (permalink / raw) To: Jerin Jacob, dev; +Cc: thomas.monjalon, Richardson, Bruce > -----Original Message----- > From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Jerin Jacob > Sent: Tuesday, March 29, 2016 12:20 PM > To: dev@dpdk.org > Cc: thomas.monjalon@6wind.com; Richardson, Bruce > <bruce.richardson@intel.com>; Jerin Jacob <jerin.jacob@caviumnetworks.com> > Subject: [dpdk-dev] [PATCH v2 1/2] ethdev: add tunnel and port RSS offload > types > > ... > > - "port config all rss (all|ip|tcp|udp|sctp|ether|none)\n" > + "port config all rss (all|ip|tcp|udp|sctp|ether|port|vxlan|geneve|nvgre|none)\n" Hi, Just a reminder that if the testpmd interface is changed you need to update the testpmd documentation as well. John ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [dpdk-dev] [PATCH v2 1/2] ethdev: add tunnel and port RSS offload types 2016-03-29 11:20 ` [dpdk-dev] [PATCH v2 1/2] ethdev: add tunnel and port RSS offload types Jerin Jacob 2016-03-29 11:26 ` Mcnamara, John @ 2016-03-29 11:58 ` De Lara Guarch, Pablo 2016-03-30 20:47 ` Jerin Jacob 2016-03-30 20:51 ` [dpdk-dev] [PATCH v3 0/2] New RSS offload flags Jerin Jacob 2 siblings, 1 reply; 25+ messages in thread From: De Lara Guarch, Pablo @ 2016-03-29 11:58 UTC (permalink / raw) To: Jerin Jacob, dev; +Cc: thomas.monjalon, Richardson, Bruce Hi Jerin, > -----Original Message----- > From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Jerin Jacob > Sent: Tuesday, March 29, 2016 12:20 PM > To: dev@dpdk.org > Cc: thomas.monjalon@6wind.com; Richardson, Bruce; Jerin Jacob > Subject: [dpdk-dev] [PATCH v2 1/2] ethdev: add tunnel and port RSS offload > types > > - added VXLAN, GENEVE and NVGRE tunnel flow types > - added PORT flow type for accounting physical/virtual > port or channel number in flow creation > > Signed-off-by: Jerin Jacob <jerin.jacob@caviumnetworks.com> > --- > app/test-pmd/cmdline.c | 18 +++++++++++++++--- > app/test-pmd/config.c | 9 +++++++++ > lib/librte_ether/rte_eth_ctrl.h | 6 +++++- > lib/librte_ether/rte_ethdev.h | 16 +++++++++++++++- > 4 files changed, 44 insertions(+), 5 deletions(-) > > diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c > index 93203f4..5fe8239 100644 > --- a/app/test-pmd/cmdline.c > +++ b/app/test-pmd/cmdline.c > @@ -565,7 +565,7 @@ static void cmd_help_long_parsed(void > *parsed_result, > " Set crc-strip/rx-checksum/hardware- > vlan/drop_en" > " for ports.\n\n" > > - "port config all rss > (all|ip|tcp|udp|sctp|ether|none)\n" > + "port config all rss > (all|ip|tcp|udp|sctp|ether|port|vxlan|geneve|nvgre|none)\n" Could you update the testpmd document and extend the options in the command line help? Thanks, Pablo ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [dpdk-dev] [PATCH v2 1/2] ethdev: add tunnel and port RSS offload types 2016-03-29 11:58 ` De Lara Guarch, Pablo @ 2016-03-30 20:47 ` Jerin Jacob 0 siblings, 0 replies; 25+ messages in thread From: Jerin Jacob @ 2016-03-30 20:47 UTC (permalink / raw) To: De Lara Guarch, Pablo; +Cc: dev, thomas.monjalon, Richardson, Bruce On Tue, Mar 29, 2016 at 11:58:47AM +0000, De Lara Guarch, Pablo wrote: > Hi Jerin, > > > -----Original Message----- > > From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Jerin Jacob > > Sent: Tuesday, March 29, 2016 12:20 PM > > To: dev@dpdk.org > > Cc: thomas.monjalon@6wind.com; Richardson, Bruce; Jerin Jacob > > Subject: [dpdk-dev] [PATCH v2 1/2] ethdev: add tunnel and port RSS offload > > types > > > > - added VXLAN, GENEVE and NVGRE tunnel flow types > > - added PORT flow type for accounting physical/virtual > > port or channel number in flow creation > > > > Signed-off-by: Jerin Jacob <jerin.jacob@caviumnetworks.com> > > --- > > app/test-pmd/cmdline.c | 18 +++++++++++++++--- > > app/test-pmd/config.c | 9 +++++++++ > > lib/librte_ether/rte_eth_ctrl.h | 6 +++++- > > lib/librte_ether/rte_ethdev.h | 16 +++++++++++++++- > > 4 files changed, 44 insertions(+), 5 deletions(-) > > > > diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c > > index 93203f4..5fe8239 100644 > > --- a/app/test-pmd/cmdline.c > > +++ b/app/test-pmd/cmdline.c > > @@ -565,7 +565,7 @@ static void cmd_help_long_parsed(void > > *parsed_result, > > " Set crc-strip/rx-checksum/hardware- > > vlan/drop_en" > > " for ports.\n\n" > > > > - "port config all rss > > (all|ip|tcp|udp|sctp|ether|none)\n" > > + "port config all rss > > (all|ip|tcp|udp|sctp|ether|port|vxlan|geneve|nvgre|none)\n" > > Could you update the testpmd document and extend the options in the command line help? Hi John and Pablo, I will send the V3 with testpmd document update. Command line help is already part of V2 > > Thanks, > Pablo > > ^ permalink raw reply [flat|nested] 25+ messages in thread
* [dpdk-dev] [PATCH v3 0/2] New RSS offload flags 2016-03-29 11:20 ` [dpdk-dev] [PATCH v2 1/2] ethdev: add tunnel and port RSS offload types Jerin Jacob 2016-03-29 11:26 ` Mcnamara, John 2016-03-29 11:58 ` De Lara Guarch, Pablo @ 2016-03-30 20:51 ` Jerin Jacob 2016-03-30 20:51 ` [dpdk-dev] [PATCH v3 1/2] ethdev: add tunnel and port RSS offload types Jerin Jacob 2016-03-30 20:51 ` [dpdk-dev] [PATCH v3 2/2] ethdev: add ETH_RSS_RETA_SIZE_256 Jerin Jacob 2 siblings, 2 replies; 25+ messages in thread From: Jerin Jacob @ 2016-03-30 20:51 UTC (permalink / raw) To: dev Cc: thomas.monjalon, bruce.richardson, pablo.de.lara.guarch, john.mcnamara, Jerin Jacob v1..v2 - Added cover letter - Corrected typo in RET_ETH_FLOW_VXLAN name - Updated test-pmd application to access newly defined RSS offload flags v2..v3 -testpmd document update(Suggested by John and Pablo) Jerin Jacob (2): ethdev: add tunnel and port RSS offload types ethdev: add ETH_RSS_RETA_SIZE_256 app/test-pmd/cmdline.c | 18 +++++++++++++++--- app/test-pmd/config.c | 9 +++++++++ doc/guides/testpmd_app_ug/testpmd_funcs.rst | 6 +++++- lib/librte_ether/rte_eth_ctrl.h | 6 +++++- lib/librte_ether/rte_ethdev.h | 17 ++++++++++++++++- 5 files changed, 50 insertions(+), 6 deletions(-) -- 2.1.0 ^ permalink raw reply [flat|nested] 25+ messages in thread
* [dpdk-dev] [PATCH v3 1/2] ethdev: add tunnel and port RSS offload types 2016-03-30 20:51 ` [dpdk-dev] [PATCH v3 0/2] New RSS offload flags Jerin Jacob @ 2016-03-30 20:51 ` Jerin Jacob 2016-04-01 14:04 ` Thomas Monjalon ` (2 more replies) 2016-03-30 20:51 ` [dpdk-dev] [PATCH v3 2/2] ethdev: add ETH_RSS_RETA_SIZE_256 Jerin Jacob 1 sibling, 3 replies; 25+ messages in thread From: Jerin Jacob @ 2016-03-30 20:51 UTC (permalink / raw) To: dev Cc: thomas.monjalon, bruce.richardson, pablo.de.lara.guarch, john.mcnamara, Jerin Jacob - added VXLAN, GENEVE and NVGRE tunnel flow types - added PORT flow type for accounting physical/virtual port or channel number in flow creation Signed-off-by: Jerin Jacob <jerin.jacob@caviumnetworks.com> --- app/test-pmd/cmdline.c | 18 +++++++++++++++--- app/test-pmd/config.c | 9 +++++++++ doc/guides/testpmd_app_ug/testpmd_funcs.rst | 6 +++++- lib/librte_ether/rte_eth_ctrl.h | 6 +++++- lib/librte_ether/rte_ethdev.h | 16 +++++++++++++++- 5 files changed, 49 insertions(+), 6 deletions(-) diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c index 93203f4..5fe8239 100644 --- a/app/test-pmd/cmdline.c +++ b/app/test-pmd/cmdline.c @@ -565,7 +565,7 @@ static void cmd_help_long_parsed(void *parsed_result, " Set crc-strip/rx-checksum/hardware-vlan/drop_en" " for ports.\n\n" - "port config all rss (all|ip|tcp|udp|sctp|ether|none)\n" + "port config all rss (all|ip|tcp|udp|sctp|ether|port|vxlan|geneve|nvgre|none)\n" " Set the RSS mode.\n\n" "port config port-id rss reta (hash,queue)[,(hash,queue)]\n" @@ -1545,6 +1545,14 @@ cmd_config_rss_parsed(void *parsed_result, rss_conf.rss_hf = ETH_RSS_SCTP; else if (!strcmp(res->value, "ether")) rss_conf.rss_hf = ETH_RSS_L2_PAYLOAD; + else if (!strcmp(res->value, "port")) + rss_conf.rss_hf = ETH_RSS_PORT; + else if (!strcmp(res->value, "vxlan")) + rss_conf.rss_hf = ETH_RSS_VXLAN; + else if (!strcmp(res->value, "geneve")) + rss_conf.rss_hf = ETH_RSS_GENEVE; + else if (!strcmp(res->value, "nvgre")) + rss_conf.rss_hf = ETH_RSS_NVGRE; else if (!strcmp(res->value, "none")) rss_conf.rss_hf = 0; else { @@ -1566,12 +1574,12 @@ cmdline_parse_token_string_t cmd_config_rss_name = TOKEN_STRING_INITIALIZER(struct cmd_config_rss, name, "rss"); cmdline_parse_token_string_t cmd_config_rss_value = TOKEN_STRING_INITIALIZER(struct cmd_config_rss, value, - "all#ip#tcp#udp#sctp#ether#none"); + "all#ip#tcp#udp#sctp#ether#port#vxlan#geneve#nvgre#none"); cmdline_parse_inst_t cmd_config_rss = { .f = cmd_config_rss_parsed, .data = NULL, - .help_str = "port config all rss all|ip|tcp|udp|sctp|ether|none", + .help_str = "port config all rss all|ip|tcp|udp|sctp|ether|port|vxlan|geneve|nvgre|none", .tokens = { (void *)&cmd_config_rss_port, (void *)&cmd_config_rss_keyword, @@ -9304,6 +9312,10 @@ flowtype_to_str(uint16_t ftype) {"ipv6-sctp", RTE_ETH_FLOW_NONFRAG_IPV6_SCTP}, {"ipv6-other", RTE_ETH_FLOW_NONFRAG_IPV6_OTHER}, {"l2_payload", RTE_ETH_FLOW_L2_PAYLOAD}, + {"port", RTE_ETH_FLOW_PORT}, + {"vxlan", RTE_ETH_FLOW_VXLAN}, + {"geneve", RTE_ETH_FLOW_GENEVE}, + {"nvgre", RTE_ETH_FLOW_NVGRE}, }; for (i = 0; i < RTE_DIM(ftype_table); i++) { diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c index b1bbec6..0b3619d 100644 --- a/app/test-pmd/config.c +++ b/app/test-pmd/config.c @@ -137,6 +137,11 @@ static const struct rss_type_info rss_type_table[] = { { "ipv6-ex", ETH_RSS_IPV6_EX }, { "ipv6-tcp-ex", ETH_RSS_IPV6_TCP_EX }, { "ipv6-udp-ex", ETH_RSS_IPV6_UDP_EX }, + { "port", ETH_RSS_PORT }, + { "vxlan", ETH_RSS_VXLAN }, + { "geneve", ETH_RSS_GENEVE }, + { "nvgre", ETH_RSS_NVGRE }, + }; static void @@ -2028,6 +2033,10 @@ flowtype_to_str(uint16_t flow_type) {"ipv6-sctp", RTE_ETH_FLOW_NONFRAG_IPV6_SCTP}, {"ipv6-other", RTE_ETH_FLOW_NONFRAG_IPV6_OTHER}, {"l2_payload", RTE_ETH_FLOW_L2_PAYLOAD}, + {"port", RTE_ETH_FLOW_PORT}, + {"vxlan", RTE_ETH_FLOW_VXLAN}, + {"geneve", RTE_ETH_FLOW_GENEVE}, + {"nvgre", RTE_ETH_FLOW_NVGRE}, }; for (i = 0; i < RTE_DIM(flowtype_str_table); i++) { diff --git a/doc/guides/testpmd_app_ug/testpmd_funcs.rst b/doc/guides/testpmd_app_ug/testpmd_funcs.rst index 94fba6a..e8839c2 100644 --- a/doc/guides/testpmd_app_ug/testpmd_funcs.rst +++ b/doc/guides/testpmd_app_ug/testpmd_funcs.rst @@ -177,6 +177,10 @@ For example: ipv6-sctp ipv6-other l2_payload + port + vxlan + geneve + nvgre show port rss reta ~~~~~~~~~~~~~~~~~~ @@ -1258,7 +1262,7 @@ port config - RSS Set the RSS (Receive Side Scaling) mode on or off:: - testpmd> port config all rss (all|ip|tcp|udp|sctp|ether|none) + testpmd> port config all rss (all|ip|tcp|udp|sctp|ether|port|vxlan|geneve|nvgre|none) RSS is on by default. diff --git a/lib/librte_ether/rte_eth_ctrl.h b/lib/librte_ether/rte_eth_ctrl.h index b8c7be9..8afbd92 100644 --- a/lib/librte_ether/rte_eth_ctrl.h +++ b/lib/librte_ether/rte_eth_ctrl.h @@ -74,7 +74,11 @@ extern "C" { #define RTE_ETH_FLOW_IPV6_EX 15 #define RTE_ETH_FLOW_IPV6_TCP_EX 16 #define RTE_ETH_FLOW_IPV6_UDP_EX 17 -#define RTE_ETH_FLOW_MAX 18 +#define RTE_ETH_FLOW_PORT 18 +#define RTE_ETH_FLOW_VXLAN 19 +#define RTE_ETH_FLOW_GENEVE 20 +#define RTE_ETH_FLOW_NVGRE 21 +#define RTE_ETH_FLOW_MAX 22 /** * Feature filter types diff --git a/lib/librte_ether/rte_ethdev.h b/lib/librte_ether/rte_ethdev.h index e7de34a..a4eeeba 100644 --- a/lib/librte_ether/rte_ethdev.h +++ b/lib/librte_ether/rte_ethdev.h @@ -406,6 +406,10 @@ struct rte_eth_rss_conf { #define ETH_RSS_IPV6_EX (1ULL << RTE_ETH_FLOW_IPV6_EX) #define ETH_RSS_IPV6_TCP_EX (1ULL << RTE_ETH_FLOW_IPV6_TCP_EX) #define ETH_RSS_IPV6_UDP_EX (1ULL << RTE_ETH_FLOW_IPV6_UDP_EX) +#define ETH_RSS_PORT (1ULL << RTE_ETH_FLOW_PORT) +#define ETH_RSS_VXLAN (1ULL << RTE_ETH_FLOW_VXLAN) +#define ETH_RSS_GENEVE (1ULL << RTE_ETH_FLOW_GENEVE) +#define ETH_RSS_NVGRE (1ULL << RTE_ETH_FLOW_NVGRE) #define ETH_RSS_IP ( \ ETH_RSS_IPV4 | \ @@ -430,6 +434,12 @@ struct rte_eth_rss_conf { ETH_RSS_NONFRAG_IPV4_SCTP | \ ETH_RSS_NONFRAG_IPV6_SCTP) +#define ETH_RSS_TUNNEL ( \ + ETH_RSS_VXLAN | \ + ETH_RSS_GENEVE | \ + ETH_RSS_NVGRE) + + /**< Mask of valid RSS hash protocols */ #define ETH_RSS_PROTO_MASK ( \ ETH_RSS_IPV4 | \ @@ -447,7 +457,11 @@ struct rte_eth_rss_conf { ETH_RSS_L2_PAYLOAD | \ ETH_RSS_IPV6_EX | \ ETH_RSS_IPV6_TCP_EX | \ - ETH_RSS_IPV6_UDP_EX) + ETH_RSS_IPV6_UDP_EX | \ + ETH_RSS_PORT | \ + ETH_RSS_VXLAN | \ + ETH_RSS_GENEVE | \ + ETH_RSS_NVGRE) /* * Definitions used for redirection table entry size. -- 2.1.0 ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [dpdk-dev] [PATCH v3 1/2] ethdev: add tunnel and port RSS offload types 2016-03-30 20:51 ` [dpdk-dev] [PATCH v3 1/2] ethdev: add tunnel and port RSS offload types Jerin Jacob @ 2016-04-01 14:04 ` Thomas Monjalon 2016-04-01 14:29 ` Jerin Jacob 2016-06-21 21:02 ` Thomas Monjalon 2016-06-22 13:03 ` [dpdk-dev] [PATCH v4 0/2] New RSS offload flags Jerin Jacob 2 siblings, 1 reply; 25+ messages in thread From: Thomas Monjalon @ 2016-04-01 14:04 UTC (permalink / raw) To: Jerin Jacob; +Cc: dev, bruce.richardson, pablo.de.lara.guarch, john.mcnamara 2016-03-31 02:21, Jerin Jacob: > - added VXLAN, GENEVE and NVGRE tunnel flow types > - added PORT flow type for accounting physical/virtual > port or channel number in flow creation These API change could be considered for 16.07 if they are motivated by any use. Please bring some use cases, thanks. ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [dpdk-dev] [PATCH v3 1/2] ethdev: add tunnel and port RSS offload types 2016-04-01 14:04 ` Thomas Monjalon @ 2016-04-01 14:29 ` Jerin Jacob 2016-06-16 11:46 ` Jerin Jacob 0 siblings, 1 reply; 25+ messages in thread From: Jerin Jacob @ 2016-04-01 14:29 UTC (permalink / raw) To: Thomas Monjalon Cc: dev, bruce.richardson, pablo.de.lara.guarch, john.mcnamara On Fri, Apr 01, 2016 at 04:04:13PM +0200, Thomas Monjalon wrote: > 2016-03-31 02:21, Jerin Jacob: > > - added VXLAN, GENEVE and NVGRE tunnel flow types > > - added PORT flow type for accounting physical/virtual > > port or channel number in flow creation > > These API change could be considered for 16.07 if they are motivated > by any use. Please bring some use cases, thanks. The use case is to spray the packets to multiple queues using RSS on Tunnel type packets. Considering the case if RSS hash does not account inner packet in tunnel case, the packet always to go a particular queue as mostly likely outer header remains same in tunnel packets and RSS spread will not be achieved in tunnel packets case. This feature is part of the RSS capability of ThunderX NIC HW. Which, we are planning to upstream on next release. I thought of pushing the common code changes first. Jerin > ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [dpdk-dev] [PATCH v3 1/2] ethdev: add tunnel and port RSS offload types 2016-04-01 14:29 ` Jerin Jacob @ 2016-06-16 11:46 ` Jerin Jacob 0 siblings, 0 replies; 25+ messages in thread From: Jerin Jacob @ 2016-06-16 11:46 UTC (permalink / raw) To: Thomas Monjalon Cc: dev, bruce.richardson, pablo.de.lara.guarch, john.mcnamara On Fri, Apr 01, 2016 at 07:59:33PM +0530, Jerin Jacob wrote: > On Fri, Apr 01, 2016 at 04:04:13PM +0200, Thomas Monjalon wrote: > > 2016-03-31 02:21, Jerin Jacob: > > > - added VXLAN, GENEVE and NVGRE tunnel flow types > > > - added PORT flow type for accounting physical/virtual > > > port or channel number in flow creation > > > > These API change could be considered for 16.07 if they are motivated > > by any use. Please bring some use cases, thanks. > > The use case is to spray the packets to multiple queues using RSS on > Tunnel type packets. > > Considering the case if RSS hash does not account inner packet in tunnel > case, the packet always to go a particular queue as mostly likely > outer header remains same in tunnel packets and RSS spread > will not be achieved in tunnel packets case. > > This feature is part of the RSS capability of ThunderX > NIC HW. Which, we are planning to upstream on next release. > > I thought of pushing the common code changes first. Ping Can we merge this changeset if their are no concerns? and their is a real consumer for this, http://dpdk.org/ml/archives/dev/2016-June/041374.html Jerin ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [dpdk-dev] [PATCH v3 1/2] ethdev: add tunnel and port RSS offload types 2016-03-30 20:51 ` [dpdk-dev] [PATCH v3 1/2] ethdev: add tunnel and port RSS offload types Jerin Jacob 2016-04-01 14:04 ` Thomas Monjalon @ 2016-06-21 21:02 ` Thomas Monjalon 2016-06-22 3:30 ` Jerin Jacob 2016-06-22 13:03 ` [dpdk-dev] [PATCH v4 0/2] New RSS offload flags Jerin Jacob 2 siblings, 1 reply; 25+ messages in thread From: Thomas Monjalon @ 2016-06-21 21:02 UTC (permalink / raw) To: Jerin Jacob; +Cc: dev, bruce.richardson, pablo.de.lara.guarch, john.mcnamara Hi Jerin, I wanted to push this patch which is now a dependency of ThunderX but I do not fully understand it. 2016-03-31 02:21, Jerin Jacob: > - added VXLAN, GENEVE and NVGRE tunnel flow types > - added PORT flow type for accounting physical/virtual > port or channel number in flow creation [...] > --- a/lib/librte_ether/rte_eth_ctrl.h > +++ b/lib/librte_ether/rte_eth_ctrl.h > @@ -74,7 +74,11 @@ extern "C" { > #define RTE_ETH_FLOW_IPV6_EX 15 > #define RTE_ETH_FLOW_IPV6_TCP_EX 16 > #define RTE_ETH_FLOW_IPV6_UDP_EX 17 > -#define RTE_ETH_FLOW_MAX 18 > +#define RTE_ETH_FLOW_PORT 18 > +#define RTE_ETH_FLOW_VXLAN 19 > +#define RTE_ETH_FLOW_GENEVE 20 > +#define RTE_ETH_FLOW_NVGRE 21 > +#define RTE_ETH_FLOW_MAX 22 Please could you explain more what is PORT flow? Does it need a comment in the code? ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [dpdk-dev] [PATCH v3 1/2] ethdev: add tunnel and port RSS offload types 2016-06-21 21:02 ` Thomas Monjalon @ 2016-06-22 3:30 ` Jerin Jacob 2016-06-22 6:43 ` Thomas Monjalon 0 siblings, 1 reply; 25+ messages in thread From: Jerin Jacob @ 2016-06-22 3:30 UTC (permalink / raw) To: Thomas Monjalon Cc: dev, bruce.richardson, pablo.de.lara.guarch, john.mcnamara On Tue, Jun 21, 2016 at 11:02:59PM +0200, Thomas Monjalon wrote: > Hi Jerin, Hi Thomas, > > I wanted to push this patch which is now a dependency of ThunderX > but I do not fully understand it. > > 2016-03-31 02:21, Jerin Jacob: > > - added VXLAN, GENEVE and NVGRE tunnel flow types > > - added PORT flow type for accounting physical/virtual > > port or channel number in flow creation > [...] > > --- a/lib/librte_ether/rte_eth_ctrl.h > > +++ b/lib/librte_ether/rte_eth_ctrl.h > > @@ -74,7 +74,11 @@ extern "C" { > > #define RTE_ETH_FLOW_IPV6_EX 15 > > #define RTE_ETH_FLOW_IPV6_TCP_EX 16 > > #define RTE_ETH_FLOW_IPV6_UDP_EX 17 > > -#define RTE_ETH_FLOW_MAX 18 > > +#define RTE_ETH_FLOW_PORT 18 > > +#define RTE_ETH_FLOW_VXLAN 19 > > +#define RTE_ETH_FLOW_GENEVE 20 > > +#define RTE_ETH_FLOW_NVGRE 21 > > +#define RTE_ETH_FLOW_MAX 22 > > Please could you explain more what is PORT flow? For example, a NIC card with two physical port where application configures RTE_ETH_FLOW_IPV4 for both, In that case HW generate same RSS value for a similar IPV4 packet, However, in-case if application want to generate a flow that account physical port also then it can configure with RTE_ETH_FLOW_IPV4 | RTE_ETH_FLOW_PORT. RTE_ETH_FLOW_PORT useful for the case where one physical port assigned for INBOUND traffic and other-one for OUTBOUND traffic etc > Does it need a comment in the code? Not sure, commit log has description. Jerin ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [dpdk-dev] [PATCH v3 1/2] ethdev: add tunnel and port RSS offload types 2016-06-22 3:30 ` Jerin Jacob @ 2016-06-22 6:43 ` Thomas Monjalon 2016-06-22 7:15 ` Jerin Jacob 0 siblings, 1 reply; 25+ messages in thread From: Thomas Monjalon @ 2016-06-22 6:43 UTC (permalink / raw) To: Jerin Jacob; +Cc: dev, bruce.richardson, pablo.de.lara.guarch, john.mcnamara 2016-06-22 09:00, Jerin Jacob: > On Tue, Jun 21, 2016 at 11:02:59PM +0200, Thomas Monjalon wrote: > > Hi Jerin, > > Hi Thomas, > > > > > I wanted to push this patch which is now a dependency of ThunderX > > but I do not fully understand it. > > > > 2016-03-31 02:21, Jerin Jacob: > > > - added VXLAN, GENEVE and NVGRE tunnel flow types > > > - added PORT flow type for accounting physical/virtual > > > port or channel number in flow creation > > [...] > > > --- a/lib/librte_ether/rte_eth_ctrl.h > > > +++ b/lib/librte_ether/rte_eth_ctrl.h > > > @@ -74,7 +74,11 @@ extern "C" { > > > #define RTE_ETH_FLOW_IPV6_EX 15 > > > #define RTE_ETH_FLOW_IPV6_TCP_EX 16 > > > #define RTE_ETH_FLOW_IPV6_UDP_EX 17 > > > -#define RTE_ETH_FLOW_MAX 18 > > > +#define RTE_ETH_FLOW_PORT 18 > > > +#define RTE_ETH_FLOW_VXLAN 19 > > > +#define RTE_ETH_FLOW_GENEVE 20 > > > +#define RTE_ETH_FLOW_NVGRE 21 > > > +#define RTE_ETH_FLOW_MAX 22 > > > > Please could you explain more what is PORT flow? > > For example, a NIC card with two physical port where application > configures RTE_ETH_FLOW_IPV4 for both, In that case > HW generate same RSS value for a similar IPV4 packet, However, in-case if > application want to generate a flow that account physical port also then > it can configure with RTE_ETH_FLOW_IPV4 | RTE_ETH_FLOW_PORT. > > RTE_ETH_FLOW_PORT useful for the case where one physical port assigned for > INBOUND traffic and other-one for OUTBOUND traffic etc OK > > Does it need a comment in the code? > Not sure, commit log has description. How do you expect the user to understand this new value in the API? Users do not check in the git history. They use doxygen, headers comments and/or examples. ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [dpdk-dev] [PATCH v3 1/2] ethdev: add tunnel and port RSS offload types 2016-06-22 6:43 ` Thomas Monjalon @ 2016-06-22 7:15 ` Jerin Jacob 2016-06-22 7:52 ` Thomas Monjalon 0 siblings, 1 reply; 25+ messages in thread From: Jerin Jacob @ 2016-06-22 7:15 UTC (permalink / raw) To: Thomas Monjalon Cc: dev, bruce.richardson, pablo.de.lara.guarch, john.mcnamara On Wed, Jun 22, 2016 at 08:43:52AM +0200, Thomas Monjalon wrote: > 2016-06-22 09:00, Jerin Jacob: > > On Tue, Jun 21, 2016 at 11:02:59PM +0200, Thomas Monjalon wrote: > > > Hi Jerin, > > > > Hi Thomas, > > > > > > > > I wanted to push this patch which is now a dependency of ThunderX > > > but I do not fully understand it. > > > > > > 2016-03-31 02:21, Jerin Jacob: > > > > - added VXLAN, GENEVE and NVGRE tunnel flow types > > > > - added PORT flow type for accounting physical/virtual > > > > port or channel number in flow creation > > > [...] > > > > --- a/lib/librte_ether/rte_eth_ctrl.h > > > > +++ b/lib/librte_ether/rte_eth_ctrl.h > > > > @@ -74,7 +74,11 @@ extern "C" { > > > > #define RTE_ETH_FLOW_IPV6_EX 15 > > > > #define RTE_ETH_FLOW_IPV6_TCP_EX 16 > > > > #define RTE_ETH_FLOW_IPV6_UDP_EX 17 > > > > -#define RTE_ETH_FLOW_MAX 18 > > > > +#define RTE_ETH_FLOW_PORT 18 > > > > +#define RTE_ETH_FLOW_VXLAN 19 > > > > +#define RTE_ETH_FLOW_GENEVE 20 > > > > +#define RTE_ETH_FLOW_NVGRE 21 > > > > +#define RTE_ETH_FLOW_MAX 22 > > > > > > Please could you explain more what is PORT flow? > > > > For example, a NIC card with two physical port where application > > configures RTE_ETH_FLOW_IPV4 for both, In that case > > HW generate same RSS value for a similar IPV4 packet, However, in-case if > > application want to generate a flow that account physical port also then > > it can configure with RTE_ETH_FLOW_IPV4 | RTE_ETH_FLOW_PORT. > > > > RTE_ETH_FLOW_PORT useful for the case where one physical port assigned for > > INBOUND traffic and other-one for OUTBOUND traffic etc > > OK > > > > Does it need a comment in the code? > > Not sure, commit log has description. > > How do you expect the user to understand this new value in the API? > Users do not check in the git history. > They use doxygen, headers comments and/or examples. The reason why I said because none of flow type has comments in the list. If you think RTE_ETH_FLOW_PORT needs a doxygen comment then I can add it. It would be nice some else could add the comments for following, RTE_ETH_FLOW_RAW, RTE_ETH_FLOW_L2_PAYLOAD ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [dpdk-dev] [PATCH v3 1/2] ethdev: add tunnel and port RSS offload types 2016-06-22 7:15 ` Jerin Jacob @ 2016-06-22 7:52 ` Thomas Monjalon 0 siblings, 0 replies; 25+ messages in thread From: Thomas Monjalon @ 2016-06-22 7:52 UTC (permalink / raw) To: Jerin Jacob Cc: dev, bruce.richardson, pablo.de.lara.guarch, john.mcnamara, Zhang, Helin 2016-06-22 12:45, Jerin Jacob: > On Wed, Jun 22, 2016 at 08:43:52AM +0200, Thomas Monjalon wrote: > > 2016-06-22 09:00, Jerin Jacob: > > > On Tue, Jun 21, 2016 at 11:02:59PM +0200, Thomas Monjalon wrote: > > > > 2016-03-31 02:21, Jerin Jacob: > > > > > +#define RTE_ETH_FLOW_PORT 18 > > > > > +#define RTE_ETH_FLOW_VXLAN 19 > > > > > +#define RTE_ETH_FLOW_GENEVE 20 > > > > > +#define RTE_ETH_FLOW_NVGRE 21 > > > > > +#define RTE_ETH_FLOW_MAX 22 > > > > > > > > Please could you explain more what is PORT flow? > > > > > > For example, a NIC card with two physical port where application > > > configures RTE_ETH_FLOW_IPV4 for both, In that case > > > HW generate same RSS value for a similar IPV4 packet, However, in-case if > > > application want to generate a flow that account physical port also then > > > it can configure with RTE_ETH_FLOW_IPV4 | RTE_ETH_FLOW_PORT. > > > > > > RTE_ETH_FLOW_PORT useful for the case where one physical port assigned for > > > INBOUND traffic and other-one for OUTBOUND traffic etc > > > > OK > > > > > > Does it need a comment in the code? > > > Not sure, commit log has description. > > > > How do you expect the user to understand this new value in the API? > > Users do not check in the git history. > > They use doxygen, headers comments and/or examples. > > The reason why I said because none of flow type has comments in the > list. If you think RTE_ETH_FLOW_PORT needs a doxygen comment then I can > add it. > > It would be nice some else could add the comments for following, > RTE_ETH_FLOW_RAW, > RTE_ETH_FLOW_L2_PAYLOAD These values passed without a proper check. That's why we must not accept any line in API without good comment. Please go ahead with what you can do and we'll fix or remove the remaining later. ^ permalink raw reply [flat|nested] 25+ messages in thread
* [dpdk-dev] [PATCH v4 0/2] New RSS offload flags 2016-03-30 20:51 ` [dpdk-dev] [PATCH v3 1/2] ethdev: add tunnel and port RSS offload types Jerin Jacob 2016-04-01 14:04 ` Thomas Monjalon 2016-06-21 21:02 ` Thomas Monjalon @ 2016-06-22 13:03 ` Jerin Jacob 2016-06-22 13:03 ` [dpdk-dev] [PATCH v4 1/2] ethdev: add tunnel and port RSS offload types Jerin Jacob ` (2 more replies) 2 siblings, 3 replies; 25+ messages in thread From: Jerin Jacob @ 2016-06-22 13:03 UTC (permalink / raw) To: dev; +Cc: thomas.monjalon, bruce.richardson, Jerin Jacob v1..v2 - Added cover letter - Corrected typo in RET_ETH_FLOW_VXLAN name - Updated test-pmd application to access newly defined RSS offload flags v2..v3 -testpmd document update(Suggested by John and Pablo) v3..v4 - Added doxgen comments for new FLOW types(Suggested by Thomas) Jerin Jacob (2): ethdev: add tunnel and port RSS offload types ethdev: add ETH_RSS_RETA_SIZE_256 app/test-pmd/cmdline.c | 18 +++++++++++++++--- app/test-pmd/config.c | 9 +++++++++ doc/guides/testpmd_app_ug/testpmd_funcs.rst | 6 +++++- lib/librte_ether/rte_eth_ctrl.h | 7 ++++++- lib/librte_ether/rte_ethdev.h | 17 ++++++++++++++++- 5 files changed, 51 insertions(+), 6 deletions(-) -- 2.5.5 ^ permalink raw reply [flat|nested] 25+ messages in thread
* [dpdk-dev] [PATCH v4 1/2] ethdev: add tunnel and port RSS offload types 2016-06-22 13:03 ` [dpdk-dev] [PATCH v4 0/2] New RSS offload flags Jerin Jacob @ 2016-06-22 13:03 ` Jerin Jacob 2016-06-22 15:06 ` Thomas Monjalon 2016-06-22 13:03 ` [dpdk-dev] [PATCH v4 2/2] ethdev: add ETH_RSS_RETA_SIZE_256 Jerin Jacob 2016-06-22 17:47 ` [dpdk-dev] [PATCH v4 0/2] New RSS offload flags Thomas Monjalon 2 siblings, 1 reply; 25+ messages in thread From: Jerin Jacob @ 2016-06-22 13:03 UTC (permalink / raw) To: dev; +Cc: thomas.monjalon, bruce.richardson, Jerin Jacob - added VXLAN, GENEVE and NVGRE tunnel flow types - added PORT flow type for accounting physical/virtual port or channel number in flow creation Signed-off-by: Jerin Jacob <jerin.jacob@caviumnetworks.com> --- app/test-pmd/cmdline.c | 18 +++++++++++++++--- app/test-pmd/config.c | 9 +++++++++ doc/guides/testpmd_app_ug/testpmd_funcs.rst | 6 +++++- lib/librte_ether/rte_eth_ctrl.h | 7 ++++++- lib/librte_ether/rte_ethdev.h | 16 +++++++++++++++- 5 files changed, 50 insertions(+), 6 deletions(-) diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c index 9d3e4e8..b6b61ad 100644 --- a/app/test-pmd/cmdline.c +++ b/app/test-pmd/cmdline.c @@ -565,7 +565,7 @@ static void cmd_help_long_parsed(void *parsed_result, " Set crc-strip/scatter/rx-checksum/hardware-vlan/drop_en" " for ports.\n\n" - "port config all rss (all|ip|tcp|udp|sctp|ether|none)\n" + "port config all rss (all|ip|tcp|udp|sctp|ether|port|vxlan|geneve|nvgre|none)\n" " Set the RSS mode.\n\n" "port config port-id rss reta (hash,queue)[,(hash,queue)]\n" @@ -1552,6 +1552,14 @@ cmd_config_rss_parsed(void *parsed_result, rss_conf.rss_hf = ETH_RSS_SCTP; else if (!strcmp(res->value, "ether")) rss_conf.rss_hf = ETH_RSS_L2_PAYLOAD; + else if (!strcmp(res->value, "port")) + rss_conf.rss_hf = ETH_RSS_PORT; + else if (!strcmp(res->value, "vxlan")) + rss_conf.rss_hf = ETH_RSS_VXLAN; + else if (!strcmp(res->value, "geneve")) + rss_conf.rss_hf = ETH_RSS_GENEVE; + else if (!strcmp(res->value, "nvgre")) + rss_conf.rss_hf = ETH_RSS_NVGRE; else if (!strcmp(res->value, "none")) rss_conf.rss_hf = 0; else { @@ -1578,12 +1586,12 @@ cmdline_parse_token_string_t cmd_config_rss_name = TOKEN_STRING_INITIALIZER(struct cmd_config_rss, name, "rss"); cmdline_parse_token_string_t cmd_config_rss_value = TOKEN_STRING_INITIALIZER(struct cmd_config_rss, value, - "all#ip#tcp#udp#sctp#ether#none"); + "all#ip#tcp#udp#sctp#ether#port#vxlan#geneve#nvgre#none"); cmdline_parse_inst_t cmd_config_rss = { .f = cmd_config_rss_parsed, .data = NULL, - .help_str = "port config all rss all|ip|tcp|udp|sctp|ether|none", + .help_str = "port config all rss all|ip|tcp|udp|sctp|ether|port|vxlan|geneve|nvgre|none", .tokens = { (void *)&cmd_config_rss_port, (void *)&cmd_config_rss_keyword, @@ -9499,6 +9507,10 @@ flowtype_to_str(uint16_t ftype) {"ipv6-sctp", RTE_ETH_FLOW_NONFRAG_IPV6_SCTP}, {"ipv6-other", RTE_ETH_FLOW_NONFRAG_IPV6_OTHER}, {"l2_payload", RTE_ETH_FLOW_L2_PAYLOAD}, + {"port", RTE_ETH_FLOW_PORT}, + {"vxlan", RTE_ETH_FLOW_VXLAN}, + {"geneve", RTE_ETH_FLOW_GENEVE}, + {"nvgre", RTE_ETH_FLOW_NVGRE}, }; for (i = 0; i < RTE_DIM(ftype_table); i++) { diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c index cb71c09..9ccabf9 100644 --- a/app/test-pmd/config.c +++ b/app/test-pmd/config.c @@ -138,6 +138,11 @@ static const struct rss_type_info rss_type_table[] = { { "ipv6-ex", ETH_RSS_IPV6_EX }, { "ipv6-tcp-ex", ETH_RSS_IPV6_TCP_EX }, { "ipv6-udp-ex", ETH_RSS_IPV6_UDP_EX }, + { "port", ETH_RSS_PORT }, + { "vxlan", ETH_RSS_VXLAN }, + { "geneve", ETH_RSS_GENEVE }, + { "nvgre", ETH_RSS_NVGRE }, + }; static void @@ -2119,6 +2124,10 @@ flowtype_to_str(uint16_t flow_type) {"ipv6-sctp", RTE_ETH_FLOW_NONFRAG_IPV6_SCTP}, {"ipv6-other", RTE_ETH_FLOW_NONFRAG_IPV6_OTHER}, {"l2_payload", RTE_ETH_FLOW_L2_PAYLOAD}, + {"port", RTE_ETH_FLOW_PORT}, + {"vxlan", RTE_ETH_FLOW_VXLAN}, + {"geneve", RTE_ETH_FLOW_GENEVE}, + {"nvgre", RTE_ETH_FLOW_NVGRE}, }; for (i = 0; i < RTE_DIM(flowtype_str_table); i++) { diff --git a/doc/guides/testpmd_app_ug/testpmd_funcs.rst b/doc/guides/testpmd_app_ug/testpmd_funcs.rst index 4e19229..30e410d 100644 --- a/doc/guides/testpmd_app_ug/testpmd_funcs.rst +++ b/doc/guides/testpmd_app_ug/testpmd_funcs.rst @@ -179,6 +179,10 @@ For example: ipv6-sctp ipv6-other l2_payload + port + vxlan + geneve + nvgre show port rss reta ~~~~~~~~~~~~~~~~~~ @@ -1286,7 +1290,7 @@ port config - RSS Set the RSS (Receive Side Scaling) mode on or off:: - testpmd> port config all rss (all|ip|tcp|udp|sctp|ether|none) + testpmd> port config all rss (all|ip|tcp|udp|sctp|ether|port|vxlan|geneve|nvgre|none) RSS is on by default. diff --git a/lib/librte_ether/rte_eth_ctrl.h b/lib/librte_ether/rte_eth_ctrl.h index b8c7be9..c04a488 100644 --- a/lib/librte_ether/rte_eth_ctrl.h +++ b/lib/librte_ether/rte_eth_ctrl.h @@ -74,7 +74,12 @@ extern "C" { #define RTE_ETH_FLOW_IPV6_EX 15 #define RTE_ETH_FLOW_IPV6_TCP_EX 16 #define RTE_ETH_FLOW_IPV6_UDP_EX 17 -#define RTE_ETH_FLOW_MAX 18 +#define RTE_ETH_FLOW_PORT 18 + /**< Physical/virtual port number based flow */ +#define RTE_ETH_FLOW_VXLAN 19 /**< VXLAN protocol based flow */ +#define RTE_ETH_FLOW_GENEVE 20 /**< GENEVE protocol based flow */ +#define RTE_ETH_FLOW_NVGRE 21 /**< NVGRE protocol based flow */ +#define RTE_ETH_FLOW_MAX 22 /** * Feature filter types diff --git a/lib/librte_ether/rte_ethdev.h b/lib/librte_ether/rte_ethdev.h index bd93bf6..1579cb0 100644 --- a/lib/librte_ether/rte_ethdev.h +++ b/lib/librte_ether/rte_ethdev.h @@ -413,6 +413,10 @@ struct rte_eth_rss_conf { #define ETH_RSS_IPV6_EX (1ULL << RTE_ETH_FLOW_IPV6_EX) #define ETH_RSS_IPV6_TCP_EX (1ULL << RTE_ETH_FLOW_IPV6_TCP_EX) #define ETH_RSS_IPV6_UDP_EX (1ULL << RTE_ETH_FLOW_IPV6_UDP_EX) +#define ETH_RSS_PORT (1ULL << RTE_ETH_FLOW_PORT) +#define ETH_RSS_VXLAN (1ULL << RTE_ETH_FLOW_VXLAN) +#define ETH_RSS_GENEVE (1ULL << RTE_ETH_FLOW_GENEVE) +#define ETH_RSS_NVGRE (1ULL << RTE_ETH_FLOW_NVGRE) #define ETH_RSS_IP ( \ ETH_RSS_IPV4 | \ @@ -437,6 +441,12 @@ struct rte_eth_rss_conf { ETH_RSS_NONFRAG_IPV4_SCTP | \ ETH_RSS_NONFRAG_IPV6_SCTP) +#define ETH_RSS_TUNNEL ( \ + ETH_RSS_VXLAN | \ + ETH_RSS_GENEVE | \ + ETH_RSS_NVGRE) + + /**< Mask of valid RSS hash protocols */ #define ETH_RSS_PROTO_MASK ( \ ETH_RSS_IPV4 | \ @@ -454,7 +464,11 @@ struct rte_eth_rss_conf { ETH_RSS_L2_PAYLOAD | \ ETH_RSS_IPV6_EX | \ ETH_RSS_IPV6_TCP_EX | \ - ETH_RSS_IPV6_UDP_EX) + ETH_RSS_IPV6_UDP_EX | \ + ETH_RSS_PORT | \ + ETH_RSS_VXLAN | \ + ETH_RSS_GENEVE | \ + ETH_RSS_NVGRE) /* * Definitions used for redirection table entry size. -- 2.5.5 ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [dpdk-dev] [PATCH v4 1/2] ethdev: add tunnel and port RSS offload types 2016-06-22 13:03 ` [dpdk-dev] [PATCH v4 1/2] ethdev: add tunnel and port RSS offload types Jerin Jacob @ 2016-06-22 15:06 ` Thomas Monjalon 2016-06-22 16:48 ` Jerin Jacob 0 siblings, 1 reply; 25+ messages in thread From: Thomas Monjalon @ 2016-06-22 15:06 UTC (permalink / raw) To: Jerin Jacob; +Cc: dev, bruce.richardson 2016-06-22 18:33, Jerin Jacob: > - added VXLAN, GENEVE and NVGRE tunnel flow types > - added PORT flow type for accounting physical/virtual > port or channel number in flow creation [...] > +#define RTE_ETH_FLOW_PORT 18 > + /**< Physical/virtual port number based flow */ What about "Consider device port number as a flow differentiator" ? I can make the change if you (Jerin and/or Bruce) agree. ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [dpdk-dev] [PATCH v4 1/2] ethdev: add tunnel and port RSS offload types 2016-06-22 15:06 ` Thomas Monjalon @ 2016-06-22 16:48 ` Jerin Jacob 0 siblings, 0 replies; 25+ messages in thread From: Jerin Jacob @ 2016-06-22 16:48 UTC (permalink / raw) To: Thomas Monjalon; +Cc: dev, bruce.richardson On Wed, Jun 22, 2016 at 05:06:30PM +0200, Thomas Monjalon wrote: > 2016-06-22 18:33, Jerin Jacob: > > - added VXLAN, GENEVE and NVGRE tunnel flow types > > - added PORT flow type for accounting physical/virtual > > port or channel number in flow creation > [...] > > +#define RTE_ETH_FLOW_PORT 18 > > + /**< Physical/virtual port number based flow */ > > What about > "Consider device port number as a flow differentiator" ? > > I can make the change if you (Jerin and/or Bruce) agree. Looks OK to me. No strong opinion on this. ^ permalink raw reply [flat|nested] 25+ messages in thread
* [dpdk-dev] [PATCH v4 2/2] ethdev: add ETH_RSS_RETA_SIZE_256 2016-06-22 13:03 ` [dpdk-dev] [PATCH v4 0/2] New RSS offload flags Jerin Jacob 2016-06-22 13:03 ` [dpdk-dev] [PATCH v4 1/2] ethdev: add tunnel and port RSS offload types Jerin Jacob @ 2016-06-22 13:03 ` Jerin Jacob 2016-06-22 17:47 ` [dpdk-dev] [PATCH v4 0/2] New RSS offload flags Thomas Monjalon 2 siblings, 0 replies; 25+ messages in thread From: Jerin Jacob @ 2016-06-22 13:03 UTC (permalink / raw) To: dev; +Cc: thomas.monjalon, bruce.richardson, Jerin Jacob Signed-off-by: Jerin Jacob <jerin.jacob@caviumnetworks.com> --- lib/librte_ether/rte_ethdev.h | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/librte_ether/rte_ethdev.h b/lib/librte_ether/rte_ethdev.h index 1579cb0..6cf4c58 100644 --- a/lib/librte_ether/rte_ethdev.h +++ b/lib/librte_ether/rte_ethdev.h @@ -477,6 +477,7 @@ struct rte_eth_rss_conf { */ #define ETH_RSS_RETA_SIZE_64 64 #define ETH_RSS_RETA_SIZE_128 128 +#define ETH_RSS_RETA_SIZE_256 256 #define ETH_RSS_RETA_SIZE_512 512 #define RTE_RETA_GROUP_SIZE 64 -- 2.5.5 ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [dpdk-dev] [PATCH v4 0/2] New RSS offload flags 2016-06-22 13:03 ` [dpdk-dev] [PATCH v4 0/2] New RSS offload flags Jerin Jacob 2016-06-22 13:03 ` [dpdk-dev] [PATCH v4 1/2] ethdev: add tunnel and port RSS offload types Jerin Jacob 2016-06-22 13:03 ` [dpdk-dev] [PATCH v4 2/2] ethdev: add ETH_RSS_RETA_SIZE_256 Jerin Jacob @ 2016-06-22 17:47 ` Thomas Monjalon 2 siblings, 0 replies; 25+ messages in thread From: Thomas Monjalon @ 2016-06-22 17:47 UTC (permalink / raw) To: Jerin Jacob; +Cc: dev, bruce.richardson > Jerin Jacob (2): > ethdev: add tunnel and port RSS offload types > ethdev: add ETH_RSS_RETA_SIZE_256 Applied with suggested rewording, thanks ^ permalink raw reply [flat|nested] 25+ messages in thread
* [dpdk-dev] [PATCH v3 2/2] ethdev: add ETH_RSS_RETA_SIZE_256 2016-03-30 20:51 ` [dpdk-dev] [PATCH v3 0/2] New RSS offload flags Jerin Jacob 2016-03-30 20:51 ` [dpdk-dev] [PATCH v3 1/2] ethdev: add tunnel and port RSS offload types Jerin Jacob @ 2016-03-30 20:51 ` Jerin Jacob 1 sibling, 0 replies; 25+ messages in thread From: Jerin Jacob @ 2016-03-30 20:51 UTC (permalink / raw) To: dev Cc: thomas.monjalon, bruce.richardson, pablo.de.lara.guarch, john.mcnamara, Jerin Jacob Signed-off-by: Jerin Jacob <jerin.jacob@caviumnetworks.com> --- lib/librte_ether/rte_ethdev.h | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/librte_ether/rte_ethdev.h b/lib/librte_ether/rte_ethdev.h index a4eeeba..d93f85a 100644 --- a/lib/librte_ether/rte_ethdev.h +++ b/lib/librte_ether/rte_ethdev.h @@ -470,6 +470,7 @@ struct rte_eth_rss_conf { */ #define ETH_RSS_RETA_SIZE_64 64 #define ETH_RSS_RETA_SIZE_128 128 +#define ETH_RSS_RETA_SIZE_256 256 #define ETH_RSS_RETA_SIZE_512 512 #define RTE_RETA_GROUP_SIZE 64 -- 2.1.0 ^ permalink raw reply [flat|nested] 25+ messages in thread
* [dpdk-dev] [PATCH v2 2/2] ethdev: add ETH_RSS_RETA_SIZE_256 2016-03-29 11:20 ` [dpdk-dev] [PATCH v2 0/2] New RSS offload flags Jerin Jacob 2016-03-29 11:20 ` [dpdk-dev] [PATCH v2 1/2] ethdev: add tunnel and port RSS offload types Jerin Jacob @ 2016-03-29 11:20 ` Jerin Jacob 1 sibling, 0 replies; 25+ messages in thread From: Jerin Jacob @ 2016-03-29 11:20 UTC (permalink / raw) To: dev; +Cc: thomas.monjalon, bruce.richardson, Jerin Jacob Signed-off-by: Jerin Jacob <jerin.jacob@caviumnetworks.com> --- lib/librte_ether/rte_ethdev.h | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/librte_ether/rte_ethdev.h b/lib/librte_ether/rte_ethdev.h index a4eeeba..d93f85a 100644 --- a/lib/librte_ether/rte_ethdev.h +++ b/lib/librte_ether/rte_ethdev.h @@ -470,6 +470,7 @@ struct rte_eth_rss_conf { */ #define ETH_RSS_RETA_SIZE_64 64 #define ETH_RSS_RETA_SIZE_128 128 +#define ETH_RSS_RETA_SIZE_256 256 #define ETH_RSS_RETA_SIZE_512 512 #define RTE_RETA_GROUP_SIZE 64 -- 2.1.0 ^ permalink raw reply [flat|nested] 25+ messages in thread
end of thread, other threads:[~2016-06-22 17:47 UTC | newest] Thread overview: 25+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2016-03-26 17:55 [dpdk-dev] [PATCH 1/2] ethdev: add tunnel and port RSS offload types Jerin Jacob 2016-03-26 17:55 ` [dpdk-dev] [PATCH 2/2] ethdev: add ETH_RSS_RETA_SIZE_256 Jerin Jacob 2016-03-29 11:20 ` [dpdk-dev] [PATCH v2 0/2] New RSS offload flags Jerin Jacob 2016-03-29 11:20 ` [dpdk-dev] [PATCH v2 1/2] ethdev: add tunnel and port RSS offload types Jerin Jacob 2016-03-29 11:26 ` Mcnamara, John 2016-03-29 11:58 ` De Lara Guarch, Pablo 2016-03-30 20:47 ` Jerin Jacob 2016-03-30 20:51 ` [dpdk-dev] [PATCH v3 0/2] New RSS offload flags Jerin Jacob 2016-03-30 20:51 ` [dpdk-dev] [PATCH v3 1/2] ethdev: add tunnel and port RSS offload types Jerin Jacob 2016-04-01 14:04 ` Thomas Monjalon 2016-04-01 14:29 ` Jerin Jacob 2016-06-16 11:46 ` Jerin Jacob 2016-06-21 21:02 ` Thomas Monjalon 2016-06-22 3:30 ` Jerin Jacob 2016-06-22 6:43 ` Thomas Monjalon 2016-06-22 7:15 ` Jerin Jacob 2016-06-22 7:52 ` Thomas Monjalon 2016-06-22 13:03 ` [dpdk-dev] [PATCH v4 0/2] New RSS offload flags Jerin Jacob 2016-06-22 13:03 ` [dpdk-dev] [PATCH v4 1/2] ethdev: add tunnel and port RSS offload types Jerin Jacob 2016-06-22 15:06 ` Thomas Monjalon 2016-06-22 16:48 ` Jerin Jacob 2016-06-22 13:03 ` [dpdk-dev] [PATCH v4 2/2] ethdev: add ETH_RSS_RETA_SIZE_256 Jerin Jacob 2016-06-22 17:47 ` [dpdk-dev] [PATCH v4 0/2] New RSS offload flags Thomas Monjalon 2016-03-30 20:51 ` [dpdk-dev] [PATCH v3 2/2] ethdev: add ETH_RSS_RETA_SIZE_256 Jerin Jacob 2016-03-29 11:20 ` [dpdk-dev] [PATCH v2 " Jerin Jacob
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).