BUG-4592: Route Refresh Capability Config subystem
[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 route-refresh {
377                 type boolean;
378                 default "true";
379             }
380
381             leaf remote-as {
382                 description
383                     "Expected remote AS number. If not present, it is assumed
384                     to be the same as our local AS number.";
385                 type uint32;
386             }
387
388             leaf password {
389                 type tcpmd5:rfc2385-key;
390                 description "RFC2385 shared secret";
391             }
392
393             container rib {
394                 uses config:service-ref {
395                     refine type {
396                         mandatory true;
397                         config:required-identity rib-instance;
398                     }
399                 }
400             }
401
402             container peer-registry {
403                 description "BGP peer registry where current instance of BGP peer will be registered.";
404                 uses config:service-ref {
405                     refine type {
406                         // FIXME backwards compatibility. If not configured, GLOBAL instance is used
407                         mandatory false;
408                         config:required-identity bgp-peer-registry;
409                     }
410                 }
411             }
412         }
413     }
414
415     grouping message-state {
416         leaf count {
417             description "Total number of BGP messages.";
418             type uint32;
419             default 0;
420         }
421
422         leaf timestamp {
423             description "The BGP message timestamp (seconds).";
424             type uint32;
425             default 0;
426         }
427     }
428
429     grouping message-stats {
430         container received {
431             description "The received BGP messages statistics.";
432             uses message-state;
433         }
434
435         container sent {
436             description "The sent BGP messages statistics.";
437             uses message-state;
438         }
439     }
440
441     grouping error {
442         leaf code {
443             description "The BGP error code.";
444             type uint8;
445             default 0;
446         }
447
448         leaf sub-code {
449             description "The BGP error sub-code.";
450             type uint8;
451             default 0;
452         }
453     }
454
455     grouping preferences {
456         leaf bgp-id {
457             description "The BGP Identifier.";
458             type string;
459             default "";
460         }
461
462         leaf address {
463             description "The IP address of BGP connection.";
464             type string;
465             default "";
466         }
467
468         leaf port {
469             description "The port for connection between the BGP peers.";
470             type uint16;
471             default 0;
472         }
473
474         leaf as {
475             description "Autonomous system number.";
476             type uint32;
477             default 0;
478         }
479
480         leaf holdtime {
481             description "Time interval (in seconds) for HoldTimer proposed by the peer.";
482             type uint16;
483             default 0;
484         }
485
486         leaf four-octet-as-capability {
487             description "The BGP peer 4 byte AS numbers support capability.";
488             type boolean;
489             default "false";
490         }
491
492         leaf bgp-extended-message-capability {
493             description "The bgp extended message support capability.";
494             type boolean;
495             default "false";
496         }
497
498         leaf gr-capability {
499             description "BGP graceful restart support capability.";
500             type boolean;
501             default "false";
502         }
503
504         leaf add-path-capability {
505             type boolean;
506             default "false";
507         }
508
509         leaf route-refresh-capability {
510             reference "https://tools.ietf.org/html/rfc2918";
511             type boolean;
512             default "false";
513         }
514
515         list advertized-table-types {
516             description "The BGP Table-type capabilities advertized by the BGP peer.";
517             leaf afi {
518                 description "Address Family Identifier.";
519                 type string;
520                 default "";
521             }
522             leaf safi {
523                 description "Subsequent Address Family Identifier.";
524                 type string;
525                 default "";
526             }
527         }
528     }
529
530     identity peer-rpc;
531
532     augment "/config:modules/config:module/config:state" {
533         case bgp-peer {
534             when "/config:modules/config:module/config:type = 'bgp-peer'";
535
536             rpcx:rpc-context-instance "peer-rpc";
537
538             container bgp-peer-state {
539                 list route-table {
540
541                     leaf table-type {
542                         description "The table name - composed of AFI and SAFI.";
543                         type string;
544                     }
545
546                     leaf routes-count {
547                         description "The total number of routes in table.";
548                         type uint32;
549                         default 0;
550                     }
551                 }
552
553                 leaf session-established-count {
554                     description "The total number of time the BGP session was transitioned to Up state.";
555                     type uint32;
556                     default 0;
557                 }
558             }
559
560             container bgp-session-state {
561
562                 leaf session-state {
563                     description "The BGP peer connection state.";
564                     type string;
565                 }
566
567                 leaf session-duration {
568                     description "The session duration (time formated d:HH:mm:ss).";
569                     type string;
570                 }
571
572                 leaf holdtime-current {
573                     description "Time interval (in seconds) for HoldTimer established with the peer.";
574                     type uint16;
575                     default 0;
576                 }
577
578                 leaf keepalive-current {
579                     description "Time interval (in seconds) for KeepAlive established with the peer.";
580                     type uint16;
581                     default 0;
582                 }
583
584                 container speaker-preferences {
585                     description "The BGP speaker preferences, to which this BGP peer is connected.";
586                     uses preferences;
587                 }
588
589                 container peer-preferences {
590                     description "The BGP peer preferences.";
591                     uses preferences;
592                 }
593
594                 container messages-stats {
595                     description "The BGP messages statistics.";
596                     container total-msgs {
597                         description "The statistics for all received/sent BGP messages.";
598                         uses message-stats;
599                     }
600
601                     container keep-alive-msgs {
602                         description "The statistics for received/sent BGP Keep-Alive messages.";
603                         uses message-stats;
604                     }
605
606                     container update-msgs {
607                         description "The statistics for received/sent BGP Update messages.";
608                         uses message-stats;
609                     }
610
611                     container error-msgs {
612                         container error-received {
613                             description "The received BGP Error (notification) messages statistics.";
614                             uses message-state;
615                             uses error;
616                         }
617
618                         container error-sent {
619                             description "The sent BGP Error (notification) messages statistics.";
620                             uses message-state;
621                             uses error;
622                         }
623                     }
624                 }
625             }
626         }
627     }
628
629     rpc reset-session {
630         description "Restart the session between BGP peers";
631         input {
632             uses rpcx:rpc-context-ref {
633                 refine context-instance {
634                     rpcx:rpc-context-instance peer-rpc;
635                 }
636             }
637         }
638      }
639
640      rpc reset-stats {
641         description "Reset the BGP peer statistics.";
642         input {
643             uses rpcx:rpc-context-ref {
644                 refine context-instance {
645                     rpcx:rpc-context-instance peer-rpc;
646                 }
647             }
648         }
649      }
650
651     identity rib-impl {
652         base config:module-type;
653         config:provided-service bgprib:rib;
654         config:provided-service rib-instance;
655         config:java-name-prefix RIBImpl;
656     }
657
658     augment "/config:modules/config:module/config:configuration" {
659         case rib-impl {
660             when "/config:modules/config:module/config:type = 'rib-impl'";
661
662             container extensions {
663                 uses config:service-ref {
664                     refine type {
665                         mandatory true;
666                         config:required-identity ribspi:consumer-extensions;
667                     }
668                 }
669             }
670
671             container bgp-dispatcher {
672                 uses config:service-ref {
673                     refine type {
674                         mandatory true;
675                         config:required-identity bgp-dispatcher;
676                     }
677                 }
678             }
679
680             container session-reconnect-strategy {
681                 uses config:service-ref {
682                     refine type {
683                         mandatory true;
684                         config:required-identity pf:reconnect-strategy-factory;
685                     }
686                 }
687             }
688
689             container tcp-reconnect-strategy {
690                 uses config:service-ref {
691                     refine type {
692                         mandatory true;
693                         config:required-identity pf:reconnect-strategy-factory;
694                     }
695                 }
696             }
697
698             container data-provider {
699                 uses config:service-ref {
700                     refine type {
701                         mandatory true;
702                         config:required-identity mdsb:binding-async-data-broker;
703                     }
704                 }
705             }
706
707             container codec-tree-factory {
708                 uses config:service-ref {
709                     refine type {
710                         mandatory true;
711                         config:required-identity mdsb:binding-codec-tree-factory;
712                     }
713                 }
714             }
715
716             container dom-data-provider {
717                 uses config:service-ref {
718                     refine type {
719                         mandatory true;
720                         config:required-identity sal:dom-async-data-broker;
721                     }
722                 }
723             }
724
725             container openconfig-provider {
726                 uses config:service-ref {
727                     refine type {
728                         mandatory false;
729                         config:required-identity bgp-oc-spi:bgp-openconfig-provider;
730                     }
731                 }
732             }
733
734             leaf local-as {
735                 description "Our local AS number. Needed by best selection path attribute.";
736                 type uint32;
737                 mandatory true;
738             }
739
740             leaf bgp-rib-id {
741                 description "Our local BGP identifier. Needed by best selection path attribute.";
742                 mandatory true;
743                 type inet:ipv4-address;
744             }
745
746             list local-table {
747                 uses config:service-ref {
748                     refine type {
749                         mandatory true;
750                         config:required-identity bgp-table-type;
751                     }
752                 }
753             }
754
755             leaf rib-id {
756                 description "Identifier of this RIB in local data store.";
757                 type rib:rib-id;
758                 mandatory true;
759             }
760
761             leaf cluster-id {
762                 description "IBGP identifier. Needed by route reflection.";
763                 reference "https://tools.ietf.org/html/rfc4456#section-7";
764                 type inet:ipv4-address;
765             }
766         }
767     }
768 }
769