John DeNisco | 06dcd45 | 2018-07-26 12:45:10 -0400 | [diff] [blame] | 1 | .. _extensible: |
| 2 | |
John DeNisco | c96d618 | 2019-11-06 10:58:28 -0800 | [diff] [blame] | 3 | =========================== |
| 4 | The Packet Processing Graph |
| 5 | =========================== |
| 6 | |
| 7 | At the core of the FD.io VPP design is the **Packet Procerssing Graph** |
| 8 | |
| 9 | This makes the software: |
John DeNisco | 06dcd45 | 2018-07-26 12:45:10 -0400 | [diff] [blame] | 10 | |
| 11 | * Pluggable, easy to understand & extend |
| 12 | * Mature graph node architecture |
| 13 | * Full control to reorganize the pipeline |
| 14 | * Fast, plugins are equal citizens |
| 15 | |
John DeNisco | 06dcd45 | 2018-07-26 12:45:10 -0400 | [diff] [blame] | 16 | The FD.io VPP packet processing pipeline is decomposed into a ‘packet processing |
| 17 | graph’. This modular approach means that anyone can ‘plugin’ new graph |
Paul Vinciguerra | 7fa3dd2 | 2019-10-27 17:28:10 -0400 | [diff] [blame] | 18 | nodes. This makes VPP easily extensible and means that plugins can be |
John DeNisco | 06dcd45 | 2018-07-26 12:45:10 -0400 | [diff] [blame] | 19 | customized for specific purposes. VPP is also configurable through it's |
| 20 | Low-Level API. |
| 21 | |
| 22 | .. figure:: /_images/VPP_custom_application_packet_processing_graph.280.jpg |
| 23 | :alt: Extensible, modular graph node architecture? |
| 24 | |
| 25 | Extensible and modular graph node architecture. |
| 26 | |
| 27 | At runtime, the FD.io VPP platform assembles a vector of packets from RX rings, |
| 28 | typically up to 256 packets in a single vector. The packet processing graph is |
| 29 | then applied, node by node (including plugins) to the entire packet vector. The |
| 30 | received packets typically traverse the packet processing graph nodes in the |
| 31 | vector, when the network processing represented by each graph node is applied to |
| 32 | each packet in turn. Graph nodes are small and modular, and loosely |
| 33 | coupled. This makes it easy to introduce new graph nodes and rewire existing |
| 34 | graph nodes. |
| 35 | |
| 36 | Plugins are `shared libraries <https://en.wikipedia.org/wiki/Library_(computing)>`_ |
| 37 | and are loaded at runtime by VPP. VPP find plugins by searching the plugin path |
| 38 | for libraries, and then dynamically loads each one in turn on startup. |
| 39 | A plugin can introduce new graph nodes or rearrange the packet processing graph. |
| 40 | You can build a plugin completely independently of the FD.io VPP source tree, |
| 41 | which means you can treat it as an independent component. |
John DeNisco | c96d618 | 2019-11-06 10:58:28 -0800 | [diff] [blame] | 42 | |
| 43 | For more on the network stack press next. |