[dpdk-dev] [PATCH v2 12/12] examples/l3fwd: add option to parse ptype

Ananyev, Konstantin konstantin.ananyev at intel.com
Thu Feb 25 11:57:32 CET 2016


Hi Jianfeng,

> -----Original Message-----
> From: Tan, Jianfeng
> Sent: Thursday, February 25, 2016 10:41 AM
> To: Ananyev, Konstantin; dev at dpdk.org
> Cc: Zhang, Helin
> Subject: Re: [PATCH v2 12/12] examples/l3fwd: add option to parse ptype
> 
> Hi Konstantin,
> 
> On 1/15/2016 10:47 PM, Ananyev, Konstantin wrote:
> > Hi Jianfeng,
> >
> >> -----Original Message-----
> >> From: Tan, Jianfeng
> >> Sent: Friday, January 15, 2016 5:46 AM
> >> To: dev at dpdk.org
> >> Cc: Zhang, Helin; Ananyev, Konstantin; Tan, Jianfeng
> >> Subject: [PATCH v2 12/12] examples/l3fwd: add option to parse ptype
> >>
> >> As a example to use ptype info, l3fwd needs firstly to use
> >> rte_eth_dev_get_ptype_info() API to check if device and/or PMD driver will
> >> parse and fill the needed packet type. If not, use the newly added option,
> >> --parse-ptype, to analyze it in the callback softly.
> >>
> >> Signed-off-by: Jianfeng Tan <jianfeng.tan at intel.com>
> >> ---
> >>   examples/l3fwd/main.c | 91 +++++++++++++++++++++++++++++++++++++++++++++++++++
> >>   1 file changed, 91 insertions(+)
> >>
> ...
> >> +static inline void
> >> +parse_packet_type(struct rte_mbuf *m)
> >> +{
> >> +	struct ether_hdr *eth_hdr;
> >> +	uint32_t packet_type = 0;
> >> +	uint16_t ethertype;
> >> +
> >> +	eth_hdr = rte_pktmbuf_mtod(m, struct ether_hdr *);
> >> +	ethertype = rte_be_to_cpu_16(eth_hdr->ether_type);
> >> +	switch (ethertype) {
> >> +	case ETHER_TYPE_IPv4:
> >> +		packet_type |= RTE_PTYPE_L3_IPV4_EXT_UNKNOWN;
> >> +		break;
> >> +	case ETHER_TYPE_IPv6:
> >> +		packet_type |= RTE_PTYPE_L3_IPV6_EXT_UNKNOWN;
> >> +		break;
> > That's enough for LPM, for EM, don't we need to be sure there are no extensions
> > in the IP header?
> >
> > Konstantin
> 
> Yes, EM needs to differentiate RTE_PTYPE_L3_IPV4/RTE_PTYPE_L3_IPV4_EXT,
> RTE_PTYPE_L3_IPV6/RTE_PTYPE_L3_IPV6_EXT:
> a. for soft ptype parser here, I'll add the code to do it.
> 
> b. for hardware ptype parser, things become complex:
> those NICs which can differentiate:
> e1000
> fmf10k
> ixgbe
> those NICs which cannot differentiate:
> cxgbe (ipv4, ipv6)
> enic (ipv4, ipv6)
> i40e (ipv4_ext_unknown, ipv6_ext_unknown)

Yep, I am aware about that difference  between i40e and rest of Intel PMDs :(

> mlx4 (ipv4, ipv6)
> mlx5 (ipv4, ipv6)
> nfp (ipv4, ipv6, ipv6_ext)
> vmxnet3 (ipv4, ipv4_ext)
> 
> As a result, l3fwd can only work perfectly on those NICs which can
> differentiate.

Well, we can do a SW parsing for that NICs,
but I presume it might slowdown things quite a bit. 

> 
> SO if we really do the strict checking?

Ok, but then we probably need to put into SA guide that l3fwd EM
not supposed to work with IP with extentions.

Konstantin

> 
> Thanks,
> Jianfeng


More information about the dev mailing list