Bump upstreams for Silicon
[bgpcep.git] / bgp / extensions / linkstate / src / main / yang / bgp-segment-routing.yang
1 module bgp-segment-routing {
2     yang-version 1;
3     namespace "urn:opendaylight:params:xml:ns:yang:bgp-segment-routing-ext";
4     prefix "bgp-sr";
5
6     import network-concepts { prefix netc; revision-date 2013-11-25; }
7     import ietf-inet-types { prefix inet; revision-date 2013-07-15; }
8     import ietf-routing-types { prefix rt-types; }
9
10     organization "Cisco Systems, Inc.";
11     contact "Iveta Halanova <ihalanov@cisco.com>";
12
13     description
14         "This module contains the base data concepts contained
15         in draft-gredler-idr-bgp-ls-segment-routing-ext-02.
16
17         Copyright (c)2015 Cisco Systems, Inc. All rights reserved.
18
19         This program and the accompanying materials are made available
20         under the terms of the Eclipse Public License v1.0 which
21         accompanies this distribution, and is available at
22         http://www.eclipse.org/legal/epl-v10.html";
23
24     revision 2020-01-20 {
25         description "Update to use -no-zone-adresses";
26     }
27
28     revision "2015-10-14" {
29         description
30             "Initial revision.";
31     }
32
33     typedef algorithm {
34         reference "https://tools.ietf.org/html/draft-gredler-idr-bgp-ls-segment-routing-ext-02#section-2.1.2";
35         type enumeration {
36             enum shortest-path-first {
37                 value 0;
38             }
39             enum strict-shortest-path-first {
40                 value 1;
41             }
42         }
43     }
44
45     typedef weight {
46         reference "https://tools.ietf.org/html/draft-gredler-idr-bgp-ls-segment-routing-ext-02#section-2.2";
47         type uint8;
48     }
49
50     grouping sid-label-index {
51         reference "https://tools.ietf.org/html/draft-gredler-idr-bgp-ls-segment-routing-ext-02#section-2.3.4";
52         choice sid-label-index {
53             case local-label-case {
54                 leaf local-label {
55                     type netc:mpls-label;
56                 }
57             }
58             case ipv6-address-case {
59                 leaf ipv6-address {
60                     type inet:ipv6-address-no-zone;
61                 }
62             }
63             case sid-case {
64                 leaf sid {
65                     type uint32;
66                 }
67             }
68         }
69     }
70
71     grouping sr-capabilities-tlv {
72         reference "https://tools.ietf.org/html/draft-gredler-idr-bgp-ls-segment-routing-ext-02#section-2.1.1";
73         leaf mpls-ipv4 {
74             type boolean;
75         }
76         leaf mpls-ipv6 {
77             type boolean;
78         }
79         leaf sr-ipv6 {
80             type boolean;
81         }
82         leaf range-size {
83             type rt-types:uint24;
84         }
85         uses sid-label-index;
86     }
87
88     grouping sr-algorithms-tlv {
89         leaf-list algorithms {
90             type algorithm;
91         }
92     }
93
94     grouping ospf-adj-flags {
95         reference "https://tools.ietf.org/html/draft-ietf-ospf-segment-routing-extensions-08#section-7.1";
96         leaf backup {
97             type boolean;
98         }
99         leaf set {
100             type boolean;
101         }
102     }
103
104     grouping adj-flags {
105         choice flags {
106             case ospf-adj-flags-case {
107                 container ospf-adj-flags {
108                     uses ospf-adj-flags;
109                 }
110             }
111             case isis-adj-flags-case {
112                 reference "https://tools.ietf.org/html/draft-ietf-isis-segment-routing-extensions-06#section-2.2.1";
113                 container isis-adj-flags {
114                     uses ospf-adj-flags;
115                     leaf address-family {
116                         type boolean;
117                     }
118                 }
119             }
120         }
121     }
122
123     grouping adj-sid-tlv {
124         reference "https://tools.ietf.org/html/draft-gredler-idr-bgp-ls-segment-routing-ext-02#section-2.2.1";
125         uses adj-flags;
126         uses epe-adj-sid-tlv;
127     }
128
129     grouping epe-adj-sid-tlv {
130         leaf weight {
131             type weight;
132         }
133         uses sid-label-index;
134     }
135
136     grouping lan-adj-sid-tlv {
137         reference "https://tools.ietf.org/html/draft-gredler-idr-bgp-ls-segment-routing-ext-02#section-2.2.2";
138         uses adj-flags;
139         leaf weight {
140             type weight;
141         }
142         leaf iso-system-id {
143             type netc:iso-system-identifier;
144         }
145         leaf neighbor-id {
146             type inet:ipv4-address-no-zone;
147         }
148         uses sid-label-index;
149     }
150
151     grouping prefix-flags {
152         leaf no-php {
153             type boolean;
154         }
155         leaf explicit-null {
156             type boolean;
157         }
158     }
159
160     grouping prefix-sid-tlv {
161         reference "https://tools.ietf.org/html/draft-gredler-idr-bgp-ls-segment-routing-ext-02#section-2.3.1";
162         choice flags {
163             case isis-prefix-flags-case {
164                 container isis-prefix-flags {
165                     reference "https://tools.ietf.org/html/draft-ietf-ospf-segment-routing-extensions-08#section-5";
166                     uses prefix-flags;
167                     leaf readvertisement {
168                         type boolean;
169                     }
170                     leaf node-sid {
171                         type boolean;
172                     }
173                 }
174             }
175             case ospf-prefix-flags-case {
176                 container ospf-prefix-flags {
177                     reference "https://tools.ietf.org/html/draft-ietf-ospf-segment-routing-extensions-05#section-5";
178                     uses prefix-flags;
179                     leaf mapping-server {
180                         type boolean;
181                     }
182                 }
183             }
184         }
185         leaf algorithm {
186             type algorithm;
187         }
188         uses sid-label-index;
189     }
190
191     grouping ipv6-prefix-sid-tlv {
192         reference "https://tools.ietf.org/html/draft-previdi-isis-ipv6-prefix-sid-02#page-2";
193         leaf algorithm {
194             type algorithm;
195         }
196     }
197
198     grouping ero-flags {
199         leaf loose {
200             type boolean;
201         }
202     }
203
204     grouping ero-ipv4-address {
205         uses ero-flags;
206         leaf address {
207             type inet:ipv4-address-no-zone;
208             mandatory true;
209         }
210     }
211
212     grouping ero-ipv6-address {
213         uses ero-flags;
214         leaf address {
215             type inet:ipv6-address-no-zone;
216             mandatory true;
217         }
218     }
219
220     grouping ero-unnumbered {
221         uses ero-flags;
222         leaf router-id {
223             type uint32;
224         }
225         leaf interface-id {
226             type uint32;
227         }
228     }
229
230     grouping binding-sub-tlvs {
231         reference "https://tools.ietf.org/html/draft-gredler-idr-bgp-ls-segment-routing-ext-02#section-2.3.4";
232         choice binding-sub-tlv {
233             case prefix-sid-case {
234                 container prefix-sid {
235                     uses prefix-sid-tlv;
236                 }
237             }
238             case ipv6-prefix-sid-case {
239                 container ipv6-prefix-sid {
240                     uses ipv6-prefix-sid-tlv;
241                 }
242             }
243             case sid-label-case {
244                 uses sid-label-index;
245             }
246             case ero-metric-case {
247                 leaf ero-metric {
248                     type netc:te-metric;
249                 }
250             }
251             case ipv4-ero-case {
252                 container ipv4-ero {
253                     uses ero-ipv4-address;
254                 }
255             }
256             case ipv6-ero-case {
257                 container ipv6-ero {
258                     uses ero-ipv6-address;
259                 }
260             }
261             case unnumbered-interface-id-ero-case {
262                 container unnumbered-interface-id-ero {
263                     uses ero-unnumbered;
264                 }
265             }
266             case ipv4-ero-backup-case {
267                 container ipv4-ero-backup {
268                     uses ero-ipv4-address;
269                 }
270             }
271             case ipv6-ero-backup-case {
272                 container ipv6-ero-backup {
273                     uses ero-ipv6-address;
274                 }
275             }
276             case unnumbered-interface-id-backup-ero-case {
277                 container unnumbered-interface-id-backup-ero {
278                     uses ero-unnumbered;
279                 }
280             }
281         }
282     }
283
284     grouping isis-binding-flags {
285         reference "https://tools.ietf.org/html/draft-ietf-isis-segment-routing-extensions-06#section-2.4";
286         leaf address-family {
287             type boolean;
288         }
289         leaf mirror-context {
290             type boolean;
291         }
292         leaf spread-tlv {
293             type boolean;
294         }
295         leaf leaked-from-level-2 {
296             type boolean;
297         }
298         leaf attached-flag {
299             type boolean;
300         }
301     }
302
303     grouping ospf-binding-flags {
304         reference "https://tools.ietf.org/html/draft-ietf-ospf-segment-routing-extensions-08#section-6";
305         leaf mirroring {
306             type boolean;
307         }
308     }
309
310     grouping binding-sid-tlv {
311         reference "https://tools.ietf.org/html/draft-gredler-idr-bgp-ls-segment-routing-ext-02#section-2.3.3";
312         leaf weight {
313             type weight;
314         }
315         choice flags {
316             case isis-binding-flags-case {
317                 uses isis-binding-flags;
318             }
319             case ospf-binding-flags-case {
320                 uses ospf-binding-flags;
321             }
322         }
323         list binding-sub-tlvs {
324             uses binding-sub-tlvs;
325         }
326     }
327
328     grouping range-sub-tlvs {
329         choice range-sub-tlv {
330             case binding-sid-tlv-case {
331                 uses binding-sid-tlv;
332             }
333             case prefix-sid-tlv-case {
334                 container prefix-sid-tlv {
335                     uses prefix-sid-tlv;
336                 }
337             }
338             case ipv6-prefix-sid-tlv-case {
339                 container ipv6-prefix-sid-tlv {
340                     uses ipv6-prefix-sid-tlv;
341                 }
342             }
343             case sid-label-tlv-case {
344                 uses sid-label-index;
345             }
346         }
347     }
348
349     grouping range-tlv {
350         reference "https://tools.ietf.org/html/draft-gredler-idr-bgp-ls-segment-routing-ext-02#section-2.3.2";
351         leaf inter-area {
352             type boolean;
353         }
354         leaf range-size {
355             type uint16;
356         }
357         list sub-tlvs {
358             uses range-sub-tlvs;
359         }
360     }
361 }