From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0C279C53209 for ; Mon, 27 Jul 2026 23:13:00 +0000 (UTC) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id BA9E34068A; Tue, 28 Jul 2026 01:12:41 +0200 (CEST) Received: from mail-pl1-f170.google.com (mail-pl1-f170.google.com [209.85.214.170]) by mails.dpdk.org (Postfix) with ESMTP id A281D400D6 for ; Tue, 28 Jul 2026 01:12:38 +0200 (CEST) Received: by mail-pl1-f170.google.com with SMTP id d9443c01a7336-2cc61541f8cso6279275ad.0 for ; Mon, 27 Jul 2026 16:12:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=networkplumber-org.20251104.gappssmtp.com; s=20251104; t=1785193958; x=1785798758; darn=dpdk.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=IToB9K9AOHVcmFrrhgGHxxjjrsfzyj4msR9122+p8/E=; b=DksfXXHoXlC3KxkiExqhwdinp48fg9pom/flfpMHAyROodW4Wv6NEDJxAgNQ8bsyOM tBoQji8nn742NlnlL52Piw4BiOhTBQW1OUdD8M/7kejabq4Xu5A4Jt3iWwjLCibCbZDX ipaqlDtl5JO8OoyR2f+UeiSWhfvDdOKAK8P/s9If/oHD6WmCougbRCLEq0noLjW8C+8a HBNgu5byvmV5+Uugp4464uWMsT6k4klyC/GnddcIPW+73oS6rc6ZawEm9++8X28NokCI 8oMhI5DF7Gg3bzsQcX996x+V+HuoPpxb0olhQSgtoaeQzZ8itX9ti0kUQ7Z9rdTtyY1v t1XA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785193958; x=1785798758; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=IToB9K9AOHVcmFrrhgGHxxjjrsfzyj4msR9122+p8/E=; b=pkL8cLn0P1uLxw+9VUQ85jXYaMapVP0akLCoZYFaebqBP7cFqHO3hjn9qn4yG51Itu eHY2e5ciQXsQ8/LMBMZ+CvIlxpWzoQgdpsl2FoO1en2yRjcEYQUGykDeKS40e3reCKnJ zzwF1yxV4a0vxVdhsvdsBuUtzsCylcO6y0NLwmlL4o6KYz+P9fRIBB/6pWFcStTkMVkG kFca+cYzm85ohthPsQLfyVPkycLX254xxh1P/rq3vLV6dKJ2c80ktxIqdmHZi0hd0Fi6 oZncrDaSdVKO9b9N+2A+s4vcnUtqNUqOkuSHaCRsSc9Gz+6H3NE/VpdDYEvP01MUMhmW 3jNw== X-Gm-Message-State: AOJu0YzBkVqwm/8HaS0gtmQk2kvD7nOU8+pTpwBDRyj4YpU+8WEca3Ap QJHnIrjqCpCbNzhAGq/eUGaVWnCk0MChwzLNJN0oKxyEK8R8INsINbj4X9UUIBXEYeSUhJhLaqT km5O6 X-Gm-Gg: AR+sD11dLx1Pepv9mcReQtLyERqzhL5hnpOwsRylfG/WR6/IeGl/TuFBi+Q8bwfJ1K2 p6bnUNF4aZenmebX5WMt7zQtIYXb+oNILfBiYJquesZAwmuPMflsBuoQK1TPDLtBVsjJDM4Ztkg MBA5j1w0wbkYinuoyMbQaWKBKh2sEhswg/0A9+giLZ/fpxcu1krYksy4bGV1Tgqt7nABr6fz0jQ ug8xD33hxEskPTWxd6eVMMf/59zgcRxzgRQx0alcSHllcX/NKfBaVCU8X6WSjKRvYDaIOIqq4J1 AKQa26WvYF4gqQmkfOxOOngiwXDJR7MMyMrw2qP4JiZJbQ5lMouJpAXwS30EJHP5xO8wX7V6vOc RZSEEuRba7JtpgRtk/SOTB7laEw/zJWm06QDhy564gboz3GRf3FhvIrD3JlwfPqerLmcNrFeK+L mNS/PC83jY/hisI55oWykmVjTuOjJwBXFWjNnbIne6qPoo7jiEkZY= X-Received: by 2002:a17:902:d2c7:b0:2cf:af20:4254 with SMTP id d9443c01a7336-2d01208f466mr6644995ad.10.1785193956122; Mon, 27 Jul 2026 16:12:36 -0700 (PDT) Received: from phoenix.lan (204-195-96-226.wavecable.com. [204.195.96.226]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-314bc3e261fsm40359802eec.6.2026.07.27.16.12.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 27 Jul 2026 16:12:35 -0700 (PDT) From: Stephen Hemminger To: dev@dpdk.org Cc: Stephen Hemminger , Thomas Monjalon , Cristian Dumitrescu Subject: [RFC v2 3/6] examples/ip_pipeline: remove example Date: Mon, 27 Jul 2026 16:11:27 -0700 Message-ID: <20260727231222.1492544-4-stephen@networkplumber.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260727231222.1492544-1-stephen@networkplumber.org> References: <20260724164520.192203-1-stephen@networkplumber.org> <20260727231222.1492544-1-stephen@networkplumber.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org The ip_pipeline example is built on the legacy pipeline library API (rte_pipeline_*) and the associated port and table action APIs, which were announced for removal in the 24.11 release. The pipeline example covers the SWX pipeline API. Signed-off-by: Stephen Hemminger --- MAINTAINERS | 2 - doc/guides/nics/softnic.rst | 3 +- doc/guides/rel_notes/release_26_11.rst | 4 + doc/guides/sample_app_ug/index.rst | 1 - doc/guides/sample_app_ug/ip_pipeline.rst | 531 -- examples/ip_pipeline/Makefile | 60 - examples/ip_pipeline/action.c | 391 - examples/ip_pipeline/action.h | 78 - examples/ip_pipeline/cli.c | 6791 ----------------- examples/ip_pipeline/cli.h | 18 - examples/ip_pipeline/common.h | 12 - examples/ip_pipeline/conn.c | 330 - examples/ip_pipeline/conn.h | 47 - examples/ip_pipeline/cryptodev.c | 160 - examples/ip_pipeline/cryptodev.h | 46 - examples/ip_pipeline/examples/firewall.cli | 59 - examples/ip_pipeline/examples/flow.cli | 60 - examples/ip_pipeline/examples/flow_crypto.cli | 57 - examples/ip_pipeline/examples/l2fwd.cli | 51 - examples/ip_pipeline/examples/route.cli | 60 - examples/ip_pipeline/examples/route_ecmp.cli | 57 - examples/ip_pipeline/examples/rss.cli | 112 - examples/ip_pipeline/examples/tap.cli | 66 - examples/ip_pipeline/link.c | 270 - examples/ip_pipeline/link.h | 66 - examples/ip_pipeline/main.c | 260 - examples/ip_pipeline/mempool.c | 82 - examples/ip_pipeline/mempool.h | 40 - examples/ip_pipeline/meson.build | 30 - examples/ip_pipeline/parser.c | 506 -- examples/ip_pipeline/parser.h | 56 - examples/ip_pipeline/pipeline.c | 1078 --- examples/ip_pipeline/pipeline.h | 425 -- examples/ip_pipeline/swq.c | 76 - examples/ip_pipeline/swq.h | 37 - examples/ip_pipeline/tap.c | 102 - examples/ip_pipeline/tap.h | 29 - examples/ip_pipeline/thread.c | 3137 -------- examples/ip_pipeline/thread.h | 24 - examples/ip_pipeline/tmgr.c | 248 - examples/ip_pipeline/tmgr.h | 74 - examples/meson.build | 1 - 42 files changed, 5 insertions(+), 15532 deletions(-) delete mode 100644 doc/guides/sample_app_ug/ip_pipeline.rst delete mode 100644 examples/ip_pipeline/Makefile delete mode 100644 examples/ip_pipeline/action.c delete mode 100644 examples/ip_pipeline/action.h delete mode 100644 examples/ip_pipeline/cli.c delete mode 100644 examples/ip_pipeline/cli.h delete mode 100644 examples/ip_pipeline/common.h delete mode 100644 examples/ip_pipeline/conn.c delete mode 100644 examples/ip_pipeline/conn.h delete mode 100644 examples/ip_pipeline/cryptodev.c delete mode 100644 examples/ip_pipeline/cryptodev.h delete mode 100644 examples/ip_pipeline/examples/firewall.cli delete mode 100644 examples/ip_pipeline/examples/flow.cli delete mode 100644 examples/ip_pipeline/examples/flow_crypto.cli delete mode 100644 examples/ip_pipeline/examples/l2fwd.cli delete mode 100644 examples/ip_pipeline/examples/route.cli delete mode 100644 examples/ip_pipeline/examples/route_ecmp.cli delete mode 100644 examples/ip_pipeline/examples/rss.cli delete mode 100644 examples/ip_pipeline/examples/tap.cli delete mode 100644 examples/ip_pipeline/link.c delete mode 100644 examples/ip_pipeline/link.h delete mode 100644 examples/ip_pipeline/main.c delete mode 100644 examples/ip_pipeline/mempool.c delete mode 100644 examples/ip_pipeline/mempool.h delete mode 100644 examples/ip_pipeline/meson.build delete mode 100644 examples/ip_pipeline/parser.c delete mode 100644 examples/ip_pipeline/parser.h delete mode 100644 examples/ip_pipeline/pipeline.c delete mode 100644 examples/ip_pipeline/pipeline.h delete mode 100644 examples/ip_pipeline/swq.c delete mode 100644 examples/ip_pipeline/swq.h delete mode 100644 examples/ip_pipeline/tap.c delete mode 100644 examples/ip_pipeline/tap.h delete mode 100644 examples/ip_pipeline/thread.c delete mode 100644 examples/ip_pipeline/thread.h delete mode 100644 examples/ip_pipeline/tmgr.c delete mode 100644 examples/ip_pipeline/tmgr.h diff --git a/MAINTAINERS b/MAINTAINERS index 4c06f85706..ae84e7f289 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -1739,9 +1739,7 @@ F: lib/pipeline/ F: lib/port/ F: lib/table/ F: doc/guides/prog_guide/packet_framework.rst -F: examples/ip_pipeline/ F: examples/pipeline/ -F: doc/guides/sample_app_ug/ip_pipeline.rst Algorithms diff --git a/doc/guides/nics/softnic.rst b/doc/guides/nics/softnic.rst index 603fdb49c4..87f3e5adc0 100644 --- a/doc/guides/nics/softnic.rst +++ b/doc/guides/nics/softnic.rst @@ -10,8 +10,7 @@ is DIY and reconfigurable through ``firmware`` (DPDK Packet Framework script). The Soft NIC leverages the DPDK Packet Framework libraries (librte_port, librte_table and librte_pipeline) to make it modular, flexible and extensible with new functionality. -Please refer to :doc:`/prog_guide/packet_framework` and -:doc:`/sample_app_ug/ip_pipeline` for more details. +Please refer to :doc:`/prog_guide/packet_framework` for more details. The Soft NIC is configured through the standard DPDK ethdev API (ethdev, flow, QoS, security). The internal framework is not externally visible. diff --git a/doc/guides/rel_notes/release_26_11.rst b/doc/guides/rel_notes/release_26_11.rst index 6ad0cf6eec..fc84ba367e 100644 --- a/doc/guides/rel_notes/release_26_11.rst +++ b/doc/guides/rel_notes/release_26_11.rst @@ -80,6 +80,10 @@ Removed Items * Removed the ``dpdk-test-pipeline`` application, which was based on the legacy pipeline library API. +* Removed the ``ip_pipeline`` example application, which was based on + the legacy pipeline library API. + The ``pipeline`` example application covers the SWX pipeline API. + API Changes ----------- diff --git a/doc/guides/sample_app_ug/index.rst b/doc/guides/sample_app_ug/index.rst index c8b50b801c..28c4c9a5b2 100644 --- a/doc/guides/sample_app_ug/index.rst +++ b/doc/guides/sample_app_ug/index.rst @@ -44,7 +44,6 @@ Sample Applications User Guides vhost_blk vhost_crypto vdpa - ip_pipeline pipeline eventdev_pipeline dist_app diff --git a/doc/guides/sample_app_ug/ip_pipeline.rst b/doc/guides/sample_app_ug/ip_pipeline.rst deleted file mode 100644 index 9a5cb517a2..0000000000 --- a/doc/guides/sample_app_ug/ip_pipeline.rst +++ /dev/null @@ -1,531 +0,0 @@ -.. SPDX-License-Identifier: BSD-3-Clause - Copyright(c) 2015-2018 Intel Corporation. - -Internet Protocol (IP) Pipeline Application -=========================================== - -Application overview --------------------- - -The *Internet Protocol (IP) Pipeline* application is intended to be a vehicle for rapid development of packet processing -applications on multi-core CPUs. - -Following OpenFlow and P4 design principles, the application can be used to create functional blocks called pipelines out -of input/output ports, tables and actions in a modular way. Multiple pipelines can be inter-connected through packet queues -to create complete applications (super-pipelines). - -The pipelines are mapped to application threads, with each pipeline executed by a single thread and each thread able to run -one or several pipelines. The possibilities of creating pipelines out of ports, tables and actions, connecting multiple -pipelines together and mapping the pipelines to execution threads are endless, therefore this application can be seen as -a true application generator. - -Pipelines are created and managed through Command Line Interface (CLI): - - * Any standard TCP client (e.g. telnet, netcat, custom script, etc) is typically able to connect to the application, send - commands through the network and wait for the response before pushing the next command. - - * All the application objects are created and managed through CLI commands: - * 'Primitive' objects used to create pipeline ports: memory pools, links (i.e. network interfaces), SW queues, traffic managers, etc. - * Action profiles: used to define the actions to be executed by pipeline input/output ports and tables. - * Pipeline components: input/output ports, tables, pipelines, mapping of pipelines to execution threads. - -Running the application ------------------------ - -The application startup command line is:: - - dpdk-ip_pipeline [EAL_ARGS] -- [-s SCRIPT_FILE] [-h HOST] [-p PORT] - -The application startup arguments are: - -``-s SCRIPT_FILE`` - - * Optional: Yes - - * Default: Not present - - * Argument: Path to the CLI script file to be run at application startup. - No CLI script file will run at startup if this argument is not present. - -``-h HOST`` - - * Optional: Yes - - * Default: ``0.0.0.0`` - - * Argument: IP Address of the host running ip pipeline application to be used by - remote TCP based client (telnet, netcat, etc.) for connection. - -``-p PORT`` - - * Optional: Yes - - * Default: ``8086`` - - * Argument: TCP port number at which the ip pipeline is running. - This port number should be used by remote TCP client (such as telnet, netcat, etc.) to connect to host application. - -Refer to *DPDK Getting Started Guide* for general information on running applications and the Environment Abstraction Layer (EAL) options. - -The following is an example command to run ip pipeline application configured for layer 2 forwarding: - -.. code-block:: console - - $ .//examples/dpdk-ip_pipeline -l 0,1 -- -s examples/route_ecmp.cli - -The application should start successfully and display as follows: - -.. code-block:: console - - EAL: Detected 40 lcore(s) - EAL: Detected 2 NUMA nodes - EAL: Multi-process socket /var/run/.rte_unix - EAL: Probing VFIO support... - EAL: PCI device 0000:02:00.0 on NUMA socket 0 - EAL: probe driver: 8086:10fb net_ixgbe - ... - -To run remote client (e.g. telnet) to communicate with the ip pipeline application: - -.. code-block:: console - - $ telnet 127.0.0.1 8086 - -When running a telnet client as above, command prompt is displayed: - -.. code-block:: console - - Trying 127.0.0.1... - Connected to 127.0.0.1. - Escape character is '^]'. - - Welcome to IP Pipeline! - - pipeline> - -Once application and telnet client start running, messages can be sent from client to application. -At any stage, telnet client can be terminated using the quit command. - - -Application stages ------------------- - -Initialization -~~~~~~~~~~~~~~ - -During this stage, EAL layer is initialised and application specific arguments are parsed. Furthermore, the data structures -(i.e. linked lists) for application objects are initialized. In case of any initialization error, an error message -is displayed and the application is terminated. - -Run-time -~~~~~~~~ - -The main thread is creating and managing all the application objects based on CLI input. - -Each data plane thread runs one or several pipelines previously assigned to it in round-robin order. Each data plane thread -executes two tasks in time-sharing mode: - -#. *Packet processing task*: Process bursts of input packets read from the pipeline input ports. - -#. *Message handling task*: Periodically, the data plane thread pauses the packet processing task and polls for request - messages send by the main thread. Examples: add/remove pipeline to/from current data plane thread, add/delete rules - to/from given table of a specific pipeline owned by the current data plane thread, read statistics, etc. - -Examples --------- - -.. tabularcolumns:: |p{3cm}|p{5cm}|p{4cm}|p{4cm}| - -.. table:: Pipeline examples provided with the application - - +-----------------------+----------------------+----------------+------------------------------------+ - | Name | Table(s) | Actions | Messages | - +=======================+======================+================+====================================+ - | L2fwd | Stub | Forward | 1. Mempool create | - | | | | 2. Link create | - | Note: Implemented | | | 3. Pipeline create | - | using pipeline with | | | 4. Pipeline port in/out | - | a simple pass-through | | | 5. Pipeline table | - | connection between | | | 6. Pipeline port in table | - | input and output | | | 7. Pipeline enable | - | ports. | | | 8. Pipeline table rule add | - +-----------------------+----------------------+----------------+------------------------------------+ - | Flow classification | Exact match | Forward | 1. Mempool create | - | | | | 2. Link create | - | | * Key = byte array | | 3. Pipeline create | - | | (16 bytes) | | 4. Pipeline port in/out | - | | * Offset = 278 | | 5. Pipeline table | - | | * Table size = 64K | | 6. Pipeline port in table | - | | | | 7. Pipeline enable | - | | | | 8. Pipeline table rule add default | - | | | | 9. Pipeline table rule add | - +-----------------------+----------------------+----------------+------------------------------------+ - | Firewall | ACL | Allow/Drop | 1. Mempool create | - | | | | 2. Link create | - | | * Key = n-tuple | | 3. Pipeline create | - | | * Offset = 270 | | 4. Pipeline port in/out | - | | * Table size = 4K | | 5. Pipeline table | - | | | | 6. Pipeline port in table | - | | | | 7. Pipeline enable | - | | | | 8. Pipeline table rule add default | - | | | | 9. Pipeline table rule add | - +-----------------------+----------------------+----------------+------------------------------------+ - | IP routing | LPM (IPv4) | Forward | 1. Mempool Create | - | | | | 2. Link create | - | | * Key = IP dest addr | | 3. Pipeline create | - | | * Offset = 286 | | 4. Pipeline port in/out | - | | * Table size = 4K | | 5. Pipeline table | - | | | | 6. Pipeline port in table | - | | | | 7. Pipeline enable | - | | | | 8. Pipeline table rule add default | - | | | | 9. Pipeline table rule add | - +-----------------------+----------------------+----------------+------------------------------------+ - | Equal-cost multi-path | LPM (IPv4) | Forward, | 1. Mempool Create | - | routing (ECMP) | | load balance, | 2. Link create | - | | * Key = IP dest addr | encap ether | 3. Pipeline create | - | | * Offset = 286 | | 4. Pipeline port in/out | - | | * Table size = 4K | | 5. Pipeline table (LPM) | - | | | | 6. Pipeline table (Array) | - | | | | 7. Pipeline port in table (LPM) | - | | Array | | 8. Pipeline enable | - | | | | 9. Pipeline table rule add default | - | | * Key = Array index | | 10. Pipeline table rule add(LPM) | - | | * Offset = 256 | | 11. Pipeline table rule add(Array) | - | | * Size = 64K | | | - | | | | | - +-----------------------+----------------------+----------------+------------------------------------+ - -Command Line Interface (CLI) ----------------------------- - -Link -~~~~ - - Link configuration :: - - link - dev |port - rxq - txq promiscuous on | off - [rss ... ] - - Note: The PCI device name must be specified in the Domain:Bus:Device.Function format. - - -Mempool -~~~~~~~ - - Mempool create :: - - mempool buffer - pool cache cpu - - -Software queue -~~~~~~~~~~~~~~ - - Create software queue :: - - swq size cpu - - -Traffic manager -~~~~~~~~~~~~~~~ - - Add traffic manager subport profile :: - - tmgr subport profile - - - - - - - Add traffic manager pipe profile :: - - tmgr pipe profile - - - - - - - - - Create traffic manager port :: - - tmgr - rate - spp - pps - fo - mtu - cpu - - Configure traffic manager subport :: - - tmgr - subport - profile - - Configure traffic manager pipe :: - - tmgr - subport - pipe from to - profile - - -Tap -~~~ - - Create tap port :: - - tap - - -Cryptodev -~~~~~~~~~ - - Create cryptodev port :: - - cryptodev - dev - queue - -Action profile -~~~~~~~~~~~~~~ - - Create action profile for pipeline input port :: - - port in action profile - [filter match | mismatch offset mask key port ] - [balance offset mask port ... ] - - Create action profile for the pipeline table :: - - table action profile - ipv4 | ipv6 - offset - fwd - [balance offset mask outoffset ] - [meter srtcm | trtcm - tc - stats none | pkts | bytes | both] - [tm spp pps ] - [encap ether | vlan | qinq | mpls | pppoe] - [nat src | dst - proto udp | tcp] - [ttl drop | fwd - stats none | pkts] - [stats pkts | bytes | both] - [sym_crypto cryptodev - mempool_create mempool_init ] - [time] - - -Pipeline -~~~~~~~~ - -Create pipeline :: - - pipeline - period - offset_port_id - cpu - -Create pipeline input port :: - - pipeline port in - bsz - link rxq - | swq - | tmgr - | tap mempool mtu - | source mempool file bpp - [action ] - [disabled] - -Create pipeline output port :: - - pipeline port out - bsz - link txq - | swq - | tmgr - | tap - | sink [file pkts ] - -Create pipeline table :: - - pipeline table - match - acl - ipv4 | ipv6 - offset - size - | array - offset - size - | hash - ext | lru - key - mask - offset - buckets - size - | lpm - ipv4 | ipv6 - offset - size - | stub - [action ] - -Connect pipeline input port to table :: - - pipeline port in table - -Display statistics for specific pipeline input port, output port -or table :: - - pipeline port in stats read [clear] - pipeline port out stats read [clear] - pipeline table stats read [clear] - -Enable given input port for specific pipeline instance :: - - pipeline port out disable - -Disable given input port for specific pipeline instance :: - - pipeline port out disable - -Add default rule to table for specific pipeline instance :: - - pipeline table rule add - match - default - action - fwd - drop - | port - | meta - | table - -Add rule to table for specific pipeline instance :: - - pipeline table rule add - - match - acl - priority - ipv4 | ipv6 - - | array - | hash - raw - | ipv4_5tuple - | ipv6_5tuple - | ipv4_addr - | ipv6_addr - | qinq - | lpm - ipv4 | ipv6 - - action - fwd - drop - | port - | meta - | table - [balance ... ] - [meter - tc0 meter policer g y r - [tc1 meter policer g y r - tc2 meter policer g y r - tc3 meter policer g y r ]] - [tm subport pipe ] - [encap - ether - | vlan - | qinq - | mpls unicast | multicast - - label0