[dpdk-dev] [v2 00/23] Packet Framework

Cristian Dumitrescu cristian.dumitrescu at intel.com
Wed Jun 4 20:08:16 CEST 2014


(Version 2 changes are exclusively style changes (checkpatch.pl) and patch consolidation, no functional change)

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 (23):
  librte_lpm: rule_is_present
  mbuf: meta-data
  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: Build infrastructure
  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: Build infrastructure
  Packet Framework librte_pipeline: Pipeline
  librte_cfgfile: interpret config files
  Packet Framework performance application
  Packet Framework IPv4 pipeline sample app
  Packet Framework unit tests

 app/Makefile                                       |    1 +
 app/test-pipeline/Makefile                         |   66 +
 app/test-pipeline/config.c                         |  248 +++
 app/test-pipeline/init.c                           |  295 +++
 app/test-pipeline/main.c                           |  180 ++
 app/test-pipeline/main.h                           |  148 ++
 app/test-pipeline/pipeline_acl.c                   |  278 +++
 app/test-pipeline/pipeline_hash.c                  |  487 +++++
 app/test-pipeline/pipeline_lpm.c                   |  196 ++
 app/test-pipeline/pipeline_lpm_ipv6.c              |  200 ++
 app/test-pipeline/pipeline_stub.c                  |  165 ++
 app/test-pipeline/runtime.c                        |  185 ++
 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                              |  204 ++
 app/test/test_table_acl.c                          |  593 ++++++
 app/test/test_table_acl.h                          |   35 +
 app/test/test_table_combined.c                     |  784 ++++++++
 app/test/test_table_combined.h                     |   55 +
 app/test/test_table_pipeline.c                     |  603 ++++++
 app/test/test_table_pipeline.h                     |   35 +
 app/test/test_table_ports.c                        |  224 +++
 app/test/test_table_ports.h                        |   42 +
 app/test/test_table_tables.c                       |  907 +++++++++
 app/test/test_table_tables.h                       |   50 +
 config/common_bsdapp                               |   25 +
 config/common_linuxapp                             |   24 +
 doc/doxy-api-index.md                              |   17 +
 doc/doxy-api.conf                                  |    3 +
 examples/ip_pipeline/Makefile                      |   67 +
 examples/ip_pipeline/cmdline.c                     | 1976 ++++++++++++++++++++
 examples/ip_pipeline/config.c                      |  420 +++++
 examples/ip_pipeline/init.c                        |  614 ++++++
 examples/ip_pipeline/ip_pipeline.cfg               |   56 +
 examples/ip_pipeline/ip_pipeline.sh                |   18 +
 examples/ip_pipeline/main.c                        |  171 ++
 examples/ip_pipeline/main.h                        |  306 +++
 examples/ip_pipeline/pipeline_firewall.c           |  313 ++++
 .../ip_pipeline/pipeline_flow_classification.c     |  306 +++
 examples/ip_pipeline/pipeline_ipv4_frag.c          |  184 ++
 examples/ip_pipeline/pipeline_ipv4_ras.c           |  181 ++
 examples/ip_pipeline/pipeline_passthrough.c        |  213 +++
 examples/ip_pipeline/pipeline_routing.c            |  474 +++++
 examples/ip_pipeline/pipeline_rx.c                 |  385 ++++
 examples/ip_pipeline/pipeline_tx.c                 |  283 +++
 lib/Makefile                                       |    4 +
 lib/librte_cfgfile/Makefile                        |   53 +
 lib/librte_cfgfile/rte_cfgfile.c                   |  354 ++++
 lib/librte_cfgfile/rte_cfgfile.h                   |  195 ++
 lib/librte_eal/common/include/rte_hexdump.h        |    2 +
 lib/librte_eal/common/include/rte_log.h            |    3 +
 lib/librte_lpm/rte_lpm.c                           |   29 +
 lib/librte_lpm/rte_lpm.h                           |   19 +
 lib/librte_lpm/rte_lpm6.c                          |   31 +
 lib/librte_lpm/rte_lpm6.h                          |   19 +
 lib/librte_mbuf/rte_mbuf.h                         |   25 +
 lib/librte_pipeline/Makefile                       |   54 +
 lib/librte_pipeline/rte_pipeline.c                 | 1373 ++++++++++++++
 lib/librte_pipeline/rte_pipeline.h                 |  664 +++++++
 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                    |  253 +++
 lib/librte_port/rte_port.h                         |  190 ++
 lib/librte_port/rte_port_ethdev.c                  |  305 +++
 lib/librte_port/rte_port_ethdev.h                  |   86 +
 lib/librte_port/rte_port_frag.c                    |  235 +++
 lib/librte_port/rte_port_frag.h                    |   94 +
 lib/librte_port/rte_port_ras.c                     |  256 +++
 lib/librte_port/rte_port_ras.h                     |   83 +
 lib/librte_port/rte_port_ring.c                    |  237 +++
 lib/librte_port/rte_port_ring.h                    |   82 +
 lib/librte_port/rte_port_sched.c                   |  239 +++
 lib/librte_port/rte_port_sched.h                   |   82 +
 lib/librte_port/rte_port_source_sink.c             |  158 ++
 lib/librte_port/rte_port_source_sink.h             |   70 +
 lib/librte_table/Makefile                          |   85 +
 lib/librte_table/rte_lru.h                         |  213 +++
 lib/librte_table/rte_table.h                       |  202 ++
 lib/librte_table/rte_table_acl.c                   |  490 +++++
 lib/librte_table/rte_table_acl.h                   |   95 +
 lib/librte_table/rte_table_array.c                 |  204 ++
 lib/librte_table/rte_table_array.h                 |   76 +
 lib/librte_table/rte_table_hash.h                  |  350 ++++
 lib/librte_table/rte_table_hash_ext.c              | 1122 +++++++++++
 lib/librte_table/rte_table_hash_key16.c            | 1100 +++++++++++
 lib/librte_table/rte_table_hash_key32.c            | 1120 +++++++++++
 lib/librte_table/rte_table_hash_key8.c             | 1398 ++++++++++++++
 lib/librte_table/rte_table_hash_lru.c              | 1065 +++++++++++
 lib/librte_table/rte_table_lpm.c                   |  347 ++++
 lib/librte_table/rte_table_lpm.h                   |  115 ++
 lib/librte_table/rte_table_lpm_ipv6.c              |  361 ++++
 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 +
 98 files changed, 26951 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



More information about the dev mailing list