From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from out1-smtp.messagingengine.com (out1-smtp.messagingengine.com [66.111.4.25]) by dpdk.org (Postfix) with ESMTP id 2A652292D for ; Tue, 16 May 2017 22:47:05 +0200 (CEST) Received: from compute1.internal (compute1.nyi.internal [10.202.2.41]) by mailout.nyi.internal (Postfix) with ESMTP id C886320842; Tue, 16 May 2017 16:47:04 -0400 (EDT) Received: from frontend1 ([10.202.2.160]) by compute1.internal (MEProxy); Tue, 16 May 2017 16:47:04 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=monjalon.net; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to:x-me-sender :x-me-sender:x-sasl-enc:x-sasl-enc; s=mesmtp; bh=4Qe+232CY0eyI4p 2EVtZWHqpn6Ghqz/yDxd2T87RkCE=; b=W8CarmdsuD/QVJkhNxD4Uk0pSdVej43 FppIUbDuua9zOW2aHhdLwWB+8P/h3rkbtO/dOJ1Z6OzaemlTb7mu+pqzZ+W5KBPq DlqoKTnCf3p3SE1dYlac3XS5JeE1+l0D3jawbCeiwpxQKuzrRLpORf/iEbiFMQN+ 3gLwXS7+UxhU= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:content-type :date:from:in-reply-to:message-id:mime-version:references :subject:to:x-me-sender:x-me-sender:x-sasl-enc:x-sasl-enc; s= fm1; bh=4Qe+232CY0eyI4p2EVtZWHqpn6Ghqz/yDxd2T87RkCE=; b=b/sN0F0R qXvTVHuYHCYLouFjq/XiWdZ2PaQXEGiNHtXOPyOYHQ/rrClVMFzQToCjgM5ysLaH Hx/GNwjVZdaQa4kwdN1S19QiIMGZbE/W8dRYWs5K/1CoeEvhiXadujEC5APQJnkg uPP2KnAEhbkabKEAgRtpcXu8e5ittzkYE0TxiTp4n/idd8Xw0bk0sl1k0j2VPKA/ Bh7U9sG9Qp4Oq3wYBKz35oardRp6t7Fv6ToLzVccmYl9vRV24rsVpvBy2MTqi0SB ydRzKqn0PZUBHltr2+sua99R67Hz06Ftf+PENXVGNXw5pwa+P7sOAtP7r7HfWDoa Z4niYg9hqvGZOQ== X-ME-Sender: X-Sasl-enc: v5LZN+f9rDekk2ciLhy6ecEj9vu5ELeLl6QnGbMW70Xv 1494967624 Received: from xps.localnet (184.203.134.77.rev.sfr.net [77.134.203.184]) by mail.messagingengine.com (Postfix) with ESMTPA id 84BDB7E876; Tue, 16 May 2017 16:47:04 -0400 (EDT) From: Thomas Monjalon To: dev@dpdk.org, olivier.matz@6wind.com, bruce.richardson@intel.com Cc: Ray Zhang Date: Tue, 16 May 2017 22:47:03 +0200 Message-ID: <1958581.a6L38vVbnc@xps> In-Reply-To: <1491560817-3558-1-git-send-email-skytap@host-1.skytap.example> References: <1491559197-3307-1-git-send-email-skytap@host-1.skytap.example> <1491560817-3558-1-git-send-email-skytap@host-1.skytap.example> MIME-Version: 1.0 Content-Transfer-Encoding: 7Bit Content-Type: text/plain; charset="us-ascii" Subject: Re: [dpdk-dev] [PATCH v1] net: support PPPOE in software packet type parser X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 16 May 2017 20:47:05 -0000 Any volunteer to review this patch, please? 07/04/2017 12:26, Ray Zhang: > From: Ray Zhang > > Add a new RTE_PTYPE_L2_ETHER_PPPOE and its support in > rte_net_get_ptype() > > Signed-off-by: Ray Zhang > --- > > Resend the patch > > lib/librte_mbuf/rte_mbuf_ptype.h | 7 +++++++ > lib/librte_net/rte_ether.h | 12 ++++++++++++ > lib/librte_net/rte_net.c | 19 +++++++++++++++++++ > 3 files changed, 38 insertions(+) > > diff --git a/lib/librte_mbuf/rte_mbuf_ptype.h b/lib/librte_mbuf/rte_mbuf_ptype.h > index ff6de9d..7dd03de 100644 > --- a/lib/librte_mbuf/rte_mbuf_ptype.h > +++ b/lib/librte_mbuf/rte_mbuf_ptype.h > @@ -150,6 +150,13 @@ > */ > #define RTE_PTYPE_L2_ETHER_QINQ 0x00000007 > /** > + * PPPOE packet type. > + * > + * Packet format: > + * <'ether type'=[0x8864]> > + */ > +#define RTE_PTYPE_L2_ETHER_PPPOE 0x00000008 > +/** > * Mask of layer 2 packet types. > * It is used for outer packet for tunneling cases. > */ > diff --git a/lib/librte_net/rte_ether.h b/lib/librte_net/rte_ether.h > index ff3d065..d76edb3 100644 > --- a/lib/librte_net/rte_ether.h > +++ b/lib/librte_net/rte_ether.h > @@ -323,12 +323,24 @@ struct vxlan_hdr { > uint32_t vx_vni; /**< VNI (24) + Reserved (8). */ > } __attribute__((__packed__)); > > +/** > + * PPPOE protocol header > + */ > +struct pppoe_hdr { > + uint8_t type_ver; > + uint8_t code; > + uint16_t sid; > + uint16_t length; > + uint16_t proto; > +} __attribute__((packed)); > + > /* Ethernet frame types */ > #define ETHER_TYPE_IPv4 0x0800 /**< IPv4 Protocol. */ > #define ETHER_TYPE_IPv6 0x86DD /**< IPv6 Protocol. */ > #define ETHER_TYPE_ARP 0x0806 /**< Arp Protocol. */ > #define ETHER_TYPE_RARP 0x8035 /**< Reverse Arp Protocol. */ > #define ETHER_TYPE_VLAN 0x8100 /**< IEEE 802.1Q VLAN tagging. */ > +#define ETHER_TYPE_PPPOE 0x8864 /**< PPPoE Protocol */ > #define ETHER_TYPE_QINQ 0x88A8 /**< IEEE 802.1ad QinQ tagging. */ > #define ETHER_TYPE_1588 0x88F7 /**< IEEE 802.1AS 1588 Precise Time Protocol. */ > #define ETHER_TYPE_SLOW 0x8809 /**< Slow protocols (LACP and Marker). */ > diff --git a/lib/librte_net/rte_net.c b/lib/librte_net/rte_net.c > index a8c7aff..439c2f6 100644 > --- a/lib/librte_net/rte_net.c > +++ b/lib/librte_net/rte_net.c > @@ -302,6 +302,25 @@ uint32_t rte_net_get_ptype(const struct rte_mbuf *m, > off += 2 * sizeof(*vh); > hdr_lens->l2_len += 2 * sizeof(*vh); > proto = vh->eth_proto; > + } else if (proto == rte_cpu_to_be_16(ETHER_TYPE_PPPOE)) { > + const struct pppoe_hdr *ph; > + struct pppoe_hdr ph_copy; > + > + pkt_type = RTE_PTYPE_L2_ETHER_PPPOE; > + ph = rte_pktmbuf_read(m, off, sizeof(*ph), &ph_copy); > + if (unlikely(ph == NULL)) > + return pkt_type; > + > + off += sizeof(*ph); > + hdr_lens->l2_len += sizeof(*ph); > + if (ph->code != 0) /* Not Seesion Data */ > + return pkt_type; > + if (ph->proto == rte_cpu_to_be_16(0x21)) > + proto = rte_cpu_to_be_16(ETHER_TYPE_IPv4); > + else if (ph->proto == rte_cpu_to_be_16(0x57)) > + proto = rte_cpu_to_be_16(ETHER_TYPE_IPv6); > + else > + return pkt_type; > }