* [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 ` [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; 19+ 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] 19+ messages in thread
* [PATCH 1/6] ethdev: add struct rte_eth_l2_flow to support l2_payload flow type 2015-05-11 3:46 [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 ` [PATCH 2/6] i40e: extend flow diretcor " Jingjing Wu ` (6 subsequent siblings) 7 siblings, 0 replies; 19+ 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 related [flat|nested] 19+ messages in thread
* [PATCH 2/6] i40e: extend flow diretcor to support l2_payload flow type 2015-05-11 3:46 [PATCH 0/6] extend flow director to support L2_paylod type and VF filtering in i40e driver Jingjing Wu 2015-05-11 3:46 ` [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 ` [PATCH 3/6] ethdev: extend struct to support flow director in VFs Jingjing Wu ` (5 subsequent siblings) 7 siblings, 0 replies; 19+ 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 related [flat|nested] 19+ messages in thread
* [PATCH 3/6] ethdev: extend struct to support flow director in VFs 2015-05-11 3:46 [PATCH 0/6] extend flow director to support L2_paylod type and VF filtering in i40e driver Jingjing Wu 2015-05-11 3:46 ` [PATCH 1/6] ethdev: add struct rte_eth_l2_flow to support l2_payload flow type Jingjing Wu 2015-05-11 3:46 ` [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 ` [PATCH 4/6] i40e: extend flow diretcor to support filtering " Jingjing Wu ` (4 subsequent siblings) 7 siblings, 1 reply; 19+ 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 related [flat|nested] 19+ messages in thread
* Re: [PATCH 3/6] ethdev: extend struct to support flow director in VFs 2015-05-11 3:46 ` [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; 19+ 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] 19+ messages in thread
* Re: [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; 19+ 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] 19+ messages in thread
* [PATCH 4/6] i40e: extend flow diretcor to support filtering in VFs 2015-05-11 3:46 [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 ` [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 ` [PATCH 5/6] testpmd: extend commands Jingjing Wu ` (3 subsequent siblings) 7 siblings, 0 replies; 19+ 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 related [flat|nested] 19+ messages in thread
* [PATCH 5/6] testpmd: extend commands 2015-05-11 3:46 [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 ` [PATCH 4/6] i40e: extend flow diretcor to support filtering " Jingjing Wu @ 2015-05-11 3:46 ` Jingjing Wu 2015-05-11 3:46 ` [PATCH 6/6] doc: extend commands in testpmd Jingjing Wu ` (2 subsequent siblings) 7 siblings, 0 replies; 19+ 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 related [flat|nested] 19+ messages in thread
* [PATCH 6/6] doc: extend commands in testpmd 2015-05-11 3:46 [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 ` [PATCH 5/6] testpmd: extend commands Jingjing Wu @ 2015-05-11 3:46 ` Jingjing Wu 2015-06-02 7:33 ` [PATCH 0/6] extend flow director to support L2_paylod type and VF filtering in i40e driver Zhang, Helin 2015-06-16 3:43 ` [PATCH v2 0/4] extend flow director to support L2_paylod type Jingjing Wu 7 siblings, 0 replies; 19+ 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 related [flat|nested] 19+ messages in thread
* Re: [PATCH 0/6] extend flow director to support L2_paylod type and VF filtering in i40e driver 2015-05-11 3:46 [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 ` [PATCH 6/6] doc: extend commands in testpmd Jingjing Wu @ 2015-06-02 7:33 ` Zhang, Helin 2015-06-16 3:43 ` [PATCH v2 0/4] extend flow director to support L2_paylod type Jingjing Wu 7 siblings, 0 replies; 19+ 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] 19+ messages in thread
* [PATCH v2 0/4] extend flow director to support L2_paylod type 2015-05-11 3:46 [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 ` [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 ` [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; 19+ 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] 19+ messages in thread
* [PATCH v2 1/4] ethdev: add struct rte_eth_l2_flow to support l2_payload flow type 2015-06-16 3:43 ` [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 ` [PATCH v2 2/4] i40e: extend flow diretcor " Jingjing Wu ` (4 subsequent siblings) 5 siblings, 0 replies; 19+ 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 related [flat|nested] 19+ messages in thread
* [PATCH v2 2/4] i40e: extend flow diretcor to support l2_payload flow type 2015-06-16 3:43 ` [PATCH v2 0/4] extend flow director to support L2_paylod type Jingjing Wu 2015-06-16 3:43 ` [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 ` [PATCH v2 3/4] testpmd: extend commands Jingjing Wu ` (3 subsequent siblings) 5 siblings, 0 replies; 19+ 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 related [flat|nested] 19+ messages in thread
* [PATCH v2 3/4] testpmd: extend commands 2015-06-16 3:43 ` [PATCH v2 0/4] extend flow director to support L2_paylod type Jingjing Wu 2015-06-16 3:43 ` [PATCH v2 1/4] ethdev: add struct rte_eth_l2_flow to support l2_payload flow type Jingjing Wu 2015-06-16 3:43 ` [PATCH v2 2/4] i40e: extend flow diretcor " Jingjing Wu @ 2015-06-16 3:43 ` Jingjing Wu 2015-06-16 3:43 ` [PATCH v2 4/4] doc: extend commands in testpmd Jingjing Wu ` (2 subsequent siblings) 5 siblings, 0 replies; 19+ 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 related [flat|nested] 19+ messages in thread
* [PATCH v2 4/4] doc: extend commands in testpmd 2015-06-16 3:43 ` [PATCH v2 0/4] extend flow director to support L2_paylod type Jingjing Wu ` (2 preceding siblings ...) 2015-06-16 3:43 ` [PATCH v2 3/4] testpmd: extend commands Jingjing Wu @ 2015-06-16 3:43 ` Jingjing Wu 2015-06-26 2:26 ` [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; 19+ 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 related [flat|nested] 19+ messages in thread
* Re: [PATCH v2 0/4] extend flow director to support L2_paylod type 2015-06-16 3:43 ` [PATCH v2 0/4] extend flow director to support L2_paylod type Jingjing Wu ` (3 preceding siblings ...) 2015-06-16 3:43 ` [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; 19+ 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] 19+ messages in thread
* Re: [PATCH v2 0/4] extend flow director to support L2_paylod type 2015-06-16 3:43 ` [PATCH v2 0/4] extend flow director to support L2_paylod type Jingjing Wu ` (4 preceding siblings ...) 2015-06-26 2:26 ` [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; 19+ 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] 19+ messages in thread
* Re: [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; 19+ 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] 19+ messages in thread
* [PATCH 0/4] extend flow director to support VF filtering in i40e driver @ 2015-09-22 3:45 Jingjing Wu 2015-10-28 8:41 ` [PATCH v2 " Jingjing Wu 0 siblings, 1 reply; 19+ messages in thread From: Jingjing Wu @ 2015-09-22 3:45 UTC (permalink / raw) To: dev This patch set extends flow director to VF filtering in i40e driver. Jingjing Wu (4): 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 and remove related ABI deprecation app/test-pmd/cmdline.c | 41 ++++++++++++++++++++++++++--- doc/guides/rel_notes/deprecation.rst | 4 --- doc/guides/testpmd_app_ug/testpmd_funcs.rst | 12 ++++----- drivers/net/i40e/i40e_ethdev.c | 4 +-- drivers/net/i40e/i40e_fdir.c | 15 ++++++++--- lib/librte_ether/rte_eth_ctrl.h | 2 ++ 6 files changed, 59 insertions(+), 19 deletions(-) -- 2.4.0 ^ permalink raw reply [flat|nested] 19+ messages in thread
* [PATCH v2 0/4] extend flow director to support VF filtering in i40e driver 2015-09-22 3:45 [PATCH 0/4] extend flow director to support VF filtering in i40e driver Jingjing Wu @ 2015-10-28 8:41 ` Jingjing Wu 2015-10-28 8:41 ` [PATCH v2 3/4] testpmd: extend commands Jingjing Wu 0 siblings, 1 reply; 19+ messages in thread From: Jingjing Wu @ 2015-10-28 8:41 UTC (permalink / raw) To: dev; +Cc: yulong.pei This patch set extends flow director to VF filtering in i40e driver. v2 change: - rework the doc, including release notes and testpmd guide Jingjing Wu (4): 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 and remove related ABI deprecation app/test-pmd/cmdline.c | 41 ++++++++++++++++++++++++++--- doc/guides/rel_notes/deprecation.rst | 4 --- doc/guides/rel_notes/release_2_2.rst | 2 ++ doc/guides/testpmd_app_ug/testpmd_funcs.rst | 15 ++++++----- drivers/net/i40e/i40e_ethdev.c | 4 +-- drivers/net/i40e/i40e_fdir.c | 15 ++++++++--- lib/librte_ether/rte_eth_ctrl.h | 2 ++ 7 files changed, 64 insertions(+), 19 deletions(-) -- 2.4.0 ^ permalink raw reply [flat|nested] 19+ messages in thread
* [PATCH v2 3/4] testpmd: extend commands 2015-10-28 8:41 ` [PATCH v2 " Jingjing Wu @ 2015-10-28 8:41 ` Jingjing Wu 0 siblings, 0 replies; 19+ messages in thread From: Jingjing Wu @ 2015-10-28 8:41 UTC (permalink / raw) To: dev; +Cc: yulong.pei This patch extends commands to support filtering in VFs of flow director. Signed-off-by: Jingjing Wu <jingjing.wu@intel.com> --- app/test-pmd/cmdline.c | 41 +++++++++++++++++++++++++++++++++++++---- 1 file changed, 37 insertions(+), 4 deletions(-) diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c index 0f8f48f..22476f5 100644 --- a/app/test-pmd/cmdline.c +++ b/app/test-pmd/cmdline.c @@ -631,7 +631,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)" @@ -639,7 +640,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)" @@ -648,13 +650,13 @@ 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)" - " 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 l2 payload type flow director filter.\n\n" "flush_flow_director (port_id)\n" @@ -7742,6 +7744,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; @@ -7848,6 +7851,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); @@ -7941,6 +7946,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; @@ -8020,6 +8046,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"); @@ -8052,6 +8081,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, @@ -8081,6 +8111,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, @@ -8112,6 +8143,7 @@ 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, @@ -8135,6 +8167,7 @@ cmdline_parse_inst_t cmd_add_del_l2_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, -- 2.4.0 ^ permalink raw reply related [flat|nested] 19+ messages in thread
end of thread, other threads:[~2015-10-28 8:41 UTC | newest] Thread overview: 19+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2015-05-11 3:46 [PATCH 0/6] extend flow director to support L2_paylod type and VF filtering in i40e driver Jingjing Wu 2015-05-11 3:46 ` [PATCH 1/6] ethdev: add struct rte_eth_l2_flow to support l2_payload flow type Jingjing Wu 2015-05-11 3:46 ` [PATCH 2/6] i40e: extend flow diretcor " Jingjing Wu 2015-05-11 3:46 ` [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 ` [PATCH 4/6] i40e: extend flow diretcor to support filtering " Jingjing Wu 2015-05-11 3:46 ` [PATCH 5/6] testpmd: extend commands Jingjing Wu 2015-05-11 3:46 ` [PATCH 6/6] doc: extend commands in testpmd Jingjing Wu 2015-06-02 7:33 ` [PATCH 0/6] extend flow director to support L2_paylod type and VF filtering in i40e driver Zhang, Helin 2015-06-16 3:43 ` [PATCH v2 0/4] extend flow director to support L2_paylod type Jingjing Wu 2015-06-16 3:43 ` [PATCH v2 1/4] ethdev: add struct rte_eth_l2_flow to support l2_payload flow type Jingjing Wu 2015-06-16 3:43 ` [PATCH v2 2/4] i40e: extend flow diretcor " Jingjing Wu 2015-06-16 3:43 ` [PATCH v2 3/4] testpmd: extend commands Jingjing Wu 2015-06-16 3:43 ` [PATCH v2 4/4] doc: extend commands in testpmd Jingjing Wu 2015-06-26 2:26 ` [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 2015-09-22 3:45 [PATCH 0/4] extend flow director to support VF filtering in i40e driver Jingjing Wu 2015-10-28 8:41 ` [PATCH v2 " Jingjing Wu 2015-10-28 8:41 ` [PATCH v2 3/4] testpmd: extend commands Jingjing Wu
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.