[dpdk-dev] [PATCH v4 00/49] ip_pipeline: refactoring

Jasvinder Singh jasvinder.singh at intel.com
Thu Mar 29 20:31:19 CEST 2018


Refactored the IP pipeline application. As result, the code base
size (lines of code) reduces by ~60%.

1. Moved table actions into the librte_pipeline library. As result,
   the pre-fabricated pipelines from the application pipeline folder
   were removed. The flexibility is greatly improved, as now any
   action can be combined with any match (i.e. table type), which
   was not possible before.

2. Removed configuration file as the initialization method. Now
   all the pipelines are set up and assigned to threads through
   CLI commands for improved flexibility.

3. Replaced the local CLI with remote CLI. Any standard TCP
   client (e.g. telnet, netcat) can now connect to the app,
   send request as command string through the network and wait
   for the response string before pushing the next command.
   Results in better flexibility and automation.

v4:
- add pipeline port action APIs.
- add load balance pipeline table action.
- add cli for adding bulk entries to pipeline table.
- add check to return error when pipeline is not enabled on the thread.
- add source and sink port params to cli

v3:
- add checksum update for TTL and NAT action
- fix build warning

v2:
- split the patch that removes the existing pipeline components
  into multiple patches.
- fix checkpatch errors.

Jasvinder Singh (49):
  pipeline: add pipeline table action APIs
  pipeline: get pipeline table action params
  pipeline: add traffic metering action
  pipeline: add traffic manager action
  pipeline: add packet encapsulation action
  pipeline: add nat action
  pipeline: add ttl update action
  pipeline: add statistics read action
  pipeline: add timestamp action
  pipeline: add load balance action
  pipeline: add pipeline port in action APIs
  librte_table/acl: remove incorrect check
  ip_pipeline: remove passthrough pipeline
  ip_pipeline: remove routing pipeline
  ip_pipeline: remove flow classification pipeline
  ip_pipeline: remove flow actions pipeline
  ip_pipeline: remove firewall pipeline
  ip_pipeline: remove master pipeline
  ip_pipeline: remove config
  ip_pipeline: rework and improvements
  ip_pipeline: add cli interface
  ip_pipeline: add mempool object for pipeline
  ip_pipeline: add link object
  ip_pipeline: add software queue object
  ip_pipeline: add traffic manager object
  ip_pipeline: add tap object
  ip_pipeline: add kni object
  ip_pipeline: add action profile object
  ip_pipeline: add pipeline object
  ip_pipeline: add threads
  ip_pipeline: add thread runtime
  ip_pipeline: add cli to enable and disable pipeline
  ip_pipeline: add cli to enable and disable pipeline port
  ip_pipeline: add cli to read pipeline port and table stats
  ip_pipeline: add cli for pipeline table entry
  ip_pipeline: add cli to delete pipeline table entry
  ip_pipeline: add cli for bulk entries to pipeline table
  ip_pipeline: add cli to read pipeline table entry stats
  ip_pipeline: add cli to configure meter profile
  ip_pipeline: add cli to read meter stats
  ip_pipeline: add cli to update dscp table
  ip_pipeline: add cli to read ttl stats
  ip_pipeline: add cli for load balance action
  ip_pipeline: add l2fwd example
  ip_pipeline: add KNI port example
  ip_pipeline: add TAP port example
  ip_pipeline: add route example
  ip_pipeline: add firewall example
  ip_pipeline: add flow classification example

 doc/api/doxy-api-index.md                          |    1 +
 examples/ip_pipeline/Makefile                      |   49 +-
 examples/ip_pipeline/action.c                      |  289 ++
 examples/ip_pipeline/action.h                      |   77 +
 examples/ip_pipeline/app.h                         | 1401 ------
 examples/ip_pipeline/cli.c                         | 4814 ++++++++++++++++++++
 examples/ip_pipeline/cli.h                         |   18 +
 examples/ip_pipeline/common.h                      |   12 +
 examples/ip_pipeline/config/action.cfg             |   68 -
 examples/ip_pipeline/config/action.sh              |  119 -
 examples/ip_pipeline/config/action.txt             |    8 -
 examples/ip_pipeline/config/diagram-generator.py   |  317 --
 .../ip_pipeline/config/edge_router_downstream.cfg  |   97 -
 .../ip_pipeline/config/edge_router_downstream.sh   |   13 -
 .../ip_pipeline/config/edge_router_upstream.cfg    |  124 -
 .../ip_pipeline/config/edge_router_upstream.sh     |   33 -
 examples/ip_pipeline/config/firewall.cfg           |   68 -
 examples/ip_pipeline/config/firewall.sh            |   13 -
 examples/ip_pipeline/config/firewall.txt           |    9 -
 examples/ip_pipeline/config/flow.cfg               |   72 -
 examples/ip_pipeline/config/flow.sh                |   25 -
 examples/ip_pipeline/config/flow.txt               |   17 -
 examples/ip_pipeline/config/ip_pipeline.cfg        |    9 -
 examples/ip_pipeline/config/ip_pipeline.sh         |    5 -
 examples/ip_pipeline/config/kni.cfg                |   67 -
 examples/ip_pipeline/config/l2fwd.cfg              |   58 -
 examples/ip_pipeline/config/l3fwd.cfg              |   68 -
 examples/ip_pipeline/config/l3fwd.sh               |   33 -
 examples/ip_pipeline/config/l3fwd_arp.cfg          |   70 -
 examples/ip_pipeline/config/l3fwd_arp.sh           |   43 -
 examples/ip_pipeline/config/network_layers.cfg     |  227 -
 examples/ip_pipeline/config/network_layers.sh      |   79 -
 .../ip_pipeline/config/pipeline-to-core-mapping.py |  906 ----
 examples/ip_pipeline/config/tap.cfg                |   64 -
 examples/ip_pipeline/config/tm_profile.cfg         |  105 -
 examples/ip_pipeline/config_check.c                |  488 --
 examples/ip_pipeline/config_parse.c                | 3395 --------------
 examples/ip_pipeline/config_parse_tm.c             |  419 --
 examples/ip_pipeline/conn.c                        |  326 ++
 examples/ip_pipeline/conn.h                        |   47 +
 examples/ip_pipeline/cpu_core_map.c                |  471 --
 examples/ip_pipeline/cpu_core_map.h                |   40 -
 examples/ip_pipeline/examples/firewall.cli         |   59 +
 examples/ip_pipeline/examples/flow.cli             |   60 +
 examples/ip_pipeline/examples/kni.cli              |   69 +
 examples/ip_pipeline/examples/l2fwd.cli            |   51 +
 examples/ip_pipeline/examples/route.cli            |   60 +
 examples/ip_pipeline/examples/tap.cli              |   66 +
 examples/ip_pipeline/{pipeline => }/hash_func.h    |    3 +-
 .../ip_pipeline/{pipeline => }/hash_func_arm64.h   |    0
 examples/ip_pipeline/init.c                        | 1927 --------
 examples/ip_pipeline/kni.c                         |  167 +
 examples/ip_pipeline/kni.h                         |   44 +
 examples/ip_pipeline/link.c                        |  268 ++
 examples/ip_pipeline/link.h                        |   63 +
 examples/ip_pipeline/main.c                        |  259 +-
 examples/ip_pipeline/mempool.c                     |   81 +
 examples/ip_pipeline/mempool.h                     |   40 +
 examples/ip_pipeline/meson.build                   |   35 +-
 examples/ip_pipeline/parser.c                      |   16 +-
 examples/ip_pipeline/parser.h                      |    8 +
 examples/ip_pipeline/pipeline.c                    |  973 ++++
 examples/ip_pipeline/pipeline.h                    |  389 +-
 .../ip_pipeline/pipeline/pipeline_actions_common.h |  202 -
 examples/ip_pipeline/pipeline/pipeline_common_be.c |  176 -
 examples/ip_pipeline/pipeline/pipeline_common_be.h |  134 -
 examples/ip_pipeline/pipeline/pipeline_common_fe.c | 1455 ------
 examples/ip_pipeline/pipeline/pipeline_common_fe.h |  231 -
 examples/ip_pipeline/pipeline/pipeline_firewall.c  | 1421 ------
 examples/ip_pipeline/pipeline/pipeline_firewall.h  |   60 -
 .../ip_pipeline/pipeline/pipeline_firewall_be.c    |  856 ----
 .../ip_pipeline/pipeline/pipeline_firewall_be.h    |  147 -
 .../ip_pipeline/pipeline/pipeline_flow_actions.c   | 1286 ------
 .../ip_pipeline/pipeline/pipeline_flow_actions.h   |   60 -
 .../pipeline/pipeline_flow_actions_be.c            |  983 ----
 .../pipeline/pipeline_flow_actions_be.h            |  139 -
 .../pipeline/pipeline_flow_classification.c        | 1878 --------
 .../pipeline/pipeline_flow_classification.h        |  106 -
 .../pipeline/pipeline_flow_classification_be.c     |  723 ---
 .../pipeline/pipeline_flow_classification_be.h     |  113 -
 examples/ip_pipeline/pipeline/pipeline_master.c    |   20 -
 examples/ip_pipeline/pipeline/pipeline_master.h    |   12 -
 examples/ip_pipeline/pipeline/pipeline_master_be.c |  141 -
 examples/ip_pipeline/pipeline/pipeline_master_be.h |   12 -
 .../ip_pipeline/pipeline/pipeline_passthrough.c    |   45 -
 .../ip_pipeline/pipeline/pipeline_passthrough.h    |   12 -
 .../ip_pipeline/pipeline/pipeline_passthrough_be.c |  929 ----
 .../ip_pipeline/pipeline/pipeline_passthrough_be.h |   44 -
 examples/ip_pipeline/pipeline/pipeline_routing.c   | 1613 -------
 examples/ip_pipeline/pipeline/pipeline_routing.h   |   71 -
 .../ip_pipeline/pipeline/pipeline_routing_be.c     | 1966 --------
 .../ip_pipeline/pipeline/pipeline_routing_be.h     |  283 --
 examples/ip_pipeline/pipeline_be.h                 |  322 --
 examples/ip_pipeline/swq.c                         |   74 +
 examples/ip_pipeline/swq.h                         |   37 +
 examples/ip_pipeline/tap.c                         |   97 +
 examples/ip_pipeline/tap.h                         |   29 +
 examples/ip_pipeline/thread.c                      | 2796 +++++++++++-
 examples/ip_pipeline/thread.h                      |   75 +-
 examples/ip_pipeline/thread_fe.c                   |  457 --
 examples/ip_pipeline/thread_fe.h                   |   72 -
 examples/ip_pipeline/tmgr.c                        |  227 +
 examples/ip_pipeline/tmgr.h                        |   70 +
 lib/librte_pipeline/Makefile                       |    7 +-
 lib/librte_pipeline/meson.build                    |    7 +-
 lib/librte_pipeline/rte_pipeline_version.map       |   29 +
 lib/librte_pipeline/rte_port_in_action.c           |  531 +++
 lib/librte_pipeline/rte_port_in_action.h           |  301 ++
 lib/librte_pipeline/rte_table_action.c             | 2386 ++++++++++
 lib/librte_pipeline/rte_table_action.h             |  905 ++++
 lib/librte_table/rte_table_acl.c                   |    6 -
 111 files changed, 15520 insertions(+), 27228 deletions(-)
 create mode 100644 examples/ip_pipeline/action.c
 create mode 100644 examples/ip_pipeline/action.h
 delete mode 100644 examples/ip_pipeline/app.h
 create mode 100644 examples/ip_pipeline/cli.c
 create mode 100644 examples/ip_pipeline/cli.h
 create mode 100644 examples/ip_pipeline/common.h
 delete mode 100644 examples/ip_pipeline/config/action.cfg
 delete mode 100644 examples/ip_pipeline/config/action.sh
 delete mode 100644 examples/ip_pipeline/config/action.txt
 delete mode 100755 examples/ip_pipeline/config/diagram-generator.py
 delete mode 100644 examples/ip_pipeline/config/edge_router_downstream.cfg
 delete mode 100644 examples/ip_pipeline/config/edge_router_downstream.sh
 delete mode 100644 examples/ip_pipeline/config/edge_router_upstream.cfg
 delete mode 100644 examples/ip_pipeline/config/edge_router_upstream.sh
 delete mode 100644 examples/ip_pipeline/config/firewall.cfg
 delete mode 100644 examples/ip_pipeline/config/firewall.sh
 delete mode 100644 examples/ip_pipeline/config/firewall.txt
 delete mode 100644 examples/ip_pipeline/config/flow.cfg
 delete mode 100644 examples/ip_pipeline/config/flow.sh
 delete mode 100644 examples/ip_pipeline/config/flow.txt
 delete mode 100644 examples/ip_pipeline/config/ip_pipeline.cfg
 delete mode 100644 examples/ip_pipeline/config/ip_pipeline.sh
 delete mode 100644 examples/ip_pipeline/config/kni.cfg
 delete mode 100644 examples/ip_pipeline/config/l2fwd.cfg
 delete mode 100644 examples/ip_pipeline/config/l3fwd.cfg
 delete mode 100644 examples/ip_pipeline/config/l3fwd.sh
 delete mode 100644 examples/ip_pipeline/config/l3fwd_arp.cfg
 delete mode 100644 examples/ip_pipeline/config/l3fwd_arp.sh
 delete mode 100644 examples/ip_pipeline/config/network_layers.cfg
 delete mode 100644 examples/ip_pipeline/config/network_layers.sh
 delete mode 100755 examples/ip_pipeline/config/pipeline-to-core-mapping.py
 delete mode 100644 examples/ip_pipeline/config/tap.cfg
 delete mode 100644 examples/ip_pipeline/config/tm_profile.cfg
 delete mode 100644 examples/ip_pipeline/config_check.c
 delete mode 100644 examples/ip_pipeline/config_parse.c
 delete mode 100644 examples/ip_pipeline/config_parse_tm.c
 create mode 100644 examples/ip_pipeline/conn.c
 create mode 100644 examples/ip_pipeline/conn.h
 delete mode 100644 examples/ip_pipeline/cpu_core_map.c
 delete mode 100644 examples/ip_pipeline/cpu_core_map.h
 create mode 100644 examples/ip_pipeline/examples/firewall.cli
 create mode 100644 examples/ip_pipeline/examples/flow.cli
 create mode 100644 examples/ip_pipeline/examples/kni.cli
 create mode 100644 examples/ip_pipeline/examples/l2fwd.cli
 create mode 100644 examples/ip_pipeline/examples/route.cli
 create mode 100644 examples/ip_pipeline/examples/tap.cli
 rename examples/ip_pipeline/{pipeline => }/hash_func.h (99%)
 rename examples/ip_pipeline/{pipeline => }/hash_func_arm64.h (100%)
 delete mode 100644 examples/ip_pipeline/init.c
 create mode 100644 examples/ip_pipeline/kni.c
 create mode 100644 examples/ip_pipeline/kni.h
 create mode 100644 examples/ip_pipeline/link.c
 create mode 100644 examples/ip_pipeline/link.h
 create mode 100644 examples/ip_pipeline/mempool.c
 create mode 100644 examples/ip_pipeline/mempool.h
 create mode 100644 examples/ip_pipeline/pipeline.c
 delete mode 100644 examples/ip_pipeline/pipeline/pipeline_actions_common.h
 delete mode 100644 examples/ip_pipeline/pipeline/pipeline_common_be.c
 delete mode 100644 examples/ip_pipeline/pipeline/pipeline_common_be.h
 delete mode 100644 examples/ip_pipeline/pipeline/pipeline_common_fe.c
 delete mode 100644 examples/ip_pipeline/pipeline/pipeline_common_fe.h
 delete mode 100644 examples/ip_pipeline/pipeline/pipeline_firewall.c
 delete mode 100644 examples/ip_pipeline/pipeline/pipeline_firewall.h
 delete mode 100644 examples/ip_pipeline/pipeline/pipeline_firewall_be.c
 delete mode 100644 examples/ip_pipeline/pipeline/pipeline_firewall_be.h
 delete mode 100644 examples/ip_pipeline/pipeline/pipeline_flow_actions.c
 delete mode 100644 examples/ip_pipeline/pipeline/pipeline_flow_actions.h
 delete mode 100644 examples/ip_pipeline/pipeline/pipeline_flow_actions_be.c
 delete mode 100644 examples/ip_pipeline/pipeline/pipeline_flow_actions_be.h
 delete mode 100644 examples/ip_pipeline/pipeline/pipeline_flow_classification.c
 delete mode 100644 examples/ip_pipeline/pipeline/pipeline_flow_classification.h
 delete mode 100644 examples/ip_pipeline/pipeline/pipeline_flow_classification_be.c
 delete mode 100644 examples/ip_pipeline/pipeline/pipeline_flow_classification_be.h
 delete mode 100644 examples/ip_pipeline/pipeline/pipeline_master.c
 delete mode 100644 examples/ip_pipeline/pipeline/pipeline_master.h
 delete mode 100644 examples/ip_pipeline/pipeline/pipeline_master_be.c
 delete mode 100644 examples/ip_pipeline/pipeline/pipeline_master_be.h
 delete mode 100644 examples/ip_pipeline/pipeline/pipeline_passthrough.c
 delete mode 100644 examples/ip_pipeline/pipeline/pipeline_passthrough.h
 delete mode 100644 examples/ip_pipeline/pipeline/pipeline_passthrough_be.c
 delete mode 100644 examples/ip_pipeline/pipeline/pipeline_passthrough_be.h
 delete mode 100644 examples/ip_pipeline/pipeline/pipeline_routing.c
 delete mode 100644 examples/ip_pipeline/pipeline/pipeline_routing.h
 delete mode 100644 examples/ip_pipeline/pipeline/pipeline_routing_be.c
 delete mode 100644 examples/ip_pipeline/pipeline/pipeline_routing_be.h
 delete mode 100644 examples/ip_pipeline/pipeline_be.h
 create mode 100644 examples/ip_pipeline/swq.c
 create mode 100644 examples/ip_pipeline/swq.h
 create mode 100644 examples/ip_pipeline/tap.c
 create mode 100644 examples/ip_pipeline/tap.h
 delete mode 100644 examples/ip_pipeline/thread_fe.c
 delete mode 100644 examples/ip_pipeline/thread_fe.h
 create mode 100644 examples/ip_pipeline/tmgr.c
 create mode 100644 examples/ip_pipeline/tmgr.h
 create mode 100644 lib/librte_pipeline/rte_port_in_action.c
 create mode 100644 lib/librte_pipeline/rte_port_in_action.h
 create mode 100644 lib/librte_pipeline/rte_table_action.c
 create mode 100644 lib/librte_pipeline/rte_table_action.h

-- 
2.9.3



More information about the dev mailing list