RPC for netconf node addition. Supports encrypt option for password encryption.
[netconf.git] / netconf / sal-netconf-connector / src / main / yang / netconf-node-topology.yang
1 module netconf-node-topology {
2     namespace "urn:opendaylight:netconf-node-topology";
3     prefix "nettop";
4
5     import network-topology { prefix nt; revision-date 2013-10-21; }
6     import yang-ext { prefix ext; revision-date "2013-07-09";}
7     import ietf-inet-types { prefix inet; revision-date "2013-07-15"; }
8
9     revision "2015-01-14" {
10         description "Initial revision of Topology model";
11     }
12
13     augment "/nt:network-topology/nt:topology/nt:topology-types" {
14         container topology-netconf {
15         }
16     }
17
18     grouping netconf-node-credentials {
19
20         choice credentials {
21             config true;
22             case login-password {
23                 leaf username {
24                     type string;
25                 }
26
27                 leaf password {
28                     type string;
29                 }
30             }
31         }
32     }
33
34     grouping netconf-node-connection-parameters {
35
36         leaf host {
37             type inet:host;
38         }
39
40         leaf port {
41             type inet:port-number;
42         }
43
44         leaf tcp-only {
45             config true;
46             type boolean;
47         }
48
49         leaf schemaless {
50             type boolean;
51             default false;
52         }
53
54         container yang-module-capabilities {
55             config true;
56             leaf override {
57                 type boolean;
58                 default false;
59                 description "Whether to override or merge this list of capabilities with capabilities from device";
60             }
61
62             leaf-list capability {
63                 type string;
64                 description "Set a list of capabilities to override capabilities provided in device's hello message.
65                              Can be used for devices that do not report any yang modules in their hello message";
66             }
67         }
68
69         container non-module-capabilities {
70             config true;
71             leaf override {
72                 type boolean;
73                 default false;
74                 description "Whether to override or merge this list of non-module based capabilities with non-module
75                              based capabilities from device";
76             }
77
78             leaf-list capability {
79                 type string;
80                 description "Set a list of non-module based capabilities to override or merge non-module capabilities
81                              provided in device's hello message. Can be used for devices that do not report or
82                              incorrectly report non-module based capabilities in their hello message";
83             }
84         }
85
86         leaf reconnect-on-changed-schema {
87             config true;
88             type boolean;
89             default false;
90             description "If true, the connector would auto disconnect/reconnect when schemas are changed in the remote device.
91                          The connector subscribes (right after connect) to base netconf notifications and listens for netconf-capability-change notification";
92         }
93
94         leaf connection-timeout-millis {
95             description "Specifies timeout in milliseconds after which connection must be established.";
96             config true;
97             type uint32;
98             default 20000;
99         }
100
101         leaf default-request-timeout-millis {
102             description "Timeout for blocking operations within transactions.";
103             config true;
104             type uint32;
105             default 60000;
106         }
107
108         leaf max-connection-attempts {
109             description "Maximum number of connection retries. Non positive value or null is interpreted as infinity.";
110             config true;
111             type uint32;
112             default 0; // retry forever
113         }
114
115         leaf between-attempts-timeout-millis {
116             description "Initial timeout in milliseconds to wait between connection attempts. Will be multiplied by sleep-factor with every additional attempt";
117             config true;
118             type uint16;
119             default 2000;
120         }
121
122         leaf sleep-factor {
123             config true;
124             type decimal64 {
125                 fraction-digits 1;
126             }
127             default 1.5;
128         }
129
130         // Keepalive configuration
131         leaf keepalive-delay {
132             config true;
133             type uint32;
134             default 120;
135             description "Netconf connector sends keepalive RPCs while the session is idle, this delay specifies the delay between keepalive RPC in seconds
136                          If a value <1 is provided, no keepalives will be sent";
137         }
138
139         leaf concurrent-rpc-limit {
140             config true;
141             type uint16;
142             default 0;
143             description "Limit of concurrent messages that can be send before reply messages are received.
144                          If value <1 is provided, no limit will be enforced";
145         }
146
147         leaf actor-response-wait-time {
148                     config true;
149                     type uint16 {
150                       range "1..max";
151                     }
152                     default 5;
153                     description "Time that slave actor will wait for response from master.";
154         }
155     }
156
157     grouping netconf-node-connection-status {
158
159         leaf connection-status {
160             config false;
161             type enumeration {
162                 enum connecting;
163                 enum connected;
164                 enum unable-to-connect;
165             }
166         }
167
168         container clustered-connection-status {
169             config false;
170             list node-status {
171                 leaf node {
172                     type string;
173                 }
174                 leaf status {
175                     type enumeration {
176                         enum connected;
177                         enum unavailable;
178                         enum failed;
179                     }
180                 }
181             }
182             leaf netconf-master-node {
183                 config false;
184                 type string;
185             }
186         }
187
188         leaf connected-message {
189             config false;
190             type string;
191         }
192
193         container available-capabilities {
194             config false;
195             list available-capability {
196                 leaf capability {
197                     type string;
198                 }
199                 leaf capability-origin {
200                     type enumeration {
201                         enum user-defined;
202                         enum device-advertised;
203                     }
204                 }
205             }
206         }
207
208         container unavailable-capabilities {
209             config false;
210             list unavailable-capability {
211                 leaf capability {
212                     type string;
213                 }
214
215                 leaf failure-reason {
216                     type enumeration {
217                         enum missing-source;
218                         enum unable-to-resolve;
219                     }
220                 }
221             }
222         }
223
224         container pass-through {
225             when "../connection-status = connected";
226             description
227                 "When the underlying node is connected, its NETCONF context
228                 is available verbatim under this container through the
229                 mount extension.";
230         }
231
232     }
233
234     grouping netconf-schema-storage {
235         leaf schema-cache-directory {
236             config true;
237             type string;
238             default "schema";
239             description "The destination schema repository for yang files relative to the cache directory.  This may be specified per netconf mount
240                          so that the loaded yang files are stored to a distinct directory to avoid potential conflict.";
241         }
242
243         container yang-library {
244             leaf yang-library-url {
245                 config true;
246                 type inet:uri;
247                 description "Yang library to be plugged as additional source provider into the shared schema repository";
248             }
249
250             // credentials for basic http authentication
251             leaf username {
252                 config true;
253                 type string;
254             }
255
256             leaf password {
257                 config true;
258                 type string;
259             }
260         }
261     }
262
263     grouping netconf-node-fields {
264
265         uses netconf-node-credentials;
266
267         uses netconf-node-connection-parameters;
268
269         uses netconf-node-connection-status;
270
271         uses netconf-schema-storage;
272
273     }
274
275     rpc add-netconf-node {
276         input {
277             uses netconf-node-fields;
278             leaf node-id {
279                 type string;
280             }
281             leaf encrypt {
282                 type boolean;
283                 default false;
284             }
285         }
286     }
287
288     augment "/nt:network-topology/nt:topology/nt:node" {
289         when "../../nt:topology-types/topology-netconf";
290         ext:augment-identifier "netconf-node";
291
292         uses netconf-node-fields;
293     }
294
295 }