e5be6c7f20d9d1bfb8fc75a663964684566d3599
[bgpcep.git] / bgp / rib-impl / src / main / yang / odl-bgp-rib-impl-cfg.yang
1 // vi: set smarttab et sw=4 tabstop=4:
2 module odl-bgp-rib-impl-cfg {
3     yang-version 1;
4     namespace "urn:opendaylight:params:xml:ns:yang:controller:bgp:rib:impl";
5     prefix "bgprib-impl";
6
7     import bgp-multiprotocol { prefix bgp-mp; revision-date 2013-09-19; }
8     import bgp-rib { prefix rib; revision-date 2013-09-25; }
9     import bgp-types { prefix bgp-t; revision-date 2013-09-19; }
10     import odl-bgp-rib-cfg { prefix bgprib; revision-date 2013-07-01; }
11     import odl-bgp-parser-spi-cfg { prefix bgpspi; revision-date 2013-11-15; }
12     import odl-bgp-rib-spi-cfg { prefix ribspi; revision-date 2013-11-15; }
13     import ietf-inet-types { prefix inet; revision-date 2010-09-24; }
14     import opendaylight-md-sal-binding {prefix mdsb; revision-date 2013-10-28; }
15     import opendaylight-md-sal-dom {prefix sal; revision-date 2013-10-28; }
16     import netty { prefix netty; revision-date 2013-11-19; }
17     import config { prefix config; revision-date 2013-04-05; }
18     import protocol-framework { prefix pf; revision-date 2014-03-13; }
19     import odl-tcpmd5-cfg { prefix tcpmd5; revision-date 2014-04-27; }
20     import odl-tcpmd5-netty-cfg { prefix tcpmd5n; revision-date 2014-04-27; }
21     import rpc-context { prefix rpcx; revision-date 2013-06-17; }
22     import odl-bgp-openconfig-spi-cfg { prefix bgp-oc-spi; revision-date 2015-09-25; }
23
24     organization "Cisco Systems, Inc.";
25
26     contact "Robert Varga <rovarga@cisco.com>";
27
28     description
29         "This module contains the base YANG definitions for
30          BGP listener implementation.
31
32         Copyright (c)2013 Cisco Systems, Inc. All rights reserved.;
33
34         This program and the accompanying materials are made available
35         under the terms of the Eclipse Public License v1.0 which
36         accompanies this distribution, and is available at
37         http://www.eclipse.org/legal/epl-v10.html";
38
39     revision "2013-04-09" {
40         description
41             "Initial revision";
42     }
43
44     identity base-bgp-parser {
45         base config:module-type;
46         config:java-name-prefix BaseBGPParser;
47         config:provided-service bgpspi:extension;
48     }
49
50     augment "/config:modules/config:module/config:configuration" {
51         case base-bgp-parser {
52             when "/config:modules/config:module/config:type = 'base-bgp-parser'";
53         }
54     }
55
56     identity bgp-dispatcher {
57         description
58             "Service representing a BGP Dispatcher.";
59
60         base "config:service-type";
61         config:java-class "org.opendaylight.protocol.bgp.rib.impl.spi.BGPDispatcher";
62     }
63
64     identity bgp-dispatcher-impl {
65         base config:module-type;
66         config:provided-service bgp-dispatcher;
67         config:java-name-prefix BGPDispatcherImpl;
68     }
69
70     augment "/config:modules/config:module/config:configuration" {
71         case bgp-dispatcher-impl {
72             when "/config:modules/config:module/config:type = 'bgp-dispatcher-impl'";
73
74             container bgp-extensions {
75                 uses config:service-ref {
76                     refine type {
77                         mandatory true;
78                         config:required-identity bgpspi:consumer-extensions;
79                     }
80                 }
81             }
82
83             container boss-group {
84                 uses config:service-ref {
85                     refine type {
86                         mandatory true;
87                         config:required-identity netty:netty-threadgroup;
88                     }
89                 }
90             }
91
92             container worker-group {
93                 uses config:service-ref {
94                     refine type {
95                         mandatory true;
96                         config:required-identity netty:netty-threadgroup;
97                     }
98                 }
99             }
100
101             container md5-channel-factory {
102                 uses config:service-ref {
103                     refine type {
104                         mandatory false;
105                         config:required-identity tcpmd5n:md5-channel-factory;
106                     }
107                 }
108             }
109
110             container md5-server-channel-factory {
111                 uses config:service-ref {
112                     refine type {
113                         mandatory false;
114                         config:required-identity tcpmd5n:md5-server-channel-factory;
115                     }
116                 }
117             }
118         }
119     }
120
121     identity base-bgp-rib {
122         base config:module-type;
123         config:provided-service ribspi:extension;
124         config:java-name-prefix BaseBGPRIB;
125     }
126
127     augment "/config:modules/config:module/config:configuration" {
128         case base-bgp-rib {
129             when "/config:modules/config:module/config:type = 'base-bgp-rib'";
130         }
131     }
132
133     identity rib-instance {
134         description
135             "Service representing a RIB instance";
136
137         base "config:service-type";
138         config:java-class "org.opendaylight.protocol.bgp.rib.impl.spi.RIB";
139     }
140
141     identity bgp-peer-registry {
142         description
143             "Registry of BGP peers. Every new BGP in/out connection looks for peers to handle bgp messages in this registry";
144
145         base "config:service-type";
146         config:java-class "org.opendaylight.protocol.bgp.rib.impl.spi.BGPPeerRegistry";
147     }
148
149     identity strict-bgp-peer-registry {
150         description
151             "Registry of BGP peers that allows only one connection per 2 peers. Uses IP address for Peer identification and BGP Ids to resolve duplicate connections";
152
153         config:provided-service bgp-peer-registry;
154         base config:module-type;
155         config:java-name-prefix StrictBgpPeerRegistry;
156     }
157
158
159      augment "/config:modules/config:module/config:configuration" {
160         case strict-bgp-peer-registry {
161             when "/config:modules/config:module/config:type = 'strict-bgp-peer-registry'";
162         }
163     }
164
165     identity bgp-peer {
166         description
167             "BGP peer instance.";
168
169         base config:module-type;
170         config:java-name-prefix BGPPeer;
171     }
172
173     identity bgp-peer-acceptor {
174         description
175             "BGP peer acceptor that handles incomming bgp connections. Uses BGP peer registry to accept or decline incomming connections";
176
177         base config:module-type;
178         config:java-name-prefix BGPPeerAcceptor;
179     }
180
181     augment "/config:modules/config:module/config:configuration" {
182         case bgp-peer-acceptor {
183             when "/config:modules/config:module/config:type = 'bgp-peer-acceptor'";
184
185             leaf binding-address {
186                 description "IP address to bind to";
187                 type inet:ip-address;
188                 default "0.0.0.0";
189             }
190
191             leaf binding-port {
192                 description "Port to bind to";
193                 type inet:port-number;
194                 default "179";
195             }
196
197             container accepting-bgp-dispatcher {
198                 uses config:service-ref {
199                     refine type {
200                         mandatory true;
201                         config:required-identity bgp-dispatcher;
202                     }
203                 }
204             }
205
206             container accepting-peer-registry {
207                 uses config:service-ref {
208                     refine type {
209                         mandatory true;
210                         config:required-identity bgp-peer-registry;
211                     }
212                 }
213             }
214         }
215     }
216
217     identity bgp-application-peer {
218         description
219             "Application peer handler which handles translation from custom RIB into local RIB";
220
221         base config:module-type;
222         config:java-name-prefix BGPApplicationPeer;
223     }
224
225     augment "/config:modules/config:module/config:configuration" {
226         case bgp-application-peer {
227             when "/config:modules/config:module/config:type = 'bgp-application-peer'";
228
229             container data-broker {
230                 uses config:service-ref {
231                     refine type {
232                         mandatory true;
233                         config:required-identity sal:dom-async-data-broker;
234                     }
235                 }
236             }
237
238             container target-rib {
239                 uses config:service-ref {
240                     refine type {
241                         mandatory true;
242                         config:required-identity rib-instance;
243                     }
244                 }
245             }
246
247             leaf application-rib-id {
248                 type rib:application-rib-id;
249                 mandatory true;
250             }
251
252             leaf bgp-peer-id {
253                 type inet:ipv4-address;
254                 mandatory true;
255             }
256         }
257     }
258
259     identity bgp-table-type {
260         description
261             "Service representing a AFI/SAFI pair";
262
263         base "config:service-type";
264         config:java-class "org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.BgpTableType";
265     }
266
267     identity add-path {
268         base "config:service-type";
269         config:java-class "org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.add.path.capability.AddressFamilies";
270     }
271
272     identity add-path-impl {
273         config:provided-service add-path;
274         base config:module-type;
275         config:java-name-prefix AddPathImpl;
276     }
277
278     identity bgp-table-type-impl {
279         description
280             "Simple provider for bgp-table-type.";
281
282         config:provided-service bgp-table-type;
283         base config:module-type;
284         config:java-name-prefix BGPTableTypeImpl;
285     }
286
287     augment "/config:modules/config:module/config:configuration" {
288         case bgp-table-type-impl {
289             when "/config:modules/config:module/config:type = 'bgp-table-type-impl'";
290
291             leaf afi {
292                 type identityref {
293                     base bgp-t:address-family;
294                 }
295                 mandatory true;
296             }
297             leaf safi {
298                 type identityref {
299                     base bgp-t:subsequent-address-family;
300                 }
301                 mandatory true;
302             }
303         }
304     }
305
306     augment "/config:modules/config:module/config:configuration" {
307         case add-path-impl {
308             when "/config:modules/config:module/config:type = 'add-path-impl'";
309             container address-family {
310                 uses config:service-ref {
311                     refine type {
312                         mandatory true;
313                         config:required-identity bgp-table-type;
314                     }
315                 }
316             }
317             leaf send-receive {
318                 type bgp-mp:send-receive;
319                 mandatory true;
320             }
321         }
322     }
323
324     augment "/config:modules/config:module/config:configuration" {
325         case bgp-peer {
326             when "/config:modules/config:module/config:type = 'bgp-peer'";
327
328             leaf host {
329                 description "Remote host IP address";
330                 type inet:ip-address;
331                 mandatory true;
332             }
333
334             leaf port {
335                 description "Remote host port";
336                 type inet:port-number;
337                 default 179;
338             }
339
340             leaf holdtimer {
341                 type int16;
342                 default 180;
343             }
344
345             leaf peer-role {
346                 type rib:peer-role;
347                 default ibgp;
348             }
349
350             leaf initiate-connection {
351                 description "If true, connection will be initiated right away from current device.
352                     If not, the peer will only be registered to peer registry and available for incomming bgp connections.";
353                 type boolean;
354                 default true;
355             }
356
357             list advertized-table {
358                 key "type name";
359                 uses config:service-ref {
360                     refine type {
361                         mandatory true;
362                         config:required-identity bgp-table-type;
363                     }
364                 }
365             }
366
367             list add-path {
368                 key "type name";
369                 uses config:service-ref {
370                     refine type {
371                         config:required-identity add-path;
372                     }
373                 }
374             }
375
376             leaf remote-as {
377                 description
378                     "Expected remote AS number. If not present, it is assumed
379                     to be the same as our local AS number.";
380                 type uint32;
381             }
382
383             leaf password {
384                 type tcpmd5:rfc2385-key;
385                 description "RFC2385 shared secret";
386             }
387
388             container rib {
389                 uses config:service-ref {
390                     refine type {
391                         mandatory true;
392                         config:required-identity rib-instance;
393                     }
394                 }
395             }
396
397             container peer-registry {
398                 description "BGP peer registry where current instance of BGP peer will be registered.";
399                 uses config:service-ref {
400                     refine type {
401                         // FIXME backwards compatibility. If not configured, GLOBAL instance is used
402                         mandatory false;
403                         config:required-identity bgp-peer-registry;
404                     }
405                 }
406             }
407         }
408     }
409
410     grouping message-state {
411         leaf count {
412             description "Total number of BGP messages.";
413             type uint32;
414             default 0;
415         }
416
417         leaf timestamp {
418             description "The BGP message timestamp (seconds).";
419             type uint32;
420             default 0;
421         }
422     }
423
424     grouping message-stats {
425         container received {
426             description "The received BGP messages statistics.";
427             uses message-state;
428         }
429
430         container sent {
431             description "The sent BGP messages statistics.";
432             uses message-state;
433         }
434     }
435
436     grouping error {
437         leaf code {
438             description "The BGP error code.";
439             type uint8;
440             default 0;
441         }
442
443         leaf sub-code {
444             description "The BGP error sub-code.";
445             type uint8;
446             default 0;
447         }
448     }
449
450     grouping preferences {
451         leaf bgp-id {
452             description "The BGP Identifier.";
453             type string;
454             default "";
455         }
456
457         leaf address {
458             description "The IP address of BGP connection.";
459             type string;
460             default "";
461         }
462
463         leaf port {
464             description "The port for connection between the BGP peers.";
465             type uint16;
466             default 0;
467         }
468
469         leaf as {
470             description "Autonomous system number.";
471             type uint32;
472             default 0;
473         }
474
475         leaf holdtime {
476             description "Time interval (in seconds) for HoldTimer proposed by the peer.";
477             type uint16;
478             default 0;
479         }
480
481         leaf four-octet-as-capability {
482             description "The BGP peer 4 byte AS numbers support capability.";
483             type boolean;
484             default "false";
485         }
486
487         leaf gr-capability {
488             description "BGP graceful restart support capability.";
489             type boolean;
490             default "false";
491         }
492
493         leaf add-path-capability {
494             type boolean;
495             default "false";
496         }
497
498         list advertized-table-types {
499             description "The BGP Table-type capabilities advertized by the BGP peer.";
500             leaf afi {
501                 description "Address Family Identifier.";
502                 type string;
503                 default "";
504             }
505             leaf safi {
506                 description "Subsequent Address Family Identifier.";
507                 type string;
508                 default "";
509             }
510         }
511     }
512
513     identity peer-rpc;
514
515     augment "/config:modules/config:module/config:state" {
516         case bgp-peer {
517             when "/config:modules/config:module/config:type = 'bgp-peer'";
518
519             rpcx:rpc-context-instance "peer-rpc";
520
521             container bgp-peer-state {
522                 list route-table {
523
524                     leaf table-type {
525                         description "The table name - composed of AFI and SAFI.";
526                         type string;
527                     }
528
529                     leaf routes-count {
530                         description "The total number of routes in table.";
531                         type uint32;
532                         default 0;
533                     }
534                 }
535
536                 leaf session-established-count {
537                     description "The total number of time the BGP session was transitioned to Up state.";
538                     type uint32;
539                     default 0;
540                 }
541             }
542
543             container bgp-session-state {
544
545                 leaf session-state {
546                     description "The BGP peer connection state.";
547                     type string;
548                 }
549
550                 leaf session-duration {
551                     description "The session duration (time formated d:HH:mm:ss).";
552                     type string;
553                 }
554
555                 leaf holdtime-current {
556                     description "Time interval (in seconds) for HoldTimer established with the peer.";
557                     type uint16;
558                     default 0;
559                 }
560
561                 leaf keepalive-current {
562                     description "Time interval (in seconds) for KeepAlive established with the peer.";
563                     type uint16;
564                     default 0;
565                 }
566
567                 container speaker-preferences {
568                     description "The BGP speaker preferences, to which this BGP peer is connected.";
569                     uses preferences;
570                 }
571
572                 container peer-preferences {
573                     description "The BGP peer preferences.";
574                     uses preferences;
575                 }
576
577                 container messages-stats {
578                     description "The BGP messages statistics.";
579                     container total-msgs {
580                         description "The statistics for all received/sent BGP messages.";
581                         uses message-stats;
582                     }
583
584                     container keep-alive-msgs {
585                         description "The statistics for received/sent BGP Keep-Alive messages.";
586                         uses message-stats;
587                     }
588
589                     container update-msgs {
590                         description "The statistics for received/sent BGP Update messages.";
591                         uses message-stats;
592                     }
593
594                     container error-msgs {
595                         container error-received {
596                             description "The received BGP Error (notification) messages statistics.";
597                             uses message-state;
598                             uses error;
599                         }
600
601                         container error-sent {
602                             description "The sent BGP Error (notification) messages statistics.";
603                             uses message-state;
604                             uses error;
605                         }
606                     }
607                 }
608             }
609         }
610     }
611
612     rpc reset-session {
613         description "Restart the session between BGP peers";
614         input {
615             uses rpcx:rpc-context-ref {
616                 refine context-instance {
617                     rpcx:rpc-context-instance peer-rpc;
618                 }
619             }
620         }
621      }
622
623      rpc reset-stats {
624         description "Reset the BGP peer statistics.";
625         input {
626             uses rpcx:rpc-context-ref {
627                 refine context-instance {
628                     rpcx:rpc-context-instance peer-rpc;
629                 }
630             }
631         }
632      }
633
634     identity rib-impl {
635         base config:module-type;
636         config:provided-service bgprib:rib;
637         config:provided-service rib-instance;
638         config:java-name-prefix RIBImpl;
639     }
640
641     augment "/config:modules/config:module/config:configuration" {
642         case rib-impl {
643             when "/config:modules/config:module/config:type = 'rib-impl'";
644
645             container extensions {
646                 uses config:service-ref {
647                     refine type {
648                         mandatory true;
649                         config:required-identity ribspi:consumer-extensions;
650                     }
651                 }
652             }
653
654             container bgp-dispatcher {
655                 uses config:service-ref {
656                     refine type {
657                         mandatory true;
658                         config:required-identity bgp-dispatcher;
659                     }
660                 }
661             }
662
663             container session-reconnect-strategy {
664                 uses config:service-ref {
665                     refine type {
666                         mandatory true;
667                         config:required-identity pf:reconnect-strategy-factory;
668                     }
669                 }
670             }
671
672             container tcp-reconnect-strategy {
673                 uses config:service-ref {
674                     refine type {
675                         mandatory true;
676                         config:required-identity pf:reconnect-strategy-factory;
677                     }
678                 }
679             }
680
681             container data-provider {
682                 uses config:service-ref {
683                     refine type {
684                         mandatory true;
685                         config:required-identity mdsb:binding-async-data-broker;
686                     }
687                 }
688             }
689
690             container codec-tree-factory {
691                 uses config:service-ref {
692                     refine type {
693                         mandatory true;
694                         config:required-identity mdsb:binding-codec-tree-factory;
695                     }
696                 }
697             }
698
699             container dom-data-provider {
700                 uses config:service-ref {
701                     refine type {
702                         mandatory true;
703                         config:required-identity sal:dom-async-data-broker;
704                     }
705                 }
706             }
707
708             container openconfig-provider {
709                 uses config:service-ref {
710                     refine type {
711                         mandatory false;
712                         config:required-identity bgp-oc-spi:bgp-openconfig-provider;
713                     }
714                 }
715             }
716
717             leaf local-as {
718                 description "Our local AS number. Needed by best selection path attribute.";
719                 type uint32;
720                 mandatory true;
721             }
722
723             leaf bgp-rib-id {
724                 description "Our local BGP identifier. Needed by best selection path attribute.";
725                 mandatory true;
726                 type inet:ipv4-address;
727             }
728
729             list local-table {
730                 uses config:service-ref {
731                     refine type {
732                         mandatory true;
733                         config:required-identity bgp-table-type;
734                     }
735                 }
736             }
737
738             leaf rib-id {
739                 description "Identifier of this RIB in local data store.";
740                 type rib:rib-id;
741                 mandatory true;
742             }
743
744             leaf cluster-id {
745                 description "IBGP identifier. Needed by route reflection.";
746                 reference "https://tools.ietf.org/html/rfc4456#section-7";
747                 type inet:ipv4-address;
748             }
749         }
750     }
751 }
752