VinodKumarS-Huawei
Committed by Gerrit Code Review

YMS broker and Notification handler

Change-Id: Ic3659b2c2ad26ea2db1f03725b4883f19db2cc41
Showing 21 changed files with 857 additions and 42 deletions
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
4 + * Licensed under the Apache License, Version 2.0 (the "License");
5 + * you may not use this file except in compliance with the License.
6 + * You may obtain a copy of the License at
7 + *
8 + * http://www.apache.org/licenses/LICENSE-2.0
9 + *
10 + * Unless required by applicable law or agreed to in writing, software
11 + * distributed under the License is distributed on an "AS IS" BASIS,
12 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 + * See the License for the specific language governing permissions and
14 + * limitations under the License.
15 + */
16 +
17 +package org.onosproject.yms.ych;
18 +
19 +/**
20 + * Abstraction of an entity which has the composite protocol request.
21 + *
22 + * Protocols like RESTCONF, have split the schema specific information across
23 + * different components in the protocol encoding.
24 + *
25 + * There is a resource identifier, which is part of the RESTCONF request URL.
26 + * and there is the information about the resource being operated on in the
27 + * request, this is part of the request body.
28 + */
29 +public interface YangCompositeEncoding {
30 +
31 + /**
32 + * Retrieves the resource identifier on which the operation is being
33 + * performed.
34 + *
35 + * @return the string representation of the resource being identified
36 + */
37 + String getResourceIdentifier();
38 +
39 + /**
40 + * Retrieves the representation format of the resource identifier.
41 + *
42 + * @return the type of the resource identifier
43 + */
44 + YangResourceIdentifierType getResourceIdentifierType();
45 +
46 + /**
47 + * Retrieves the resource information in the protocol encoding format.
48 + *
49 + * @return the resource information in the protocol encoding format
50 + */
51 + String getResourceInformation();
52 +}
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
4 + * Licensed under the Apache License, Version 2.0 (the "License");
5 + * you may not use this file except in compliance with the License.
6 + * You may obtain a copy of the License at
7 + *
8 + * http://www.apache.org/licenses/LICENSE-2.0
9 + *
10 + * Unless required by applicable law or agreed to in writing, software
11 + * distributed under the License is distributed on an "AS IS" BASIS,
12 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 + * See the License for the specific language governing permissions and
14 + * limitations under the License.
15 + */
16 +
17 +package org.onosproject.yms.ych;
18 +
19 +import org.onosproject.yms.ydt.YdtBuilder;
20 +import org.onosproject.yms.ydt.YmsOperationType;
21 +
22 +/**
23 + * Abstraction of an entity which overrides the default codec.
24 + *
25 + * YANG has it extension framework which allows vendor / implementation
26 + * specific operation or extensions. The default CODECs will fail to handle
27 + * such protocol requests. In such scenarios, the providers can register
28 + * their specific CODEC's with the YANG codec utility to translate the protocol
29 + * specific data to abstract YANG data tree, from which it can be translate into
30 + * the YANG modelled java objects for the provider / driver to operate on the
31 + * device.
32 + */
33 +
34 +public interface YangDataTreeCodec {
35 + /**
36 + * When the YMS need to encode simple protocol operation request,
37 + * it will translate the YANG objects into an abstract YANG data tree and
38 + * invoke this registered encode method. Protocol CODEC implementation
39 + * needs to ensure the overridden method can handle any specific
40 + * extension or representation of protocol data.
41 + * The operation type will be set in YANG data tree builder.
42 + *
43 + * @param ydtBuilder Abstract YANG data tree contains the operation
44 + * request
45 + * @param protocolOperation protocol operation being performed
46 + * @return protocol specific string representation.
47 + */
48 + String encodeYdtToProtocolFormat(YdtBuilder ydtBuilder,
49 + YmsOperationType protocolOperation);
50 +
51 + /**
52 + * When the YMS need to encode composite protocol operation request, it
53 + * will translate the YANG objects into an abstract YANG data
54 + * tree and invoke this registered encode method. Protocol CODEC
55 + * implementation needs to ensure the overridden method can handle any
56 + * specific extension or representation of protocol data.
57 + * The Initial chain of node in the YDT will have the operation type set
58 + * to NONE to specify it is a resource identifier. The Resource
59 + * information is maintained as a subtree to the resource identifier node.
60 + *
61 + * @param ydtBuilder Abstract YANG data tree contains the operation
62 + * request
63 + * @param protocolOperation protocol operation being performed
64 + * @return composite response containing the requested operation
65 + * information
66 + */
67 + YangCompositeEncoding encodeYdtToCompositeProtocolFormat(
68 + YdtBuilder ydtBuilder, YmsOperationType protocolOperation);
69 +
70 + /**
71 + * When YMS decode simple protocol operation request it uses the
72 + * registered decode method to translate the protocol data into a
73 + * abstract YANG data tree. Then translate the abstract YANG data
74 + * tree into the YANG modeled Java objects.
75 + * The CODEC implementation are unaware of the schema against which they
76 + * are performing the codec operation, so YMS will send the schema
77 + * registry on which the YANG data tree needs to operate, so the code
78 + * implementation needs to pass this schema registry to the get a YDT
79 + * builder.
80 + *
81 + * @param protocolData input string containing the simple
82 + * protocol data which needs to be decoded
83 + * @param schemaRegistryForYdt Schema registry based on which the YANG
84 + * data tree will be built
85 + * @param protocolOperation protocol operation being performed
86 + * @return decoded operation request in YANG data tree
87 + */
88 + YdtBuilder decodeProtocolDataToYdt(String protocolData,
89 + Object schemaRegistryForYdt,
90 + YmsOperationType protocolOperation);
91 +
92 + /**
93 + * When YMS decode composite protocol operation request it uses the
94 + * registered decode method to translate the protocol data into a
95 + * abstract YANG data tree. Then translate the abstract YANG data
96 + * tree into the YANG modeled Java objects.
97 + * The CODEC implementation are unaware of the schema against which they
98 + * are performing the codec operation, so YMS will send the schema
99 + * registry on which the YANG data tree needs to operate, so the code
100 + * implementation needs to pass this schema registry to the get a YDT
101 + * builder.
102 + *
103 + * @param protocolData composite input string containing the
104 + * protocol data which needs to be decoded
105 + * @param schemaRegistryForYdt Schema registry based on which the YANG
106 + * data tree will be built
107 + * @param protocolOperation protocol operation being performed
108 + * @return decoded operation request in YANG data tree
109 + */
110 + YdtBuilder decodeCompositeProtocolDataToYdt(
111 + YangCompositeEncoding protocolData, Object schemaRegistryForYdt,
112 + YmsOperationType protocolOperation);
113 +}
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
4 + * Licensed under the Apache License, Version 2.0 (the "License");
5 + * you may not use this file except in compliance with the License.
6 + * You may obtain a copy of the License at
7 + *
8 + * http://www.apache.org/licenses/LICENSE-2.0
9 + *
10 + * Unless required by applicable law or agreed to in writing, software
11 + * distributed under the License is distributed on an "AS IS" BASIS,
12 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 + * See the License for the specific language governing permissions and
14 + * limitations under the License.
15 + */
16 +
17 +package org.onosproject.yms.ych;
18 +
19 +/**
20 + * Represents the protocol data representation.
21 + */
22 +public enum YangProtocolEncodingFormat {
23 + /**
24 + * XML protocol encoding.
25 + */
26 + XML_ENCODING,
27 +
28 + /**
29 + * JSON protocol encoding.
30 + */
31 + JSON_ENCODING
32 +}
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
4 + * Licensed under the Apache License, Version 2.0 (the "License");
5 + * you may not use this file except in compliance with the License.
6 + * You may obtain a copy of the License at
7 + *
8 + * http://www.apache.org/licenses/LICENSE-2.0
9 + *
10 + * Unless required by applicable law or agreed to in writing, software
11 + * distributed under the License is distributed on an "AS IS" BASIS,
12 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 + * See the License for the specific language governing permissions and
14 + * limitations under the License.
15 + */
16 +
17 +package org.onosproject.yms.ych;
18 +
19 +/**
20 + * Represents the protocol data representation.
21 + */
22 +public enum YangResourceIdentifierType {
23 + /**
24 + * Uniform Resource Identifier.
25 + */
26 + URI
27 +}
...@@ -16,8 +16,6 @@ ...@@ -16,8 +16,6 @@
16 16
17 package org.onosproject.yms.ydt; 17 package org.onosproject.yms.ydt;
18 18
19 -import org.onosproject.yms.ymsm.YmsOperationType;
20 -
21 /** 19 /**
22 * Abstraction of an entity which represent YANG data tree. This is used 20 * Abstraction of an entity which represent YANG data tree. This is used
23 * for exchanging information between YANG management system and NBI protocol. 21 * for exchanging information between YANG management system and NBI protocol.
......
...@@ -183,14 +183,26 @@ public interface YdtBuilder ...@@ -183,14 +183,26 @@ public interface YdtBuilder
183 void addLeaf(String name, String namespace, Set<String> valueSet); 183 void addLeaf(String name, String namespace, Set<String> valueSet);
184 184
185 /** 185 /**
186 - * Adds YANG list's keys value in the order defined in list's key statement. 186 + * Adds an instance of a child list node, or adds a child leaf list with
187 - * All the keys must be present any missing key or invalid key will result 187 + * multiple instance.
188 - * in exception. 188 + * In case the name and namespace identifies the child list node, then
189 + * the values for all the key leaves must be passed in the same order of
190 + * schema. Then the effective YANG data tree will be like adding a list
191 + * node, followed by adding the key leaves as the child to the list node.
192 + * After this operation, the call to getCurNode will return the list node.
193 + * In case the name and namespace identifies the child leaf-list, then
194 + * the values identifies the instance of leaf list.
195 + * After this operation, the call to getCurNode will return the leaf-list
196 + * node.
189 * 197 *
190 - * @param keysValueList values of the keys in URI in the same order 198 + * @param name name of child to be added
191 - * as defined in YANG file 199 + * @param namespace namespace of child to be added, if it's null, parent's
200 + * namespace will be applied to child
201 + * @param valueList values of the keys in URI in the same order
202 + * as defined in YANG file
192 */ 203 */
193 - void addKeyLeafs(List<String> keysValueList); 204 + void addMultiInstanceChild(String name, String namespace,
205 + List<String> valueList);
194 206
195 /** 207 /**
196 * Traverses up in YANG data tree to the parent node, it is to be used when 208 * Traverses up in YANG data tree to the parent node, it is to be used when
......
...@@ -22,5 +22,11 @@ package org.onosproject.yms.ydt; ...@@ -22,5 +22,11 @@ package org.onosproject.yms.ydt;
22 * operation result etc. 22 * operation result etc.
23 */ 23 */
24 public interface YdtContextResponseInfo { 24 public interface YdtContextResponseInfo {
25 - //TODO 25 +
26 + /**
27 + * Retrieve the context specific error information.
28 + *
29 + * @return context specific error information
30 + */
31 + YdtErrorInfo getYdtErrorInfo();
26 } 32 }
......
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
4 + * Licensed under the Apache License, Version 2.0 (the "License");
5 + * you may not use this file except in compliance with the License.
6 + * You may obtain a copy of the License at
7 + *
8 + * http://www.apache.org/licenses/LICENSE-2.0
9 + *
10 + * Unless required by applicable law or agreed to in writing, software
11 + * distributed under the License is distributed on an "AS IS" BASIS,
12 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 + * See the License for the specific language governing permissions and
14 + * limitations under the License.
15 + */
16 +
17 +package org.onosproject.yms.ydt;
18 +
19 +/**
20 + * Abstraction of an entity which contains context specific error info.
21 + */
22 +public interface YdtErrorInfo {
23 + /**
24 + * Retrieves the application specific error tag corresponding to the
25 + * error context in operation.
26 + *
27 + * @return application specific error tag corresponding to the error
28 + * context in operation
29 + */
30 + String getErrorAppTag();
31 +
32 + /**
33 + * Retrieves the error message corresponding to the error context in
34 + * operation.
35 + *
36 + * @return the error message corresponding to the error context in operation
37 + */
38 + String getErrorMessage();
39 +}
...@@ -26,9 +26,22 @@ package org.onosproject.yms.ydt; ...@@ -26,9 +26,22 @@ package org.onosproject.yms.ydt;
26 * YANG management system is responsible to split the protocol operation 26 * YANG management system is responsible to split the protocol operation
27 * across application(s) which needs to participate, and collate the 27 * across application(s) which needs to participate, and collate the
28 * response(s) from application(s) and return an effective result of the 28 * response(s) from application(s) and return an effective result of the
29 - * operation request. The result of the operation request is returned in 29 + * operation request. The status of the operation execution is returned.
30 - * YMS operation result.
31 */ 30 */
32 -public interface YmsOperationExecutionStatus { 31 +public enum YmsOperationExecutionStatus {
33 - // TODO 32 +
33 + /**
34 + * Successful execution of the operation.
35 + */
36 + EXECUTION_SUCCESS,
37 +
38 + /**
39 + * Exception in execution of the operation.
40 + */
41 + EXECUTION_EXCEPTION,
42 +
43 + /**
44 + * Error in execution of the operation.
45 + */
46 + ERROR_EXCEPTION
34 } 47 }
......
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
14 * limitations under the License. 14 * limitations under the License.
15 */ 15 */
16 16
17 -package org.onosproject.yms.ymsm; 17 +package org.onosproject.yms.ydt;
18 18
19 /** 19 /**
20 * Represents type of root level operation for the request. 20 * Represents type of root level operation for the request.
...@@ -59,23 +59,43 @@ public enum YmsOperationType { ...@@ -59,23 +59,43 @@ public enum YmsOperationType {
59 * The YANG based request is to edit a config node / subtree in the data 59 * The YANG based request is to edit a config node / subtree in the data
60 * store. 60 * store.
61 */ 61 */
62 - EDIT_CONFIG, 62 + EDIT_CONFIG_REQUEST,
63 63
64 /** 64 /**
65 * The YANG based request is to query a config node / subtree in the data 65 * The YANG based request is to query a config node / subtree in the data
66 * store. 66 * store.
67 */ 67 */
68 - QUERY_CONFIG, 68 + QUERY_CONFIG_REQUEST,
69 69
70 /** 70 /**
71 * The YANG based request is to query a node / subtree in the data store. 71 * The YANG based request is to query a node / subtree in the data store.
72 */ 72 */
73 - QUERY, 73 + QUERY_REQUEST,
74 74
75 /** 75 /**
76 * The YANG based request is to execute an RPC defined in YANG. 76 * The YANG based request is to execute an RPC defined in YANG.
77 */ 77 */
78 - RPC, 78 + RPC_REQUEST,
79 +
80 + /**
81 + * The YANG based response is for edit operation.
82 + */
83 + EDIT_CONFIG_REPLY,
84 +
85 + /**
86 + * The YANG based response is for query config operation.
87 + */
88 + QUERY_CONFIG_REPLY,
89 +
90 + /**
91 + * The YANG based response is for query operation.
92 + */
93 + QUERY_REPLY,
94 +
95 + /**
96 + * The YANG based response is for a RPC operation.
97 + */
98 + RPC_REPLY,
79 99
80 /** 100 /**
81 * The YANG based request is to execute an RPC defined in YANG. 101 * The YANG based request is to execute an RPC defined in YANG.
......
...@@ -19,10 +19,14 @@ package org.onosproject.yms.ymsm; ...@@ -19,10 +19,14 @@ package org.onosproject.yms.ymsm;
19 import java.util.List; 19 import java.util.List;
20 20
21 import org.onosproject.yms.ych.YangCodecHandler; 21 import org.onosproject.yms.ych.YangCodecHandler;
22 +import org.onosproject.yms.ych.YangDataTreeCodec;
23 +import org.onosproject.yms.ych.YangProtocolEncodingFormat;
22 import org.onosproject.yms.ydt.YdtBuilder; 24 import org.onosproject.yms.ydt.YdtBuilder;
23 import org.onosproject.yms.ydt.YdtResponse; 25 import org.onosproject.yms.ydt.YdtResponse;
24 import org.onosproject.yms.ydt.YdtWalker; 26 import org.onosproject.yms.ydt.YdtWalker;
27 +import org.onosproject.yms.ydt.YmsOperationType;
25 import org.onosproject.yms.ynh.YangNotificationService; 28 import org.onosproject.yms.ynh.YangNotificationService;
29 +import org.onosproject.yms.ysr.YangModuleLibrary;
26 30
27 /** 31 /**
28 * Abstraction of an entity which provides interfaces to YANG management 32 * Abstraction of an entity which provides interfaces to YANG management
...@@ -178,13 +182,6 @@ public interface YmsService { ...@@ -178,13 +182,6 @@ public interface YmsService {
178 * Depending on the operation type set in the YANG builder tree, the 182 * Depending on the operation type set in the YANG builder tree, the
179 * application(s) get / set / operation interface is invoked. 183 * application(s) get / set / operation interface is invoked.
180 * These interface are part to the YANG modelled service interface. 184 * These interface are part to the YANG modelled service interface.
181 - *
182 - * @param operationRequest operation request that was constructed
183 - * by NBI protocol using YANG data tree
184 - * builder. This operation request contains
185 - * operation request that needs to be
186 - * executed on the applicable application(s)
187 - * @return returns the result of the operation execution.
188 * Depending on the operation type, the YANG response data tree can have 185 * Depending on the operation type, the YANG response data tree can have
189 * the following information. 186 * the following information.
190 * 187 *
...@@ -213,10 +210,18 @@ public interface YmsService { ...@@ -213,10 +210,18 @@ public interface YmsService {
213 * will contain the application's RPC reply schema specific . 210 * will contain the application's RPC reply schema specific .
214 * NBI protocol to use a Yang data tree walker to construct the 211 * NBI protocol to use a Yang data tree walker to construct the
215 * protocol specific reply. 212 * protocol specific reply.
213 + *
214 + * @param operationRequest operation request that was constructed
215 + * by NBI protocol using YANG data tree
216 + * builder. This operation request contains
217 + * operation request that needs to be
218 + * executed on the applicable application(s)
219 + * @return returns the result of the operation execution.
216 */ 220 */
217 YdtResponse executeOperation(YdtBuilder operationRequest); 221 YdtResponse executeOperation(YdtBuilder operationRequest);
218 222
219 - // TODO execute operation which directly take data format string as input. 223 + /* TODO add execute operation which directly take data format string as
224 + input.*/
220 225
221 /** 226 /**
222 * Returns YANG notification service. 227 * Returns YANG notification service.
...@@ -287,6 +292,46 @@ public interface YmsService { ...@@ -287,6 +292,46 @@ public interface YmsService {
287 void unRegisterService(Object appManager, Class<?> yangService); 292 void unRegisterService(Object appManager, Class<?> yangService);
288 293
289 /** 294 /**
295 + * Protocols like RESTCONF, share the list of YANG modules it support.
296 + * using ietf-yang-library
297 + *
298 + * Retrieves the YANG module library supported by the server.
299 + *
300 + * @return YANG module library supported by the server
301 + */
302 + YangModuleLibrary getYangModuleLibrary();
303 +
304 + /**
305 + * Protocols like RESTCONF, use the definitions within the YANG modules
306 + * advertised by the server are used to construct an RPC operation or
307 + * data resource identifier.
308 + *
309 + * Schema Resource:
310 + * The server can optionally support retrieval of the YANG modules it
311 + * supports.
312 + *
313 + * @param moduleName YANG module name.
314 + * @param moduleNamespace namespace in which the module is defined.
315 + * @return YANG file contents of the requested YANG module.
316 + */
317 + String getYangFile(String moduleName, String moduleNamespace);
318 +
319 + /**
320 + * Register protocol specific default CODEC. This is can be used by 1st
321 + * protocol
322 + * to support a protocol format CODEC. This CODEC will be used in both
323 + * NBI and SBI.
324 + *
325 + * @param defaultCodec default codec to be used for a particular protocol
326 + * data format
327 + * @param dataFormat data format to which encoding to be done.
328 + * Currently XML and
329 + * JSON formats are supported.
330 + */
331 + void registerDefaultCodec(YangDataTreeCodec defaultCodec,
332 + YangProtocolEncodingFormat dataFormat);
333 +
334 + /**
290 * Returns YANG codec handler utility. 335 * Returns YANG codec handler utility.
291 * 336 *
292 * In SBI, the provider or driver uses YANG management system as a CODEC 337 * In SBI, the provider or driver uses YANG management system as a CODEC
...@@ -294,11 +339,14 @@ public interface YmsService { ...@@ -294,11 +339,14 @@ public interface YmsService {
294 * the device schema. YANG utils is used to generate the java files 339 * the device schema. YANG utils is used to generate the java files
295 * corresponding to the device schema. Provider or driver use these classes 340 * corresponding to the device schema. Provider or driver use these classes
296 * to seamlessly manage the device as java objects. While sending the 341 * to seamlessly manage the device as java objects. While sending the
297 - * request to device, drivers use the utility to translate the objects to 342 + * request
298 - * protocol specific data representation and then send to the device. 343 + * to device, drivers use the utility to translate the objects to protocol
344 + * specific data representation and then send to the device.
299 * Protocol or driver use the same instance of the codec utility across 345 * Protocol or driver use the same instance of the codec utility across
300 - * multiple translation request. Protocol or driver should not use the same 346 + * multiple
301 - * instance of utility concurrently. 347 + * translation request.
348 + * Protocol or driver should not use the same instance of utility
349 + * concurrently.
302 * 350 *
303 * @return YANG codec utility 351 * @return YANG codec utility
304 */ 352 */
......
1 +/*
2 + * Copyright 2015-present Open Networking Laboratory
3 + *
4 + * Licensed under the Apache License, Version 2.0 (the "License");
5 + * you may not use this file except in compliance with the License.
6 + * You may obtain a copy of the License at
7 + *
8 + * http://www.apache.org/licenses/LICENSE-2.0
9 + *
10 + * Unless required by applicable law or agreed to in writing, software
11 + * distributed under the License is distributed on an "AS IS" BASIS,
12 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 + * See the License for the specific language governing permissions and
14 + * limitations under the License.
15 + */
16 +
17 +package org.onosproject.yms.ynh;
18 +
19 +import org.onosproject.yms.ydt.YdtContext;
20 +
21 +/**
22 + * Represents YANG notification which is a subject of YANG based event.
23 + *
24 + * YMS add themselves as a listener to applications. Application sends
25 + * their notification in YANG utils generated notification. YMS obtains
26 + * the module/sub-module schema tree in which this notification is contained
27 + * and then convert this data to an abstract tree notation (YDT) with root
28 + * node as the logical node with name "yangnotification" it contains
29 + * module/sub-module node in which notification is contained.
30 + * It sends the same to all the protocol who has added them as a listener
31 + * as a YANG notification.
32 + *
33 + * This class represents YANG notification which contains the
34 + * notification context in abstract tree notation.
35 + */
36 +public class YangNotification {
37 +
38 + /**
39 + * YANG notification in form of abstract tree notation (YDT)
40 + * Root node of notification root context will be logical node with
41 + * name as "yangnotification", it contains module/sub-module node
42 + * in which notification is contained.
43 + */
44 + YdtContext notificationRootContext;
45 +
46 + /**
47 + * Creates an instance of YANG notification subject.
48 + *
49 + * @param notificationContext logical root node with name as
50 + * "yangnotification"
51 + */
52 + public YangNotification(YdtContext notificationContext) {
53 + this.notificationRootContext = notificationContext;
54 + }
55 +
56 + /**
57 + * Assign the YANG modeled notification data.
58 + *
59 + * @param notificationRootContext YANG data tree containing the data for
60 + * the notification
61 + */
62 + public void setNotificationRootContext(YdtContext notificationRootContext) {
63 + this.notificationRootContext = notificationRootContext;
64 + }
65 +
66 + /**
67 + * Returns YANG notification data.
68 + *
69 + * @return YANG data tree containing the data for the notification
70 + */
71 + public YdtContext getNotificationRootContext() {
72 + return notificationRootContext;
73 + }
74 +}
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
4 + * Licensed under the Apache License, Version 2.0 (the "License");
5 + * you may not use this file except in compliance with the License.
6 + * You may obtain a copy of the License at
7 + *
8 + * http://www.apache.org/licenses/LICENSE-2.0
9 + *
10 + * Unless required by applicable law or agreed to in writing, software
11 + * distributed under the License is distributed on an "AS IS" BASIS,
12 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 + * See the License for the specific language governing permissions and
14 + * limitations under the License.
15 + */
16 +package org.onosproject.yms.ynh;
17 +
18 +import org.onosproject.event.AbstractEvent;
19 +
20 +/**
21 + * Represents YANG notification event.
22 + *
23 + * YANG notification handler listens for the notification from the application.
24 + * It convert the received notification in YANG notification events.
25 + *
26 + * YangNotificationEvent represents event generated by YANG management system
27 + * in response to the YANG defined application notification. The applications
28 + * notification information is in abstract YANG data tree.
29 + */
30 +public class YangNotificationEvent
31 + extends AbstractEvent<YangNotificationEvent.Type, YangNotification> {
32 +
33 + /**
34 + * Event type is the notification as defined in the YANG file.
35 + */
36 + public enum Type {
37 + /**
38 + * Indicates a YANG notification.
39 + */
40 + YANG_NOTIFICATION
41 + }
42 +
43 + /**
44 + * YANG notification information shared to NBI protocol in YANG data tree
45 + * using the registered callback.
46 + *
47 + * @param subject notification information in YANG data tree.
48 + */
49 + public YangNotificationEvent(YangNotification subject) {
50 + super(Type.YANG_NOTIFICATION, subject);
51 + }
52 +}
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
4 + * Licensed under the Apache License, Version 2.0 (the "License");
5 + * you may not use this file except in compliance with the License.
6 + * You may obtain a copy of the License at
7 + *
8 + * http://www.apache.org/licenses/LICENSE-2.0
9 + *
10 + * Unless required by applicable law or agreed to in writing, software
11 + * distributed under the License is distributed on an "AS IS" BASIS,
12 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 + * See the License for the specific language governing permissions and
14 + * limitations under the License.
15 + */
16 +package org.onosproject.yms.ynh;
17 +
18 +import org.onosproject.event.EventListener;
19 +
20 +/**
21 + * Abstraction of listener for YANG notification handler events.
22 + * NBI protocols/interfaces supporting YANG notification needs to implement
23 + * YANG notification listener and add themselves as a listener to YANG
24 + * notification event.
25 + */
26 +public interface YangNotificationListener
27 + extends EventListener<YangNotificationEvent> {
28 +}
...@@ -16,17 +16,86 @@ ...@@ -16,17 +16,86 @@
16 16
17 package org.onosproject.yms.ynh; 17 package org.onosproject.yms.ynh;
18 18
19 +import org.onosproject.event.ListenerService;
20 +
19 /** 21 /**
20 * Abstraction of an entity which provides interfaces to YANG notification 22 * Abstraction of an entity which provides interfaces to YANG notification
21 - * service. YNH handles notification from the application/core and provide 23 + * service. YANG notification handler receives the event notifications from
22 - * it to the protocols. 24 + * application/core and provide it to the protocols.
23 - * <p> 25 + *
24 * NBI Protocols which can support notification delivery for application(s) 26 * NBI Protocols which can support notification delivery for application(s)
25 * needs to add themselves as a listeners with YANG notification service. 27 * needs to add themselves as a listeners with YANG notification service.
26 - * Protocols can use YANG notification service to check if a received 28 + * Also based on registered schema YMS add themselves as a listener to
29 + * applications. Application sends their notification in YANG utils generated
30 + * notification. YMS obtains the module/sub-module schema tree in which this
31 + * notification is contained and then convert this data to an abstract tree
32 + * notation (YDT) with root node as the module/sub-module node in which
33 + * notification is contained. It sends the same to all the protocol who has
34 + * added them as a listener as a YANG notification.
35 + *
36 + * Also Protocols can use YANG notification service to check if a received
27 * notification should be filtered against any of their protocol specific 37 * notification should be filtered against any of their protocol specific
28 * filtering mechanism. 38 * filtering mechanism.
29 */ 39 */
30 -public interface YangNotificationService { 40 +public interface YangNotificationService
31 - //TODO 41 + extends ListenerService<YangNotificationEvent,
42 + YangNotificationListener> {
43 +
44 + /*
45 + * Example of a use case of notification filtering.
46 + * The following example illustrates how to select fault events which
47 + * have severities of critical, major, or minor. The filtering criteria
48 + * evaluation is as follows:
49 + *
50 + * ((fault & severity=critical) | (fault & severity=major) | (fault &
51 + * severity=minor))
52 + *
53 + * <netconf:rpc netconf:message-id="101"
54 + * xmlns:netconf="urn:ietf:params:xml:ns:netconf:base:1.0">
55 + * <create-subscription
56 + * xmlns="urn:ietf:params:xml:ns:netconf:notification:1.0">
57 + * <filter netconf:type="subtree">
58 + * <event xmlns="http://example.com/event/1.0">
59 + * <eventClass>fault</eventClass>
60 + * <severity>critical</severity>
61 + * </event>
62 + * <event xmlns="http://example.com/event/1.0">
63 + * <eventClass>fault</eventClass>
64 + * <severity>major</severity>
65 + * </event>
66 + * <event xmlns="http://example.com/event/1.0">
67 + * <eventClass>fault</eventClass>
68 + * <severity>minor</severity>
69 + * </event>
70 + * </filter>
71 + * </create-subscription>
72 + * </netconf:rpc>
73 + */
74 +
75 + /**
76 + * Protocols have their own mechanism to support notification filtering
77 + * or notification subscription. Depending on the protocol specification,
78 + * the filtering is implemented in the protocol.
79 + * The Protocol implementations are abstracted of the Schema, there are
80 + * scenarios in which they need to check if the received notification
81 + * is of interest as per the schema filtering / subscription.
82 + * In such scenario, protocols can create a filtering / subscription YANG
83 + * data tree and use the notification service to filter the notification
84 + * subject against their filter.
85 + *
86 + * Filters the notification subject YANG data tree, with the specified
87 + * filter of the NBI protocol. If the filter does not match for the
88 + * passed notification subject, null will be returned.
89 + * Otherwise, the part of the subject matching the filter will be returned.
90 + *
91 + * @param notificationSubject YANG notification subject reported by YANG
92 + * notification service.
93 + * @param notificationFilter Protocols data model specific notification
94 + * filter represented in YANG data tree.
95 + * @return filtered notification which passes the data model specific
96 + * notification filter.
97 + */
98 + YangNotification getFilteredSubject(YangNotification notificationSubject,
99 + YangNotification notificationFilter);
100 +
32 } 101 }
......
...@@ -17,14 +17,11 @@ ...@@ -17,14 +17,11 @@
17 /** 17 /**
18 * Provides interfaces to YANG notification handler. YNH handles notification 18 * Provides interfaces to YANG notification handler. YNH handles notification
19 * from the application and provide it to the protocols. 19 * from the application and provide it to the protocols.
20 - */
21 -
22 -/**
23 - * Provides interfaces to YANG notification service.
24 * 20 *
25 * NBI Protocols which can support notification delivery for application(s) 21 * NBI Protocols which can support notification delivery for application(s)
26 - * needs to add themselves as a listeners with YANG notification service. 22 + * need to add themselves as a listeners with YANG notification service.
27 - * Protocols can use YANG notification service to check if a received 23 + *
24 + * Also protocols can use YANG notification service to check if a received
28 * notification should be filtered against any of their protocol specific 25 * notification should be filtered against any of their protocol specific
29 * filtering mechanism. 26 * filtering mechanism.
30 */ 27 */
......
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
4 + * Licensed under the Apache License, Version 2.0 (the "License");
5 + * you may not use this file except in compliance with the License.
6 + * You may obtain a copy of the License at
7 + *
8 + * http://www.apache.org/licenses/LICENSE-2.0
9 + *
10 + * Unless required by applicable law or agreed to in writing, software
11 + * distributed under the License is distributed on an "AS IS" BASIS,
12 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 + * See the License for the specific language governing permissions and
14 + * limitations under the License.
15 + */
16 +
17 +package org.onosproject.yms.ysr;
18 +
19 +/**
20 + * Abstraction of an entity which provides YANG module identifiers.
21 + * Reference RFC 7895
22 + * YANG library provides information about all the YANG modules
23 + * used by a network management server
24 + */
25 +public interface YangModuleIdentifier {
26 + /**
27 + * retrieves the name of the YANG module.
28 + *
29 + * @return the name of the YANG module
30 + */
31 + String getModuleName();
32 +
33 + /**
34 + * Retrieves revision of the YANG module.
35 + *
36 + * Reference RFC 7895
37 + * Each YANG module and submodule within the library has a
38 + * revision. This is derived from the most recent revision statement
39 + * within the module or submodule. If no such revision statement
40 + * exists, the module's or submodule's revision is the zero-length
41 + * string.
42 + *
43 + * @return revision of the YANG module
44 + */
45 + String getRevision();
46 +}
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
4 + * Licensed under the Apache License, Version 2.0 (the "License");
5 + * you may not use this file except in compliance with the License.
6 + * You may obtain a copy of the License at
7 + *
8 + * http://www.apache.org/licenses/LICENSE-2.0
9 + *
10 + * Unless required by applicable law or agreed to in writing, software
11 + * distributed under the License is distributed on an "AS IS" BASIS,
12 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 + * See the License for the specific language governing permissions and
14 + * limitations under the License.
15 + */
16 +package org.onosproject.yms.ysr;
17 +
18 +import java.util.List;
19 +
20 +/**
21 + * Abstraction of an entity which provides YANG module information.
22 + *
23 + * Reference RFC 7895
24 + * The following information is needed by a client application (for each
25 + * YANG module in the library) to fully utilize the YANG data modeling
26 + * language:
27 + *
28 + * o name: The name of the YANG module.
29 + *
30 + * o revision: Each YANG module and submodule within the library has a
31 + * revision. This is derived from the most recent revision statement
32 + * within the module or submodule. If no such revision statement
33 + * exists, the module's or submodule's revision is the zero-length
34 + * string.
35 + *
36 + * o submodule list: The name and revision of each submodule used by
37 + * the module MUST be identified.
38 + *
39 + * o feature list: The name of each YANG feature supported by the
40 + * server MUST be identified.
41 + *
42 + * o deviation list: The name of each YANG module used for deviation
43 + * statements MUST be identified.
44 + */
45 +public interface YangModuleInformation {
46 + /**
47 + * Retrieves the YANG modules identifier.
48 + *
49 + * @return YANG modules identifier
50 + */
51 + YangModuleIdentifier getModuleIdentifier();
52 +
53 + /**
54 + * Retrieves the YANG modules namespace.
55 + * The XML namespace identifier for this module.
56 + *
57 + * @return YANG modules namespace
58 + */
59 + String getNamespace();
60 +
61 + /**
62 + * Reference RFC 7895
63 + * Retrieves the list of YANG feature names from this module that are
64 + * supported by the server, regardless of whether they are
65 + * defined in the module or any included submodule.
66 + *
67 + * @return list of YANG features
68 + */
69 + List<String> getFeatureList();
70 +
71 + /**
72 + * Retrieves the list of submodules in the module.
73 + * The name and revision of each submodule used by
74 + * the module MUST be identified.
75 + *
76 + * Each entry represents one submodule within the
77 + * parent module.
78 + *
79 + * @return list of submodules in the module
80 + */
81 + List<YangModuleIdentifier> getSubModuleIdentifier();
82 +}
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
4 + * Licensed under the Apache License, Version 2.0 (the "License");
5 + * you may not use this file except in compliance with the License.
6 + * You may obtain a copy of the License at
7 + *
8 + * http://www.apache.org/licenses/LICENSE-2.0
9 + *
10 + * Unless required by applicable law or agreed to in writing, software
11 + * distributed under the License is distributed on an "AS IS" BASIS,
12 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 + * See the License for the specific language governing permissions and
14 + * limitations under the License.
15 + */
16 +package org.onosproject.yms.ysr;
17 +
18 +/*-
19 + * Abstraction of an entity which provides the servers YANG library information.
20 + *
21 + * Reference RFC 7895
22 + * The "ietf-yang-library" module provides information about the YANG
23 + * library used by a server. This module is defined using YANG version
24 + * 1, but it supports the description of YANG modules written in any
25 + * revision of YANG.
26 + *
27 + * Following is the YANG Tree Diagram for the "ietf-yang-library"
28 + * module:
29 + *
30 + * +--ro modules-state
31 + * +--ro module-set-id string
32 + * +--ro module* [name revision]
33 + * +--ro name yang:yang-identifier
34 + * +--ro revision union
35 + * +--ro schema? inet:uri
36 + * +--ro namespace inet:uri
37 + * +--ro feature* yang:yang-identifier
38 + * +--ro deviation* [name revision]
39 + * | +--ro name yang:yang-identifier
40 + * | +--ro revision union
41 + * +--ro conformance-type enumeration
42 + * +--ro submodule* [name revision]
43 + * +--ro name yang:yang-identifier
44 + * +--ro revision union
45 + * +--ro schema? inet:uri
46 + */
47 +
48 +import java.util.List;
49 +
50 +public interface YangModuleLibrary {
51 + /**
52 + * Retrieves the current module set id of the YANG library.
53 + *
54 + * Reference RFC7895.
55 + * modules-state/module-set-id
56 + *
57 + * This mandatory leaf contains a unique implementation-specific
58 + * identifier representing the current set of modules and submodules on
59 + * a specific server. The value of this leaf MUST change whenever the
60 + * set of modules and submodules in the YANG library changes. There is
61 + * no requirement that the same set always results in the same "module-
62 + * set-id" value.
63 + *
64 + * @return module set id of the YANG library
65 + */
66 + String getModuleSetId();
67 +
68 + /**
69 + * Retrieves the current list of YANG modules supported in the server.
70 + *
71 + * Reference RFC 7895.
72 + * modules-state/module
73 + *
74 + * This mandatory list contains one entry for each YANG data model
75 + * module supported by the server. There MUST be an entry in this list
76 + * for each revision of each YANG module that is used by the server. It
77 + * is possible for multiple revisions of the same module to be imported,
78 + * in addition to an entry for the revision that is implemented by the
79 + * server.
80 + *
81 + * @return the current list of YANG modules supported in the server
82 + */
83 + List<YangModuleInformation> getYangModuleList();
84 +}
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
4 + * Licensed under the Apache License, Version 2.0 (the "License");
5 + * you may not use this file except in compliance with the License.
6 + * You may obtain a copy of the License at
7 + *
8 + * http://www.apache.org/licenses/LICENSE-2.0
9 + *
10 + * Unless required by applicable law or agreed to in writing, software
11 + * distributed under the License is distributed on an "AS IS" BASIS,
12 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 + * See the License for the specific language governing permissions and
14 + * limitations under the License.
15 + */
16 +
17 +/**
18 + * YANG schema registry (YSR) is responsible to maintain all the applications
19 + * schemas defined in YANG. The YANG data tree builder depends on the schema
20 + * registry to validate the tree building according to schema.
21 + * YANG codec handler using the schema registry to maintain device schema.
22 + */
23 +package org.onosproject.yms.ysr;