]> git.proxmox.com Git - mirror_frr.git/blob - yang/frr-bfdd.yang
Merge pull request #12845 from sri-mohan1/sri-mohan-ldp
[mirror_frr.git] / yang / frr-bfdd.yang
1 // SPDX-License-Identifier: BSD-2-Clause
2 module frr-bfdd {
3 yang-version 1.1;
4 namespace "http://frrouting.org/yang/bfdd";
5 prefix frr-bfdd;
6
7 import ietf-inet-types {
8 prefix inet;
9 }
10 import ietf-yang-types {
11 prefix yang;
12 }
13 import frr-interface {
14 prefix frr-interface;
15 }
16 import frr-vrf {
17 prefix frr-vrf;
18 }
19 import frr-route-types {
20 prefix frr-route-types;
21 }
22
23 organization "FRRouting";
24 contact
25 "FRR Users List: <mailto:frog@lists.frrouting.org>
26 FRR Development List: <mailto:dev@lists.frrouting.org>";
27 description
28 "This module defines a model for managing FRR bfdd daemon.
29
30 Copyright 2020 FRRouting
31
32 Redistribution and use in source and binary forms, with or without
33 modification, are permitted provided that the following conditions
34 are met:
35
36 1. Redistributions of source code must retain the above copyright notice,
37 this list of conditions and the following disclaimer.
38
39 2. Redistributions in binary form must reproduce the above copyright
40 notice, this list of conditions and the following disclaimer in the
41 documentation and/or other materials provided with the distribution.
42
43 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
44 \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
45 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
46 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
47 HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
48 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
49 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
50 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
51 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
52 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
53 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.";
54
55 revision 2019-05-09 {
56 description "Initial revision.";
57 reference
58 "RFC 5880: Bidirectional Forwarding Detection (BFD).
59 RFC 5881: Bidirectional Forwarding Detection (BFD)
60 for IPv4 and IPv6 (Single Hop).
61 RFC 5883: Bidirectional Forwarding Detection (BFD) for Multihop Paths.";
62 }
63
64
65 /*
66 * BFD types declaration.
67 */
68 typedef multiplier {
69 description "Detection multiplier";
70 type uint8 {
71 range "2..255";
72 }
73 }
74
75 typedef discriminator {
76 description "BFD session identification";
77 type uint32 {
78 range "1..4294967295";
79 }
80 }
81
82 typedef state {
83 description "BFD session state";
84 type enumeration {
85 enum admin-down {
86 value 0;
87 description "Administratively down";
88 }
89 enum down {
90 value 1;
91 description "Down";
92 }
93 enum init {
94 value 2;
95 description "Initializing";
96 }
97 enum up {
98 value 3;
99 description "Up";
100 }
101 }
102 }
103
104 typedef diagnostic {
105 description "BFD session diagnostic";
106 type enumeration {
107 enum ok {
108 value 0;
109 description "Ok";
110 }
111 enum control-expired {
112 value 1;
113 description "Control timer expired";
114 }
115 enum echo-failed {
116 value 2;
117 description "Echo function failed";
118 }
119 enum neighbor-down {
120 value 3;
121 description "Neighbor signaled session down";
122 }
123 enum forwarding-reset {
124 value 4;
125 description "Forwarding plane reset";
126 }
127 enum path-down {
128 value 5;
129 description "Path down";
130 }
131 enum concatenated-path-down {
132 value 6;
133 description "Concatenated path down";
134 }
135 enum administratively-down {
136 value 7;
137 description "Administratively down";
138 }
139 enum reverse-concat-path-down {
140 value 8;
141 description "Reverse concatenated path down";
142 }
143 }
144 }
145
146 typedef profile-name {
147 type string {
148 length "1..64";
149 }
150 description "Profile name format";
151 }
152
153 typedef profile-ref {
154 type leafref {
155 path "/frr-bfdd:bfdd/frr-bfdd:bfd/frr-bfdd:profile/frr-bfdd:name";
156 require-instance false;
157 }
158 description "Reference to a BFD profile";
159 }
160
161 /*
162 * Shared BFD items.
163 */
164 grouping session-common {
165 description "Common BFD session settings";
166
167 leaf detection-multiplier {
168 type multiplier;
169 default 3;
170 description "Local session detection multiplier";
171 }
172
173 leaf desired-transmission-interval {
174 type uint32 {
175 range "10000..60000000";
176 }
177 units microseconds;
178 default 300000;
179 description "Minimum desired control packet transmission interval";
180 }
181
182 leaf required-receive-interval {
183 type uint32 {
184 range "10000..60000000";
185 }
186 units microseconds;
187 default 300000;
188 description "Minimum required control packet receive interval";
189 }
190
191 leaf administrative-down {
192 type boolean;
193 default false;
194 description "Disables or enables the session administratively";
195 }
196
197 leaf passive-mode {
198 type boolean;
199 default false;
200 description
201 "Don't attempt to start session establishment.";
202 }
203 }
204
205 grouping session-echo {
206 description "BFD session echo settings";
207
208 leaf echo-mode {
209 type boolean;
210 default false;
211 description "Use echo packets to detect failures";
212 }
213
214 leaf desired-echo-transmission-interval {
215 type uint32 {
216 range "10000..60000000";
217 }
218 units microseconds;
219 default 50000;
220 description "Minimum desired echo packet transmission interval";
221 }
222
223 leaf required-echo-receive-interval {
224 type uint32 {
225 range "0 | 10000..60000000";
226 }
227 units microseconds;
228 default 50000;
229 description "Minimum required echo packet receive interval";
230 }
231 }
232
233 grouping session-multi-hop {
234 description "BFD session multi hop settings.";
235
236 leaf minimum-ttl {
237 type uint8 {
238 range "1..254";
239 }
240 default "254";
241 description
242 "Minimum expected TTL on received packets.";
243 }
244 }
245
246 grouping bfd-monitoring {
247 description
248 "BFD monitoring template for protocol integration.";
249
250 leaf source {
251 type inet:ip-address;
252 description
253 "Source address to use for liveness check.
254
255 When source is not set and multi-hop is `false` the source
256 address will be `0.0.0.0` (any).
257
258 When source is not set and multi-hop is `true` the source
259 address will be automatic selected through Next Hop Tracking (NHT).";
260 }
261
262 leaf multi-hop {
263 description
264 "Use multi hop session instead of single hop.";
265 type boolean;
266 default false;
267 }
268
269 leaf profile {
270 description
271 "BFD pre configured profile.";
272 type frr-bfdd:profile-ref;
273 }
274 }
275
276 grouping session-states {
277 /*
278 * Local settings.
279 */
280 leaf local-discriminator {
281 type discriminator;
282 description "Local session identifier";
283 }
284
285 leaf local-state {
286 type state;
287 description "Local session state";
288 }
289
290 leaf local-diagnostic {
291 type diagnostic;
292 description "Local session diagnostic";
293 }
294
295 leaf local-multiplier {
296 type multiplier;
297 description "Local session current multiplier";
298 }
299
300 /*
301 * Remote settings.
302 */
303 leaf remote-discriminator {
304 type discriminator;
305 description "Remote session identifier";
306 }
307
308 leaf remote-state {
309 type state;
310 description "Remote session state";
311 }
312
313 leaf remote-diagnostic {
314 type diagnostic;
315 description "Local session diagnostic";
316 }
317
318 leaf remote-multiplier {
319 type multiplier;
320 description "Remote session detection multiplier";
321 }
322
323 /*
324 * Negotiated settings.
325 */
326 leaf negotiated-transmission-interval {
327 description "Negotiated transmit interval";
328 type uint32;
329 units microseconds;
330 }
331
332 leaf negotiated-receive-interval {
333 description "Negotiated receive interval";
334 type uint32;
335 units microseconds;
336 }
337
338 leaf detection-mode {
339 description "Detection mode";
340
341 type enumeration {
342 enum async-with-echo {
343 value "1";
344 description "Async with echo";
345 }
346 enum async-without-echo {
347 value "2";
348 description "Async without echo";
349 }
350 enum demand-with-echo {
351 value "3";
352 description "Demand with echo";
353 }
354 enum demand-without-echo {
355 value "4";
356 description "Demand without echo";
357 }
358 }
359 }
360
361 /*
362 * Statistics.
363 */
364 leaf last-down-time {
365 type yang:date-and-time;
366 description "Time and date of the last time session was down";
367 }
368
369 leaf last-up-time {
370 type yang:date-and-time;
371 description "Time and date of the last time session was up";
372 }
373
374 leaf session-down-count {
375 type uint32;
376 description "Number of times the session went down";
377 }
378
379 leaf session-up-count {
380 type uint32;
381 description "Number of times the session went up";
382 }
383
384 leaf control-packet-input-count {
385 type uint64;
386 description "Number of control packets received";
387 }
388
389 leaf control-packet-output-count {
390 type uint64;
391 description "Number of control packets sent";
392 }
393
394 /*
395 * Echo mode operational data.
396 */
397 leaf negotiated-echo-transmission-interval {
398 type uint32;
399 units microseconds;
400 description "Negotiated echo transmit interval";
401 }
402
403 /*
404 * Statistics.
405 */
406 leaf echo-packet-input-count {
407 type uint64;
408 description "Number of echo packets received";
409 }
410
411 leaf echo-packet-output-count {
412 type uint64;
413 description "Number of echo packets sent";
414 }
415 }
416
417 /*
418 * BFD operational.
419 */
420 container bfdd {
421 container bfd {
422 presence "Present if the BFD protocol is enabled";
423
424 list profile {
425 key "name";
426 description "BFD pre configuration profiles";
427
428 leaf name {
429 type profile-name;
430 description "Profile name";
431 }
432
433 uses session-common;
434 uses session-echo;
435 uses session-multi-hop;
436 }
437
438 container sessions {
439 list single-hop {
440 key "dest-addr interface vrf";
441 description "List of single hop sessions";
442
443 leaf dest-addr {
444 type inet:ip-address;
445 description "IP address of the peer";
446 }
447
448 leaf interface {
449 type frr-interface:interface-ref;
450 description "Interface to use to contact peer";
451 }
452
453 leaf vrf {
454 type frr-vrf:vrf-ref;
455 description "Virtual Routing Domain name";
456 }
457
458 leaf source-addr {
459 type inet:ip-address;
460 description "Local IP address";
461 }
462
463 leaf profile {
464 type profile-ref;
465 description "Override defaults with profile.";
466 }
467
468 uses session-common;
469 uses session-echo;
470
471 container stats {
472 uses session-states;
473 config false;
474 }
475 }
476
477 list multi-hop {
478 key "source-addr dest-addr vrf";
479 description "List of multi hop sessions";
480
481 leaf source-addr {
482 type inet:ip-address;
483 description "Local IP address";
484 }
485
486 leaf dest-addr {
487 type inet:ip-address;
488 description "IP address of the peer";
489 }
490
491 leaf vrf {
492 type frr-vrf:vrf-ref;
493 description "Virtual Routing Domain name";
494 }
495
496 leaf profile {
497 type profile-ref;
498 description "Override defaults with profile.";
499 }
500
501 uses session-common;
502 uses session-multi-hop;
503
504 container stats {
505 uses session-states;
506 config false;
507 }
508 }
509 }
510 }
511 }
512 }