From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by dpdk.org (Postfix) with ESMTP id A9D2891E9 for ; Tue, 5 Jan 2016 03:44:15 +0100 (CET) Received: from orsmga003.jf.intel.com ([10.7.209.27]) by orsmga102.jf.intel.com with ESMTP; 04 Jan 2016 18:44:14 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.20,523,1444719600"; d="scan'208";a="720291186" Received: from fmsmsx107.amr.corp.intel.com ([10.18.124.205]) by orsmga003.jf.intel.com with ESMTP; 04 Jan 2016 18:44:14 -0800 Received: from fmsmsx158.amr.corp.intel.com (10.18.116.75) by fmsmsx107.amr.corp.intel.com (10.18.124.205) with Microsoft SMTP Server (TLS) id 14.3.248.2; Mon, 4 Jan 2016 18:44:14 -0800 Received: from shsmsx102.ccr.corp.intel.com (10.239.4.154) by fmsmsx158.amr.corp.intel.com (10.18.116.75) with Microsoft SMTP Server (TLS) id 14.3.248.2; Mon, 4 Jan 2016 18:44:14 -0800 Received: from shsmsx103.ccr.corp.intel.com ([169.254.4.220]) by shsmsx102.ccr.corp.intel.com ([169.254.2.133]) with mapi id 14.03.0248.002; Tue, 5 Jan 2016 10:44:11 +0800 From: "Tan, Jianfeng" To: "Ananyev, Konstantin" , "dev@dpdk.org" Thread-Topic: [PATCH 12/12] examples/l3fwd: add option to parse ptype Thread-Index: AQHRQ9KwOytXQ9zT9kqhwXPGb661o57rLr4AgAD6nZA= Date: Tue, 5 Jan 2016 02:44:10 +0000 Message-ID: References: <1451544799-70776-1-git-send-email-jianfeng.tan@intel.com> <1451544799-70776-13-git-send-email-jianfeng.tan@intel.com> <2601191342CEEE43887BDE71AB97725836AE1333@irsmsx105.ger.corp.intel.com> In-Reply-To: <2601191342CEEE43887BDE71AB97725836AE1333@irsmsx105.ger.corp.intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.239.127.40] Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Subject: Re: [dpdk-dev] [PATCH 12/12] examples/l3fwd: add option to parse ptype X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 05 Jan 2016 02:44:16 -0000 > -----Original Message----- > From: Ananyev, Konstantin > Sent: Tuesday, January 5, 2016 2:32 AM > To: Tan, Jianfeng; dev@dpdk.org > Cc: Zhang, Helin > Subject: RE: [PATCH 12/12] examples/l3fwd: add option to parse ptype >=20 >=20 > Hi Jianfeng, > > -----Original Message----- > > From: Tan, Jianfeng > > Sent: Thursday, December 31, 2015 6:53 AM > > To: dev@dpdk.org > > Cc: Zhang, Helin; Ananyev, Konstantin; Tan, Jianfeng > > Subject: [PATCH 12/12] examples/l3fwd: add option to parse ptype > > > > Firstly, use rte_eth_dev_get_ptype_info() API to check if device will > > parse needed packet type. If not, specifying the newly added option, > > --parse-ptype to do it in the callback softly. > > > > Signed-off-by: Jianfeng Tan > > --- > > examples/l3fwd/main.c | 86 > +++++++++++++++++++++++++++++++++++++++++++++++++++ > > 1 file changed, 86 insertions(+) > > > > diff --git a/examples/l3fwd/main.c b/examples/l3fwd/main.c > > index 5b0c2dd..ccbdce3 100644 > > --- a/examples/l3fwd/main.c > > +++ b/examples/l3fwd/main.c > > @@ -174,6 +174,7 @@ static __m128i val_eth[RTE_MAX_ETHPORTS]; > > static uint32_t enabled_port_mask =3D 0; > > static int promiscuous_on =3D 0; /**< Ports set in promiscuous mode of= f by > default. */ > > static int numa_on =3D 1; /**< NUMA is enabled by default. */ > > +static int parse_ptype =3D 0; /**< parse packet type using rx callback= */ > > > > #if (APP_LOOKUP_METHOD =3D=3D APP_LOOKUP_EXACT_MATCH) > > static int ipv6 =3D 0; /**< ipv6 is false by default. */ > > @@ -2022,6 +2023,7 @@ parse_eth_dest(const char *optarg) > > #define CMD_LINE_OPT_IPV6 "ipv6" > > #define CMD_LINE_OPT_ENABLE_JUMBO "enable-jumbo" > > #define CMD_LINE_OPT_HASH_ENTRY_NUM "hash-entry-num" > > +#define CMD_LINE_OPT_PARSE_PTYPE "parse-ptype" > > > > /* Parse the argument given in the command line of the application */ > > static int > > @@ -2038,6 +2040,7 @@ parse_args(int argc, char **argv) > > {CMD_LINE_OPT_IPV6, 0, 0, 0}, > > {CMD_LINE_OPT_ENABLE_JUMBO, 0, 0, 0}, > > {CMD_LINE_OPT_HASH_ENTRY_NUM, 1, 0, 0}, > > + {CMD_LINE_OPT_PARSE_PTYPE, 0, 0, 0}, > > {NULL, 0, 0, 0} > > }; > > > > @@ -2125,6 +2128,12 @@ parse_args(int argc, char **argv) > > } > > } > > #endif > > + if (!strncmp(lgopts[option_index].name, > CMD_LINE_OPT_PARSE_PTYPE, > > + sizeof(CMD_LINE_OPT_PARSE_PTYPE))) { > > + printf("soft parse-ptype is enabled \n"); > > + parse_ptype =3D 1; > > + } > > + > > break; > > > > default: > > @@ -2559,6 +2568,75 @@ check_all_ports_link_status(uint8_t port_num, > uint32_t port_mask) > > } > > } > > > > +static int > > +check_packet_type_ok(int portid) > > +{ > > + int i; > > + int ret; > > + uint32_t ptypes[RTE_PTYPE_L3_MAX_NUM]; > > + int ptype_l3_ipv4 =3D 0, ptype_l3_ipv6 =3D 0; > > + > > + ret =3D rte_eth_dev_get_ptype_info(portid, RTE_PTYPE_L3_MASK, > ptypes); > > + for (i =3D 0; i < ret; ++i) { > > + if (ptypes[i] & RTE_PTYPE_L3_IPV4) > > + ptype_l3_ipv4 =3D 1; > > + if (ptypes[i] & RTE_PTYPE_L3_IPV6) > > + ptype_l3_ipv6 =3D 1; > > + } > > + > > + if (ptype_l3_ipv4 =3D=3D 0) > > + printf("port %d cannot parse RTE_PTYPE_L3_IPV4\n", portid); > > + > > + if (ptype_l3_ipv6 =3D=3D 0) > > + printf("port %d cannot parse RTE_PTYPE_L3_IPV6\n", portid); > > + > > + if (ptype_l3_ipv4 || ptype_l3_ipv6) > > + return 1; > > + > > + return 0; > > +} > > +static inline void > > +parse_packet_type(struct rte_mbuf *m) > > +{ > > + struct ether_hdr *eth_hdr; > > + struct vlan_hdr *vlan_hdr; > > + uint32_t packet_type =3D 0; > > + uint16_t ethertype; > > + > > + eth_hdr =3D rte_pktmbuf_mtod(m, struct ether_hdr *); > > + ethertype =3D rte_be_to_cpu_16(eth_hdr->ether_type); > > + if (ethertype =3D=3D ETHER_TYPE_VLAN) { >=20 > I don't think either LPM or EM support packets with VLAN right now. > So, probably there is no need to support it here. Good to know. Will remove it. >=20 > > + vlan_hdr =3D (struct vlan_hdr *)(eth_hdr + 1); > > + ethertype =3D rte_be_to_cpu_16(vlan_hdr->eth_proto); > > + } > > + switch (ethertype) { > > + case ETHER_TYPE_IPv4: > > + packet_type |=3D RTE_PTYPE_L3_IPV4_EXT_UNKNOWN; > > + break; > > + case ETHER_TYPE_IPv6: > > + packet_type |=3D RTE_PTYPE_L3_IPV6_EXT_UNKNOWN; > > + break; > > + default: > > + break; > > + } > > + > > + m->packet_type =3D packet_type; >=20 > Probably: > m->packet_type |=3D packet_type; > in case HW supports some other packet types. I agree. Will fix it. >=20 > > +} > > + > > +static uint16_t > > +cb_parse_packet_type(uint8_t port __rte_unused, > > + uint16_t queue __rte_unused, > > + struct rte_mbuf *pkts[], > > + uint16_t nb_pkts, > > + uint16_t max_pkts __rte_unused, > > + void *user_param __rte_unused) > > +{ > > + unsigned i; > > + > > + for (i =3D 0; i < nb_pkts; ++i) > > + parse_packet_type(pkts[i]); > > +} > > + > > int > > main(int argc, char **argv) > > { > > @@ -2672,6 +2750,11 @@ main(int argc, char **argv) > > rte_exit(EXIT_FAILURE, > "rte_eth_tx_queue_setup: err=3D%d, " > > "port=3D%d\n", ret, portid); > > > > + if (!check_packet_type_ok(portid) && !parse_ptype) > > + rte_exit(EXIT_FAILURE, > > + "port %d cannot parse packet > type, please add --%s\n", > > + portid, > CMD_LINE_OPT_PARSE_PTYPE); > > + > > qconf =3D &lcore_conf[lcore_id]; > > qconf->tx_queue_id[portid] =3D queueid; > > queueid++; > > @@ -2705,6 +2788,9 @@ main(int argc, char **argv) > > if (ret < 0) > > rte_exit(EXIT_FAILURE, > "rte_eth_rx_queue_setup: err=3D%d," > > "port=3D%d\n", ret, portid); > > + if (parse_ptype) > > + rte_eth_add_rx_callback(portid, queueid, > > + cb_parse_packet_type, > NULL); >=20 > Need to check return value. > Konstantin Oops, good catch! >=20 > > } > > } > > > > -- > > 2.1.4