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 20348DE0 for ; Tue, 27 May 2014 19:09:49 +0200 (CEST) Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga102.jf.intel.com with ESMTP; 27 May 2014 10:04:50 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="4.98,920,1392192000"; d="scan'208";a="518452163" Received: from irvmail001.ir.intel.com ([163.33.26.43]) by orsmga001.jf.intel.com with ESMTP; 27 May 2014 10:09:58 -0700 Received: from sivswdev01.ir.intel.com (sivswdev01.ir.intel.com [10.237.217.45]) by irvmail001.ir.intel.com (8.14.3/8.13.6/MailSET/Hub) with ESMTP id s4RH9vRA012373; Tue, 27 May 2014 18:09:57 +0100 Received: from sivswdev01.ir.intel.com (localhost [127.0.0.1]) by sivswdev01.ir.intel.com with ESMTP id s4RH9vma019807; Tue, 27 May 2014 18:09:57 +0100 Received: (from cfdumitr@localhost) by sivswdev01.ir.intel.com with id s4RH9viA019802; Tue, 27 May 2014 18:09:57 +0100 From: Cristian Dumitrescu To: dev@dpdk.org Date: Tue, 27 May 2014 18:09:23 +0100 Message-Id: <1401210592-19732-1-git-send-email-cristian.dumitrescu@intel.com> X-Mailer: git-send-email 1.7.0.7 Subject: [dpdk-dev] [PATCH 00/29] Packet Framework 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, 27 May 2014 17:09:52 -0000 Intel DPDK Packet Framework provides a standard methodology (logically similar to OpenFlow) for rapid development of complex packet processing pipelines out of ports, tables and actions. A pipeline is constructed by connecting its input ports to its output ports through a chain of lookup tables. As result of lookup operation into the current table, one of the table entries (or the default table entry, in case of lookup miss) is identified to provide the actions to be executed on the current packet and the associated action meta-data. The behavior of user actions is defined through the configurable table action handler, while the reserved actions define the next hop for the current packet (either another table, an output port or packet drop) and are handled transparently by the framework. Three new Intel DPDK libraries are introduced for Packet Framework: librte_port, librte_table, librte_pipeline. Please check the Intel DPDK Programmer's Guide for full description of the Packet Framework design. Two sample applications are provided for Packet Framework: app/test-pipeline and examples/ip_pipeline. Please check the Intel Sample Apps Guide for a detailed description of how these sample apps. Cristian Dumitrescu (29): librte_lpm: rule_is_present hexdump: fixed minor build issue log: added log IDs for Packet Framework libraries mbuf: added offset of packet meta-data in the packet buffer just after mbuf Packet Framework librte_port: Port API Packet Framework librte_port: ethdev ports Packet Framework librte_port: ring ports Packet Framework librte_port: IPv4 frag port Packet Framework librte_port: IPv4 reassembly Packet Framework librte_port: hierarchical scheduler port Packet Framework librte_port: Source/Sink ports Packet Framework librte_port: Makefile Packet Framework librte_table: Table API Packet Framework librte_table: LPM IPv4 table Packet Framework librte_table: LPM IPv6 table Packet Framework librte_table: ACL table Packet Framework librte_table: Hash tables Packet Framework librte_table: array table Packet Framework librte_table: Stub table Packet Framework librte_table: Makefile Packet Framework librte_pipeline: Pipeline Packet Framework librte_pipeline: Makefile librte_cfgfile: interpret config files librte_cfgfile: Makefile Packet Framework: build infrastructure Packet Framework performance application Packet Framework IPv4 pipeline sample app app/Makefile: enable app/test-pipeline Packet Framework unit tests app/Makefile | 1 + app/test-pipeline/Makefile | 66 + app/test-pipeline/config.c | 252 +++ app/test-pipeline/init.c | 305 ++++ app/test-pipeline/main.c | 181 ++ app/test-pipeline/main.h | 148 ++ app/test-pipeline/pipeline_acl.c | 274 +++ app/test-pipeline/pipeline_hash.c | 496 +++++ app/test-pipeline/pipeline_lpm.c | 196 ++ app/test-pipeline/pipeline_lpm_ipv6.c | 198 ++ app/test-pipeline/pipeline_stub.c | 167 ++ app/test-pipeline/runtime.c | 188 ++ app/test/Makefile | 6 + app/test/commands.c | 4 +- app/test/test.h | 1 + app/test/test_table.c | 220 +++ app/test/test_table.h | 207 +++ app/test/test_table_acl.c | 591 ++++++ app/test/test_table_acl.h | 36 + app/test/test_table_combined.c | 745 ++++++++ app/test/test_table_combined.h | 56 + app/test/test_table_pipeline.c | 590 ++++++ app/test/test_table_pipeline.h | 36 + app/test/test_table_ports.c | 215 +++ app/test/test_table_ports.h | 43 + app/test/test_table_tables.c | 801 ++++++++ app/test/test_table_tables.h | 51 + config/common_bsdapp | 25 + config/common_linuxapp | 24 + examples/ip_pipeline/Makefile | 67 + examples/ip_pipeline/cmdline.c | 1909 ++++++++++++++++++++ examples/ip_pipeline/config.c | 381 ++++ examples/ip_pipeline/init.c | 637 +++++++ examples/ip_pipeline/ip_pipeline.cfg | 56 + examples/ip_pipeline/ip_pipeline.sh | 18 + examples/ip_pipeline/main.c | 170 ++ examples/ip_pipeline/main.h | 306 ++++ examples/ip_pipeline/pipeline_firewall.c | 311 ++++ .../ip_pipeline/pipeline_flow_classification.c | 300 +++ examples/ip_pipeline/pipeline_ipv4_frag.c | 183 ++ examples/ip_pipeline/pipeline_ipv4_ras.c | 179 ++ examples/ip_pipeline/pipeline_passthrough.c | 211 +++ examples/ip_pipeline/pipeline_routing.c | 459 +++++ examples/ip_pipeline/pipeline_rx.c | 380 ++++ examples/ip_pipeline/pipeline_tx.c | 281 +++ lib/Makefile | 4 + lib/librte_cfgfile/Makefile | 53 + lib/librte_cfgfile/rte_cfgfile.c | 326 ++++ lib/librte_cfgfile/rte_cfgfile.h | 90 + lib/librte_eal/common/include/rte_hexdump.h | 2 + lib/librte_eal/common/include/rte_log.h | 3 + lib/librte_lpm/rte_lpm.c | 26 + lib/librte_lpm/rte_lpm.h | 18 + lib/librte_lpm/rte_lpm6.c | 30 + lib/librte_lpm/rte_lpm6.h | 18 + lib/librte_mbuf/rte_mbuf.h | 17 + lib/librte_pipeline/Makefile | 54 + lib/librte_pipeline/rte_pipeline.c | 1336 ++++++++++++++ lib/librte_pipeline/rte_pipeline.h | 651 +++++++ lib/librte_port/Makefile | 72 + lib/librte_port/ipv4_frag_tbl.h | 403 +++++ lib/librte_port/ipv4_rsmbl.h | 429 +++++ lib/librte_port/rte_ipv4_frag.h | 254 +++ lib/librte_port/rte_port.h | 190 ++ lib/librte_port/rte_port_ethdev.c | 306 ++++ lib/librte_port/rte_port_ethdev.h | 86 + lib/librte_port/rte_port_frag.c | 230 +++ lib/librte_port/rte_port_frag.h | 94 + lib/librte_port/rte_port_ras.c | 259 +++ lib/librte_port/rte_port_ras.h | 83 + lib/librte_port/rte_port_ring.c | 242 +++ lib/librte_port/rte_port_ring.h | 82 + lib/librte_port/rte_port_sched.c | 237 +++ lib/librte_port/rte_port_sched.h | 82 + lib/librte_port/rte_port_source_sink.c | 159 ++ lib/librte_port/rte_port_source_sink.h | 70 + lib/librte_table/Makefile | 85 + lib/librte_table/rte_lru.h | 198 ++ lib/librte_table/rte_table.h | 201 ++ lib/librte_table/rte_table_acl.c | 463 +++++ lib/librte_table/rte_table_acl.h | 95 + lib/librte_table/rte_table_array.c | 198 ++ lib/librte_table/rte_table_array.h | 76 + lib/librte_table/rte_table_hash.h | 349 ++++ lib/librte_table/rte_table_hash_ext.c | 1070 +++++++++++ lib/librte_table/rte_table_hash_key16.c | 1086 +++++++++++ lib/librte_table/rte_table_hash_key32.c | 1100 +++++++++++ lib/librte_table/rte_table_hash_key8.c | 1372 ++++++++++++++ lib/librte_table/rte_table_hash_lru.c | 1021 +++++++++++ lib/librte_table/rte_table_lpm.c | 332 ++++ lib/librte_table/rte_table_lpm.h | 115 ++ lib/librte_table/rte_table_lpm_ipv6.c | 340 ++++ lib/librte_table/rte_table_lpm_ipv6.h | 119 ++ lib/librte_table/rte_table_stub.c | 65 + lib/librte_table/rte_table_stub.h | 62 + mk/rte.app.mk | 16 + 96 files changed, 26239 insertions(+), 1 deletions(-) create mode 100644 app/test-pipeline/Makefile create mode 100644 app/test-pipeline/config.c create mode 100644 app/test-pipeline/init.c create mode 100644 app/test-pipeline/main.c create mode 100644 app/test-pipeline/main.h create mode 100644 app/test-pipeline/pipeline_acl.c create mode 100644 app/test-pipeline/pipeline_hash.c create mode 100644 app/test-pipeline/pipeline_lpm.c create mode 100644 app/test-pipeline/pipeline_lpm_ipv6.c create mode 100644 app/test-pipeline/pipeline_stub.c create mode 100644 app/test-pipeline/runtime.c create mode 100644 app/test/test_table.c create mode 100644 app/test/test_table.h create mode 100644 app/test/test_table_acl.c create mode 100644 app/test/test_table_acl.h create mode 100644 app/test/test_table_combined.c create mode 100644 app/test/test_table_combined.h create mode 100644 app/test/test_table_pipeline.c create mode 100644 app/test/test_table_pipeline.h create mode 100644 app/test/test_table_ports.c create mode 100644 app/test/test_table_ports.h create mode 100644 app/test/test_table_tables.c create mode 100644 app/test/test_table_tables.h create mode 100644 examples/ip_pipeline/Makefile create mode 100644 examples/ip_pipeline/cmdline.c create mode 100644 examples/ip_pipeline/config.c create mode 100644 examples/ip_pipeline/init.c create mode 100644 examples/ip_pipeline/ip_pipeline.cfg create mode 100644 examples/ip_pipeline/ip_pipeline.sh create mode 100644 examples/ip_pipeline/main.c create mode 100644 examples/ip_pipeline/main.h create mode 100644 examples/ip_pipeline/pipeline_firewall.c create mode 100644 examples/ip_pipeline/pipeline_flow_classification.c create mode 100644 examples/ip_pipeline/pipeline_ipv4_frag.c create mode 100644 examples/ip_pipeline/pipeline_ipv4_ras.c create mode 100644 examples/ip_pipeline/pipeline_passthrough.c create mode 100644 examples/ip_pipeline/pipeline_routing.c create mode 100644 examples/ip_pipeline/pipeline_rx.c create mode 100644 examples/ip_pipeline/pipeline_tx.c create mode 100644 lib/librte_cfgfile/Makefile create mode 100644 lib/librte_cfgfile/rte_cfgfile.c create mode 100644 lib/librte_cfgfile/rte_cfgfile.h create mode 100644 lib/librte_pipeline/Makefile create mode 100644 lib/librte_pipeline/rte_pipeline.c create mode 100644 lib/librte_pipeline/rte_pipeline.h create mode 100644 lib/librte_port/Makefile create mode 100644 lib/librte_port/ipv4_frag_tbl.h create mode 100644 lib/librte_port/ipv4_rsmbl.h create mode 100644 lib/librte_port/rte_ipv4_frag.h create mode 100644 lib/librte_port/rte_port.h create mode 100644 lib/librte_port/rte_port_ethdev.c create mode 100644 lib/librte_port/rte_port_ethdev.h create mode 100644 lib/librte_port/rte_port_frag.c create mode 100644 lib/librte_port/rte_port_frag.h create mode 100644 lib/librte_port/rte_port_ras.c create mode 100644 lib/librte_port/rte_port_ras.h create mode 100644 lib/librte_port/rte_port_ring.c create mode 100644 lib/librte_port/rte_port_ring.h create mode 100644 lib/librte_port/rte_port_sched.c create mode 100644 lib/librte_port/rte_port_sched.h create mode 100644 lib/librte_port/rte_port_source_sink.c create mode 100644 lib/librte_port/rte_port_source_sink.h create mode 100644 lib/librte_table/Makefile create mode 100644 lib/librte_table/rte_lru.h create mode 100644 lib/librte_table/rte_table.h create mode 100644 lib/librte_table/rte_table_acl.c create mode 100644 lib/librte_table/rte_table_acl.h create mode 100644 lib/librte_table/rte_table_array.c create mode 100644 lib/librte_table/rte_table_array.h create mode 100644 lib/librte_table/rte_table_hash.h create mode 100644 lib/librte_table/rte_table_hash_ext.c create mode 100644 lib/librte_table/rte_table_hash_key16.c create mode 100644 lib/librte_table/rte_table_hash_key32.c create mode 100644 lib/librte_table/rte_table_hash_key8.c create mode 100644 lib/librte_table/rte_table_hash_lru.c create mode 100644 lib/librte_table/rte_table_lpm.c create mode 100644 lib/librte_table/rte_table_lpm.h create mode 100644 lib/librte_table/rte_table_lpm_ipv6.c create mode 100644 lib/librte_table/rte_table_lpm_ipv6.h create mode 100644 lib/librte_table/rte_table_stub.c create mode 100644 lib/librte_table/rte_table_stub.h -- 1.7.7.6