* [dpdk-dev] [PATCH 0/6] extend flow director to support L2_paylod type and VF filtering in i40e driver @ 2015-05-11 3:46 Jingjing Wu 2015-05-11 3:46 ` [dpdk-dev] [PATCH 1/6] ethdev: add struct rte_eth_l2_flow to support l2_payload flow type Jingjing Wu ` (7 more replies) 0 siblings, 8 replies; 18+ messages in thread From: Jingjing Wu @ 2015-05-11 3:46 UTC (permalink / raw) To: dev This patch set extends flow director to support L2_paylod type and VF filtering in i40e driver. Jingjing Wu (6): ethdev: add struct rte_eth_l2_flow to support l2_payload flow type i40e: extend flow diretcor to support l2_payload flow type ethdev: extend struct to support flow director in VFs i40e: extend flow diretcor to support filtering in VFs testpmd: extend commands doc: extend commands in testpmd app/test-pmd/cmdline.c | 87 +++++++++++++++++++++++++++-- doc/guides/testpmd_app_ug/testpmd_funcs.rst | 15 ++--- lib/librte_ether/rte_eth_ctrl.h | 10 ++++ lib/librte_pmd_i40e/i40e_fdir.c | 39 +++++++++++-- 4 files changed, 132 insertions(+), 19 deletions(-) -- 1.9.3 ^ permalink raw reply [flat|nested] 18+ messages in thread
* [dpdk-dev] [PATCH 1/6] ethdev: add struct rte_eth_l2_flow to support l2_payload flow type 2015-05-11 3:46 [dpdk-dev] [PATCH 0/6] extend flow director to support L2_paylod type and VF filtering in i40e driver Jingjing Wu @ 2015-05-11 3:46 ` Jingjing Wu 2015-05-11 3:46 ` [dpdk-dev] [PATCH 2/6] i40e: extend flow diretcor " Jingjing Wu ` (6 subsequent siblings) 7 siblings, 0 replies; 18+ messages in thread From: Jingjing Wu @ 2015-05-11 3:46 UTC (permalink / raw) To: dev This patch adds a new struct rte_eth_l2_flow to support l2_payload flow type Signed-off-by: Jingjing Wu <jingjing.wu@intel.com> --- lib/librte_ether/rte_eth_ctrl.h | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/lib/librte_ether/rte_eth_ctrl.h b/lib/librte_ether/rte_eth_ctrl.h index 498fc85..0e30dd9 100644 --- a/lib/librte_ether/rte_eth_ctrl.h +++ b/lib/librte_ether/rte_eth_ctrl.h @@ -298,6 +298,13 @@ struct rte_eth_tunnel_filter_conf { #define RTE_ETH_FDIR_MAX_FLEXLEN 16 /** < Max length of flexbytes. */ /** + * A structure used to define the input for L2 flow + */ +struct rte_eth_l2_flow { + uint16_t ether_type; /**< Ether type to match */ +}; + +/** * A structure used to define the input for IPV4 flow */ struct rte_eth_ipv4_flow { @@ -369,6 +376,7 @@ struct rte_eth_sctpv6_flow { * An union contains the inputs for all types of flow */ union rte_eth_fdir_flow { + struct rte_eth_l2_flow l2_flow; struct rte_eth_udpv4_flow udp4_flow; struct rte_eth_tcpv4_flow tcp4_flow; struct rte_eth_sctpv4_flow sctp4_flow; -- 1.9.3 ^ permalink raw reply [flat|nested] 18+ messages in thread
* [dpdk-dev] [PATCH 2/6] i40e: extend flow diretcor to support l2_payload flow type 2015-05-11 3:46 [dpdk-dev] [PATCH 0/6] extend flow director to support L2_paylod type and VF filtering in i40e driver Jingjing Wu 2015-05-11 3:46 ` [dpdk-dev] [PATCH 1/6] ethdev: add struct rte_eth_l2_flow to support l2_payload flow type Jingjing Wu @ 2015-05-11 3:46 ` Jingjing Wu 2015-05-11 3:46 ` [dpdk-dev] [PATCH 3/6] ethdev: extend struct to support flow director in VFs Jingjing Wu ` (5 subsequent siblings) 7 siblings, 0 replies; 18+ messages in thread From: Jingjing Wu @ 2015-05-11 3:46 UTC (permalink / raw) To: dev This patch extends flow diretcor to support l2_payload flow type in i40e driver. Signed-off-by: Jingjing Wu <jingjing.wu@intel.com> --- lib/librte_pmd_i40e/i40e_fdir.c | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/lib/librte_pmd_i40e/i40e_fdir.c b/lib/librte_pmd_i40e/i40e_fdir.c index 7b68c78..27c2102 100644 --- a/lib/librte_pmd_i40e/i40e_fdir.c +++ b/lib/librte_pmd_i40e/i40e_fdir.c @@ -44,6 +44,7 @@ #include <rte_log.h> #include <rte_memzone.h> #include <rte_malloc.h> +#include <rte_arp.h> #include <rte_ip.h> #include <rte_udp.h> #include <rte_tcp.h> @@ -104,7 +105,8 @@ (1 << RTE_ETH_FLOW_NONFRAG_IPV6_UDP) | \ (1 << RTE_ETH_FLOW_NONFRAG_IPV6_TCP) | \ (1 << RTE_ETH_FLOW_NONFRAG_IPV6_SCTP) | \ - (1 << RTE_ETH_FLOW_NONFRAG_IPV6_OTHER)) + (1 << RTE_ETH_FLOW_NONFRAG_IPV6_OTHER) | \ + (1 << RTE_ETH_FLOW_L2_PAYLOAD)) #define I40E_FLEX_WORD_MASK(off) (0x80 >> (off)) @@ -366,7 +368,9 @@ i40e_init_flx_pld(struct i40e_pf *pf) /* initialize the masks */ for (pctype = I40E_FILTER_PCTYPE_NONF_IPV4_UDP; - pctype <= I40E_FILTER_PCTYPE_FRAG_IPV6; pctype++) { + pctype <= I40E_FILTER_PCTYPE_L2_PAYLOAD; pctype++) { + if (!I40E_VALID_PCTYPE((enum i40e_filter_pctype)pctype)) + continue; pf->fdir.flex_mask[pctype].word_mask = 0; I40E_WRITE_REG(hw, I40E_PRTQF_FD_FLXINSET(pctype), 0); for (i = 0; i < I40E_FDIR_BITMASK_NUM_WORD; i++) { @@ -704,6 +708,9 @@ i40e_fdir_fill_eth_ip_head(const struct rte_eth_fdir_input *fdir_input, }; switch (fdir_input->flow_type) { + case RTE_ETH_FLOW_L2_PAYLOAD: + ether->ether_type = fdir_input->flow.l2_flow.ether_type; + break; case RTE_ETH_FLOW_NONFRAG_IPV4_TCP: case RTE_ETH_FLOW_NONFRAG_IPV4_UDP: case RTE_ETH_FLOW_NONFRAG_IPV4_SCTP: @@ -866,6 +873,17 @@ i40e_fdir_construct_pkt(struct i40e_pf *pf, sizeof(struct ipv6_hdr); set_idx = I40E_FLXPLD_L3_IDX; break; + case RTE_ETH_FLOW_L2_PAYLOAD: + payload = raw_pkt + sizeof(struct ether_hdr); + /* + * ARP packet is a special case on which the payload + * starts after the whole ARP header + */ + if (fdir_input->flow.l2_flow.ether_type == + rte_cpu_to_be_16(ETHER_TYPE_ARP)) + payload += sizeof(struct arp_hdr); + set_idx = I40E_FLXPLD_L2_IDX; + break; default: PMD_DRV_LOG(ERR, "unknown flow type %u.", fdir_input->flow_type); return -EINVAL; @@ -1218,7 +1236,7 @@ i40e_fdir_info_get_flex_mask(struct i40e_pf *pf, uint16_t off_bytes, mask_tmp; for (i = I40E_FILTER_PCTYPE_NONF_IPV4_UDP; - i <= I40E_FILTER_PCTYPE_FRAG_IPV6; + i <= I40E_FILTER_PCTYPE_L2_PAYLOAD; i++) { mask = &pf->fdir.flex_mask[i]; if (!I40E_VALID_PCTYPE((enum i40e_filter_pctype)i)) -- 1.9.3 ^ permalink raw reply [flat|nested] 18+ messages in thread
* [dpdk-dev] [PATCH 3/6] ethdev: extend struct to support flow director in VFs 2015-05-11 3:46 [dpdk-dev] [PATCH 0/6] extend flow director to support L2_paylod type and VF filtering in i40e driver Jingjing Wu 2015-05-11 3:46 ` [dpdk-dev] [PATCH 1/6] ethdev: add struct rte_eth_l2_flow to support l2_payload flow type Jingjing Wu 2015-05-11 3:46 ` [dpdk-dev] [PATCH 2/6] i40e: extend flow diretcor " Jingjing Wu @ 2015-05-11 3:46 ` Jingjing Wu 2015-06-12 16:45 ` Thomas Monjalon 2015-05-11 3:46 ` [dpdk-dev] [PATCH 4/6] i40e: extend flow diretcor to support filtering " Jingjing Wu ` (4 subsequent siblings) 7 siblings, 1 reply; 18+ messages in thread From: Jingjing Wu @ 2015-05-11 3:46 UTC (permalink / raw) To: dev This patch extends struct rte_eth_fdir_flow_ext to support flow director in VFs. Signed-off-by: Jingjing Wu <jingjing.wu@intel.com> --- lib/librte_ether/rte_eth_ctrl.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/librte_ether/rte_eth_ctrl.h b/lib/librte_ether/rte_eth_ctrl.h index 0e30dd9..601a4d3 100644 --- a/lib/librte_ether/rte_eth_ctrl.h +++ b/lib/librte_ether/rte_eth_ctrl.h @@ -394,6 +394,8 @@ struct rte_eth_fdir_flow_ext { uint16_t vlan_tci; uint8_t flexbytes[RTE_ETH_FDIR_MAX_FLEXLEN]; /**< It is filled by the flexible payload to match. */ + uint8_t is_vf; /**< 1 for VF, 0 for port dev */ + uint16_t dst_id; /**< VF ID, available when is_vf is 1*/ }; /** -- 1.9.3 ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [dpdk-dev] [PATCH 3/6] ethdev: extend struct to support flow director in VFs 2015-05-11 3:46 ` [dpdk-dev] [PATCH 3/6] ethdev: extend struct to support flow director in VFs Jingjing Wu @ 2015-06-12 16:45 ` Thomas Monjalon 2015-06-15 7:14 ` Wu, Jingjing 0 siblings, 1 reply; 18+ messages in thread From: Thomas Monjalon @ 2015-06-12 16:45 UTC (permalink / raw) To: Jingjing Wu; +Cc: dev, neil.horman 2015-05-11 11:46, Jingjing Wu: > This patch extends struct rte_eth_fdir_flow_ext to support flow > director in VFs. > > Signed-off-by: Jingjing Wu <jingjing.wu@intel.com> > --- a/lib/librte_ether/rte_eth_ctrl.h > +++ b/lib/librte_ether/rte_eth_ctrl.h > @@ -394,6 +394,8 @@ struct rte_eth_fdir_flow_ext { > uint16_t vlan_tci; > uint8_t flexbytes[RTE_ETH_FDIR_MAX_FLEXLEN]; > /**< It is filled by the flexible payload to match. */ > + uint8_t is_vf; /**< 1 for VF, 0 for port dev */ > + uint16_t dst_id; /**< VF ID, available when is_vf is 1*/ > }; Isn't it breaking the ABI? ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [dpdk-dev] [PATCH 3/6] ethdev: extend struct to support flow director in VFs 2015-06-12 16:45 ` Thomas Monjalon @ 2015-06-15 7:14 ` Wu, Jingjing 0 siblings, 0 replies; 18+ messages in thread From: Wu, Jingjing @ 2015-06-15 7:14 UTC (permalink / raw) To: Thomas Monjalon; +Cc: dev, neil.horman > -----Original Message----- > From: Thomas Monjalon [mailto:thomas.monjalon@6wind.com] > Sent: Saturday, June 13, 2015 12:45 AM > To: Wu, Jingjing > Cc: dev@dpdk.org; neil.horman@tuxdriver.com > Subject: Re: [dpdk-dev] [PATCH 3/6] ethdev: extend struct to support flow > director in VFs > > 2015-05-11 11:46, Jingjing Wu: > > This patch extends struct rte_eth_fdir_flow_ext to support flow > > director in VFs. > > > > Signed-off-by: Jingjing Wu <jingjing.wu@intel.com> > > > --- a/lib/librte_ether/rte_eth_ctrl.h > > +++ b/lib/librte_ether/rte_eth_ctrl.h > > @@ -394,6 +394,8 @@ struct rte_eth_fdir_flow_ext { > > uint16_t vlan_tci; > > uint8_t flexbytes[RTE_ETH_FDIR_MAX_FLEXLEN]; > > /**< It is filled by the flexible payload to match. */ > > + uint8_t is_vf; /**< 1 for VF, 0 for port dev */ > > + uint16_t dst_id; /**< VF ID, available when is_vf is 1*/ > > }; > > Isn't it breaking the ABI? Yes, it is breaking the ABI. Will consider how to avoid that. Thanks Jingjing ^ permalink raw reply [flat|nested] 18+ messages in thread
* [dpdk-dev] [PATCH 4/6] i40e: extend flow diretcor to support filtering in VFs 2015-05-11 3:46 [dpdk-dev] [PATCH 0/6] extend flow director to support L2_paylod type and VF filtering in i40e driver Jingjing Wu ` (2 preceding siblings ...) 2015-05-11 3:46 ` [dpdk-dev] [PATCH 3/6] ethdev: extend struct to support flow director in VFs Jingjing Wu @ 2015-05-11 3:46 ` Jingjing Wu 2015-05-11 3:46 ` [dpdk-dev] [PATCH 5/6] testpmd: extend commands Jingjing Wu ` (3 subsequent siblings) 7 siblings, 0 replies; 18+ messages in thread From: Jingjing Wu @ 2015-05-11 3:46 UTC (permalink / raw) To: dev This patch extends flow diretcor to filterting in VFs. Signed-off-by: Jingjing Wu <jingjing.wu@intel.com> --- lib/librte_pmd_i40e/i40e_fdir.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/lib/librte_pmd_i40e/i40e_fdir.c b/lib/librte_pmd_i40e/i40e_fdir.c index 27c2102..2f4c247 100644 --- a/lib/librte_pmd_i40e/i40e_fdir.c +++ b/lib/librte_pmd_i40e/i40e_fdir.c @@ -1008,6 +1008,11 @@ i40e_add_del_fdir_filter(struct rte_eth_dev *dev, PMD_DRV_LOG(ERR, "Invalid queue ID"); return -EINVAL; } + if (filter->input.flow_ext.is_vf && + filter->input.flow_ext.dst_id >= pf->vf_num) { + PMD_DRV_LOG(ERR, "Invalid VF ID"); + return -EINVAL; + } memset(pkt, 0, I40E_FDIR_PKT_LEN); @@ -1047,7 +1052,7 @@ i40e_fdir_filter_programming(struct i40e_pf *pf, volatile struct i40e_tx_desc *txdp; volatile struct i40e_filter_program_desc *fdirdp; uint32_t td_cmd; - uint16_t i; + uint16_t vsi_id, i; uint8_t dest; PMD_DRV_LOG(INFO, "filling filter programming descriptor."); @@ -1069,9 +1074,13 @@ i40e_fdir_filter_programming(struct i40e_pf *pf, I40E_TXD_FLTR_QW0_PCTYPE_SHIFT) & I40E_TXD_FLTR_QW0_PCTYPE_MASK); - /* Use LAN VSI Id by default */ + if (filter->input.flow_ext.is_vf) + vsi_id = pf->vfs[filter->input.flow_ext.dst_id].vsi->vsi_id; + else + /* Use LAN VSI Id by default */ + vsi_id = pf->main_vsi->vsi_id; fdirdp->qindex_flex_ptype_vsi |= - rte_cpu_to_le_32((pf->main_vsi->vsi_id << + rte_cpu_to_le_32((vsi_id << I40E_TXD_FLTR_QW0_DEST_VSI_SHIFT) & I40E_TXD_FLTR_QW0_DEST_VSI_MASK); -- 1.9.3 ^ permalink raw reply [flat|nested] 18+ messages in thread
* [dpdk-dev] [PATCH 5/6] testpmd: extend commands 2015-05-11 3:46 [dpdk-dev] [PATCH 0/6] extend flow director to support L2_paylod type and VF filtering in i40e driver Jingjing Wu ` (3 preceding siblings ...) 2015-05-11 3:46 ` [dpdk-dev] [PATCH 4/6] i40e: extend flow diretcor to support filtering " Jingjing Wu @ 2015-05-11 3:46 ` Jingjing Wu 2015-05-11 3:46 ` [dpdk-dev] [PATCH 6/6] doc: extend commands in testpmd Jingjing Wu ` (2 subsequent siblings) 7 siblings, 0 replies; 18+ messages in thread From: Jingjing Wu @ 2015-05-11 3:46 UTC (permalink / raw) To: dev This patch extends commands to support l2_payload flow type and filtering in VFs of flow director. Signed-off-by: Jingjing Wu <jingjing.wu@intel.com> --- app/test-pmd/cmdline.c | 87 ++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 81 insertions(+), 6 deletions(-) diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c index f01db2a..438e948 100644 --- a/app/test-pmd/cmdline.c +++ b/app/test-pmd/cmdline.c @@ -632,7 +632,8 @@ static void cmd_help_long_parsed(void *parsed_result, " flow (ipv4-other|ipv4-frag|ipv6-other|ipv6-frag)" " src (src_ip_address) dst (dst_ip_address)" " vlan (vlan_value) flexbytes (flexbytes_value)" - " (drop|fwd) queue (queue_id) fd_id (fd_id_value)\n" + " (drop|fwd) pf|vf(vf_id) queue (queue_id)" + " fd_id (fd_id_value)\n" " Add/Del an IP type flow director filter.\n\n" "flow_director_filter (port_id) (add|del|update)" @@ -640,7 +641,8 @@ static void cmd_help_long_parsed(void *parsed_result, " src (src_ip_address) (src_port)" " dst (dst_ip_address) (dst_port)" " vlan (vlan_value) flexbytes (flexbytes_value)" - " (drop|fwd) queue (queue_id) fd_id (fd_id_value)\n" + " (drop|fwd) pf|vf(vf_id)queue (queue_id)" + " fd_id (fd_id_value)\n" " Add/Del an UDP/TCP type flow director filter.\n\n" "flow_director_filter (port_id) (add|del|update)" @@ -649,9 +651,15 @@ static void cmd_help_long_parsed(void *parsed_result, " dst (dst_ip_address) (dst_port)" " tag (verification_tag) vlan (vlan_value)" " flexbytes (flexbytes_value) (drop|fwd)" - " queue (queue_id) fd_id (fd_id_value)\n" + " pf|vf(vf_id) queue (queue_id) fd_id (fd_id_value)\n" " Add/Del a SCTP type flow director filter.\n\n" + "flow_director_filter (port_id) (add|del|update)" + " flow l2_payload ether (ethertype)" + " flexbytes (flexbytes_value) (drop|fwd)" + " pf|vf(vf_id) queue (queue_id) fd_id (fd_id_value)\n" + " Add/Del a l2 payload type flow director filter.\n\n" + "flush_flow_director (port_id)\n" " Flush all flow director entries of a device.\n\n" @@ -662,7 +670,7 @@ static void cmd_help_long_parsed(void *parsed_result, "flow_director_flex_mask (port_id)" " flow (none|ipv4-other|ipv4-frag|ipv4-tcp|ipv4-udp|ipv4-sctp|" - "ipv6-other|ipv6-frag|ipv6-tcp|ipv6-udp|ipv6-sctp|all)" + "ipv6-other|ipv6-frag|ipv6-tcp|ipv6-udp|ipv6-sctp|l2_payload|all)" " (mask)\n" " Configure mask of flex payload.\n\n" @@ -7653,6 +7661,8 @@ struct cmd_flow_director_result { cmdline_fixed_string_t ops; cmdline_fixed_string_t flow; cmdline_fixed_string_t flow_type; + cmdline_fixed_string_t ether; + uint16_t ether_type; cmdline_fixed_string_t src; cmdline_ipaddr_t ip_src; uint16_t port_src; @@ -7665,6 +7675,7 @@ struct cmd_flow_director_result { uint16_t vlan_value; cmdline_fixed_string_t flexbytes; cmdline_fixed_string_t flexbytes_value; + cmdline_fixed_string_t pf_vf; cmdline_fixed_string_t drop; cmdline_fixed_string_t queue; uint16_t queue_id; @@ -7771,6 +7782,8 @@ cmd_flow_director_filter_parsed(void *parsed_result, struct cmd_flow_director_result *res = parsed_result; struct rte_eth_fdir_filter entry; uint8_t flexbytes[RTE_ETH_FDIR_MAX_FLEXLEN]; + char *end; + unsigned long vf_id; int ret = 0; ret = rte_eth_dev_filter_supported(res->port_id, RTE_ETH_FILTER_FDIR); @@ -7837,6 +7850,10 @@ cmd_flow_director_filter_parsed(void *parsed_result, entry.input.flow.sctp6_flow.verify_tag = rte_cpu_to_be_32(res->verify_tag_value); break; + case RTE_ETH_FLOW_L2_PAYLOAD: + entry.input.flow.l2_flow.ether_type = + rte_cpu_to_be_16(res->ether_type); + break; default: printf("invalid parameter.\n"); return; @@ -7852,6 +7869,27 @@ cmd_flow_director_filter_parsed(void *parsed_result, entry.action.behavior = RTE_ETH_FDIR_REJECT; else entry.action.behavior = RTE_ETH_FDIR_ACCEPT; + + if (!strcmp(res->pf_vf, "pf")) + entry.input.flow_ext.is_vf = 0; + else if (!strncmp(res->pf_vf, "vf", 2)) { + struct rte_eth_dev_info dev_info; + + memset(&dev_info, 0, sizeof(dev_info)); + rte_eth_dev_info_get(res->port_id, &dev_info); + errno = 0; + vf_id = strtoul(res->pf_vf + 2, &end, 10); + if (errno != 0 || *end != '\0' || vf_id >= dev_info.max_vfs) { + printf("invalid parameter %s.\n", res->pf_vf); + return; + } + entry.input.flow_ext.is_vf = 1; + entry.input.flow_ext.dst_id = (uint16_t)vf_id; + } else { + printf("invalid parameter %s.\n", res->pf_vf); + return; + } + /* set to report FD ID by default */ entry.action.report_status = RTE_ETH_FDIR_REPORT_ID; entry.action.rx_queue = res->queue_id; @@ -7885,7 +7923,13 @@ cmdline_parse_token_string_t cmd_flow_director_flow = cmdline_parse_token_string_t cmd_flow_director_flow_type = TOKEN_STRING_INITIALIZER(struct cmd_flow_director_result, flow_type, "ipv4-other#ipv4-frag#ipv4-tcp#ipv4-udp#ipv4-sctp#" - "ipv6-other#ipv6-frag#ipv6-tcp#ipv6-udp#ipv6-sctp"); + "ipv6-other#ipv6-frag#ipv6-tcp#ipv6-udp#ipv6-sctp#l2_payload"); +cmdline_parse_token_string_t cmd_flow_director_ether = + TOKEN_STRING_INITIALIZER(struct cmd_flow_director_result, + ether, "ether"); +cmdline_parse_token_num_t cmd_flow_director_ether_type = + TOKEN_NUM_INITIALIZER(struct cmd_flow_director_result, + ether_type, UINT16); cmdline_parse_token_string_t cmd_flow_director_src = TOKEN_STRING_INITIALIZER(struct cmd_flow_director_result, src, "src"); @@ -7925,6 +7969,9 @@ cmdline_parse_token_string_t cmd_flow_director_flexbytes_value = cmdline_parse_token_string_t cmd_flow_director_drop = TOKEN_STRING_INITIALIZER(struct cmd_flow_director_result, drop, "drop#fwd"); +cmdline_parse_token_string_t cmd_flow_director_pf_vf = + TOKEN_STRING_INITIALIZER(struct cmd_flow_director_result, + pf_vf, NULL); cmdline_parse_token_string_t cmd_flow_director_queue = TOKEN_STRING_INITIALIZER(struct cmd_flow_director_result, queue, "queue"); @@ -7957,6 +8004,7 @@ cmdline_parse_inst_t cmd_add_del_ip_flow_director = { (void *)&cmd_flow_director_flexbytes, (void *)&cmd_flow_director_flexbytes_value, (void *)&cmd_flow_director_drop, + (void *)&cmd_flow_director_pf_vf, (void *)&cmd_flow_director_queue, (void *)&cmd_flow_director_queue_id, (void *)&cmd_flow_director_fd_id, @@ -7986,6 +8034,7 @@ cmdline_parse_inst_t cmd_add_del_udp_flow_director = { (void *)&cmd_flow_director_flexbytes, (void *)&cmd_flow_director_flexbytes_value, (void *)&cmd_flow_director_drop, + (void *)&cmd_flow_director_pf_vf, (void *)&cmd_flow_director_queue, (void *)&cmd_flow_director_queue_id, (void *)&cmd_flow_director_fd_id, @@ -8017,6 +8066,31 @@ cmdline_parse_inst_t cmd_add_del_sctp_flow_director = { (void *)&cmd_flow_director_flexbytes, (void *)&cmd_flow_director_flexbytes_value, (void *)&cmd_flow_director_drop, + (void *)&cmd_flow_director_pf_vf, + (void *)&cmd_flow_director_queue, + (void *)&cmd_flow_director_queue_id, + (void *)&cmd_flow_director_fd_id, + (void *)&cmd_flow_director_fd_id_value, + NULL, + }, +}; + +cmdline_parse_inst_t cmd_add_del_l2_flow_director = { + .f = cmd_flow_director_filter_parsed, + .data = NULL, + .help_str = "add or delete a L2 flow director entry on NIC", + .tokens = { + (void *)&cmd_flow_director_filter, + (void *)&cmd_flow_director_port_id, + (void *)&cmd_flow_director_ops, + (void *)&cmd_flow_director_flow, + (void *)&cmd_flow_director_flow_type, + (void *)&cmd_flow_director_ether, + (void *)&cmd_flow_director_ether_type, + (void *)&cmd_flow_director_flexbytes, + (void *)&cmd_flow_director_flexbytes_value, + (void *)&cmd_flow_director_drop, + (void *)&cmd_flow_director_pf_vf, (void *)&cmd_flow_director_queue, (void *)&cmd_flow_director_queue_id, (void *)&cmd_flow_director_fd_id, @@ -8278,7 +8352,7 @@ cmdline_parse_token_string_t cmd_flow_director_flexmask_flow = cmdline_parse_token_string_t cmd_flow_director_flexmask_flow_type = TOKEN_STRING_INITIALIZER(struct cmd_flow_director_flex_mask_result, flow_type, "none#ipv4-other#ipv4-frag#ipv4-tcp#ipv4-udp#ipv4-sctp#" - "ipv6-other#ipv6-frag#ipv6-tcp#ipv6-udp#ipv6-sctp#all"); + "ipv6-other#ipv6-frag#ipv6-tcp#ipv6-udp#ipv6-sctp#l2_payload#all"); cmdline_parse_token_string_t cmd_flow_director_flexmask_mask = TOKEN_STRING_INITIALIZER(struct cmd_flow_director_flex_mask_result, mask, NULL); @@ -8854,6 +8928,7 @@ cmdline_parse_ctx_t main_ctx[] = { (cmdline_parse_inst_t *)&cmd_add_del_ip_flow_director, (cmdline_parse_inst_t *)&cmd_add_del_udp_flow_director, (cmdline_parse_inst_t *)&cmd_add_del_sctp_flow_director, + (cmdline_parse_inst_t *)&cmd_add_del_l2_flow_director, (cmdline_parse_inst_t *)&cmd_flush_flow_director, (cmdline_parse_inst_t *)&cmd_set_flow_director_mask, (cmdline_parse_inst_t *)&cmd_set_flow_director_flex_mask, -- 1.9.3 ^ permalink raw reply [flat|nested] 18+ messages in thread
* [dpdk-dev] [PATCH 6/6] doc: extend commands in testpmd 2015-05-11 3:46 [dpdk-dev] [PATCH 0/6] extend flow director to support L2_paylod type and VF filtering in i40e driver Jingjing Wu ` (4 preceding siblings ...) 2015-05-11 3:46 ` [dpdk-dev] [PATCH 5/6] testpmd: extend commands Jingjing Wu @ 2015-05-11 3:46 ` Jingjing Wu 2015-06-02 7:33 ` [dpdk-dev] [PATCH 0/6] extend flow director to support L2_paylod type and VF filtering in i40e driver Zhang, Helin 2015-06-16 3:43 ` [dpdk-dev] [PATCH v2 0/4] extend flow director to support L2_paylod type Jingjing Wu 7 siblings, 0 replies; 18+ messages in thread From: Jingjing Wu @ 2015-05-11 3:46 UTC (permalink / raw) To: dev Modify the doc about flow director commands to support l2_payload flow type and filtering in VFs. Signed-off-by: Jingjing Wu <jingjing.wu@intel.com> --- doc/guides/testpmd_app_ug/testpmd_funcs.rst | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/doc/guides/testpmd_app_ug/testpmd_funcs.rst b/doc/guides/testpmd_app_ug/testpmd_funcs.rst index 761172e..3d56097 100644 --- a/doc/guides/testpmd_app_ug/testpmd_funcs.rst +++ b/doc/guides/testpmd_app_ug/testpmd_funcs.rst @@ -1527,27 +1527,28 @@ Different NICs may have different capabilities, command show port fdir (port_id) flow_director_filter (port_id) (add|del|update) flow (ipv4-other|ipv4-frag|ipv6-other|ipv6-frag) src (src_ip_address) dst (dst_ip_address) vlan (vlan_value) flexbytes (flexbytes_value) -(drop|fwd) queue (queue_id) fd_id (fd_id_value) +(drop|fwd) pf|vf(vf_id) queue (queue_id) fd_id (fd_id_value) flow_director_filter (port_id) (add|del|update) flow (ipv4-tcp|ipv4-udp|ipv6-tcp|ipv6-udp) src (src_ip_address) (src_port) dst (dst_ip_address) (dst_port) vlan (vlan_value) -flexbytes (flexbytes_value) (drop|fwd) queue (queue_id) fd_id (fd_id_value) +flexbytes (flexbytes_value) (drop|fwd) pf|vf(vf_id) queue (queue_id) fd_id (fd_id_value) flow_director_filter (port_id) (add|del|update) flow (ipv4-sctp|ipv6-sctp) src (src_ip_address) (src_port) dst (dst_ip_address) (dst_port) tag (verification_tag) -vlan (vlan_value) flexbytes (flexbytes_value) (drop|fwd) queue (queue_id) fd_id (fd_id_value) +vlan (vlan_value) flexbytes (flexbytes_value) (drop|fwd) pf|vf(vf_id) queue (queue_id) fd_id (fd_id_value) -For example, to add an ipv4-udp flow type filter: +flow_director_filter (port_id) (add|del|update) flow l2_payload +ether (ethertype) flexbytes (flexbytes_value) (drop|fwd) pf|vf(vf_id) queue (queue_id) fd_id (fd_id_value) .. code-block:: console - testpmd> flow_director_filter 0 add flow ipv4-udp src 2.2.2.3 32 dst 2.2.2.5 33 vlan 0x1 flexbytes (0x88,0x48) fwd queue 1 fd_id 1 + testpmd> flow_director_filter 0 add flow ipv4-udp src 2.2.2.3 32 dst 2.2.2.5 33 vlan 0x1 flexbytes (0x88,0x48) fwd pf queue 1 fd_id 1 For example, add an ipv4-other flow type filter: .. code-block:: console - testpmd> flow_director_filter 0 add flow ipv4-other src 2.2.2.3 dst 2.2.2.5 vlan 0x1 flexbytes (0x88,0x48) fwd queue 1 fd_id 1 + testpmd> flow_director_filter 0 add flow ipv4-other src 2.2.2.3 dst 2.2.2.5 vlan 0x1 flexbytes (0x88,0x48) fwd pf queue 1 fd_id 1 flush_flow_director ~~~~~~~~~~~~~~~~~~~ @@ -1582,7 +1583,7 @@ flow_director_flex_mask set masks of flow director's flexible payload based on certain flow type: flow_director_flex_mask (port_id) flow (none|ipv4-other|ipv4-frag|ipv4-tcp|ipv4-udp|ipv4-sctp| -ipv6-other|ipv6-frag|ipv6-tcp|ipv6-udp|ipv6-sctp|all) (mask) +ipv6-other|ipv6-frag|ipv6-tcp|ipv6-udp|ipv6-sctp|l2_payload|all) (mask) Example, to set flow director's flex mask for all flow type on port 0: -- 1.9.3 ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [dpdk-dev] [PATCH 0/6] extend flow director to support L2_paylod type and VF filtering in i40e driver 2015-05-11 3:46 [dpdk-dev] [PATCH 0/6] extend flow director to support L2_paylod type and VF filtering in i40e driver Jingjing Wu ` (5 preceding siblings ...) 2015-05-11 3:46 ` [dpdk-dev] [PATCH 6/6] doc: extend commands in testpmd Jingjing Wu @ 2015-06-02 7:33 ` Zhang, Helin 2015-06-16 3:43 ` [dpdk-dev] [PATCH v2 0/4] extend flow director to support L2_paylod type Jingjing Wu 7 siblings, 0 replies; 18+ messages in thread From: Zhang, Helin @ 2015-06-02 7:33 UTC (permalink / raw) To: Wu, Jingjing, dev Acked-by: Helin Zhang <helin.zhang@intel.com> > -----Original Message----- > From: Wu, Jingjing > Sent: Monday, May 11, 2015 11:46 AM > To: dev@dpdk.org > Cc: Wu, Jingjing; Zhang, Helin; Cao, Min; Liu, Jijiang > Subject: [PATCH 0/6] extend flow director to support L2_paylod type and VF > filtering in i40e driver > > This patch set extends flow director to support L2_paylod type and VF filtering in > i40e driver. > > Jingjing Wu (6): > ethdev: add struct rte_eth_l2_flow to support l2_payload flow type > i40e: extend flow diretcor to support l2_payload flow type > ethdev: extend struct to support flow director in VFs > i40e: extend flow diretcor to support filtering in VFs > testpmd: extend commands > doc: extend commands in testpmd > > app/test-pmd/cmdline.c | 87 > +++++++++++++++++++++++++++-- > doc/guides/testpmd_app_ug/testpmd_funcs.rst | 15 ++--- > lib/librte_ether/rte_eth_ctrl.h | 10 ++++ > lib/librte_pmd_i40e/i40e_fdir.c | 39 +++++++++++-- > 4 files changed, 132 insertions(+), 19 deletions(-) > > -- > 1.9.3 ^ permalink raw reply [flat|nested] 18+ messages in thread
* [dpdk-dev] [PATCH v2 0/4] extend flow director to support L2_paylod type 2015-05-11 3:46 [dpdk-dev] [PATCH 0/6] extend flow director to support L2_paylod type and VF filtering in i40e driver Jingjing Wu ` (6 preceding siblings ...) 2015-06-02 7:33 ` [dpdk-dev] [PATCH 0/6] extend flow director to support L2_paylod type and VF filtering in i40e driver Zhang, Helin @ 2015-06-16 3:43 ` Jingjing Wu 2015-06-16 3:43 ` [dpdk-dev] [PATCH v2 1/4] ethdev: add struct rte_eth_l2_flow to support l2_payload flow type Jingjing Wu ` (5 more replies) 7 siblings, 6 replies; 18+ messages in thread From: Jingjing Wu @ 2015-06-16 3:43 UTC (permalink / raw) To: dev This patch set extends flow director to support L2_paylod type in i40e driver. v2 change: - remove the flow director VF filtering from this patch to avoid breaking ABI. Jingjing Wu (4): ethdev: add struct rte_eth_l2_flow to support l2_payload flow type i40e: extend flow diretcor to support l2_payload flow type testpmd: extend commands doc: extend commands in testpmd app/test-pmd/cmdline.c | 48 +++++++++++++++++++++++++++-- doc/guides/testpmd_app_ug/testpmd_funcs.rst | 5 ++- drivers/net/i40e/i40e_fdir.c | 24 +++++++++++++-- lib/librte_ether/rte_eth_ctrl.h | 8 +++++ 4 files changed, 78 insertions(+), 7 deletions(-) -- 1.9.3 ^ permalink raw reply [flat|nested] 18+ messages in thread
* [dpdk-dev] [PATCH v2 1/4] ethdev: add struct rte_eth_l2_flow to support l2_payload flow type 2015-06-16 3:43 ` [dpdk-dev] [PATCH v2 0/4] extend flow director to support L2_paylod type Jingjing Wu @ 2015-06-16 3:43 ` Jingjing Wu 2015-06-16 3:43 ` [dpdk-dev] [PATCH v2 2/4] i40e: extend flow diretcor " Jingjing Wu ` (4 subsequent siblings) 5 siblings, 0 replies; 18+ messages in thread From: Jingjing Wu @ 2015-06-16 3:43 UTC (permalink / raw) To: dev This patch adds a new struct rte_eth_l2_flow to support l2_payload flow type Signed-off-by: Jingjing Wu <jingjing.wu@intel.com> --- lib/librte_ether/rte_eth_ctrl.h | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/lib/librte_ether/rte_eth_ctrl.h b/lib/librte_ether/rte_eth_ctrl.h index 498fc85..0e30dd9 100644 --- a/lib/librte_ether/rte_eth_ctrl.h +++ b/lib/librte_ether/rte_eth_ctrl.h @@ -298,6 +298,13 @@ struct rte_eth_tunnel_filter_conf { #define RTE_ETH_FDIR_MAX_FLEXLEN 16 /** < Max length of flexbytes. */ /** + * A structure used to define the input for L2 flow + */ +struct rte_eth_l2_flow { + uint16_t ether_type; /**< Ether type to match */ +}; + +/** * A structure used to define the input for IPV4 flow */ struct rte_eth_ipv4_flow { @@ -369,6 +376,7 @@ struct rte_eth_sctpv6_flow { * An union contains the inputs for all types of flow */ union rte_eth_fdir_flow { + struct rte_eth_l2_flow l2_flow; struct rte_eth_udpv4_flow udp4_flow; struct rte_eth_tcpv4_flow tcp4_flow; struct rte_eth_sctpv4_flow sctp4_flow; -- 1.9.3 ^ permalink raw reply [flat|nested] 18+ messages in thread
* [dpdk-dev] [PATCH v2 2/4] i40e: extend flow diretcor to support l2_payload flow type 2015-06-16 3:43 ` [dpdk-dev] [PATCH v2 0/4] extend flow director to support L2_paylod type Jingjing Wu 2015-06-16 3:43 ` [dpdk-dev] [PATCH v2 1/4] ethdev: add struct rte_eth_l2_flow to support l2_payload flow type Jingjing Wu @ 2015-06-16 3:43 ` Jingjing Wu 2015-06-16 3:43 ` [dpdk-dev] [PATCH v2 3/4] testpmd: extend commands Jingjing Wu ` (3 subsequent siblings) 5 siblings, 0 replies; 18+ messages in thread From: Jingjing Wu @ 2015-06-16 3:43 UTC (permalink / raw) To: dev This patch extends flow diretcor to support l2_payload flow type in i40e driver. Signed-off-by: Jingjing Wu <jingjing.wu@intel.com> --- drivers/net/i40e/i40e_fdir.c | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/drivers/net/i40e/i40e_fdir.c b/drivers/net/i40e/i40e_fdir.c index 4bf98d0..8b81ca3 100644 --- a/drivers/net/i40e/i40e_fdir.c +++ b/drivers/net/i40e/i40e_fdir.c @@ -44,6 +44,7 @@ #include <rte_log.h> #include <rte_memzone.h> #include <rte_malloc.h> +#include <rte_arp.h> #include <rte_ip.h> #include <rte_udp.h> #include <rte_tcp.h> @@ -104,7 +105,8 @@ (1 << RTE_ETH_FLOW_NONFRAG_IPV6_UDP) | \ (1 << RTE_ETH_FLOW_NONFRAG_IPV6_TCP) | \ (1 << RTE_ETH_FLOW_NONFRAG_IPV6_SCTP) | \ - (1 << RTE_ETH_FLOW_NONFRAG_IPV6_OTHER)) + (1 << RTE_ETH_FLOW_NONFRAG_IPV6_OTHER) | \ + (1 << RTE_ETH_FLOW_L2_PAYLOAD)) #define I40E_FLEX_WORD_MASK(off) (0x80 >> (off)) @@ -366,7 +368,9 @@ i40e_init_flx_pld(struct i40e_pf *pf) /* initialize the masks */ for (pctype = I40E_FILTER_PCTYPE_NONF_IPV4_UDP; - pctype <= I40E_FILTER_PCTYPE_FRAG_IPV6; pctype++) { + pctype <= I40E_FILTER_PCTYPE_L2_PAYLOAD; pctype++) { + if (!I40E_VALID_PCTYPE((enum i40e_filter_pctype)pctype)) + continue; pf->fdir.flex_mask[pctype].word_mask = 0; I40E_WRITE_REG(hw, I40E_PRTQF_FD_FLXINSET(pctype), 0); for (i = 0; i < I40E_FDIR_BITMASK_NUM_WORD; i++) { @@ -704,6 +708,9 @@ i40e_fdir_fill_eth_ip_head(const struct rte_eth_fdir_input *fdir_input, }; switch (fdir_input->flow_type) { + case RTE_ETH_FLOW_L2_PAYLOAD: + ether->ether_type = fdir_input->flow.l2_flow.ether_type; + break; case RTE_ETH_FLOW_NONFRAG_IPV4_TCP: case RTE_ETH_FLOW_NONFRAG_IPV4_UDP: case RTE_ETH_FLOW_NONFRAG_IPV4_SCTP: @@ -866,6 +873,17 @@ i40e_fdir_construct_pkt(struct i40e_pf *pf, sizeof(struct ipv6_hdr); set_idx = I40E_FLXPLD_L3_IDX; break; + case RTE_ETH_FLOW_L2_PAYLOAD: + payload = raw_pkt + sizeof(struct ether_hdr); + /* + * ARP packet is a special case on which the payload + * starts after the whole ARP header + */ + if (fdir_input->flow.l2_flow.ether_type == + rte_cpu_to_be_16(ETHER_TYPE_ARP)) + payload += sizeof(struct arp_hdr); + set_idx = I40E_FLXPLD_L2_IDX; + break; default: PMD_DRV_LOG(ERR, "unknown flow type %u.", fdir_input->flow_type); return -EINVAL; @@ -1218,7 +1236,7 @@ i40e_fdir_info_get_flex_mask(struct i40e_pf *pf, uint16_t off_bytes, mask_tmp; for (i = I40E_FILTER_PCTYPE_NONF_IPV4_UDP; - i <= I40E_FILTER_PCTYPE_FRAG_IPV6; + i <= I40E_FILTER_PCTYPE_L2_PAYLOAD; i++) { mask = &pf->fdir.flex_mask[i]; if (!I40E_VALID_PCTYPE((enum i40e_filter_pctype)i)) -- 1.9.3 ^ permalink raw reply [flat|nested] 18+ messages in thread
* [dpdk-dev] [PATCH v2 3/4] testpmd: extend commands 2015-06-16 3:43 ` [dpdk-dev] [PATCH v2 0/4] extend flow director to support L2_paylod type Jingjing Wu 2015-06-16 3:43 ` [dpdk-dev] [PATCH v2 1/4] ethdev: add struct rte_eth_l2_flow to support l2_payload flow type Jingjing Wu 2015-06-16 3:43 ` [dpdk-dev] [PATCH v2 2/4] i40e: extend flow diretcor " Jingjing Wu @ 2015-06-16 3:43 ` Jingjing Wu 2015-06-16 3:43 ` [dpdk-dev] [PATCH v2 4/4] doc: extend commands in testpmd Jingjing Wu ` (2 subsequent siblings) 5 siblings, 0 replies; 18+ messages in thread From: Jingjing Wu @ 2015-06-16 3:43 UTC (permalink / raw) To: dev This patch extends flow director commands to support l2_payload flow type. Signed-off-by: Jingjing Wu <jingjing.wu@intel.com> --- app/test-pmd/cmdline.c | 48 +++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 45 insertions(+), 3 deletions(-) diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c index f01db2a..9659464 100644 --- a/app/test-pmd/cmdline.c +++ b/app/test-pmd/cmdline.c @@ -652,6 +652,12 @@ static void cmd_help_long_parsed(void *parsed_result, " queue (queue_id) fd_id (fd_id_value)\n" " Add/Del a SCTP type flow director filter.\n\n" + "flow_director_filter (port_id) (add|del|update)" + " flow l2_payload ether (ethertype)" + " flexbytes (flexbytes_value) (drop|fwd)" + " queue (queue_id) fd_id (fd_id_value)\n" + " Add/Del a l2 payload type flow director filter.\n\n" + "flush_flow_director (port_id)\n" " Flush all flow director entries of a device.\n\n" @@ -662,7 +668,7 @@ static void cmd_help_long_parsed(void *parsed_result, "flow_director_flex_mask (port_id)" " flow (none|ipv4-other|ipv4-frag|ipv4-tcp|ipv4-udp|ipv4-sctp|" - "ipv6-other|ipv6-frag|ipv6-tcp|ipv6-udp|ipv6-sctp|all)" + "ipv6-other|ipv6-frag|ipv6-tcp|ipv6-udp|ipv6-sctp|l2_payload|all)" " (mask)\n" " Configure mask of flex payload.\n\n" @@ -7653,6 +7659,8 @@ struct cmd_flow_director_result { cmdline_fixed_string_t ops; cmdline_fixed_string_t flow; cmdline_fixed_string_t flow_type; + cmdline_fixed_string_t ether; + uint16_t ether_type; cmdline_fixed_string_t src; cmdline_ipaddr_t ip_src; uint16_t port_src; @@ -7837,6 +7845,10 @@ cmd_flow_director_filter_parsed(void *parsed_result, entry.input.flow.sctp6_flow.verify_tag = rte_cpu_to_be_32(res->verify_tag_value); break; + case RTE_ETH_FLOW_L2_PAYLOAD: + entry.input.flow.l2_flow.ether_type = + rte_cpu_to_be_16(res->ether_type); + break; default: printf("invalid parameter.\n"); return; @@ -7885,7 +7897,13 @@ cmdline_parse_token_string_t cmd_flow_director_flow = cmdline_parse_token_string_t cmd_flow_director_flow_type = TOKEN_STRING_INITIALIZER(struct cmd_flow_director_result, flow_type, "ipv4-other#ipv4-frag#ipv4-tcp#ipv4-udp#ipv4-sctp#" - "ipv6-other#ipv6-frag#ipv6-tcp#ipv6-udp#ipv6-sctp"); + "ipv6-other#ipv6-frag#ipv6-tcp#ipv6-udp#ipv6-sctp#l2_payload"); +cmdline_parse_token_string_t cmd_flow_director_ether = + TOKEN_STRING_INITIALIZER(struct cmd_flow_director_result, + ether, "ether"); +cmdline_parse_token_num_t cmd_flow_director_ether_type = + TOKEN_NUM_INITIALIZER(struct cmd_flow_director_result, + ether_type, UINT16); cmdline_parse_token_string_t cmd_flow_director_src = TOKEN_STRING_INITIALIZER(struct cmd_flow_director_result, src, "src"); @@ -8025,6 +8043,29 @@ cmdline_parse_inst_t cmd_add_del_sctp_flow_director = { }, }; +cmdline_parse_inst_t cmd_add_del_l2_flow_director = { + .f = cmd_flow_director_filter_parsed, + .data = NULL, + .help_str = "add or delete a L2 flow director entry on NIC", + .tokens = { + (void *)&cmd_flow_director_filter, + (void *)&cmd_flow_director_port_id, + (void *)&cmd_flow_director_ops, + (void *)&cmd_flow_director_flow, + (void *)&cmd_flow_director_flow_type, + (void *)&cmd_flow_director_ether, + (void *)&cmd_flow_director_ether_type, + (void *)&cmd_flow_director_flexbytes, + (void *)&cmd_flow_director_flexbytes_value, + (void *)&cmd_flow_director_drop, + (void *)&cmd_flow_director_queue, + (void *)&cmd_flow_director_queue_id, + (void *)&cmd_flow_director_fd_id, + (void *)&cmd_flow_director_fd_id_value, + NULL, + }, +}; + struct cmd_flush_flow_director_result { cmdline_fixed_string_t flush_flow_director; uint8_t port_id; @@ -8278,7 +8319,7 @@ cmdline_parse_token_string_t cmd_flow_director_flexmask_flow = cmdline_parse_token_string_t cmd_flow_director_flexmask_flow_type = TOKEN_STRING_INITIALIZER(struct cmd_flow_director_flex_mask_result, flow_type, "none#ipv4-other#ipv4-frag#ipv4-tcp#ipv4-udp#ipv4-sctp#" - "ipv6-other#ipv6-frag#ipv6-tcp#ipv6-udp#ipv6-sctp#all"); + "ipv6-other#ipv6-frag#ipv6-tcp#ipv6-udp#ipv6-sctp#l2_payload#all"); cmdline_parse_token_string_t cmd_flow_director_flexmask_mask = TOKEN_STRING_INITIALIZER(struct cmd_flow_director_flex_mask_result, mask, NULL); @@ -8854,6 +8895,7 @@ cmdline_parse_ctx_t main_ctx[] = { (cmdline_parse_inst_t *)&cmd_add_del_ip_flow_director, (cmdline_parse_inst_t *)&cmd_add_del_udp_flow_director, (cmdline_parse_inst_t *)&cmd_add_del_sctp_flow_director, + (cmdline_parse_inst_t *)&cmd_add_del_l2_flow_director, (cmdline_parse_inst_t *)&cmd_flush_flow_director, (cmdline_parse_inst_t *)&cmd_set_flow_director_mask, (cmdline_parse_inst_t *)&cmd_set_flow_director_flex_mask, -- 1.9.3 ^ permalink raw reply [flat|nested] 18+ messages in thread
* [dpdk-dev] [PATCH v2 4/4] doc: extend commands in testpmd 2015-06-16 3:43 ` [dpdk-dev] [PATCH v2 0/4] extend flow director to support L2_paylod type Jingjing Wu ` (2 preceding siblings ...) 2015-06-16 3:43 ` [dpdk-dev] [PATCH v2 3/4] testpmd: extend commands Jingjing Wu @ 2015-06-16 3:43 ` Jingjing Wu 2015-06-26 2:26 ` [dpdk-dev] [PATCH v2 0/4] extend flow director to support L2_paylod type Xu, HuilongX 2015-06-26 3:14 ` Zhang, Helin 5 siblings, 0 replies; 18+ messages in thread From: Jingjing Wu @ 2015-06-16 3:43 UTC (permalink / raw) To: dev Modify the doc about flow director commands to support l2_payload flow type. Signed-off-by: Jingjing Wu <jingjing.wu@intel.com> --- doc/guides/testpmd_app_ug/testpmd_funcs.rst | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/doc/guides/testpmd_app_ug/testpmd_funcs.rst b/doc/guides/testpmd_app_ug/testpmd_funcs.rst index 761172e..9aa5397 100644 --- a/doc/guides/testpmd_app_ug/testpmd_funcs.rst +++ b/doc/guides/testpmd_app_ug/testpmd_funcs.rst @@ -1537,6 +1537,9 @@ flow_director_filter (port_id) (add|del|update) flow (ipv4-sctp|ipv6-sctp) src (src_ip_address) (src_port) dst (dst_ip_address) (dst_port) tag (verification_tag) vlan (vlan_value) flexbytes (flexbytes_value) (drop|fwd) queue (queue_id) fd_id (fd_id_value) +flow_director_filter (port_id) (add|del|update) flow l2_payload +ether (ethertype) flexbytes (flexbytes_value) (drop|fwd) queue (queue_id) fd_id (fd_id_value) + For example, to add an ipv4-udp flow type filter: .. code-block:: console @@ -1582,7 +1585,7 @@ flow_director_flex_mask set masks of flow director's flexible payload based on certain flow type: flow_director_flex_mask (port_id) flow (none|ipv4-other|ipv4-frag|ipv4-tcp|ipv4-udp|ipv4-sctp| -ipv6-other|ipv6-frag|ipv6-tcp|ipv6-udp|ipv6-sctp|all) (mask) +ipv6-other|ipv6-frag|ipv6-tcp|ipv6-udp|ipv6-sctp|l2_payload|all) (mask) Example, to set flow director's flex mask for all flow type on port 0: -- 1.9.3 ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [dpdk-dev] [PATCH v2 0/4] extend flow director to support L2_paylod type 2015-06-16 3:43 ` [dpdk-dev] [PATCH v2 0/4] extend flow director to support L2_paylod type Jingjing Wu ` (3 preceding siblings ...) 2015-06-16 3:43 ` [dpdk-dev] [PATCH v2 4/4] doc: extend commands in testpmd Jingjing Wu @ 2015-06-26 2:26 ` Xu, HuilongX 2015-06-26 3:14 ` Zhang, Helin 5 siblings, 0 replies; 18+ messages in thread From: Xu, HuilongX @ 2015-06-26 2:26 UTC (permalink / raw) To: Wu, Jingjing, dev Tested-by:huilong,xu <huilongx.xu@intel.com> Os: 3.11.10-301.fc20.x86_64 Gcc: gcc version 4.8.3 20140911 (Red Hat 4.8.3-7) (GCC) Package: d2c08067240baf27f2447bf4981b9ab58ce74d35 + l2payload patch NIC: Intel Corporation Ethernet Controller XL710 for 40GbE QSFP+ [8086:1583] Test case Summary: 1 case passed Test sets: 1. build dpdk with x86_64 gcc target 2. set hugpage and bind igb_uio to Fortville nic 3. ./testpmd -c ffff -n 4 -- -I --portmask=0x3 --disable-rss --rxq=2 --txq=2 --nbcores=8 --pkt-filter-mode=perfect 4. exec testpmd cmdline a) set verbose 1 b) set fwd rxonly c) flow_director_filter 0 add flow l2_payload ether 0x0806 flexbytes () fwd queue 1 fd 1 d) start 5. send a arp package to port 0 6. testpmd print port 0 queue 1 received a pachage > -----Original Message----- > From: Wu, Jingjing > Sent: Tuesday, June 16, 2015 11:44 AM > To: dev@dpdk.org > Cc: Wu, Jingjing; Zhang, Helin; Xu, HuilongX > Subject: [PATCH v2 0/4] extend flow director to support L2_paylod type > > This patch set extends flow director to support L2_paylod type in i40e > driver. > > v2 change: > - remove the flow director VF filtering from this patch to avoid breaking > ABI. > > Jingjing Wu (4): > ethdev: add struct rte_eth_l2_flow to support l2_payload flow type > i40e: extend flow diretcor to support l2_payload flow type > testpmd: extend commands > doc: extend commands in testpmd > > app/test-pmd/cmdline.c | 48 > +++++++++++++++++++++++++++-- > doc/guides/testpmd_app_ug/testpmd_funcs.rst | 5 ++- > drivers/net/i40e/i40e_fdir.c | 24 +++++++++++++-- > lib/librte_ether/rte_eth_ctrl.h | 8 +++++ > 4 files changed, 78 insertions(+), 7 deletions(-) > > -- > 1.9.3 ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [dpdk-dev] [PATCH v2 0/4] extend flow director to support L2_paylod type 2015-06-16 3:43 ` [dpdk-dev] [PATCH v2 0/4] extend flow director to support L2_paylod type Jingjing Wu ` (4 preceding siblings ...) 2015-06-26 2:26 ` [dpdk-dev] [PATCH v2 0/4] extend flow director to support L2_paylod type Xu, HuilongX @ 2015-06-26 3:14 ` Zhang, Helin 2015-07-07 21:24 ` Thomas Monjalon 5 siblings, 1 reply; 18+ messages in thread From: Zhang, Helin @ 2015-06-26 3:14 UTC (permalink / raw) To: Wu, Jingjing, dev > -----Original Message----- > From: Wu, Jingjing > Sent: Tuesday, June 16, 2015 11:44 AM > To: dev@dpdk.org > Cc: Wu, Jingjing; Zhang, Helin; Xu, HuilongX > Subject: [PATCH v2 0/4] extend flow director to support L2_paylod type > > This patch set extends flow director to support L2_paylod type in i40e driver. > > v2 change: > - remove the flow director VF filtering from this patch to avoid breaking ABI. > > Jingjing Wu (4): > ethdev: add struct rte_eth_l2_flow to support l2_payload flow type > i40e: extend flow diretcor to support l2_payload flow type > testpmd: extend commands > doc: extend commands in testpmd > > app/test-pmd/cmdline.c | 48 > +++++++++++++++++++++++++++-- > doc/guides/testpmd_app_ug/testpmd_funcs.rst | 5 ++- > drivers/net/i40e/i40e_fdir.c | 24 +++++++++++++-- > lib/librte_ether/rte_eth_ctrl.h | 8 +++++ > 4 files changed, 78 insertions(+), 7 deletions(-) Acked-by: Helin Zhang <helin.zhang@intel.com> > > -- > 1.9.3 ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [dpdk-dev] [PATCH v2 0/4] extend flow director to support L2_paylod type 2015-06-26 3:14 ` Zhang, Helin @ 2015-07-07 21:24 ` Thomas Monjalon 0 siblings, 0 replies; 18+ messages in thread From: Thomas Monjalon @ 2015-07-07 21:24 UTC (permalink / raw) To: Wu, Jingjing; +Cc: dev > > This patch set extends flow director to support L2_paylod type in i40e driver. > > > > v2 change: > > - remove the flow director VF filtering from this patch to avoid breaking ABI. > > > > Jingjing Wu (4): > > ethdev: add struct rte_eth_l2_flow to support l2_payload flow type > > i40e: extend flow diretcor to support l2_payload flow type > > testpmd: extend commands > > doc: extend commands in testpmd > > Acked-by: Helin Zhang <helin.zhang@intel.com> Applied, thanks ^ permalink raw reply [flat|nested] 18+ messages in thread
end of thread, other threads:[~2015-07-07 21:26 UTC | newest] Thread overview: 18+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2015-05-11 3:46 [dpdk-dev] [PATCH 0/6] extend flow director to support L2_paylod type and VF filtering in i40e driver Jingjing Wu 2015-05-11 3:46 ` [dpdk-dev] [PATCH 1/6] ethdev: add struct rte_eth_l2_flow to support l2_payload flow type Jingjing Wu 2015-05-11 3:46 ` [dpdk-dev] [PATCH 2/6] i40e: extend flow diretcor " Jingjing Wu 2015-05-11 3:46 ` [dpdk-dev] [PATCH 3/6] ethdev: extend struct to support flow director in VFs Jingjing Wu 2015-06-12 16:45 ` Thomas Monjalon 2015-06-15 7:14 ` Wu, Jingjing 2015-05-11 3:46 ` [dpdk-dev] [PATCH 4/6] i40e: extend flow diretcor to support filtering " Jingjing Wu 2015-05-11 3:46 ` [dpdk-dev] [PATCH 5/6] testpmd: extend commands Jingjing Wu 2015-05-11 3:46 ` [dpdk-dev] [PATCH 6/6] doc: extend commands in testpmd Jingjing Wu 2015-06-02 7:33 ` [dpdk-dev] [PATCH 0/6] extend flow director to support L2_paylod type and VF filtering in i40e driver Zhang, Helin 2015-06-16 3:43 ` [dpdk-dev] [PATCH v2 0/4] extend flow director to support L2_paylod type Jingjing Wu 2015-06-16 3:43 ` [dpdk-dev] [PATCH v2 1/4] ethdev: add struct rte_eth_l2_flow to support l2_payload flow type Jingjing Wu 2015-06-16 3:43 ` [dpdk-dev] [PATCH v2 2/4] i40e: extend flow diretcor " Jingjing Wu 2015-06-16 3:43 ` [dpdk-dev] [PATCH v2 3/4] testpmd: extend commands Jingjing Wu 2015-06-16 3:43 ` [dpdk-dev] [PATCH v2 4/4] doc: extend commands in testpmd Jingjing Wu 2015-06-26 2:26 ` [dpdk-dev] [PATCH v2 0/4] extend flow director to support L2_paylod type Xu, HuilongX 2015-06-26 3:14 ` Zhang, Helin 2015-07-07 21:24 ` Thomas Monjalon
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).