Migrate genius user-guide to project repo 93/75893/3
authorThanh Ha <thanh.ha@linuxfoundation.org>
Sun, 9 Sep 2018 01:39:48 +0000 (21:39 -0400)
committerDavid Suárez Fuentes <david.suarez.fuentes@gmail.com>
Tue, 11 Sep 2018 06:14:35 +0000 (06:14 +0000)
Issue: DOCS-69
Change-Id: Ie81e3ca990a6a14bcfc65ea354fd11713773efcf
Signed-off-by: Thanh Ha <thanh.ha@linuxfoundation.org>
docs/index.rst
docs/user-guide.rst [new file with mode: 0644]

index 3e64a6271f0737d2cb79ed067d48f0725f0b82fd..7030d42cfb12de0e5fc0d1a6341bd52314d893bc 100644 (file)
@@ -18,3 +18,4 @@ Contents:
    genius-design-doc
    specs/index
    testplans/index
+   user-guide
diff --git a/docs/user-guide.rst b/docs/user-guide.rst
new file mode 100644 (file)
index 0000000..3de1ac4
--- /dev/null
@@ -0,0 +1,572 @@
+.. _genius-user-guide:
+
+Genius User Guide
+=================
+
+Overview
+--------
+
+The Genius project provides generic network interfaces, utilities and
+services. Any OpenDaylight application can use these to achieve
+interference-free co-existence with other applications using Genius.
+
+Modules and Interfaces
+----------------------
+
+In the first phase delivered in OpenDaylight Boron release, Genius
+provides following modules —
+
+-  Modules providing a common view of network interfaces for different
+   services
+
+   -  **Interface (logical port) Manager**
+
+      -  *Allows bindings/registration of multiple services to logical
+         ports/interfaces*
+
+      -  *Ability to plug in different types of southbound protocol
+         renderers*
+
+   -  **Overlay Tunnel Manager**
+
+      -  *Creates and maintains overlay tunnels between configured
+         Tunnel Endpoints (TEPs)*
+
+-  Modules providing commonly used functions as shared services to avoid
+   duplication of code and waste of resources
+
+   -  **Liveness Monitor**
+
+      -  *Provides tunnel/nexthop liveness monitoring services*
+
+   -  **ID Manager**
+
+      -  *Generates persistent unique integer IDs*
+
+   -  **MD-SAL Utils**
+
+      -  *Provides common generic APIs for interaction with MD-SAL*
+
+Interface Manager Operations
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Creating interfaces
+^^^^^^^^^^^^^^^^^^^
+
+The YANG file Data Model
+`odl-interface.yang <https://github.com/opendaylight/genius/blob/master/interfacemanager/interfacemanager-api/src/main/yang/odl-interface.yang>`__
+contains the interface configuration data-model.
+
+You can create interfaces at the MD-SAL Data Node Path
+**/config/if:interfaces/interface**, with the following attributes —
+
+***Common attributes***
+
+-  **name** — unique interface name, can be any unique string (e.g.,
+   UUID string)
+
+-  **type** — interface type, currently supported *iana-if-type:l2vlan
+   and iana-if-type:tunnel*
+
+-  **enabled** — admin status, possible values *true* or *false*
+
+-  **parent-refs** : used to specify references to parent interface/port
+   feeding to this interface
+
+-  datapath-node-identifier — identifier for a fixed/physical dataplane
+   node, can be physical switch identifier
+
+-  parent-interface — can be a physical switch port (in conjunction of
+   above), virtual switch port (e.g., neutron port) or another interface
+
+-  list node-identifier — identifier of the dependant underlying
+   configuration protocol
+
+   -  *topology-id* — can be ovsdb configuration protocol
+
+   -  *node-id* — can be hwvtep node-id
+
+***Type specific attributes***
+
+-  when type = l2vlan
+
+   -  **vlan-id** — VLAN id for trunk-member l2vlan interfaces
+
+   -  **l2vlan-mode** — currently supported ones are *transparent*,
+      *trunk* or *trunk-member*
+
+-  when type = stacked\_vlan (Not supported yet)
+
+   -  **stacked-vlan-id** — VLAN-Id for additional/second VLAN tag
+
+-  when type = tunnel
+
+   -  **tunnel-interface-type** — tunnel type, currently supported ones
+      are:
+
+      -  tunnel-type-vxlan
+
+      -  tunnel-type-gre
+
+      -  tunnel-type-mpls-over-gre
+
+   -  **tunnel-source** — tunnel source IP address
+
+   -  **tunnel-destination** — tunnel destination IP address
+
+   -  **tunnel-gateway** — gateway IP address
+
+   -  **monitor-enabled** — tunnel monitoring enable control
+
+   -  **monitor-interval** — tunnel monitoring interval in millisiconds
+
+-  when type = mpls (Not supported yet)
+
+   -  **list labelStack** — list of lables
+
+   -  **num-labels** — number of lables configured
+
+Supported REST calls are **GET, PUT, DELETE, POST**
+
+Creating L2 port interfaces
+'''''''''''''''''''''''''''
+
+Interfaces on normal L2 ports (e.g. Neutron tap ports) are created with
+type *l2vlan* and *l2vlan-mode* as *transparent*. This type of interface
+classifies packets passing through a particular L2 (OpenFlow) port. In
+dataplane, packets belonging to this interface are classified by
+matching in-port against the of-port-id assigned to the base port as
+specified in parent-interface.
+
+**URL:** /restconf/config/ietf-interfaces:interfaces
+
+**Sample JSON data**
+
+::
+
+    "interfaces": {
+        "interface": [
+            {
+                "name": "4158408c-942b-487c-9a03-0b603c39d3dd",
+                "type": "iana-if-type:l2vlan",                       <--- interface type 'l2vlan' for normal L2 port
+                "odl-interface:l2vlan-mode": "transparent",          <--- 'transparent' VLAN port mode allows any (tagged, untagged) ethernet packet
+                "odl-interface:parent-interface": "tap4158408c-94",  <--- port-name as it appears on southbound interface
+                "enabled": true
+            }
+        ]
+    }
+
+Creating VLAN interfaces
+^^^^^^^^^^^^^^^^^^^^^^^^
+
+A VLAN interface is created as a *l2vlan* interface in *trunk-member*
+mode, by configuring a VLAN-Id and a particular L2 (vlan trunk)
+interface. Parent VLAN trunk interface is created in the same way as the
+*transparent* interface as specified above. A *trunk-member* interface
+defines a flow on a particular L2 port and having a particular VLAN tag.
+On ingress, after classification the VLAN tag is popped out and
+corresponding unique dataplane-id is associated with the packet, before
+delivering the packet to service processing. When a service module
+delivers the packet to this interface for egress, it pushes
+corresponding VLAN tag and sends the packet out of the parent L2 port.
+
+**URL:** /restconf/config/ietf-interfaces:interfaces
+
+**Sample JSON data**
+
+::
+
+    "interfaces": {
+        "interface": [
+            {
+                "name": "4158408c-942b-487c-9a03-0b603c39d3dd:100",
+                "type": "iana-if-type:l2vlan",
+                "odl-interface:l2vlan-mode": "trunk-member",        <--- for 'trunk-member', flow is classified with particular vlan-id on an l2 port
+                "odl-interface:parent-interface": "4158408c-942b-487c-9a03-0b603c39d3dd",  <--- Parent 'trunk' iterface name
+                "odl-interface:vlan-id": "100",
+                "enabled": true
+            }
+        ]
+    }
+
+Creating Overlay Tunnel Interfaces
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+An overlay tunnel interface is created with type *tunnel* and particular
+*tunnel-interface-type*. Tunnel interfaces are created on a particular
+data plane node (virtual switches) with a pair of (local, remote) IP
+addresses. Currently supported tunnel interface types are VxLAN, GRE and
+MPLSoverGRE.
+
+**URL:** /restconf/config/ietf-interfaces:interfaces
+
+**Sample JSON data**
+
+::
+
+    "interfaces": {
+        "interface": [
+            {
+                "name": "MGRE_TUNNEL:1",
+                "type": "iana-if-type:tunnel",
+                "odl-interface:tunnel-interface-type": "odl-interface:tunnel-type-mpls-over-gre",
+                "odl-interface:datapath-node-identifier": 156613701272907,
+                "odl-interface:tunnel-source": "11.0.0.43",
+                "odl-interface:tunnel-destination": "11.0.0.66",
+                "odl-interface:monitor-enabled": false,
+                "odl-interface:monitor-interval": 10000,
+                "enabled": true
+            }
+        ]
+    }
+
+.. _genius-user-guide-binding-services:
+
+Binding services on interface
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The YANG file
+`odl-interface-service-bindings.yang <https://github.com/opendaylight/genius/blob/stable/boron/interfacemanager/interfacemanager-api/src/main/yang/odl-interface-service-bindings.yang>`__
+contains the service binding configuration data model.
+
+An application can bind services to a particular interface by
+configuring MD-SAL data node at path /config/interface-service-binding.
+Binding services on interface allows particular service to pull traffic
+arriving on that interface depending upon the service priority.
+Service modules can specify openflow-rules to be applied on the packet
+belonging to the interface. Usually these rules include sending the
+packet to specific service table/pipeline. Service modules are
+responsible for sending the packet back (if not consumed) to service
+dispatcher table, for next service to process the packet.
+
+**URL:**/restconf/config/interface-service-bindings:service-bindings/
+
+**Sample JSON data**
+
+::
+
+    "service-bindings": {
+      "services-info": [
+        {
+          "interface-name": "4152de47-29eb-4e95-8727-2939ac03ef84",
+          "bound-services": [
+            {
+              "service-name": "ELAN",
+              "service-type": "interface-service-bindings:service-type-flow-based"
+              "service-priority": 3,
+              "flow-priority": 5,
+              "flow-cookie": 134479872,
+              "instruction": [
+                {
+                  "order": 2,
+                  "go-to-table": {
+                    "table_id": 50
+                  }
+                },
+                {
+                  "order": 1,
+                  "write-metadata": {
+                    "metadata": 83953188864,
+                    "metadata-mask": 1099494850560
+                  }
+                }
+              ],
+            },
+            {
+             "service-name": "L3VPN",
+             "service-type": "interface-service-bindings:service-type-flow-based"
+             "service-priority": 2,
+             "flow-priority": 10,
+             "flow-cookie": 134217729,
+             "instruction": [
+                {
+                  "order": 2,
+                  "go-to-table": {
+                    "table_id": 21
+                  }
+                },
+                {
+                  "order": 1,
+                  "write-metadata": {
+                    "metadata": 100,
+                    "metadata-mask": 4294967295
+                  }
+                }
+              ],
+            }
+          ]
+        }
+      ]
+    }
+
+Interface Manager RPCs
+~~~~~~~~~~~~~~~~~~~~~~
+
+In addition to the above defined configuration interfaces, Interface
+Manager also provides several RPCs to access interface operational data
+and other helpful information. Interface Manger RPCs are defined in
+`odl-interface-rpc.yang <https://github.com/opendaylight/genius/blob/stable/boron/interfacemanager/interfacemanager-api/src/main/yang/odl-interface-rpc.yang>`__
+
+The following RPCs are available —
+
+get-dpid-from-interface
+^^^^^^^^^^^^^^^^^^^^^^^
+
+This RPC is used to retrieve dpid/switch hosting the root port from
+given interface name.
+
+::
+
+    rpc get-dpid-from-interface {
+        description "used to retrieve dpid from interface name";
+        input {
+            leaf intf-name {
+                type string;
+            }
+        }
+        output {
+            leaf dpid {
+                type uint64;
+            }
+        }
+    }
+
+get-port-from-interface
+^^^^^^^^^^^^^^^^^^^^^^^
+
+This RPC is used to retrieve south bound port attributes from the
+interface name.
+
+::
+
+    rpc get-port-from-interface {
+        description "used to retrieve south bound port attributes from the interface name";
+        input {
+            leaf intf-name {
+                type string;
+            }
+        }
+        output {
+            leaf dpid {
+                type uint64;
+            }
+            leaf portno {
+                type uint32;
+            }
+            leaf portname {
+                type string;
+            }
+        }
+    }
+
+get-egress-actions-for-interface
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+This RPC is used to retrieve group actions to use from interface name.
+
+::
+
+    rpc get-egress-actions-for-interface {
+        description "used to retrieve group actions to use from interface name";
+        input {
+            leaf intf-name {
+                type string;
+                mandatory true;
+            }
+            leaf tunnel-key {
+                description "It can be VNI for VxLAN tunnel ifaces, Gre Key for GRE tunnels, etc.";
+                type uint32;
+                mandatory false;
+            }
+        }
+        output {
+            uses action:action-list;
+        }
+    }
+
+get-egress-instructions-for-interface
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+This RPC is used to retrieve flow instructions to use from interface
+name.
+
+::
+
+    rpc get-egress-instructions-for-interface {
+        description "used to retrieve flow instructions to use from interface name";
+        input {
+            leaf intf-name {
+                type string;
+                mandatory true;
+            }
+            leaf tunnel-key {
+                description "It can be VNI for VxLAN tunnel ifaces, Gre Key for GRE tunnels, etc.";
+                type uint32;
+                mandatory false;
+            }
+        }
+        output {
+            uses offlow:instruction-list;
+        }
+    }
+
+get-endpoint-ip-for-dpn
+^^^^^^^^^^^^^^^^^^^^^^^
+
+This RPC is used to get the local ip of the tunnel/trunk interface on a
+particular DPN (Data Plane Node).
+
+::
+
+    rpc get-endpoint-ip-for-dpn {
+        description "to get the local ip of the tunnel/trunk interface";
+        input {
+            leaf dpid {
+                type uint64;
+            }
+        }
+        output {
+            leaf-list local-ips {
+                type inet:ip-address;
+            }
+        }
+    }
+
+get-interface-type
+^^^^^^^^^^^^^^^^^^
+
+This RPC is used to get the type of the interface (vlan/vxlan or gre).
+
+::
+
+    rpc get-interface-type {
+    description "to get the type of the interface (vlan/vxlan or gre)";
+        input {
+            leaf intf-name {
+                type string;
+            }
+        }
+        output {
+            leaf interface-type {
+                type identityref {
+                    base if:interface-type;
+                }
+            }
+        }
+    }
+
+get-tunnel-type
+^^^^^^^^^^^^^^^
+
+This RPC is used to get the type of the tunnel interface(vxlan or gre).
+
+::
+
+    rpc get-tunnel-type {
+    description "to get the type of the tunnel interface (vxlan or gre)";
+        input {
+            leaf intf-name {
+                type string;
+            }
+        }
+        output {
+            leaf tunnel-type {
+                type identityref {
+                    base odlif:tunnel-type-base;
+                }
+            }
+        }
+    }
+
+get-nodeconnector-id-from-interface
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+This RPC is used to get node-connector-id associated with an interface.
+
+::
+
+    rpc get-nodeconnector-id-from-interface {
+    description "to get nodeconnector id associated with an interface";
+        input {
+            leaf intf-name {
+                type string;
+            }
+        }
+        output {
+            leaf nodeconnector-id {
+                type inv:node-connector-id;
+            }
+        }
+    }
+
+get-interface-from-if-index
+^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+This RPC is used to get interface associated with an if-index (dataplane
+interface id).
+
+::
+
+    rpc get-interface-from-if-index {
+        description "to get interface associated with an if-index";
+            input {
+                leaf if-index {
+                    type int32;
+                }
+            }
+            output {
+                leaf interface-name {
+                    type string;
+                }
+            }
+        }
+
+create-terminating-service-actions
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+This RPC is used to create the tunnel termination service table entries.
+
+::
+
+    rpc create-terminating-service-actions {
+    description "create the ingress terminating service table entries";
+        input {
+             leaf dpid {
+                 type uint64;
+             }
+             leaf tunnel-key {
+                 type uint64;
+             }
+             leaf interface-name {
+                 type string;
+             }
+             uses offlow:instruction-list;
+        }
+    }
+
+remove-terminating-service-actions
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+This RPC is used to remove the tunnel termination service table entries.
+
+::
+
+    rpc remove-terminating-service-actions {
+    description "remove the ingress terminating service table entries";
+        input {
+             leaf dpid {
+                 type uint64;
+             }
+             leaf interface-name {
+                 type string;
+             }
+             leaf tunnel-key {
+                 type uint64;
+             }
+        }
+    }
+
+ID Manager
+----------
+
+TBD.