From: Richard Date: Fri, 1 Jul 2016 08:16:45 +0000 (-0700) Subject: Add OCP Plugin Developer Guide X-Git-Tag: release/boron~540 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=d1eb07467ef9ca03d8d99e5bd2797033318ed645;p=docs.git Add OCP Plugin Developer Guide 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 --- diff --git a/manuals/developer-guide/src/main/asciidoc/bk-developers-guide.adoc b/manuals/developer-guide/src/main/asciidoc/bk-developers-guide.adoc index d2d3e9640..837b428f7 100644 --- a/manuals/developer-guide/src/main/asciidoc/bk-developers-guide.adoc +++ b/manuals/developer-guide/src/main/asciidoc/bk-developers-guide.adoc @@ -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 index 000000000..92a41020e --- /dev/null +++ b/manuals/developer-guide/src/main/asciidoc/ocpplugin/ocp-developer-guide.adoc @@ -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> healthCheck(HealthCheckInput input); + + Future> setTime(SetTimeInput input); + + Future> 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> getParam(GetParamInput input); + + Future> 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> createObj(CreateObjInput input); + + Future> 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> getState(GetStateInput input); + + Future> 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> 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 index 000000000..41ea1399b 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 index 000000000..8fbcbe7fc 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 index 000000000..23cf919a6 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 index 000000000..42bdeeebb 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 index 000000000..f87a2969f 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 index 000000000..03f5fd354 Binary files /dev/null and b/manuals/developer-guide/src/main/resources/images/ocpplugin/plugin-design.jpg differ diff --git a/manuals/user-guide/src/main/asciidoc/ocpplugin/ocp-user-guide.adoc b/manuals/user-guide/src/main/asciidoc/ocpplugin/ocp-user-guide.adoc index 0543fd3be..ac6475255 100644 --- a/manuals/user-guide/src/main/asciidoc/ocpplugin/ocp-user-guide.adoc +++ b/manuals/user-guide/src/main/asciidoc/ocpplugin/ocp-user-guide.adoc @@ -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 cd /simple-agent javac src/main/java/org/opendaylight/ocpplugin/OcpAgent.java ----