Hi Konstantin, On 1/6/2016 12:49 AM, Ananyev, Konstantin wrote: > Hi Jianfeng, > >>>> +static int >>>> +check_packet_type_ok(int portid) >>>> +{ >>>> + int i; >>>> + int ret; >>>> + uint32_t ptypes[RTE_PTYPE_L3_MAX_NUM]; >>>> + int ptype_l3_ipv4 = 0, ptype_l3_ipv6 = 0; >>>> + >>>> + ret = rte_eth_dev_get_ptype_info(portid, RTE_PTYPE_L3_MASK, >>> ptypes); >>>> + for (i = 0; i < ret; ++i) { >>>> + if (ptypes[i] & RTE_PTYPE_L3_IPV4) >>>> + ptype_l3_ipv4 = 1; >>>> + if (ptypes[i] & RTE_PTYPE_L3_IPV6) >>>> + ptype_l3_ipv6 = 1; >>>> + } >>>> + >>>> + if (ptype_l3_ipv4 == 0) >>>> + printf("port %d cannot parse RTE_PTYPE_L3_IPV4\n", portid); >>>> + >>>> + if (ptype_l3_ipv6 == 0) >>>> + printf("port %d cannot parse RTE_PTYPE_L3_IPV6\n", portid); >>>> + >>>> + if (ptype_l3_ipv4 || ptype_l3_ipv6) >>>> + return 1; > > Forgot one thing: I think it should be: > > if (ptype_l3_ipv4 && ptype_l3_ipv6) > return 1; > return 0; > > or just: > > return ptype_l3_ipv4 && ptype_l3_ipv6;
My original thought is: PMDs, like vmxnet3, fills ptype_l3_ipv4, but not ptype_l3_ipv6. If we use "&&", then it would add rx callback to parse ptype whether ipv4 or ipv6 traffic is comming. Thanks, Jianfeng > > Konstantin