From dc8e018823c18c7ef0afdd84336064c417b05287 Mon Sep 17 00:00:00 2001 From: Deepak S Date: Mon, 4 Sep 2017 02:52:15 -0700 Subject: [PATCH] Updating SampleVNF Highlevel design Change-Id: I16edf82eec02c671c1c72d07348d1badf58fc42d Signed-off-by: Deepak S --- .../developer/design/04-SampleVNF_Desgin.rest | 123 ---- .../developer/design/04-SampleVNF_Design.rst | 630 +++++++++++++++++++++ .../developer/design/images/prox-qo-img01.png | Bin 0 -> 20326 bytes .../developer/design/images/prox-qo-img02.png | Bin 0 -> 53045 bytes .../developer/design/images/prox-screen-01.png | Bin 0 -> 45792 bytes 5 files changed, 630 insertions(+), 123 deletions(-) delete mode 100644 docs/testing/developer/design/04-SampleVNF_Desgin.rest create mode 100644 docs/testing/developer/design/04-SampleVNF_Design.rst create mode 100644 docs/testing/developer/design/images/prox-qo-img01.png create mode 100644 docs/testing/developer/design/images/prox-qo-img02.png create mode 100644 docs/testing/developer/design/images/prox-screen-01.png diff --git a/docs/testing/developer/design/04-SampleVNF_Desgin.rest b/docs/testing/developer/design/04-SampleVNF_Desgin.rest deleted file mode 100644 index 6c39da73..00000000 --- a/docs/testing/developer/design/04-SampleVNF_Desgin.rest +++ /dev/null @@ -1,123 +0,0 @@ -.. This work is licensed under a Creative Commons Attribution 4.0 International License. -.. http://creativecommons.org/licenses/by/4.0 -.. (c) OPNFV, Intel Corporation and others. - -.. OPNFV SAMPLEVNF Documentation design file. - -=================================== -SampleVNF Highlevel Desing -=================================== - -vFW - Design -============= - -Requirements ------------------ -Following are the design requierments of the vFW. - -- The firewall will examine packets and verify that they are appropriate for the - current state of the connection. Inappropriate packets will be discarded, and - counter(s) incremented. -- Support both IPv4 and IPv6 traffic type for TCP/UDP/ICMP. -- All packet inspection features like firewall, synproxy, connection tracker - in this component may be turned off or on through CLI commands -- The Static filtering is done thorugh ACL using DPDK libraries. The rules - can be added/modified through CLI commands. -- Multiple instance of the vFW Pipeline running on multipe cores should be - supported for scaling the performance scaling. -- Should follow the DPDK IP pipeline framework -- Sould use the DPDK libraries and functionalities for better performance -- The memory should be allocated in Hugepages using DPDK RTE calls for better - performance. - - -High Level Design -================= - -The Firewall performs basic filtering for malformed packets and dynamic packet -filtering incoming packets using the connection tracker library. -The connection data will be stored using a DPDK hash table. There will be one -entry in the hash table for each connection. The hash key will be based on -source address/port,destination address/port, and protocol of a packet. The -hash key will be processed to allow a single entry to be used, regardless of -which direction the packet is flowing (thus changing source and destination). -The ACL is implemented as libray stattically linked to vFW, which is used for -used for rule based packet filtering. - -TCP connections and UDP pseudo connections will be tracked separately even if -theaddresses and ports are identical. Including the protocol in the hash key -will ensure this. - -The Input FIFO contains all the incoming packets for vFW filtering. The vFW -Filter has no dependency on which component has written to the Input FIFO. -Packets will be dequeued from the FIFO in bulk for processing by the vFW. -Packets will be enqueued to the output FIFO. - -The software or hardware loadbalancing can be used for traffic distribution -across multiple worker threads. The hardware loadbalancing require ethernet -flow director support from hardware (eg. Fortville x710 NIC card). -The Input and Output FIFOs will be implemented using DPDK Ring Buffers. - -Components of vFW -================= - -In vFW, each component is constructed using packet framework pipelines. -It includes Rx and Tx Driver, Master pipeline, load balancer pipeline and -vfw worker pipeline components. A Pipeline framework is a collection of input -ports, table(s),output ports and actions (functions). - ---------------------------- -Receive and Transmit Driver ---------------------------- -Packets will be received in bulk and provided to LoadBalancer(LB) thread. -Transimit takes packets from worker threads in a dedicated ring and sent to -hardware queue. - ---------------- -Master Pipeline ---------------- -The Master component is part of all the IP Pipeline applications. This component -does not process any packets and should configure with Core 0, to allow -other cores for processing of the traffic. This component is responsible for -1. Initializing each component of the Pipeline application in different threads -2. Providing CLI shell for the user control/debug -3. Propagating the commands from user to the corresponding components - ----------------- -ARPICMP Pipeline ----------------- -This pipeline processes the APRICMP packets. - --------------- -TXRX Pipelines --------------- -The TXTX and RXRX pipelines are pass through pipelines to forward both ingress -and egress traffic to Loadbalancer. This is required when the Software -Loadbalancer is used. - ----------------------- -Load Balancer Pipeline ----------------------- -The vFW support both hardware and software balancing for load balancing of -traffic across multiple VNF threads. The Hardware load balancing require support -from hardware like Flow Director for steering of packets to application through -hardware queues. - -The Software Load balancer is also supported if hardware load balancing can't be -used for any reason. The TXRX along with LOADB pipeline provides support for -software load balancing by distributing the flows to Multiple vFW worker -threads. -Loadbalancer (HW or SW) distributes traffic based on the 5 tuple (src addr, src -port, dest addr, dest port and protocol) applying an XOR logic distributing to -active worker threads, thereby maintaining an affinity of flows to worker -threads. - ------------- -vFW Pipeline ------------- -The vFW performs the basic packet filtering and will drop the invalid and -malformed packets.The Dynamic packet filtering done using the connection tracker -library. The packets are processed in bulk and Hash table is used to maintain -the connection details. -Every TCP/UDP packets are passed through connection tracker library for valid -connection. The ACL library integrated to firewall provide rule based filtering. diff --git a/docs/testing/developer/design/04-SampleVNF_Design.rst b/docs/testing/developer/design/04-SampleVNF_Design.rst new file mode 100644 index 00000000..cdef7448 --- /dev/null +++ b/docs/testing/developer/design/04-SampleVNF_Design.rst @@ -0,0 +1,630 @@ +.. This work is licensed under a Creative Commons Attribution 4.0 International License. +.. http://creativecommons.org/licenses/by/4.0 +.. (c) OPNFV, Intel Corporation and others. + +.. OPNFV SAMPLEVNF Documentation design file. + +=================================== +SampleVNF Highlevel Design +=================================== + +Introduction +-------------- +This project provides a placeholder for various sample VNF (Virtual Network Function) +development which includes example reference architecture and optimization methods +related to VNF/Network service for high performance VNFs. This project provides benefits +to other OPNFV projects like Functest, Models, yardstick etc to perform real life +use-case based testing and NFVi characterization for the same. +The sample VNFs are Open Source approximations* of Telco grade VNF’s using optimized +VNF + NFVi Infrastructure libraries, with Performance Characterization of Sample† Traffic Flows. + • * Not a commercial product. Encourage the community to contribute and close the feature gaps. + • † No Vendor/Proprietary Workloads + +About DPDK +^^^^^^^^^^^ +The DPDK IP Pipeline Framework provides set of libraries to build a pipeline +application. In this document, CG-NAT application will be explained with its +own building blocks. + +This document assumes the reader possess the knowledge of DPDK concepts and IP +Pipeline Framework. For more details, read DPDK Getting Started Guide, DPDK +Programmers Guide, DPDK Sample Applications Guide. + +Scope +-------- +These application provides a standalone DPDK based high performance different +Virtual Network Function implementation. + + + +Common Code - L2L3 stack +------------------------- + +Introduction +^^^^^^^^^^^^^^^ +L2L3 stack comprises of a set of libraries which are commonly used by all +other VNF's. The different components of this stack is shown in the picture +below. + +.. image:: l2l3-components.png + +It comprises of following components. + + (i) Interface Manager + (ii) RTM Lock Library + (iii) ARP/ND & L2 adjacency Library + (iv) L3 stack components + + +Interface Manager +^^^^^^^^^^^^^^^^^ +Interface manager is a set of API's which acts as a wrapper for the physical +interfaces initialization & population. This set of api's assists in configuring +an ethernet device, setting up TX & RX queues & starting of the devices. It +provides various types of interfaces like L2 interface, IPv4/IPv6 interface. +It helps in Configuration (set/get) operations and status updates like (UP/DOWN) +from admin or operations. It provides Callback functions registration for other +components who wants to listen to interface status. It Maintains table of all +the interfaces present. It provides API for getting interface statistics. + +It Provides wrapper APIs on top of DPDKs LAG(link Aggregation) APIs, This +includes creating/deleting BOND interfaces, knowing the properties like Bond mode, +xmit policy, link up delay, link monitor frequency. + + +RTM Lock Library +^^^^^^^^^^^^^^^^^ +It provides basic lock & unlock functions which should be used for synchronization +purposes. + +ARP/ND & L2 adjacency Library +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The ARP/ND state machine is given in the following diagram. + +.. image:: state-machine.png + +This library provides api's for handling ARP/ICMPv4 & ND/ICMPV6 packets +handling. It provides api's for creating/deleting & populating an entry. +It handles ARP request/response messages, Handles ICMP v4 echo request & +echo response messages. It handles ND solicitation/advertisement messages +for IPV6 packets. It Provide API for L2 Adjacency creation/deletion and +retrieval based on nexthop & port_id. It handles Gratuitous ARP. + +:: + + Basic commands for ARP/ND table + p 1 arpls 0 (for ARP) + p 1 arpls 1 (for ND) + p 1 arpadd 0 (for adding arp entry) + p 1 arpdel 0 (for deleting an arp entry) + p 1 arpreq 0 (for sending an arp request) + + +L3 stack Library +^^^^^^^^^^^^^^^^^ + +This library provides API for taking decision of whether pkt belongs to local +system or to forwarding.It Provides API for IPv4/IPv6 local packet out send +function. It Provides API for packet forwarding - LPM lookup function. + + +vFW - Design +============= + +Requirements +------------- + +Following are the design requierments of the vFW. + +- The firewall will examine packets and verify that they are appropriate for the + current state of the connection. Inappropriate packets will be discarded, and + counter(s) incremented. +- Support both IPv4 and IPv6 traffic type for TCP/UDP/ICMP. +- All packet inspection features like firewall, synproxy, connection tracker + in this component may be turned off or on through CLI commands +- The Static filtering is done thorugh ACL using DPDK libraries. The rules + can be added/modified through CLI commands. +- Multiple instance of the vFW Pipeline running on multipe cores should be + supported for scaling the performance scaling. +- Should follow the DPDK IP pipeline framework +- Should use the DPDK libraries and functionalities for better performance +- The memory should be allocated in Hugepages using DPDK RTE calls for better + performance. + +High Level Design +------------------- + +The Firewall performs basic filtering for malformed packets and dynamic packet +filtering incoming packets using the connection tracker library. +The connection data will be stored using a DPDK hash table. There will be one +entry in the hash table for each connection. The hash key will be based on +source address/port,destination address/port, and protocol of a packet. The +hash key will be processed to allow a single entry to be used, regardless of +which direction the packet is flowing (thus changing source and destination). +The ACL is implemented as libray stattically linked to vFW, which is used for +used for rule based packet filtering. + +TCP connections and UDP pseudo connections will be tracked separately even if +theaddresses and ports are identical. Including the protocol in the hash key +will ensure this. + +The Input FIFO contains all the incoming packets for vFW filtering. The vFW +Filter has no dependency on which component has written to the Input FIFO. +Packets will be dequeued from the FIFO in bulk for processing by the vFW. +Packets will be enqueued to the output FIFO. + +The software or hardware loadbalancing can be used for traffic distribution +across multiple worker threads. The hardware loadbalancing require ethernet +flow director support from hardware (eg. Fortville x710 NIC card). +The Input and Output FIFOs will be implemented using DPDK Ring Buffers. + +Components of vFW +----------------- + +In vFW, each component is constructed using packet framework pipelines. +It includes Rx and Tx Driver, Master pipeline, load balancer pipeline and +vfw worker pipeline components. A Pipeline framework is a collection of input +ports, table(s),output ports and actions (functions). + +Receive and Transmit Driver +^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Packets will be received in bulk and provided to LoadBalancer(LB) thread. +Transimit takes packets from worker threads in a dedicated ring and sent to +hardware queue. + +Master Pipeline +^^^^^^^^^^^^^^^ +The Master component is part of all the IP Pipeline applications. This component +does not process any packets and should configure with Core 0, to allow +other cores for processing of the traffic. This component is responsible for +1. Initializing each component of the Pipeline application in different threads +2. Providing CLI shell for the user control/debug +3. Propagating the commands from user to the corresponding components + +ARPICMP Pipeline +^^^^^^^^^^^^^^^^ +This pipeline processes the APRICMP packets. + +TXRX Pipelines +^^^^^^^^^^^^^^ +The TXTX and RXRX pipelines are pass through pipelines to forward both ingress +and egress traffic to Loadbalancer. This is required when the Software +Loadbalancer is used. + +Load Balancer Pipeline +^^^^^^^^^^^^^^^^^^^^^^ +The vFW support both hardware and software balancing for load balancing of +traffic across multiple VNF threads. The Hardware load balancing require support +from hardware like Flow Director for steering of packets to application through +hardware queues. + +The Software Load balancer is also supported if hardware load balancing can't be +used for any reason. The TXRX along with LOADB pipeline provides support for +software load balancing by distributing the flows to Multiple vFW worker +threads. +Loadbalancer (HW or SW) distributes traffic based on the 5 tuple (src addr, src +port, dest addr, dest port and protocol) applying an XOR logic distributing to +active worker threads, thereby maintaining an affinity of flows to worker +threads. + +vFW Pipeline +^^^^^^^^^^^^ +The vFW performs the basic packet filtering and will drop the invalid and +malformed packets.The Dynamic packet filtering done using the connection tracker +library. The packets are processed in bulk and Hash table is used to maintain +the connection details. +Every TCP/UDP packets are passed through connection tracker library for valid +connection. The ACL library integrated to firewall provide rule based filtering. + + +vCGNAPT - Design +================= + +Introduction +^^^^^^^^^^^^^^ +This application implements vCGNAPT. The idea of vCGNAPT is to extend the life of +the service providers IPv4 network infrastructure and mitigate IPv4 address +exhaustion by using address and port translation in large scale. It processes the +traffic in both the directions. + +It also supports the connectivity between the IPv6 access network to IPv4 data network +using the IPv6 to IPv4 address translation and vice versa. + +Scope +^^^^^^ +This application provides a standalone DPDK based high performance vCGNAPT +Virtual Network Function implementation. + +Features +^^^^^^^^^ +The vCGNAPT VNF currently supports the following functionality: + • Static NAT + • Dynamic NAT + • Static NAPT + • Dynamic NAPT + • ARP (request, response, gratuitous) + • ICMP (terminal echo, echo response, passthrough) + • UDP, TCP and ICMP protocol passthrough + • Multithread support + • Multiple physical port support + • Limiting max ports per client + • Limiting max clients per public IP address + • Live Session tracking to NAT flow + • NAT64 + + +High Level Design +^^^^^^^^^^^^^^^^^^^ +The Upstream path defines the traffic from Private to Public and the downstream +path defines the traffic from Public to Private. The vCGNAPT has same set of +components to process Upstream and Downstream traffic. + +In vCGNAPT application, each component is constructed as IP Pipeline framework. +It includes Master pipeline component, load balancer pipeline component and vCGNAPT +pipeline component. + +A Pipeline framework is collection of input ports, table(s), output ports and +actions (functions). In vCGNAPT pipeline, main sub components are the Inport function +handler, Table and Table function handler. vCGNAPT rules will be configured in the +table which translates egress and ingress traffic according to physical port +information from which side packet is arrived. The actions can be forwarding to the +output port (either egress or ingress) or to drop the packet. + +vCGNAPT Background +^^^^^^^^^^^^^^^^^^^ +The idea of vCGNAPT is to extend the life of the service providers IPv4 network infrastructure +and mitigate IPv4 address exhaustion by using address and port translation in large scale. +It processes the traffic in both the directions. :: ++------------------+ +| +-----+ +| Private consumer | CPE ---- +| IPv4 traffic +-----+ | ++------------------+ | + | +-------------------+ +------------------+ + | | +------------+ - + |-> - Private IPv4 - vCGNAPT - Public - + |-> - access network - NAT44 - IPv4 traffic - + | | +------------+ - + | +-------------------+ +------------------+ ++------------------+ | +| +-----+ | +| Private consumer - CPE ---- +| IPv4 traffic +-----+ ++------------------+ + Figure: vCGNAPT deployment in Service provider network + + +Components of vCGNAPT +--------------------- +In vCGNAPT, each component is constructed as a packet framework. It includes Master pipeline +component, driver, load balancer pipeline component and vCGNAPT worker pipeline component. A +pipeline framework is a collection of input ports, table(s), output ports and actions +(functions). + +Receive and transmit driver +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Packets will be received in bulk and provided to load balancer thread. The transmit takes +packets from worker thread in a dedicated ring and sent to the hardware queue. + +Master pipeline +^^^^^^^^^^^^^^^^ +This component does not process any packets and should configure with Core 0, +to save cores for other components which processes traffic. The component +is responsible for: + 1. Initializing each component of the Pipeline application in different threads + 2. Providing CLI shell for the user + 3. Propagating the commands from user to the corresponding components. + 4. ARP and ICMP are handled here. + +Load Balancer pipeline +^^^^^^^^^^^^^^^^^^^^^^^ +Load balancer is part of the Multi-Threaded CGMAPT release which distributes +the flows to Multiple ACL worker threads. + +Distributes traffic based on the 2 or 5 tuple (source address, source port, +destination address, destination port and protocol) applying an XOR logic +distributing the load to active worker threads, thereby maintaining an +affinity of flows to worker threads. + +Tuple can be modified/configured using configuration file + +vCGNAPT - Static +------------------ +The vCGNAPT component performs translation of private IP & port to public IP & +port at egress side and public IP & port to private IP & port at Ingress side +based on the NAT rules added to the pipeline Hash table. The NAT rules are +added to the Hash table via user commands. The packets that have a matching +egress key or ingress key in the NAT table will be processed to change IP & +port and will be forwarded to the output port. The packets that do not have a +match will be taken a default action. The default action may result in drop of +the packets. + +vCGNAPT- Dynamic +----------------- +The vCGNAPT component performs translation of private IP & port to public IP & port +at egress side and public IP & port to private IP & port at Ingress side based on the +NAT rules added to the pipeline Hash table. Dynamic nature of vCGNAPT refers to the +addition of NAT entries in the Hash table dynamically when new packet arrives. The NAT +rules will be added to the Hash table automatically when there is no matching entry in +the table and the packet is circulated through software queue. The packets that have a +matching egress key or ingress key in the NAT table will be processed to change IP & +port and will be forwarded to the output port defined in the entry. + +Dynamic vCGNAPT acts as static one too, we can do NAT entries statically. Static NAT +entries port range must not conflict to dynamic NAT port range. + +vCGNAPT Static Topology: +-------------------------- +IXIA(Port 0)-->(Port 0)VNF(Port 1)-->(Port 1) IXIA +operation: + Egress --> The packets sent out from ixia(port 0) will be CGNAPTed to ixia(port 1). + Igress --> The packets sent out from ixia(port 1) will be CGNAPTed to ixia(port 0). + +vCGNAPT Dynamic Topology (UDP_REPLAY): +-------------------------------------- +IXIA(Port 0)-->(Port 0)VNF(Port 1)-->(Port 0)UDP_REPLAY +operation: + Egress --> The packets sent out from ixia will be CGNAPTed to L3FWD/L4REPLAY. + Ingress --> The L4REPLAY upon reception of packets (Private to Public Network), + will immediately replay back the traffic to IXIA interface. (Pub -->Priv). + +How to run L4Replay: +-------------------- + 1. After the installation of ISB on L4Replay server + go to /opt/isb_bin + 2. ./UDP_Replay -c core_mask -n no_of_channels(let it be as 2) -- -p PORT_MASK --config="(port,queue,lcore)" + eg: ./UDP_Replay -c 0xf -n 4 -- -p 0x3 --config="(0,0,1)" + + +vACL - Design +================= + +Introduction +-------------- +This application implements Access Control List (ACL). ACL is typically used for rule +based policy enforcement. It restricts access to a destination IP address/port based +on various header fields, such as source IP address/port, destination IP address/port +and protocol. It is built on top of DPDK and uses the packet framework infrastructure. + +Scope +------ +This application provides a standalone DPDK based high performance ACL Virtual Network +Function implementation. + +High Level Design +------------------ +The ACL Filter performs bulk filtering of incoming packets based on rules in current ruleset, +discarding any packets not permitted by the rules. The mechanisms needed for building the +rule database and performing lookups are provided by the DPDK API. +http://dpdk.org/doc/api/rte__acl_8h.html + +The Input FIFO contains all the incoming packets for ACL filtering. Packets will be dequeued +from the FIFO in bulk for processing by the ACL. Packets will be enqueued to the output FIFO. +The Input and Output FIFOs will be implemented using DPDK Ring Buffers. + +The DPDK ACL example: http://dpdk.org/doc/guides/sample_app_ug/l3_forward_access_ctrl.html +#figure-ipv4-acl-rule contains a suitable syntax and parser for ACL rules. + +Components of ACL +------------------ +In ACL, each component is constructed as a packet framework. It includes Master pipeline +component, driver, load balancer pipeline component and ACL worker pipeline component. A +pipeline framework is a collection of input ports, table(s), output ports and actions +(functions). + +Receive and transmit driver +--------------------------- +Packets will be received in bulk and provided to load balancer thread. The transmit takes +packets from worker thread in a dedicated ring and it is sent to the hardware queue. + +Master +------- +This component does not process any packets and should configure with Core 0, +to save cores for other components which processes traffic. The component +is responsible for: + 1. Initializing each component of the Pipeline application in different threads + 2. Providing CLI shell for the user + 3. Propagating the commands from user to the corresponding components. + 4. ARP and ICMP are handled here. + +Load Balancer +-------------- +Load balancer is part of the Multi-Threaded ACL release which distributes +the flows to Multiple ACL worker threads. + +Distributes traffic based on the 5 tuple (source address, source port, destination +address, destination port and protocol) applying an XOR logic distributing the +load to active worker threads, thereby maintaining an affinity of flows to +worker threads. + +ACL +--- +Visit the following link for DPDK ACL library implementation. +http://dpdk.org/doc/api/rte__acl_8h.html +http://dpdk.org/doc/guides/prog_guide/packet_classif_access_ctrl.html + +Provides shadow copy for runtime rule configuration support + +Implements policy based packet forwarding + +vPE - Design +============= + +Introduction +--------------- +An Edge Router typically sits between two networks such as the provider core +network and the provider access network. In the below diagram, Customer Edge +(CE) Router sits in the provider access network and MPLS cloud network +represents the provide core network. +The edge router processes the traffic in both the directions. The functionality +of the Edge Router varies while processing each direction of traffic. The +packets to the core network will be filtered, classified and metered with QoS +parameters. The packets to the access network will be shaped according to the +subscription policy. +The idea of Edge Router application is to provide the benchmark for the +functionality of Provider Edge routers in each direction. + +The DPDK IP Pipeline Framework provides set of libraries to build a pipeline +application. The Provider Edge Router functionality delivered as a virtual +network function (VNF) is integrated with DPDK, optimized for Intel hardware +architecture. +This document assumes the reader possess the knowledge of DPDK concepts and +IP Pipeline Framework. For more details, read DPDK Getting Started Guide, DPDK +Programmers Guide, DPDK Sample Applications Guide. + +Scope +------ +This application provides a standalone DPDK based high performance Provide +Edge Router Network Function implementation. + +High Level Design +------------------- +The Edge Router application processes the traffic between Customer and the core +network. +The Upstream path defines the traffic from Customer to Core and the downstream +path defines the traffic from Core to Customer. The Edge Router has different +set of components to process Upstream and Downstream traffic. + +In Edge Router application, each component is constructed as building blocks in +IP Pipeline framework. As in Pipeline framework, each component has its own +input ports, table and output ports. The rules of the component will be +configured in the table which decides the path of the traffic and any action to +be performed on the traffic. The actions can be forwarding to the output port, +forwarding to the next table or drop. For more details, please refer Section 24 +of DPDK Programmers Guide (3). + +The Core-to-Customer traffic is mentioned as downstream. For downstream +processing, Edge Router has the following functionalities in Downstream + + ---> Packet Rx --> Routing --> Traffic Manager --> Packet Tx --> + + Routing + To identify the route based on the destination IP. + To provide QinQ label based on the destination IP. + Encapsulation + Updates the MAC address based on the route entry. + Appends the QinQ label based on the route entry. + Traffic Manager + To perform QoS traffic management (5-level hierarchical scheduling) based on + the predefined set of Service Level Agreements (SLAs) + SVLAN, CVLAN, DSCP fields are used to determine transmission priority. + Traffic Manager Profile which contains the SLA parameters are provided as + part of the application. + +The Customer-to-Core traffic is mentioned as upstream. For upstream processing, +Edge Router has the following functionalities in Upstream. + + ---> Packet Rx --> ACL filters --> Flow control --> Metering Policing & + Marking --> Routing --> Queueing & Packet Tx --> + + Firewall + To filter the unwanted packets based on the defined ACL rules. + Source IP, Destination IP, Protocol, Source Port and Destination Port are + used to derive the ACL rules. + Flow Classification + To classify the packet based on the QinQ label + To assign a specific flow id based on the classification. + Metering + Two stages of QoS traffic metering and policing is applied. + 1st stage is performed per flow ID using trTCM algorithm + 2nd stage is performed per flow ID traffic class using trTCM algorithm + Packets will be either dropped or marked Green, Yellow, Red based on the + metering rules. + Routing + To identify the route based on the destination IP + To provide MPLS label to the packets based on destination IP. + Encapsulation + Updates the MAC address based on the route entry. + Appends the MPLS label based on the route entry. + Update the packet color in MPLS EXP field in each MPLS header. + +Components of vPE +------------------- +The vPE has downstream and upstream pipelines controlled by Master component. +Edge router processes two different types of traffic through pipelines +I. Downstream (Core-to-Customer) + 1. Receives TCP traffic from core + 2. Routes the packet based on the routing rules + 3. Performs traffic scheduling based on the traffic profile + a. Qos scheduling is performed using token bucket algorithm + SVLAN, CVLAN, DSCP fields are used to determine transmission priority. + 4. Appends QinQ label in each outgoing packet. +II. Upstream (Customer-to-Core) + 1. Receives QinQ labelled TCP packets from Customer + 2. Removes the QinQ label + 3. Classifies the flow using QinQ label and apply Qos metering + a. 1st stage Qos metering is performed with flow ID using trTCM algorithm + b. 2nd stage Qos metering is performed with flow ID and traffic class using + trTCM algorithm + c. traffic class maps to DSCP field in the packet. + 4. Routes the packet based on the routing rules + 5. Appends two MPLS labels in each outgoing packet. + +Master Component +----------------- +The Master component is part of all the IP Pipeline applications. This +component does not process any packets and should configure with Core0, +to save cores for other components which processes traffic. The component +is responsible for + 1. Initializing each component of the Pipeline application in different threads + 2. Providing CLI shell for the user + 3. Propagating the commands from user to the corresponding components. + +Upstream and Downstream Pipelines +---------------------------------- +The downstream will have Firewall, Pass-through, Metering and Routing pipelines. +The upstream will have Pass-through and Routing pipelines. + +To run the VNF, execute the following: +isb_root/VNFs/vPE$ ./build/ip_pipeline -p 0x3 \ + -f config/auto_combo_1_instances_1_queues_2_ports_v2.cfg \ + -s config/auto_combo_1_instances_1_queues_2_ports_v2.txt + +Prox - Packet pROcessing eXecution engine +========================================== + +Overview: +---------- +Packet pROcessing eXecution Engine (PROX) which is a DPDK application. +PROX can do operations on packets in a highly configurable manner. +The PROX application is also displaying performance statistics that can +be used for performance investigations. +Intel® DPPD - PROX is an application built on top of DPDK which allows creating +software architectures, such as the one depicted below, through small and readable +configuration files. + +.. image:: images/prox-qo-img01.png + +The figure shows that each core is executing a set of tasks. Currently, +a task can be any one of the following: +1. Classify +2. Drop +3. Basic Forwarding (no touch) +4. L2 Forwarding (change MAC) +5. GRE encap/decap +6. Load balance based on packet fields +7. Symmetric load balancing +8. QinQ encap/decap IPv4/IPv6 +9. ARP +10. QoS +11. Routing +12. Unmpls +13. Policing +14. ACL ... + +One of the example configurations that is distributed with the source code is a +Proof of Concept (PoC) implementation of a Broadband Network Gateway (BNG) with Quality of Service (QoS). +The software architecture for this PoC is presented below. + +.. image:: images/prox-qo-img02.png + +The display shows per task statistics through an ncurses interface. +Statistics include: estimated idleness; per second statistics for packets received, +transmitted or dropped; per core cache occupancy; cycles per packet. +These statistics can help pinpoint bottlenecks in the system. +This information can then be used to optimize the configuration. +Other features include debugging support, scripting, +Open vSwitch support... A screenshot of the display is provided below. + +.. image:: images/prox-screen-01.png diff --git a/docs/testing/developer/design/images/prox-qo-img01.png b/docs/testing/developer/design/images/prox-qo-img01.png new file mode 100644 index 0000000000000000000000000000000000000000..b3e32d897f12a16022eccc60e987b4a71834f394 GIT binary patch literal 20326 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 OM_xu*I{%5j&;J3@w&}_M literal 0 HcmV?d00001 diff --git a/docs/testing/developer/design/images/prox-screen-01.png b/docs/testing/developer/design/images/prox-screen-01.png new file mode 100644 index 0000000000000000000000000000000000000000..d97645d769d52c3d3356e09f6a9fa992e3a2d3d3 GIT binary patch literal 45792 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 literal 0 HcmV?d00001 -- 2.16.6