+++ /dev/null
-.. _p4plugin-dev-guide:
-
-P4 Plugin Developer Guide
-=========================
-
-P4 Plugin Architecture
-----------------------
-
-- **Netconf-Adapter**
-
- - Responsible for device connection, interface resource collection, and
- providing gRPC server information to P4Runtime client.
-
-- **Runtime**
-
- - Implements a gRPC client, more precisely a P4Runtime client, that provides
- several RPCs for users at runtime.
- - Supports setting and retrieving forwarding pipeline configuration
- dynamically; adding or removing multiple devices; setting up a controller
- cluster; adding, modifying, or deleting table entries; adding, modifying,
- or deleting action profile members, adding, modifying, or deleting action
- profile groups, and setting packet-in/packet-out.
-
-
-APIs in P4 Plugin
------------------
-
-The sections below give details about the configuration settings for
-the components that can be configured.
-
-Netconf Adapter
-~~~~~~~~~~~~~~~
-
-API Description
-^^^^^^^^^^^^^^^
-
-- p4plugin/adapter/netconf-adapter/api/src/main/yang/p4plugin-netconf-adapter-api.yang
-
- - **write-inventory**
-
- - Write the collecting interface resource to inventory data store.
-
- - **read-inventory**
-
- - Acquire the interface resource from inventory data store.
-
-
-Runtime
-~~~~~~~
-
-API Description
-^^^^^^^^^^^^^^^
-
-- p4plugin/runtime/api/src/main/yang/p4plugin-device.yang
-
- - **add-device**
-
- - Add a P4 device. Users need to provide node ID, device ID, gRPC server
- address, configuration file path, and runtime file path as input.
-
- In the following scenario, users must catch and handle the exception:
- If node ID or P4 target address (device ID and gRPC server address)
- already exists, parsing the configuration file and runtime file causes
- an exception, such as IOException.
-
- - **remove-device**
-
- - Remove a P4 device from local list.
-
- - **query-devices**
-
- - Query how many devices are there currently, and return a list that
- contains node IDs.
-
- - **connect-to-device**
-
- - Open the stream channel, which is for packet-in and packet-out, and
- send master arbitration update message right after the stream
- channel is created. The returned value is the connection state.
-
- - **set-pipeline-config**
-
- - Set forwarding pipeline configuration to a specific device through the
- gRPC channel, and input the node ID associated with the device.
-
- - **get-pipeline-config**
-
- - Get forwarding pipeline configuration, input the node ID associated,
- and return a string that is the content of the runtime file.
-
-
-- p4plugin/core/api/src/main/yang/p4plugin-runtime.yang
-
- - **add-table-entry**
-
- - Add entry to a specific device. Users must provide parameters such as
- table name; action name and action parameters; match field name and
- match field value; and so on. The node ID must also be provided.
-
- - **modify-table-entry**
-
- - Modify an existing entry to a specific device. The parameters are
- the same as the ``add-table-entry`` method.
-
- - **delete-table-entry**
-
- - Delete an existing entry from a specific device. When deleting entries,
- users only need to provide table name and match field information;
- no action information is required.
-
- - **add-action-profile-member**
-
- - Add a member to a profile. User must provide member ID.
-
- - **modify-action-profile-member**
-
- - Modify a member that already exists in a profile.
-
- - **delete-action-profile-member**
-
- - Delete a member that already exists in a profile.
-
- - **add-action-profile-group**
-
- - Add a group to a profile.
-
- - **modify-action-profile-group**
-
- - Modify a group that already exists in a profile.
-
- - **delete-action-profile-group**
-
- - Delete a group that already exists in a profile.
-
- - **read-table-entry**
-
- - Read an entry from a specific device, input node ID, and table name;
- and output a JSON string. The returned value is Base64 encoded.
-
- - **read-action-profile-member**
-
- - Read the members of an action profile, input node ID, and action
- profile name; and output a JSON string. The returned value is Base64
- encoded.
-
- - **read-action-profile-group**
-
- - Read the action profile groups of an action profile, input node ID
- and action profile name; and output a JSON string. The returned value
- is Base64 encoded.
-
-
-- p4plugin/core/api/src/main/yang/p4plugin-packet.yang
-
- - **p4-transmit-packet**
-
- - Transmit a packet to a specific P4 device.
-
- - **p4-packet-received**
-
- - Receive a packet from P4 device.
-
-
-- p4plugin/core/api/src/main/yang/p4plugin-cluster.yang
-
- - **set-election-id**
-
- - Set the election ID. For more information about the election IDs and
- and their meaning, refer to the following URL:
- https://github.com/p4lang/PI/blob/dc2f4c6cce86e310055677c8b18831fd8f6d1f2c/proto/docs/arbitration.md
-
- When a new election ID is set, it sends master arbitration update
- messages to all devices it connected.
-
- - **get-election-id**
-
- - Get current election ID.
-
-
-Sample Configurations
----------------------
-
-1. Write Inventory
-~~~~~~~~~~~~~~~~~~
-
-**REST API** : *POST /restconf/operations/p4plugin-netconf-adapter-api:write-inventory*
-
-**Sample JSON Data**
-
-.. code:: json
-
- {
- "input": {
-
- }
- }
-
-
-2. Add device
-~~~~~~~~~~~~~
-
-**REST API** : *POST /restconf/operations/p4plugin-device:add-device*
-
-**Sample JSON Data**
-
-.. code:: json
-
- {
- "input": {
- "nid": "node0",
- "config-file-path": "/home/opendaylight/p4lang/behavioral-model/mininet/simple_router.json",
- "runtime-file-path": "/home/opendaylight/p4lang/behavioral-model/mininet/simple_router.proto.txt",
- "did": "0",
- "ip": "10.42.94.144",
- "port": "50051"
- }
- }
-
-
-3. Connect to device
-~~~~~~~~~~~~~~~~~~~~
-
-**REST API** : *POST /restconf/operations/p4plugin-device:connect-to-device*
-
-**Sample JSON Data**
-
-.. code:: json
-
- {
- "input": {
- "nid": "node0"
- }
- }
-
-
-4. Set pipeline config
-~~~~~~~~~~~~~~~~~~~~~~
-
-**REST API** : *POST /restconf/operations/p4plugin-device:set-pipeline-config*
-
-**Sample JSON Data**
-
-.. code:: json
-
- {
- "input": {
- "nid": "node0"
- }
- }
-
-5. Add table entry
-~~~~~~~~~~~~~~~~~~
-
-**REST API** : *POST /restconf/operations/p4plugin-runtime:add-table-entry*
-
-**Sample JSON Data**
-
-.. code:: json
-
- {
- "input": {
- "action-name": "set_nhop",
- "action-param": [
- {
- "param-name": "nhop_ipv4",
- "param-value": "10.0.0.10"
- },
- {
- "param-name": "port",
- "param-value": "1"
- }
- ],
- "priority": "0",
- "controller-metadata": "0",
- "table-name": "ipv4_lpm",
- "field": [
- {
- "field-name": "ipv4.dstAddr",
- "lpm-value": "10.0.0.0",
- "prefix-len": "24"
- }
- ],
- "nid": "node0"
- }
- }
-
-6. Read table entry
-~~~~~~~~~~~~~~~~~~~
-
-**REST API** : *POST /restconf/operations/p4plugin-runtime:read-table-entry*
-
-**Sample JSON Data**
-
-.. code:: json
-
- {
- "input": {
- "table-name": "ipv4_lpm",
- "nid": "node0"
- }
- }
+++ /dev/null
-.. _p4plugin-user-guide:
-
-P4 Plugin User Guide
-====================
-
-Overview
---------
-
-P4 is a high-level language for expressing how packets are processed by the pipeline
-of a network forwarding element such as a switch, network processing units, software
-switches (bmv2), etc. P4 itself is protocol independent but allows for the expression
-of forwarding plane protocols. It is based upon an abstract forwarding model called PISA
-(Protocol Independent Switch Architecture). In the Oxygen release, the P4 Plugin project
-is aimed to provide basic functions for P4 targets, such as channel and device management,
-table population, packet-in and packet-out process, etc.
-
-
-P4 Plugin User-Facing Features
-------------------------------
-- **odl-p4plugin-all**
-
- - This feature contains all other features/bundles of P4 Plugin project. If you
- install it, it provides all functions that the P4 Plugin project can support.
-
-- **odl-p4plugin-runtime**
-
- - This feature provides a function which implements a gRPC client that provides RPCs
- for users, such as setting and retrieving forwarding pipeline config dynamically,
- complete table entry population entry and packet out procedures, etc.
-
-- **odl-p4plugin-netconf-adapter**
-
- - This feature mainly provides function about collecting device resource.
-
-
-How To Start
--------------
-
-Preparing for Installation
-~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-1. Forwarding devices must support NETCONF, so that OpenDaylight can connect to them
- and collect resoures via NETCONF.
-
-2. Forwarding devices must support gRpc and run P4 program, so that OpenDaylight
- can set the forwarding pipeline config, complete table entry population and packet
- in/out procedure, etc.
-
-
-
-Installation Feature
-~~~~~~~~~~~~~~~~~~~~
-
-Run OpenDaylight and install P4 Plugin Service *odl-p4plugin-all* as shown below:
-
- feature:install odl-p4plugin-all
-
-For a more detailed overview of the P4 Plugin, see the :ref:`p4plugin-dev-guide`.