DPDK usage discussions
 help / color / mirror / Atom feed
From: "Singh, Jasvinder" <jasvinder.singh@intel.com>
To: Nidhia Varghese <nidhiavarghese93@gmail.com>,
	"dev@dpdk.org" <dev@dpdk.org>, "users@dpdk.org" <users@dpdk.org>
Subject: Re: [dpdk-users] [dpdk-dev] Working of pipeline in a given config file and regarding user-defined actions in IP_PIPELINE application
Date: Fri, 7 Apr 2017 11:20:35 +0000	[thread overview]
Message-ID: <54CBAA185211B4429112C315DA58FF6D31B4B2B1@IRSMSX103.ger.corp.intel.com> (raw)
In-Reply-To: <CAAx9ALXyBcBAKr+73nL252KhK-W4VhLn_7ADpiZJXxX_FTQwuw@mail.gmail.com>

Hi Nidhia,

> -----Original Message-----
> From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Nidhia Varghese
> Sent: Thursday, April 6, 2017 10:07 AM
> To: dev@dpdk.org; users@dpdk.org
> Subject: [dpdk-dev] Working of pipeline in a given config file and regarding
> user-defined actions in IP_PIPELINE application
> 
> Hi all,
> 
> I am learning DPDK packet framework library for an APP development. I am
> going through the config files and the code. I found the below cfg file in a
> DPDK summit ppt. I have some doubts regarding the fields used in the cfg
> file.
> 1.What is the difference between dma_size and key_size?

 In ip_pipeline, dma_size is used as one of the parameter in pass-through pipeline. It is basically the total size (bytes) of the packet fields which could be used to distinguish the specific packet flow. It could be used for some other purpose as well. The key_size also defines the size(bytes) of the packet fields but used  as an parameter in flow-classifcation pipeline, etc  where the key (specific set of packet fields) is used to identify the table entry. 

> 2. How does the PASS-THROUGH pipeline work with given src_mask?

The src_mask  will be applied over  incoming packet header fields starting at dma_src_offset and will help to extract the desired fields from the packets. The extracted fields are saved at dma_dst_offset as packet meta-data. This meta-data can be consumed by the same pipeline or any other pipeline in the application. 
In pass-through pipeline, we use this meta-data to implement the load balancer by distributing the incoming packets across the output ports. The meta-data is used to compute the hash values which eventually gives the output port id to send packet out of the pipeline.   

> 3. Are the FLOW CLASSIFICATION and ROUTING pipelines using the same key
> or hash values?
 
No, they use different keys. Flow Classification pipeline uses hash tables and depending upon the type of the packets (IPv4, IPv6, QinQ etc), we defined the key (a specific combination of packet header fields) to classify the packets.  The routing pipeline use LPM table which uses destination ip address with prefix length as a key to find the routing entry for the packets.

> [PIPELINE0]
> type = MASTER
> core = 0
> 
> [PIPELINE1]
> type = PASS-THROUGH
> core = 1
> pktq_in = RXQ0.0 RXQ1.0 RXQ2.0 RXQ3.0
> pktq_out = SWQ0 SWQ1 SWQ2 SWQ3
> dma_size = 8
> dma_dst_offset = 0
> dma_src_offset = 140; headroom (128) + 1st ethertype offset (12) = 140
> dma_src_mask = 00000FFF00000FFF; qinq dma_hash_offset = 8;
> dma_dst_offset + dma_size = 8
> 
> [PIPELINE2]
> type = FLOW_CLASSIFICATION
> core = 1
> pktq_in = SWQ0 SWQ1 SWQ2 SWQ3
> pktq_out = SWQ4 SWQ5 SWQ6 SWQ7
> n_flows = 16777216; n_flows = 65536
> key_size = 8; dma_size = 8
> key_offset = 0; dma_dst_offset = 0
> hash_offset = 8; dma_hash_offset = 8 flow_id_offset = 64
> 
> [PIPELINE3]
> type = ROUTING
> core = 2
> pktq_in = SWQ4 SWQ5 SWQ6 SWQ7
> pktq_out = TXQ0.0 TXQ1.0 TXQ2.0 TXQ3.0
> n_routes = 4096
> l2 = mpls
> mpls_color_mark = yes
> ip_hdr_offset = 150; headroom (128) + ethernet header (14) + qinq (8) = 150
> color_offset = 68
> 
> 
> Other than this,
> 4. How users can add user-defined actions? Can you please give an example,
> like push or pop VLAN label from the packet 5. How does port action handler
> works? How and where can we define actions for ports?
> 

Please have a look at pass-through pipeline (pipeline/pipeline_passthrough_be.c) where we have defined standard macro PIPELINE_PORT_IN_AH (pipeline/pipeline_common_actions.h) for implementing port actions ( for example, by default we have  few actions implemented for input port such as  swapping the packet fields, load balancing action by distributing the ingress traffic uniformly across output ports, etc.).  These actions can be enabled by specifying the right parameters in the pipeline section of the configuration file( reference static rte_pipeline_port_in_action_handler get_port_in_ah(struct pipeline_passthrough *p)). Likewise you can add your port actions.
  

> Thanks for your reply and help.


Jasvinder

  reply	other threads:[~2017-04-07 11:20 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-04-06  9:06 [dpdk-users] " Nidhia Varghese
2017-04-07 11:20 ` Singh, Jasvinder [this message]
2017-04-10  7:27   ` [dpdk-users] [dpdk-dev] " Nidhia Varghese
2017-04-10  9:27     ` Singh, Jasvinder
2017-04-10  9:39     ` Dumitrescu, Cristian
2017-04-11  7:48       ` Nidhia Varghese
2017-04-11  9:04         ` Dumitrescu, Cristian
2017-04-18  5:40           ` Nidhia Varghese
2017-04-18  9:53             ` Dumitrescu, Cristian

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=54CBAA185211B4429112C315DA58FF6D31B4B2B1@IRSMSX103.ger.corp.intel.com \
    --to=jasvinder.singh@intel.com \
    --cc=dev@dpdk.org \
    --cc=nidhiavarghese93@gmail.com \
    --cc=users@dpdk.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).