Add OCP Plugin Developer Guide 99/41199/3
authorRichard <m8809301@msn.com>
Fri, 1 Jul 2016 08:16:45 +0000 (01:16 -0700)
committerColin Dixon <colin@colindixon.com>
Mon, 25 Jul 2016 18:30:26 +0000 (14:30 -0400)
Fix https://git.opendaylight.org/gerrit/#/c/40484/4/manuals/user-guide/src/main/asciidoc/ocpplugin/ocp-user-guide.adoc@125

Developer's Certificate of Origin 1.1

        By making a contribution to this project, I certify that:

        (a) The contribution was created in whole or in part by me and I
            have the right to submit it under the open source license
            indicated in the file; or

        (b) The contribution is based upon previous work that, to the best
            of my knowledge, is covered under an appropriate open source
            license and I have the right under that license to submit that
            work with modifications, whether created in whole or in part
            by me, under the same open source license (unless I am
            permitted to submit under a different license), as indicated
            in the file; or

        (c) The contribution was provided directly to me by some other
            person who certified (a), (b) or (c) and I have not modified
            it.

        (d) I understand and agree that this project and the contribution
            are public and that a record of the contribution (including all
            personal information I submit with it, including my sign-off) is
            maintained indefinitely and may be redistributed consistent with
            this project or the open source license(s) involved.

Change-Id: Id22fffbdcc170e0c4bd9a5837571ba8396d3f67b
Signed-off-by: Richard <m8809301@msn.com>
manuals/developer-guide/src/main/asciidoc/bk-developers-guide.adoc
manuals/developer-guide/src/main/asciidoc/ocpplugin/ocp-developer-guide.adoc [new file with mode: 0644]
manuals/developer-guide/src/main/resources/images/ocpplugin/ack-message.jpg [new file with mode: 0644]
manuals/developer-guide/src/main/resources/images/ocpplugin/hello-message.jpg [new file with mode: 0644]
manuals/developer-guide/src/main/resources/images/ocpplugin/ocp-sb-plugin.jpg [new file with mode: 0644]
manuals/developer-guide/src/main/resources/images/ocpplugin/ocpagent-state-machine.jpg [new file with mode: 0644]
manuals/developer-guide/src/main/resources/images/ocpplugin/ocpplugin-state-machine.jpg [new file with mode: 0644]
manuals/developer-guide/src/main/resources/images/ocpplugin/plugin-design.jpg [new file with mode: 0644]
manuals/user-guide/src/main/asciidoc/ocpplugin/ocp-user-guide.adoc

index d2d3e9640a2d879c03d1998d6954749ae1e1352b..837b428f7d5706280ef8bf869a4dffab645c07ba 100644 (file)
@@ -88,6 +88,8 @@ include::neutron/neutron.adoc[]
 
 include::odlparent/odlparent-developer.adoc[]
 
+include::ocpplugin/ocp-developer-guide.adoc[OCP]
+
 include::sdninterfaceapp/odl-sdninterfaceapp-all-dev.adoc[]
 
 include::of-config/of-config-dev.adoc[]
diff --git a/manuals/developer-guide/src/main/asciidoc/ocpplugin/ocp-developer-guide.adoc b/manuals/developer-guide/src/main/asciidoc/ocpplugin/ocp-developer-guide.adoc
new file mode 100644 (file)
index 0000000..92a4102
--- /dev/null
@@ -0,0 +1,841 @@
+== OCP Plugin Developer Guide
+This document is intended for both OCP agent developers and ODL service/application developers.
+It describes essential information needed to implement an OCP agent that is capable of interoperating
+with the OCP plugin running in the ODL controller, including the OCP connection establishment and
+state machines used on both ends of the connection. It also provides a detailed description of the
+northbound/southbound APIs that the OCP plugin exposes to allow automation and programmability.
+
+=== Overview
+OCP is an ETSI standard protocol for control and management of Remote Radio Head (RRH)
+equipment. The OCP Project addresses the need for a southbound plugin that allows
+applications and controller services to interact with RRHs using OCP. The OCP southbound
+plugin will allow applications acting as a Radio Equipment Control (REC) to interact
+with RRHs that support an OCP agent.
+
+.OCP southbound plugin
+image::ocpplugin/ocp-sb-plugin.jpg[OCP southbound plugin, 550, 350]
+
+=== Architecture
+OCP is a vendor-neutral standard communications interface defined to enable control and management
+between RE and REC of an ORI architecture. The OCP Plugin supports the implementation of the OCP
+specification; it is based on the Model Driven Service Abstraction Layer (MD-SAL) architecture.
+
+The OCP Plugin project consists of three main components: OCP southbound plugin, OCP protocol library
+and OCP service. For details on each of them, refer to the OCP Plugin User Guide.
+
+.Overall architecture
+image::ocpplugin/plugin-design.jpg[Overall architecture, 550, 284]
+
+=== Connection Establishment
+The OCP layer is transported over a TCP/IP connection established between the RE and the REC.
+OCP provides the following functions:
+
+* Control & Management of the RE by the REC
+* Transport of AISG/3GPP Iuant Layer 7 messages and alarms between REC and RE
+
+==== Hello Message
+Hello message is used by the OCP agent during connection setup. It is used for version negotiation.
+When the connection is established, the OCP agent immediately sends a Hello message with the version
+field set to highest OCP version supported by itself, along with the verdor ID and serial number of
+the radio head it is running on.
+
+The combinaiton of the verdor ID and serial number will be used by the OCP plugin to uniquely identify
+a managed radio head. When not receiving reply from the OCP plugin, the OCP agent can resend Hello
+message with pre-defined Hello timeout (THLO) and Hello resend times (NHLO).
+
+According to ORI spec, the default value of TCP Link Monitoring Timer (TTLM) is 50 seconds. The RE shall
+trigger an OCP layer restart while TTLM expires in RE or the RE detects a TCP link failure. So we may
+define NHLO * THLO = 50 seconds (e.g. NHLO = 10, THLO = 5 seconds).
+
+By nature the Hello message is a new type of indication, and it contains supported OCP version, vendor
+ID and serial number as shown below.
+
+.Hello message
+image::ocpplugin/hello-message.jpg[Hello message, 550, 166]
+
+==== Ack Message
+Hello from the OCP agent will always make the OCP plugin respond with ACK. In case everything is ok,
+it will be ACK(OK). In case something is wrong, it will be ACK(FAIL).
+
+If the OCP agent receives ACK(OK), it goes to Established state. If the OCP agent receives ACK(FAIL),
+it goes to Maintenance state. The failure code and reason of ACK(FAIL) are defined as below:
+
+* FAIL_OCP_VERSION (OCP version not supported)
+* FAIL_NO_MORE_CAPACITY (OCP plugin cannot control any more radio heads)
+
+The result inside Ack message indicates OK or FAIL with different reasons.
+
+.Ack message
+image::ocpplugin/ack-message.jpg[Ack message, 550, 166]
+
+==== State Machines
+The following figures illustrate the Finite State Machine (FSM) of the OCP agent and OCP plugin
+for new connection procedure.
+
+.OCP agent state machine
+image::ocpplugin/ocpagent-state-machine.jpg[OCP agent state machine, 550, 320]
+
+.OCP plugin state machine
+image::ocpplugin/ocpplugin-state-machine.jpg[OCP plugin state machine, 550, 317]
+
+=== Northbound APIs
+There are ten exposed northbound APIs: health-check, set-time, re-reset, get-param,
+modify-param, create-obj, delete-obj, get-state, modify-state and get-fault
+
+==== health-check
+The Health Check procedure allows the application to verify that the OCP layer is functioning
+correctly at the RE.
+
+Default URL: http://localhost:8181/restconf/operations/ocp-service:health-check-nb
+
+===== POST Input
+
+[options="header"]
+|=======
+|Field Name | Type | Description | Example | Required?
+| nodeId | String | Inventory node reference for OCP radio head | ocp:MTI-101-200 | Yes
+| tcpLinkMonTimeout | unsignedShort | TCP Link Monitoring Timeout (unit: seconds) | 50 | Yes
+|=======
+
+.Example
+----
+{
+    "health-check-nb": {
+        "input": {
+            "nodeId": "ocp:MTI-101-200",
+            "tcpLinkMonTimeout": "50"
+        }
+    }
+}
+----
+
+===== POST Output
+
+[options="header"]
+|=======
+|Field Name | Type | Description
+| result | String, enumerated | Common default result codes
+|=======
+
+.Example
+----
+{
+    "output": {
+        "result": "SUCCESS"
+    }
+}
+----
+
+==== set-time
+The Set Time procedure allows the application to set/update the absolute time reference that
+shall be used by the RE.
+
+Default URL: http://localhost:8181/restconf/operations/ocp-service:set-time-nb
+
+===== POST Input
+
+[options="header"]
+|=======
+|Field Name | Type | Description | Example | Required?
+| nodeId | String | Inventory node reference for OCP radio head | ocp:MTI-101-200 | Yes
+| newTime | dateTime | New datetime setting for radio head | 2016-04-26T10:23:00-05:00 | Yes
+|=======
+
+.Example
+----
+{
+    "set-time-nb": {
+        "input": {
+            "nodeId": "ocp:MTI-101-200",
+            "newTime": "2016-04-26T10:23:00-05:00"
+        }
+    }
+}
+----
+
+===== POST Output
+
+[options="header"]
+|=======
+|Field Name | Type | Description
+| result | String, enumerated | Common default result codes + FAIL_INVALID_TIMEDATA
+|=======
+
+.Example
+----
+{
+    "output": {
+        "result": "SUCCESS"
+    }
+}
+----
+
+==== re-reset
+The RE Reset procedure allows the application to reset a specific RE.
+
+Default URL: http://localhost:8181/restconf/operations/ocp-service:re-reset-nb
+
+===== POST Input
+
+[options="header"]
+|=======
+|Field Name | Type | Description | Example | Required?
+| nodeId | String | Inventory node reference for OCP radio head | ocp:MTI-101-200 | Yes
+|=======
+
+.Example
+----
+{
+    "re-reset-nb": {
+        "input": {
+            "nodeId": "ocp:MTI-101-200"
+        }
+    }
+}
+----
+
+===== POST Output
+
+[options="header"]
+|=======
+|Field Name | Type | Description
+| result | String, enumerated | Common default result codes
+|=======
+
+.Example
+----
+{
+    "output": {
+        "result": "SUCCESS"
+    }
+}
+----
+
+==== get-param
+The Object Parameter Reporting procedure allows the application to retrieve the following information:
+
+. the defined object types and instances within the Resource Model of the RE
+. the values of the parameters of the objects
+
+Default URL: http://localhost:8181/restconf/operations/ocp-service:get-param-nb
+
+===== POST Input
+
+[options="header"]
+|=======
+|Field Name | Type | Description | Example | Required?
+| nodeId | String | Inventory node reference for OCP radio head | ocp:MTI-101-200 | Yes
+| objId | String | Object ID | RxSigPath_5G:1 | Yes
+| paramName | String | Parameter name | dataLink | Yes
+|=======
+
+.Example
+----
+{
+    "get-param-nb": {
+        "input": {
+            "nodeId": "ocp:MTI-101-200",
+            "objId": "RxSigPath_5G:1",
+            "paramName": "dataLink"
+        }
+    }
+}
+----
+
+===== POST Output
+
+[options="header"]
+|=======
+|Field Name | Type | Description
+| id | String | Object ID
+| name | String | Object parameter name
+| value | String | Object parameter value
+| result | String, enumerated | Common default result codes + "FAIL_UNKNOWN_OBJECT", "FAIL_UNKNOWN_PARAM"
+|=======
+
+.Example
+----
+{
+    "output": {
+        "obj": [
+            {
+                "id": "RxSigPath_5G:1",
+                "param": [
+                    {
+                        "name": "dataLink",
+                        "value": "dataLink:1"
+                    }
+                ]
+            }
+        ],
+        "result": "SUCCESS"
+    }
+}
+----
+
+==== modify-param
+The Object Parameter Modification procedure allows the application to configure the values of the
+parameters of the objects identified by the Resource Model.
+
+Default URL: http://localhost:8181/restconf/operations/ocp-service:modify-param-nb
+
+===== POST Input
+
+[options="header"]
+|=======
+|Field Name | Type | Description | Example | Required?
+| nodeId | String | Inventory node reference for OCP radio head | ocp:MTI-101-200 | Yes
+| objId | String | Object ID | RxSigPath_5G:1 | Yes
+| name | String | Object parameter name | dataLink | Yes
+| value | String | Object parameter value | dataLink:1 | Yes
+|=======
+
+.Example
+----
+{
+    "modify-param-nb": {
+        "input": {
+            "nodeId": "ocp:MTI-101-200",
+            "objId": "RxSigPath_5G:1",
+            "param": [
+                {
+                    "name": "dataLink",
+                    "value": "dataLink:1"
+                }
+            ]
+        }
+    }
+}
+----
+
+===== POST Output
+
+[options="header"]
+|=======
+|Field Name | Type | Description
+| objId | String | Object ID
+| globResult | String, enumerated | Common default result codes + "FAIL_UNKNOWN_OBJECT", "FAIL_PARAMETER_FAIL",
+  "FAIL_NOSUCH_RESOURCE"
+| name | String | Object parameter name
+| result | String, enumerated | "SUCCESS", "FAIL_UNKNOWN_PARAM", "FAIL_PARAM_READONLY", "FAIL_PARAM_LOCKREQUIRED",
+  "FAIL_VALUE_OUTOF_RANGE", "FAIL_VALUE_TYPE_ERROR"
+|=======
+
+.Example
+----
+{
+    "output": {
+        "objId": "RxSigPath_5G:1",
+        "globResult": "SUCCESS",
+        "param": [
+            {
+                "name": "dataLink",
+                "result": "SUCCESS"
+            }
+        ]
+    }
+}
+----
+
+==== create-obj
+The Object Creation procedure allows the application to create and initialize a new instance
+of the given object type on the RE.
+
+Default URL: http://localhost:8181/restconf/operations/ocp-service:create-obj-nb
+
+===== POST Input
+
+[options="header"]
+|=======
+|Field Name | Type | Description | Example | Required?
+| nodeId | String | Inventory node reference for OCP radio head | ocp:MTI-101-200 | Yes
+| objType | String | Object type | RxSigPath_5G | Yes
+| name | String | Object parameter name | dataLink | No
+| value | String | Object parameter value | dataLink:1 | No
+|=======
+
+.Example
+----
+{
+    "create-obj-nb": {
+        "input": {
+            "nodeId": "ocp:MTI-101-200",
+            "objType": "RxSigPath_5G",
+            "param": [
+                {
+                    "name": "dataLink",
+                    "value": "dataLink:1"
+                }
+            ]
+        }
+    }
+}
+----
+
+===== POST Output
+
+[options="header"]
+|=======
+|Field Name | Type | Description
+| objId | String | Object ID
+| globResult | String, enumerated | Common default result codes + "FAIL_UNKNOWN_OBJTYPE", "FAIL_STATIC_OBJTYPE",
+  "FAIL_UNKNOWN_OBJECT", "FAIL_CHILD_NOTALLOWED", "FAIL_OUTOF_RESOURCES" "FAIL_PARAMETER_FAIL", "FAIL_NOSUCH_RESOURCE"
+| name | String | Object parameter name
+| result | String, enumerated | "SUCCESS", "FAIL_UNKNOWN_PARAM", "FAIL_PARAM_READONLY", "FAIL_PARAM_LOCKREQUIRED",
+  "FAIL_VALUE_OUTOF_RANGE", "FAIL_VALUE_TYPE_ERROR"
+|=======
+
+.Example
+----
+{
+    "output": {
+        "objId": "RxSigPath_5G:0",
+        "globResult": "SUCCESS",
+        "param": [
+            {
+                "name": "dataLink",
+                "result": "SUCCESS"
+            }
+        ]
+    }
+}
+----
+
+==== delete-obj
+The Object Deletion procedure allows the application to delete a given object instance and
+recursively its entire child objects on the RE.
+
+Default URL: http://localhost:8181/restconf/operations/ocp-service:delete-obj-nb
+
+===== POST Input
+
+[options="header"]
+|=======
+|Field Name | Type | Description | Example | Required?
+| nodeId | String | Inventory node reference for OCP radio head | ocp:MTI-101-200 | Yes
+| objId | String | Object ID | RxSigPath_5G:1 | Yes
+|=======
+
+.Example
+----
+{
+    "delete-obj-nb": {
+        "input": {
+            "nodeId": "ocp:MTI-101-200",
+            "obj-id": "RxSigPath_5G:0"
+        }
+    }
+}
+----
+
+===== POST Output
+
+[options="header"]
+|=======
+|Field Name | Type | Description
+| result | String, enumerated | Common default result codes + "FAIL_UNKNOWN_OBJECT",
+  "FAIL_STATIC_OBJTYPE", "FAIL_LOCKREQUIRED"
+|=======
+
+.Example
+----
+{
+    "output": {
+        "result": "SUCCESS"
+    }
+}
+----
+
+==== get-state
+The Object State Reporting procedure allows the application to acquire the current state
+(for the requested state type) of one or more objects of the RE resource model, and
+additionally configure event-triggered reporting of the detected state changes for all
+state types of the indicated objects.
+
+Default URL: http://localhost:8181/restconf/operations/ocp-service:get-state-nb
+
+===== POST Input
+
+[options="header"]
+|=======
+|Field Name | Type | Description | Example | Required?
+| nodeId | String | Inventory node reference for OCP radio head | ocp:MTI-101-200 | Yes
+| objId | String | Object ID | RxSigPath_5G:1 | Yes
+| stateType | String, enumerated | Valid values: "AST", "FST", "ALL" | ALL | Yes
+| eventDrivenReporting | Boolean | Event-triggered reporting of state change | true | Yes
+|=======
+
+.Example
+----
+{
+    "get-state-nb": {
+        "input": {
+            "nodeId": "ocp:MTI-101-200",
+            "objId": "antPort:0",
+            "stateType": "ALL",
+            "eventDrivenReporting": "true"
+        }
+    }
+}
+----
+
+===== POST Output
+
+[options="header"]
+|=======
+|Field Name | Type | Description
+| id | String | Object ID
+| type | String, enumerated | State type. Valid values: "AST", "FST
+| value | String, enumerated | State value. Valid values: For state type = "AST": "LOCKED", "UNLOCKED".
+  For state type = "FST": "PRE_OPERATIONAL", "OPERATIONAL", "DEGRADED", "FAILED", "NOT_OPERATIONAL", "DISABLED"
+| result | String, enumerated | Common default result codes + "FAIL_UNKNOWN_OBJECT", "FAIL_UNKNOWN_STATETYPE",
+  "FAIL_VALUE_OUTOF_RANGE"
+|=======
+
+.Example
+----
+{
+    "output": {
+        "obj": [
+            {
+                "id": "antPort:0",
+                "state": [
+                    {
+                        "type": "FST",
+                        "value": "DISABLED"
+                    },
+                    {
+                        "type": "AST",
+                        "value": "LOCKED"
+                    }
+                ]
+            }
+        ],
+        "result": "SUCCESS"
+    }
+}
+----
+
+==== modify-state
+The Object State Modification procedure allows the application to trigger a change in the
+state of an object of the RE Resource Model.
+
+Default URL: http://localhost:8181/restconf/operations/ocp-service:modify-state-nb
+
+===== POST Input
+
+[options="header"]
+|=======
+|Field Name | Type | Description | Example | Required?
+| nodeId | String | Inventory node reference for OCP radio head | ocp:MTI-101-200 | Yes
+| objId | String | Object ID | RxSigPath_5G:1 | Yes
+| stateType | String, enumerated | Valid values: "AST", "FST", "ALL" | AST | Yes
+| stateValue | String, enumerated | Valid values: For state type = "AST": "LOCKED", "UNLOCKED".
+  For state type = "FST": "PRE_OPERATIONAL", "OPERATIONAL", "DEGRADED", "FAILED", "NOT_OPERATIONAL", "DISABLED" | LOCKED | Yes
+|=======
+
+.Example
+----
+{
+    "modify-state-nb": {
+        "input": {
+            "nodeId": "ocp:MTI-101-200",
+            "objId": "RxSigPath_5G:1",
+            "stateType": "AST",
+            "stateValue": "LOCKED"
+        }
+    }
+}
+----
+
+===== POST Output
+
+[options="header"]
+|=======
+|Field Name | Type | Description
+| objId | String | Object ID
+| stateType | String, enumerated | State type. Valid values: "AST", "FST
+| stateValue | String, enumerated | State value. Valid values: For state type = "AST": "LOCKED", "UNLOCKED".
+  For state type = "FST": "PRE_OPERATIONAL", "OPERATIONAL", "DEGRADED", "FAILED", "NOT_OPERATIONAL", "DISABLED"
+| result | String, enumerated | Common default result codes + "FAIL_UNKNOWN_OBJECT", "FAIL_UNKNOWN_STATETYPE",
+"FAIL_UNKNOWN_STATEVALUE", "FAIL_STATE_READONLY", "FAIL_RESOURCE_UNAVAILABLE", "FAIL_RESOURCE_INUSE",
+"FAIL_PARENT_CHILD_CONFLICT", "FAIL_PRECONDITION_NOTMET
+|=======
+
+.Example
+----
+{
+    "output": {
+        "objId": "RxSigPath_5G:1",
+        "stateType": "AST",
+        "stateValue": "LOCKED",
+        "result": "SUCCESS",
+    }
+}
+----
+
+==== get-fault
+The Fault Reporting procedure allows the application to acquire information about all current
+active faults associated with a primary object, as well as configure the RE to report when the
+fault status changes for any of faults associated with the indicated primary object.
+
+Default URL: http://localhost:8181/restconf/operations/ocp-service:get-fault-nb
+
+===== POST Input
+
+[options="header"]
+|=======
+|Field Name | Type | Description | Example | Required?
+| nodeId | String | Inventory node reference for OCP radio head | ocp:MTI-101-200 | Yes
+| objId | String | Object ID | RE:0 | Yes
+| eventDrivenReporting | Boolean | Event-triggered reporting of fault | true | Yes
+|=======
+
+.Example
+----
+{
+    "get-fault-nb": {
+        "input": {
+            "nodeId": "ocp:MTI-101-200",
+            "objId": "RE:0",
+            "eventDrivenReporting": "true"
+        }
+    }
+}
+----
+
+===== POST Output
+
+[options="header"]
+|=======
+|Field Name | Type | Description
+| result | String, enumerated | Common default result codes + "FAIL_UNKNOWN_OBJECT", "FAIL_VALUE_OUTOF_RANGE"
+| id (obj) | String | Object ID
+| id (fault) | String | Fault ID
+| severity | String | Fault severity
+| timestamp | dateTime | Time stamp
+| descr | String | Text description
+| affectedObj | String | Affected object
+|=======
+
+.Example
+----
+{
+    "output": {
+        "result": "SUCCESS",
+        "obj": [
+            {
+                "id": "RE:0",
+                "fault": [
+                    {
+                        "id": "FAULT_OVERTEMP",
+                        "severity": "DEGRADED",
+                        "timestamp": "2012-02-12T16:35:00",
+                        "descr": "PA temp too high; Pout reduced",
+                        "affectedObj": [
+                            "TxSigPath_EUTRA:0",
+                            "TxSigPath_EUTRA:1"
+                        ]
+                    },
+                    {
+                        "id": "FAULT_VSWR_OUTOF_RANGE",
+                        "severity": "WARNING",
+                        "timestamp": "2012-02-12T16:01:05",
+                    }
+                ]
+            }
+        ],
+    }
+}
+----
+
+NOTE:
+The northbound APIs described above wrap the southbound APIs to make them accessible to external applications
+via RESTCONF, as well as take care of synchronizing the RE resource model between radio heads and the controller's
+datastore. See applications/ocp-service/src/main/yang/ocp-resourcemodel.yang for the yang representation of the RE
+resource model.
+
+=== Java Interfaces (Southbound APIs)
+The southbound APIs provide concrete implementation of the following OCP elementary functions:  health-check,
+set-time, re-reset, get-param, modify-param, create-obj, delete-obj, get-state, modify-state and get-fault.
+Any ODL services/applications (of course, including OCP service) wanting to speak OCP to radio heads will
+need to use them.
+
+==== SalDeviceMgmtService
+Interface SalDeviceMgmtService defines three methods corresponding to health-check, set-time and re-reset.
+
+.SalDeviceMgmtService.java
+----
+package org.opendaylight.yang.gen.v1.urn.opendaylight.ocp.device.mgmt.rev150811;
+
+public interface SalDeviceMgmtService
+    extends
+    RpcService
+{
+    Future<RpcResult<HealthCheckOutput>> healthCheck(HealthCheckInput input);
+
+    Future<RpcResult<SetTimeOutput>> setTime(SetTimeInput input);
+
+    Future<RpcResult<ReResetOutput>> reReset(ReResetInput input);
+
+}
+----
+
+==== SalConfigMgmtService
+Interface SalConfigMgmtService defines two methods corresponding to get-param and modify-param.
+
+.SalConfigMgmtService.java
+----
+package org.opendaylight.yang.gen.v1.urn.opendaylight.ocp.config.mgmt.rev150811;
+
+public interface SalConfigMgmtService
+    extends
+    RpcService
+{
+
+    Future<RpcResult<GetParamOutput>> getParam(GetParamInput input);
+
+    Future<RpcResult<ModifyParamOutput>> modifyParam(ModifyParamInput input);
+
+}
+----
+
+==== SalObjectLifecycleService
+Interface SalObjectLifecycleService defines two methods corresponding to create-obj and delete-obj.
+
+.SalObjectLifecycleService.java
+----
+package org.opendaylight.yang.gen.v1.urn.opendaylight.ocp.object.lifecycle.rev150811;
+
+public interface SalObjectLifecycleService
+    extends
+    RpcService
+{
+
+    Future<RpcResult<CreateObjOutput>> createObj(CreateObjInput input);
+
+    Future<RpcResult<DeleteObjOutput>> deleteObj(DeleteObjInput input);
+
+}
+----
+
+==== SalObjectStateMgmtService
+Interface SalObjectStateMgmtService defines two methods corresponding to get-state and modify-state.
+
+.SalObjectStateMgmtService.java
+----
+package org.opendaylight.yang.gen.v1.urn.opendaylight.ocp.object.state.mgmt.rev150811;
+
+public interface SalObjectStateMgmtService
+    extends
+    RpcService
+{
+
+    Future<RpcResult<GetStateOutput>> getState(GetStateInput input);
+
+    Future<RpcResult<ModifyStateOutput>> modifyState(ModifyStateInput input);
+
+}
+----
+
+==== SalFaultMgmtService
+Interface SalFaultMgmtService defines only one method corresponding to get-fault.
+
+.SalFaultMgmtService.java
+----
+package org.opendaylight.yang.gen.v1.urn.opendaylight.ocp.fault.mgmt.rev150811;
+
+public interface SalFaultMgmtService
+    extends
+    RpcService
+{
+
+    Future<RpcResult<GetFaultOutput>> getFault(GetFaultInput input);
+
+}
+----
+
+=== Notifications
+In addition to indication messages, the OCP southbound plugin will translate specific events
+(e.g., connect, disconnect) coming up from the OCP protocol library into MD-SAL Notification
+objects and then publish them to the MD-SAL. Also, the OCP service will notify the completion
+of certain operation via Notification as well.
+
+==== SalDeviceMgmtListener
+An onDeviceConnected Notification will be published to the MD-SAL as soon as a
+radio head is connected to the controller, and when that radio head is disconnected
+the OCP southbound plugin will publish an onDeviceDisconnected Notification in response
+to the disconnect event propagated from the OCP protocol library.
+
+.SalDeviceMgmtListener.java
+----
+package org.opendaylight.yang.gen.v1.urn.opendaylight.ocp.device.mgmt.rev150811;
+
+public interface SalDeviceMgmtListener
+    extends
+    NotificationListener
+{
+
+    void onDeviceConnected(DeviceConnected notification);
+
+    void onDeviceDisconnected(DeviceDisconnected notification);
+
+}
+----
+
+==== OcpServiceListener
+The OCP service will publish an onAlignmentCompleted Notification to the MD-SAL once
+it has completed the OCP alignment procedure with the radio head.
+
+.OcpServiceListener.java
+----
+package org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ocp.applications.ocp.service.rev150811;
+
+public interface OcpServiceListener
+    extends
+    NotificationListener
+{
+
+    void onAlignmentCompleted(AlignmentCompleted notification);
+
+}
+----
+
+==== SalObjectStateMgmtListener
+When receiving a state change indication message, the OCP southbound plugin will propagate
+the indication message to upper layer services/applications by publishing a corresponding
+onStateChangeInd Notification to the MD-SAL.
+
+.SalObjectStateMgmtListener.java
+----
+package org.opendaylight.yang.gen.v1.urn.opendaylight.ocp.object.state.mgmt.rev150811;
+
+public interface SalObjectStateMgmtListener
+    extends
+    NotificationListener
+{
+
+    void onStateChangeInd(StateChangeInd notification);
+
+}
+----
+
+==== SalFaultMgmtListener
+When receiving a fault indication message, the OCP southbound plugin will propagate
+the indication message to upper layer services/applications by publishing a corresponding
+onFaultInd Notification to the MD-SAL.
+
+.SalFaultMgmtListener.java
+----
+package org.opendaylight.yang.gen.v1.urn.opendaylight.ocp.fault.mgmt.rev150811;
+
+public interface SalFaultMgmtListener
+    extends
+    NotificationListener
+{
+
+    void onFaultInd(FaultInd notification);
+
+}
+----
diff --git a/manuals/developer-guide/src/main/resources/images/ocpplugin/ack-message.jpg b/manuals/developer-guide/src/main/resources/images/ocpplugin/ack-message.jpg
new file mode 100644 (file)
index 0000000..41ea139
Binary files /dev/null and b/manuals/developer-guide/src/main/resources/images/ocpplugin/ack-message.jpg differ
diff --git a/manuals/developer-guide/src/main/resources/images/ocpplugin/hello-message.jpg b/manuals/developer-guide/src/main/resources/images/ocpplugin/hello-message.jpg
new file mode 100644 (file)
index 0000000..8fbcbe7
Binary files /dev/null and b/manuals/developer-guide/src/main/resources/images/ocpplugin/hello-message.jpg differ
diff --git a/manuals/developer-guide/src/main/resources/images/ocpplugin/ocp-sb-plugin.jpg b/manuals/developer-guide/src/main/resources/images/ocpplugin/ocp-sb-plugin.jpg
new file mode 100644 (file)
index 0000000..23cf919
Binary files /dev/null and b/manuals/developer-guide/src/main/resources/images/ocpplugin/ocp-sb-plugin.jpg differ
diff --git a/manuals/developer-guide/src/main/resources/images/ocpplugin/ocpagent-state-machine.jpg b/manuals/developer-guide/src/main/resources/images/ocpplugin/ocpagent-state-machine.jpg
new file mode 100644 (file)
index 0000000..42bdeee
Binary files /dev/null and b/manuals/developer-guide/src/main/resources/images/ocpplugin/ocpagent-state-machine.jpg differ
diff --git a/manuals/developer-guide/src/main/resources/images/ocpplugin/ocpplugin-state-machine.jpg b/manuals/developer-guide/src/main/resources/images/ocpplugin/ocpplugin-state-machine.jpg
new file mode 100644 (file)
index 0000000..f87a296
Binary files /dev/null and b/manuals/developer-guide/src/main/resources/images/ocpplugin/ocpplugin-state-machine.jpg differ
diff --git a/manuals/developer-guide/src/main/resources/images/ocpplugin/plugin-design.jpg b/manuals/developer-guide/src/main/resources/images/ocpplugin/plugin-design.jpg
new file mode 100644 (file)
index 0000000..03f5fd3
Binary files /dev/null and b/manuals/developer-guide/src/main/resources/images/ocpplugin/plugin-design.jpg differ
index 0543fd3be94465596fd13ece462dfb0d58854919..ac647525522aed0f333d317c36263b388de16296 100644 (file)
@@ -120,8 +120,10 @@ image::ocpplugin/plugin-config.jpg[OCP plugin configuration, 550, 449]
 === Test Environment
 The OCP Plugin project contains a simple OCP agent for testing purposes; the agent has been designed specifically to act as a fake radio head device, giving you an idea of what it would look like during the OCP handshake taking place between the OCP agent and the ODL controller (OCP plugin).
 
-To run the simple OCP agent, you have to first compile it (assuming you have JDK 1.7 or above installed already):
+To run the simple OCP agent, you have to first clone the ocpplugin repo and compile it (assuming you have JDK 1.7 or
+above installed already):
 ----
+git clone https://git.opendaylight.org/gerrit/ocpplugin <ocpplugin-src-dir>
 cd <ocpplugin-src-dir>/simple-agent
 javac src/main/java/org/opendaylight/ocpplugin/OcpAgent.java
 ----