* [dpdk-dev] [PATCH] net/i40e: fix i40e flow director merge @ 2020-01-21 16:02 Bernard Iremonger 2020-01-21 16:28 ` Iremonger, Bernard 2020-01-22 15:20 ` [dpdk-dev] [PATCH v2] " Bernard Iremonger 0 siblings, 2 replies; 8+ messages in thread From: Bernard Iremonger @ 2020-01-21 16:02 UTC (permalink / raw) To: dev, beilei.xing, qi.z.zhang, ferruh.yigit, rory.sexton; +Cc: Bernard Iremonger Merge of i40e_fdir.c added checks on cus_pctype->index which are not necessary and caused flow creation for ESP to fail. Removed the added lines to fix the issue. Fixes: c5f8365bc85d ("net/i40e: support flow director for L2TPv3 over IP") Signed-off-by: Bernard Iremonger <bernard.iremonger@intel.com> --- drivers/net/i40e/i40e_fdir.c | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/drivers/net/i40e/i40e_fdir.c b/drivers/net/i40e/i40e_fdir.c index c346073..1d7c392 100644 --- a/drivers/net/i40e/i40e_fdir.c +++ b/drivers/net/i40e/i40e_fdir.c @@ -1063,12 +1063,7 @@ i40e_flow_fdir_fill_eth_ip_head(struct i40e_pf *pf, pctype == I40E_FILTER_PCTYPE_NONF_IPV4_SCTP || pctype == I40E_FILTER_PCTYPE_NONF_IPV4_OTHER || pctype == I40E_FILTER_PCTYPE_FRAG_IPV4 || - ((is_customized_pctype) && - ((cus_pctype->index == I40E_CUSTOMIZED_GTPC) || - (cus_pctype->index == I40E_CUSTOMIZED_GTPU_IPV4) || - (cus_pctype->index == I40E_CUSTOMIZED_GTPU_IPV6) || - (cus_pctype->index == I40E_CUSTOMIZED_GTPU) || - (cus_pctype->index == I40E_CUSTOMIZED_IPV4_L2TPV3)))) { + is_customized_pctype) { ip = (struct rte_ipv4_hdr *)raw_pkt; *ether_type = rte_cpu_to_be_16(RTE_ETHER_TYPE_IPV4); -- 2.7.4 ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [dpdk-dev] [PATCH] net/i40e: fix i40e flow director merge 2020-01-21 16:02 [dpdk-dev] [PATCH] net/i40e: fix i40e flow director merge Bernard Iremonger @ 2020-01-21 16:28 ` Iremonger, Bernard 2020-01-21 16:42 ` Sexton, Rory 2020-01-22 15:20 ` [dpdk-dev] [PATCH v2] " Bernard Iremonger 1 sibling, 1 reply; 8+ messages in thread From: Iremonger, Bernard @ 2020-01-21 16:28 UTC (permalink / raw) To: dev, Xing, Beilei, Zhang, Qi Z, Yigit, Ferruh, Sexton, Rory > -----Original Message----- > From: Iremonger, Bernard <bernard.iremonger@intel.com> > Sent: Tuesday, January 21, 2020 4:02 PM > To: dev@dpdk.org; Xing, Beilei <beilei.xing@intel.com>; Zhang, Qi Z > <qi.z.zhang@intel.com>; Yigit, Ferruh <ferruh.yigit@intel.com>; Sexton, Rory > <rory.sexton@intel.com> > Cc: Iremonger, Bernard <bernard.iremonger@intel.com> > Subject: [PATCH] net/i40e: fix i40e flow director merge > > Merge of i40e_fdir.c added checks on cus_pctype->index which are not > necessary and caused flow creation for ESP to fail. > Removed the added lines to fix the issue. > > Fixes: c5f8365bc85d ("net/i40e: support flow director for L2TPv3 over IP") > > Signed-off-by: Bernard Iremonger <bernard.iremonger@intel.com> > --- > drivers/net/i40e/i40e_fdir.c | 7 +------ > 1 file changed, 1 insertion(+), 6 deletions(-) > > diff --git a/drivers/net/i40e/i40e_fdir.c b/drivers/net/i40e/i40e_fdir.c index > c346073..1d7c392 100644 > --- a/drivers/net/i40e/i40e_fdir.c > +++ b/drivers/net/i40e/i40e_fdir.c > @@ -1063,12 +1063,7 @@ i40e_flow_fdir_fill_eth_ip_head(struct i40e_pf > *pf, > pctype == I40E_FILTER_PCTYPE_NONF_IPV4_SCTP || > pctype == I40E_FILTER_PCTYPE_NONF_IPV4_OTHER || > pctype == I40E_FILTER_PCTYPE_FRAG_IPV4 || > - ((is_customized_pctype) && > - ((cus_pctype->index == I40E_CUSTOMIZED_GTPC) || > - (cus_pctype->index == I40E_CUSTOMIZED_GTPU_IPV4) || > - (cus_pctype->index == I40E_CUSTOMIZED_GTPU_IPV6) || > - (cus_pctype->index == I40E_CUSTOMIZED_GTPU) || > - (cus_pctype->index == > I40E_CUSTOMIZED_IPV4_L2TPV3)))) { > + is_customized_pctype) { > ip = (struct rte_ipv4_hdr *)raw_pkt; > > *ether_type = rte_cpu_to_be_16(RTE_ETHER_TYPE_IPV4); > -- > 2.7.4 NAK, causes problems for L2TPV3 ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [dpdk-dev] [PATCH] net/i40e: fix i40e flow director merge 2020-01-21 16:28 ` Iremonger, Bernard @ 2020-01-21 16:42 ` Sexton, Rory 0 siblings, 0 replies; 8+ messages in thread From: Sexton, Rory @ 2020-01-21 16:42 UTC (permalink / raw) To: Iremonger, Bernard, dev, Xing, Beilei, Zhang, Qi Z, Yigit, Ferruh Nack - if statement should look like this: else if (pctype == I40E_FILTER_PCTYPE_NONF_IPV4_TCP || pctype == I40E_FILTER_PCTYPE_NONF_IPV4_UDP || pctype == I40E_FILTER_PCTYPE_NONF_IPV4_SCTP || pctype == I40E_FILTER_PCTYPE_NONF_IPV4_OTHER || pctype == I40E_FILTER_PCTYPE_FRAG_IPV4 || ((is_customized_pctype) && ((cus_pctype->index == I40E_CUSTOMIZED_GTPC) || (cus_pctype->index == I40E_CUSTOMIZED_GTPU_IPV4) || (cus_pctype->index == I40E_CUSTOMIZED_GTPU_IPV6) || (cus_pctype->index == I40E_CUSTOMIZED_GTPU) || (cus_pctype->index == I40E_CUSTOMIZED_ESP_IPV4) || (cus_pctype->index == I40E_CUSTOMIZED_ESP_IPV4_UDP) || (cus_pctype->index == I40E_CUSTOMIZED_IPV4_L2TPV3)))) { -----Original Message----- From: Iremonger, Bernard <bernard.iremonger@intel.com> Sent: Tuesday, January 21, 2020 4:29 PM To: dev@dpdk.org; Xing, Beilei <beilei.xing@intel.com>; Zhang, Qi Z <qi.z.zhang@intel.com>; Yigit, Ferruh <ferruh.yigit@intel.com>; Sexton, Rory <rory.sexton@intel.com> Subject: RE: [PATCH] net/i40e: fix i40e flow director merge > -----Original Message----- > From: Iremonger, Bernard <bernard.iremonger@intel.com> > Sent: Tuesday, January 21, 2020 4:02 PM > To: dev@dpdk.org; Xing, Beilei <beilei.xing@intel.com>; Zhang, Qi Z > <qi.z.zhang@intel.com>; Yigit, Ferruh <ferruh.yigit@intel.com>; > Sexton, Rory <rory.sexton@intel.com> > Cc: Iremonger, Bernard <bernard.iremonger@intel.com> > Subject: [PATCH] net/i40e: fix i40e flow director merge > > Merge of i40e_fdir.c added checks on cus_pctype->index which are not > necessary and caused flow creation for ESP to fail. > Removed the added lines to fix the issue. > > Fixes: c5f8365bc85d ("net/i40e: support flow director for L2TPv3 over > IP") > > Signed-off-by: Bernard Iremonger <bernard.iremonger@intel.com> > --- > drivers/net/i40e/i40e_fdir.c | 7 +------ > 1 file changed, 1 insertion(+), 6 deletions(-) > > diff --git a/drivers/net/i40e/i40e_fdir.c > b/drivers/net/i40e/i40e_fdir.c index > c346073..1d7c392 100644 > --- a/drivers/net/i40e/i40e_fdir.c > +++ b/drivers/net/i40e/i40e_fdir.c > @@ -1063,12 +1063,7 @@ i40e_flow_fdir_fill_eth_ip_head(struct i40e_pf > *pf, > pctype == I40E_FILTER_PCTYPE_NONF_IPV4_SCTP || > pctype == I40E_FILTER_PCTYPE_NONF_IPV4_OTHER || > pctype == I40E_FILTER_PCTYPE_FRAG_IPV4 || > - ((is_customized_pctype) && > - ((cus_pctype->index == I40E_CUSTOMIZED_GTPC) || > - (cus_pctype->index == I40E_CUSTOMIZED_GTPU_IPV4) || > - (cus_pctype->index == I40E_CUSTOMIZED_GTPU_IPV6) || > - (cus_pctype->index == I40E_CUSTOMIZED_GTPU) || > - (cus_pctype->index == > I40E_CUSTOMIZED_IPV4_L2TPV3)))) { > + is_customized_pctype) { > ip = (struct rte_ipv4_hdr *)raw_pkt; > > *ether_type = rte_cpu_to_be_16(RTE_ETHER_TYPE_IPV4); > -- > 2.7.4 NAK, causes problems for L2TPV3 ^ permalink raw reply [flat|nested] 8+ messages in thread
* [dpdk-dev] [PATCH v2] net/i40e: fix i40e flow director merge 2020-01-21 16:02 [dpdk-dev] [PATCH] net/i40e: fix i40e flow director merge Bernard Iremonger 2020-01-21 16:28 ` Iremonger, Bernard @ 2020-01-22 15:20 ` Bernard Iremonger 2020-01-22 15:48 ` Sexton, Rory 2020-01-28 13:48 ` [dpdk-dev] [PATCH v3] " Bernard Iremonger 1 sibling, 2 replies; 8+ messages in thread From: Bernard Iremonger @ 2020-01-22 15:20 UTC (permalink / raw) To: dev, beilei.xing, qi.z.zhang, ferruh.yigit, rory.sexton, declan.doherty Cc: Bernard Iremonger Merge of ESP and L2TP code in i40e_fdir.c added checks on cus_pctype->index which caused flow creation for ESP to fail. Added fill_ipv4_function() Refactored code to have one path for customized and non customized pctype's. Fixes: c5f8365bc85d ("net/i40e: support flow director for L2TPv3 over IP") Signed-off-by: Bernard Iremonger <bernard.iremonger@intel.com> --- drivers/net/i40e/i40e_fdir.c | 139 ++++++++++++++++++++----------------------- 1 file changed, 64 insertions(+), 75 deletions(-) diff --git a/drivers/net/i40e/i40e_fdir.c b/drivers/net/i40e/i40e_fdir.c index c346073..b7a207d 100644 --- a/drivers/net/i40e/i40e_fdir.c +++ b/drivers/net/i40e/i40e_fdir.c @@ -1008,6 +1008,36 @@ fill_ip6_head(const struct i40e_fdir_input *fdir_input, unsigned char *raw_pkt, } static inline int +fill_ip4_head(const struct i40e_fdir_input *fdir_input, unsigned char *raw_pkt, + uint8_t next_proto, uint8_t len, uint16_t *ether_type) +{ + struct rte_ipv4_hdr *ip4; + + ip4 = (struct rte_ipv4_hdr *)raw_pkt; + + *ether_type = rte_cpu_to_be_16(RTE_ETHER_TYPE_IPV4); + ip4->version_ihl = I40E_FDIR_IP_DEFAULT_VERSION_IHL; + /* set len to by default */ + ip4->total_length = rte_cpu_to_be_16(I40E_FDIR_IP_DEFAULT_LEN); + ip4->time_to_live = fdir_input->flow.ip4_flow.ttl ? + fdir_input->flow.ip4_flow.ttl : + I40E_FDIR_IP_DEFAULT_TTL; + ip4->type_of_service = fdir_input->flow.ip4_flow.tos; + ip4->next_proto_id = fdir_input->flow.ip4_flow.proto ? + fdir_input->flow.ip4_flow.proto : next_proto; + /** + * The source and destination fields in the transmitted packet + * need to be presented in a reversed order with respect + * to the expected received packets. + */ + ip4->src_addr = fdir_input->flow.ip4_flow.dst_ip; + ip4->dst_addr = fdir_input->flow.ip4_flow.src_ip; + len += sizeof(struct rte_ipv4_hdr); + + return len; +} + +static inline int i40e_flow_fdir_fill_eth_ip_head(struct i40e_pf *pf, const struct i40e_fdir_input *fdir_input, unsigned char *raw_pkt, @@ -1017,8 +1047,6 @@ i40e_flow_fdir_fill_eth_ip_head(struct i40e_pf *pf, static uint8_t vlan_frame[] = {0x81, 0, 0, 0}; uint16_t *ether_type; uint8_t len = 2 * sizeof(struct rte_ether_addr); - struct rte_ipv4_hdr *ip; - struct rte_ipv6_hdr *ip6; uint8_t pctype = fdir_input->pctype; bool is_customized_pctype = fdir_input->flow_ext.customized_pctype; static const uint8_t next_proto[] = { @@ -1063,93 +1091,54 @@ i40e_flow_fdir_fill_eth_ip_head(struct i40e_pf *pf, pctype == I40E_FILTER_PCTYPE_NONF_IPV4_SCTP || pctype == I40E_FILTER_PCTYPE_NONF_IPV4_OTHER || pctype == I40E_FILTER_PCTYPE_FRAG_IPV4 || - ((is_customized_pctype) && - ((cus_pctype->index == I40E_CUSTOMIZED_GTPC) || - (cus_pctype->index == I40E_CUSTOMIZED_GTPU_IPV4) || - (cus_pctype->index == I40E_CUSTOMIZED_GTPU_IPV6) || - (cus_pctype->index == I40E_CUSTOMIZED_GTPU) || - (cus_pctype->index == I40E_CUSTOMIZED_IPV4_L2TPV3)))) { - ip = (struct rte_ipv4_hdr *)raw_pkt; - - *ether_type = rte_cpu_to_be_16(RTE_ETHER_TYPE_IPV4); - ip->version_ihl = I40E_FDIR_IP_DEFAULT_VERSION_IHL; - /* set len to by default */ - ip->total_length = rte_cpu_to_be_16(I40E_FDIR_IP_DEFAULT_LEN); - ip->time_to_live = fdir_input->flow.ip4_flow.ttl ? - fdir_input->flow.ip4_flow.ttl : - I40E_FDIR_IP_DEFAULT_TTL; - ip->type_of_service = fdir_input->flow.ip4_flow.tos; - /** - * The source and destination fields in the transmitted packet - * need to be presented in a reversed order with respect - * to the expected received packets. - */ - ip->src_addr = fdir_input->flow.ip4_flow.dst_ip; - ip->dst_addr = fdir_input->flow.ip4_flow.src_ip; - - if (!is_customized_pctype) { - ip->next_proto_id = fdir_input->flow.ip4_flow.proto ? - fdir_input->flow.ip4_flow.proto : - next_proto[fdir_input->pctype]; - len += sizeof(struct rte_ipv4_hdr); + pctype == I40E_FILTER_PCTYPE_NONF_IPV6_TCP || + pctype == I40E_FILTER_PCTYPE_NONF_IPV6_UDP || + pctype == I40E_FILTER_PCTYPE_NONF_IPV6_SCTP || + pctype == I40E_FILTER_PCTYPE_NONF_IPV6_OTHER || + pctype == I40E_FILTER_PCTYPE_FRAG_IPV6 || + is_customized_pctype) { + if (pctype == I40E_FILTER_PCTYPE_NONF_IPV4_TCP || + pctype == I40E_FILTER_PCTYPE_NONF_IPV4_UDP || + pctype == I40E_FILTER_PCTYPE_NONF_IPV4_SCTP || + pctype == I40E_FILTER_PCTYPE_NONF_IPV4_OTHER || + pctype == I40E_FILTER_PCTYPE_FRAG_IPV4) { + len = fill_ip4_head(fdir_input, raw_pkt, + next_proto[pctype], len, ether_type); } else if (cus_pctype->index == I40E_CUSTOMIZED_GTPC || cus_pctype->index == I40E_CUSTOMIZED_GTPU_IPV4 || cus_pctype->index == I40E_CUSTOMIZED_GTPU_IPV6 || cus_pctype->index == I40E_CUSTOMIZED_GTPU) { - ip->next_proto_id = IPPROTO_UDP; - len += sizeof(struct rte_ipv4_hdr); + len = fill_ip4_head(fdir_input, raw_pkt, IPPROTO_UDP, + len, ether_type); } else if (cus_pctype->index == I40E_CUSTOMIZED_IPV4_L2TPV3) { - ip->next_proto_id = IPPROTO_L2TP; - len += sizeof(struct rte_ipv4_hdr); + len = fill_ip4_head(fdir_input, raw_pkt, IPPROTO_L2TP, + len, ether_type); } else if (cus_pctype->index == I40E_CUSTOMIZED_ESP_IPV4) { - ip->next_proto_id = IPPROTO_ESP; - len += sizeof(struct rte_ipv4_hdr); + len = fill_ip4_head(fdir_input, raw_pkt, IPPROTO_ESP, + len, ether_type); + } else if (cus_pctype->index == I40E_CUSTOMIZED_ESP_IPV4_UDP) { + len = fill_ip4_head(fdir_input, raw_pkt, IPPROTO_UDP, + len, ether_type); } else if (cus_pctype->index == I40E_CUSTOMIZED_ESP_IPV4_UDP) { - ip->next_proto_id = IPPROTO_UDP; - len += sizeof(struct rte_ipv4_hdr); + len = fill_ip4_head(fdir_input, raw_pkt, IPPROTO_UDP, + len, ether_type); + } else if (pctype == I40E_FILTER_PCTYPE_NONF_IPV6_TCP || + pctype == I40E_FILTER_PCTYPE_NONF_IPV6_UDP || + pctype == I40E_FILTER_PCTYPE_NONF_IPV6_SCTP || + pctype == I40E_FILTER_PCTYPE_NONF_IPV6_OTHER || + pctype == I40E_FILTER_PCTYPE_FRAG_IPV6) { + len = fill_ip6_head(fdir_input, raw_pkt, + next_proto[pctype], len, + ether_type); } else if (cus_pctype->index == I40E_CUSTOMIZED_ESP_IPV6) len = fill_ip6_head(fdir_input, raw_pkt, IPPROTO_ESP, len, ether_type); else if (cus_pctype->index == I40E_CUSTOMIZED_ESP_IPV6_UDP) len = fill_ip6_head(fdir_input, raw_pkt, IPPROTO_UDP, len, ether_type); - } else if (pctype == I40E_FILTER_PCTYPE_NONF_IPV6_TCP || - pctype == I40E_FILTER_PCTYPE_NONF_IPV6_UDP || - pctype == I40E_FILTER_PCTYPE_NONF_IPV6_SCTP || - pctype == I40E_FILTER_PCTYPE_NONF_IPV6_OTHER || - pctype == I40E_FILTER_PCTYPE_FRAG_IPV6 || - ((is_customized_pctype) && - (cus_pctype->index == I40E_CUSTOMIZED_IPV6_L2TPV3))) { - ip6 = (struct rte_ipv6_hdr *)raw_pkt; - - *ether_type = rte_cpu_to_be_16(RTE_ETHER_TYPE_IPV6); - ip6->vtc_flow = - rte_cpu_to_be_32(I40E_FDIR_IPv6_DEFAULT_VTC_FLOW | - (fdir_input->flow.ipv6_flow.tc << - I40E_FDIR_IPv6_TC_OFFSET)); - ip6->payload_len = - rte_cpu_to_be_16(I40E_FDIR_IPv6_PAYLOAD_LEN); - if (!is_customized_pctype) - ip6->proto = fdir_input->flow.ipv6_flow.proto ? - fdir_input->flow.ipv6_flow.proto : - next_proto[fdir_input->pctype]; else if (cus_pctype->index == I40E_CUSTOMIZED_IPV6_L2TPV3) - ip6->proto = IPPROTO_L2TP; - ip6->hop_limits = fdir_input->flow.ipv6_flow.hop_limits ? - fdir_input->flow.ipv6_flow.hop_limits : - I40E_FDIR_IPv6_DEFAULT_HOP_LIMITS; - /** - * The source and destination fields in the transmitted packet - * need to be presented in a reversed order with respect - * to the expected received packets. - */ - rte_memcpy(&ip6->src_addr, - &fdir_input->flow.ipv6_flow.dst_ip, - IPV6_ADDR_LEN); - rte_memcpy(&ip6->dst_addr, - &fdir_input->flow.ipv6_flow.src_ip, - IPV6_ADDR_LEN); - len += sizeof(struct rte_ipv6_hdr); + len = fill_ip6_head(fdir_input, raw_pkt, IPPROTO_L2TP, + len, ether_type); } else { PMD_DRV_LOG(ERR, "unknown pctype %u.", fdir_input->pctype); return -1; -- 2.7.4 ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [dpdk-dev] [PATCH v2] net/i40e: fix i40e flow director merge 2020-01-22 15:20 ` [dpdk-dev] [PATCH v2] " Bernard Iremonger @ 2020-01-22 15:48 ` Sexton, Rory 2020-01-28 13:48 ` [dpdk-dev] [PATCH v3] " Bernard Iremonger 1 sibling, 0 replies; 8+ messages in thread From: Sexton, Rory @ 2020-01-22 15:48 UTC (permalink / raw) To: Iremonger, Bernard, dev, Xing, Beilei, Zhang, Qi Z, Yigit, Ferruh, Doherty, Declan Acked-by: Rory Sexton <rory.sexton@intel.com> ^ permalink raw reply [flat|nested] 8+ messages in thread
* [dpdk-dev] [PATCH v3] net/i40e: fix i40e flow director merge 2020-01-22 15:20 ` [dpdk-dev] [PATCH v2] " Bernard Iremonger 2020-01-22 15:48 ` Sexton, Rory @ 2020-01-28 13:48 ` Bernard Iremonger 2020-01-29 10:10 ` Sexton, Rory 1 sibling, 1 reply; 8+ messages in thread From: Bernard Iremonger @ 2020-01-28 13:48 UTC (permalink / raw) To: dev, beilei.xing, qi.z.zhang, ferruh.yigit, rory.sexton, declan.doherty Cc: Bernard Iremonger Merge of ESP and L2TP code in i40e_fdir.c added checks on cus_pctype->index which caused flow creation for ESP to fail. Added fill_ipv4_function() Refactored code to have one path for customized and non customized pctype's. Fixes: c5f8365bc85d ("net/i40e: support flow director for L2TPv3 over IP") Signed-off-by: Bernard Iremonger <bernard.iremonger@intel.com> --- drivers/net/i40e/i40e_fdir.c | 139 ++++++++++++++++++++----------------------- 1 file changed, 64 insertions(+), 75 deletions(-) diff --git a/drivers/net/i40e/i40e_fdir.c b/drivers/net/i40e/i40e_fdir.c index c346073..931f259 100644 --- a/drivers/net/i40e/i40e_fdir.c +++ b/drivers/net/i40e/i40e_fdir.c @@ -1008,6 +1008,36 @@ fill_ip6_head(const struct i40e_fdir_input *fdir_input, unsigned char *raw_pkt, } static inline int +fill_ip4_head(const struct i40e_fdir_input *fdir_input, unsigned char *raw_pkt, + uint8_t next_proto, uint8_t len, uint16_t *ether_type) +{ + struct rte_ipv4_hdr *ip4; + + ip4 = (struct rte_ipv4_hdr *)raw_pkt; + + *ether_type = rte_cpu_to_be_16(RTE_ETHER_TYPE_IPV4); + ip4->version_ihl = I40E_FDIR_IP_DEFAULT_VERSION_IHL; + /* set len to by default */ + ip4->total_length = rte_cpu_to_be_16(I40E_FDIR_IP_DEFAULT_LEN); + ip4->time_to_live = fdir_input->flow.ip4_flow.ttl ? + fdir_input->flow.ip4_flow.ttl : + I40E_FDIR_IP_DEFAULT_TTL; + ip4->type_of_service = fdir_input->flow.ip4_flow.tos; + ip4->next_proto_id = fdir_input->flow.ip4_flow.proto ? + fdir_input->flow.ip4_flow.proto : next_proto; + /** + * The source and destination fields in the transmitted packet + * need to be presented in a reversed order with respect + * to the expected received packets. + */ + ip4->src_addr = fdir_input->flow.ip4_flow.dst_ip; + ip4->dst_addr = fdir_input->flow.ip4_flow.src_ip; + len += sizeof(struct rte_ipv4_hdr); + + return len; +} + +static inline int i40e_flow_fdir_fill_eth_ip_head(struct i40e_pf *pf, const struct i40e_fdir_input *fdir_input, unsigned char *raw_pkt, @@ -1017,8 +1047,6 @@ i40e_flow_fdir_fill_eth_ip_head(struct i40e_pf *pf, static uint8_t vlan_frame[] = {0x81, 0, 0, 0}; uint16_t *ether_type; uint8_t len = 2 * sizeof(struct rte_ether_addr); - struct rte_ipv4_hdr *ip; - struct rte_ipv6_hdr *ip6; uint8_t pctype = fdir_input->pctype; bool is_customized_pctype = fdir_input->flow_ext.customized_pctype; static const uint8_t next_proto[] = { @@ -1063,93 +1091,54 @@ i40e_flow_fdir_fill_eth_ip_head(struct i40e_pf *pf, pctype == I40E_FILTER_PCTYPE_NONF_IPV4_SCTP || pctype == I40E_FILTER_PCTYPE_NONF_IPV4_OTHER || pctype == I40E_FILTER_PCTYPE_FRAG_IPV4 || - ((is_customized_pctype) && - ((cus_pctype->index == I40E_CUSTOMIZED_GTPC) || - (cus_pctype->index == I40E_CUSTOMIZED_GTPU_IPV4) || - (cus_pctype->index == I40E_CUSTOMIZED_GTPU_IPV6) || - (cus_pctype->index == I40E_CUSTOMIZED_GTPU) || - (cus_pctype->index == I40E_CUSTOMIZED_IPV4_L2TPV3)))) { - ip = (struct rte_ipv4_hdr *)raw_pkt; - - *ether_type = rte_cpu_to_be_16(RTE_ETHER_TYPE_IPV4); - ip->version_ihl = I40E_FDIR_IP_DEFAULT_VERSION_IHL; - /* set len to by default */ - ip->total_length = rte_cpu_to_be_16(I40E_FDIR_IP_DEFAULT_LEN); - ip->time_to_live = fdir_input->flow.ip4_flow.ttl ? - fdir_input->flow.ip4_flow.ttl : - I40E_FDIR_IP_DEFAULT_TTL; - ip->type_of_service = fdir_input->flow.ip4_flow.tos; - /** - * The source and destination fields in the transmitted packet - * need to be presented in a reversed order with respect - * to the expected received packets. - */ - ip->src_addr = fdir_input->flow.ip4_flow.dst_ip; - ip->dst_addr = fdir_input->flow.ip4_flow.src_ip; - - if (!is_customized_pctype) { - ip->next_proto_id = fdir_input->flow.ip4_flow.proto ? - fdir_input->flow.ip4_flow.proto : - next_proto[fdir_input->pctype]; - len += sizeof(struct rte_ipv4_hdr); + pctype == I40E_FILTER_PCTYPE_NONF_IPV6_TCP || + pctype == I40E_FILTER_PCTYPE_NONF_IPV6_UDP || + pctype == I40E_FILTER_PCTYPE_NONF_IPV6_SCTP || + pctype == I40E_FILTER_PCTYPE_NONF_IPV6_OTHER || + pctype == I40E_FILTER_PCTYPE_FRAG_IPV6 || + is_customized_pctype) { + if (pctype == I40E_FILTER_PCTYPE_NONF_IPV4_TCP || + pctype == I40E_FILTER_PCTYPE_NONF_IPV4_UDP || + pctype == I40E_FILTER_PCTYPE_NONF_IPV4_SCTP || + pctype == I40E_FILTER_PCTYPE_NONF_IPV4_OTHER || + pctype == I40E_FILTER_PCTYPE_FRAG_IPV4) { + len = fill_ip4_head(fdir_input, raw_pkt, + next_proto[pctype], len, ether_type); + } else if (pctype == I40E_FILTER_PCTYPE_NONF_IPV6_TCP || + pctype == I40E_FILTER_PCTYPE_NONF_IPV6_UDP || + pctype == I40E_FILTER_PCTYPE_NONF_IPV6_SCTP || + pctype == I40E_FILTER_PCTYPE_NONF_IPV6_OTHER || + pctype == I40E_FILTER_PCTYPE_FRAG_IPV6) { + len = fill_ip6_head(fdir_input, raw_pkt, + next_proto[pctype], len, + ether_type); } else if (cus_pctype->index == I40E_CUSTOMIZED_GTPC || cus_pctype->index == I40E_CUSTOMIZED_GTPU_IPV4 || cus_pctype->index == I40E_CUSTOMIZED_GTPU_IPV6 || cus_pctype->index == I40E_CUSTOMIZED_GTPU) { - ip->next_proto_id = IPPROTO_UDP; - len += sizeof(struct rte_ipv4_hdr); + len = fill_ip4_head(fdir_input, raw_pkt, IPPROTO_UDP, + len, ether_type); } else if (cus_pctype->index == I40E_CUSTOMIZED_IPV4_L2TPV3) { - ip->next_proto_id = IPPROTO_L2TP; - len += sizeof(struct rte_ipv4_hdr); + len = fill_ip4_head(fdir_input, raw_pkt, IPPROTO_L2TP, + len, ether_type); } else if (cus_pctype->index == I40E_CUSTOMIZED_ESP_IPV4) { - ip->next_proto_id = IPPROTO_ESP; - len += sizeof(struct rte_ipv4_hdr); + len = fill_ip4_head(fdir_input, raw_pkt, IPPROTO_ESP, + len, ether_type); + } else if (cus_pctype->index == I40E_CUSTOMIZED_ESP_IPV4_UDP) { + len = fill_ip4_head(fdir_input, raw_pkt, IPPROTO_UDP, + len, ether_type); } else if (cus_pctype->index == I40E_CUSTOMIZED_ESP_IPV4_UDP) { - ip->next_proto_id = IPPROTO_UDP; - len += sizeof(struct rte_ipv4_hdr); + len = fill_ip4_head(fdir_input, raw_pkt, IPPROTO_UDP, + len, ether_type); } else if (cus_pctype->index == I40E_CUSTOMIZED_ESP_IPV6) len = fill_ip6_head(fdir_input, raw_pkt, IPPROTO_ESP, len, ether_type); else if (cus_pctype->index == I40E_CUSTOMIZED_ESP_IPV6_UDP) len = fill_ip6_head(fdir_input, raw_pkt, IPPROTO_UDP, len, ether_type); - } else if (pctype == I40E_FILTER_PCTYPE_NONF_IPV6_TCP || - pctype == I40E_FILTER_PCTYPE_NONF_IPV6_UDP || - pctype == I40E_FILTER_PCTYPE_NONF_IPV6_SCTP || - pctype == I40E_FILTER_PCTYPE_NONF_IPV6_OTHER || - pctype == I40E_FILTER_PCTYPE_FRAG_IPV6 || - ((is_customized_pctype) && - (cus_pctype->index == I40E_CUSTOMIZED_IPV6_L2TPV3))) { - ip6 = (struct rte_ipv6_hdr *)raw_pkt; - - *ether_type = rte_cpu_to_be_16(RTE_ETHER_TYPE_IPV6); - ip6->vtc_flow = - rte_cpu_to_be_32(I40E_FDIR_IPv6_DEFAULT_VTC_FLOW | - (fdir_input->flow.ipv6_flow.tc << - I40E_FDIR_IPv6_TC_OFFSET)); - ip6->payload_len = - rte_cpu_to_be_16(I40E_FDIR_IPv6_PAYLOAD_LEN); - if (!is_customized_pctype) - ip6->proto = fdir_input->flow.ipv6_flow.proto ? - fdir_input->flow.ipv6_flow.proto : - next_proto[fdir_input->pctype]; else if (cus_pctype->index == I40E_CUSTOMIZED_IPV6_L2TPV3) - ip6->proto = IPPROTO_L2TP; - ip6->hop_limits = fdir_input->flow.ipv6_flow.hop_limits ? - fdir_input->flow.ipv6_flow.hop_limits : - I40E_FDIR_IPv6_DEFAULT_HOP_LIMITS; - /** - * The source and destination fields in the transmitted packet - * need to be presented in a reversed order with respect - * to the expected received packets. - */ - rte_memcpy(&ip6->src_addr, - &fdir_input->flow.ipv6_flow.dst_ip, - IPV6_ADDR_LEN); - rte_memcpy(&ip6->dst_addr, - &fdir_input->flow.ipv6_flow.src_ip, - IPV6_ADDR_LEN); - len += sizeof(struct rte_ipv6_hdr); + len = fill_ip6_head(fdir_input, raw_pkt, IPPROTO_L2TP, + len, ether_type); } else { PMD_DRV_LOG(ERR, "unknown pctype %u.", fdir_input->pctype); return -1; -- 2.7.4 ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [dpdk-dev] [PATCH v3] net/i40e: fix i40e flow director merge 2020-01-28 13:48 ` [dpdk-dev] [PATCH v3] " Bernard Iremonger @ 2020-01-29 10:10 ` Sexton, Rory 2020-02-10 9:19 ` Ye Xiaolong 0 siblings, 1 reply; 8+ messages in thread From: Sexton, Rory @ 2020-01-29 10:10 UTC (permalink / raw) To: Iremonger, Bernard, dev, Xing, Beilei, Zhang, Qi Z, Yigit, Ferruh, Doherty, Declan > > Subject: [PATCH v3] net/i40e: fix i40e flow director merge > > Merge of ESP and L2TP code in i40e_fdir.c added checks on cus_pctype->index which caused flow creation for ESP to fail. > > Added fill_ipv4_function() > Refactored code to have one path for customized and non customized pctype's. > > Fixes: c5f8365bc85d ("net/i40e: support flow director for L2TPv3 over IP") > > Signed-off-by: Bernard Iremonger <bernard.iremonger@intel.com> > Acked-by: Rory Sexton <rory.sexton@intel.com> ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [dpdk-dev] [PATCH v3] net/i40e: fix i40e flow director merge 2020-01-29 10:10 ` Sexton, Rory @ 2020-02-10 9:19 ` Ye Xiaolong 0 siblings, 0 replies; 8+ messages in thread From: Ye Xiaolong @ 2020-02-10 9:19 UTC (permalink / raw) To: Sexton, Rory Cc: Iremonger, Bernard, dev, Xing, Beilei, Zhang, Qi Z, Yigit, Ferruh, Doherty, Declan On 01/29, Sexton, Rory wrote: >> >> Subject: [PATCH v3] net/i40e: fix i40e flow director merge >> >> Merge of ESP and L2TP code in i40e_fdir.c added checks on cus_pctype->index which caused flow creation for ESP to fail. >> >> Added fill_ipv4_function() >> Refactored code to have one path for customized and non customized pctype's. >> >> Fixes: c5f8365bc85d ("net/i40e: support flow director for L2TPv3 over IP") >> >> Signed-off-by: Bernard Iremonger <bernard.iremonger@intel.com> >> > >Acked-by: Rory Sexton <rory.sexton@intel.com> Applied to dpdk-next-net-intel, Thanks. ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2020-02-10 9:20 UTC | newest] Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2020-01-21 16:02 [dpdk-dev] [PATCH] net/i40e: fix i40e flow director merge Bernard Iremonger 2020-01-21 16:28 ` Iremonger, Bernard 2020-01-21 16:42 ` Sexton, Rory 2020-01-22 15:20 ` [dpdk-dev] [PATCH v2] " Bernard Iremonger 2020-01-22 15:48 ` Sexton, Rory 2020-01-28 13:48 ` [dpdk-dev] [PATCH v3] " Bernard Iremonger 2020-01-29 10:10 ` Sexton, Rory 2020-02-10 9:19 ` Ye Xiaolong
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).