b214430a2ebb540540c84615989ef25e98ee0989
[bgpcep.git] / bgp / 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 2010-09-24; }
8
9     organization "Cisco Systems, Inc.";
10     contact "Iveta Halanova <ihalanov@cisco.com>";
11
12     description
13         "This module contains the base data concepts contained
14         in draft-gredler-idr-bgp-ls-segment-routing-ext-00.
15
16         Copyright (c)2015 Cisco Systems, Inc. All rights reserved.
17
18         This program and the accompanying materials are made available
19         under the terms of the Eclipse Public License v1.0 which
20         accompanies this distribution, and is available at
21         http://www.eclipse.org/legal/epl-v10.html";
22
23     revision "2015-10-14" {
24         description
25             "Initial revision.";
26     }
27
28     typedef algorithm {
29         reference "https://tools.ietf.org/html/draft-gredler-idr-bgp-ls-segment-routing-ext-00#section-2.1.2";
30         type enumeration {
31             enum shortest-path-first {
32                 value 0;
33             }
34             enum strict-shortest-path-first {
35                 value 1;
36             }
37         }
38     }
39
40     typedef weight {
41         reference "https://tools.ietf.org/html/draft-gredler-idr-bgp-ls-segment-routing-ext-00#section-2.2";
42         type uint8;
43     }
44
45     grouping general-flags {
46         leaf flags {
47             type binary {
48                 length "1";
49             }
50         }
51     }
52
53     grouping sid-label-index {
54         reference "https://tools.ietf.org/html/draft-gredler-idr-bgp-ls-segment-routing-ext-00#section-2.3.4.2";
55         choice sid-label-index {
56             case local-label-case {
57                 leaf local-label {
58                     type netc:mpls-label;
59                 }
60             }
61             case ipv6-address-case {
62                 leaf ipv6-address {
63                     type inet:ipv6-address;
64                 }
65             }
66             case sid-case {
67                 leaf sid {
68                     type uint32;
69                 }
70             }
71         }
72     }
73
74     grouping sr-capabilities-tlv {
75         reference "https://tools.ietf.org/html/draft-gredler-idr-bgp-ls-segment-routing-ext-00#section-2.1.1";
76         leaf mpls-ipv4 {
77             type boolean;
78         }
79         leaf mpls-ipv6 {
80             type boolean;
81         }
82         leaf sr-ipv6 {
83             type boolean;
84         }
85         leaf range-size {
86             type uint32 {
87                 range "0..16777215";
88             }
89         }
90         uses sid-label-index;
91     }
92
93     grouping sr-algorithms-tlv {
94         leaf-list algorithms {
95             type algorithm;
96         }
97     }
98
99     grouping adj-sid-tlv {
100         reference "https://tools.ietf.org/html/draft-gredler-idr-bgp-ls-segment-routing-ext-00#section-2.2.1";
101         uses general-flags;
102         leaf weight {
103             type weight;
104         }
105         uses sid-label-index;
106     }
107
108     grouping lan-adj-sid-tlv {
109         reference "https://tools.ietf.org/html/draft-gredler-idr-bgp-ls-segment-routing-ext-00#section-2.2.2";
110         uses general-flags;
111         leaf weight {
112             type weight;
113         }
114         leaf iso-system-id {
115             type netc:iso-system-identifier;
116         }
117         uses sid-label-index;
118     }
119
120     grouping prefix-sid-tlv {
121         reference "https://tools.ietf.org/html/draft-gredler-idr-bgp-ls-segment-routing-ext-00#section-2.3.1";
122         uses general-flags;
123         leaf algorithm {
124             type algorithm;
125         }
126         uses sid-label-index;
127     }
128
129     grouping ero-flags {
130         leaf loose {
131             type boolean;
132         }
133     }
134
135     grouping ero-ipv4-address {
136         uses ero-flags;
137         leaf address {
138             type inet:ipv4-address;
139             mandatory true;
140         }
141     }
142
143     grouping ero-ipv6-address {
144         uses ero-flags;
145         leaf address {
146             type inet:ipv6-address;
147             mandatory true;
148         }
149     }
150
151     grouping ero-unnumbered {
152         uses ero-flags;
153         leaf router-id {
154             type uint32;
155         }
156         leaf interface-id {
157             type uint32;
158         }
159     }
160
161     grouping binding-sub-tlvs {
162         reference "https://tools.ietf.org/html/draft-gredler-idr-bgp-ls-segment-routing-ext-00#section-2.3.4";
163         choice binding-sub-tlv {
164             case prefix-sid-case {
165                 uses prefix-sid-tlv;
166             }
167             case sid-label-case {
168                 uses sid-label-index;
169             }
170             case ero-metric-case {
171                 leaf ero-metric {
172                     type netc:te-metric;
173                 }
174             }
175             case ipv4-ero-case {
176                 uses ero-ipv4-address;
177             }
178             case ipv6-ero-case {
179                 uses ero-ipv6-address;
180             }
181             case unnumbered-interface-id-ero-case {
182                 uses ero-unnumbered;
183             }
184             case ipv4-ero-backup-case {
185                 uses ero-ipv4-address;
186             }
187             case ipv6-ero-backup-case {
188                 uses ero-ipv6-address;
189             }
190             case unnumbered-interface-id-backup-ero-case {
191                 uses ero-unnumbered;
192             }
193         }
194     }
195
196     grouping binding-sid-tlv {
197         reference "https://tools.ietf.org/html/draft-gredler-idr-bgp-ls-segment-routing-ext-00#section-2.3.3";
198         leaf weight {
199             type weight;
200         }
201         uses general-flags;
202         list binding-sub-tlvs {
203             uses binding-sub-tlvs;
204         }
205     }
206
207     grouping range-sub-tlvs {
208         choice range-sub-tlv {
209             case binding-sid-tlv-case {
210                 uses binding-sid-tlv;
211             }
212             case prefix-sid-tlv-case {
213                 uses prefix-sid-tlv;
214             }
215             case sid-label-tlv-case {
216                 uses sid-label-index;
217             }
218         }
219     }
220
221     grouping range-tlv {
222         reference "https://tools.ietf.org/html/draft-gredler-idr-bgp-ls-segment-routing-ext-00#section-2.3.2";
223         leaf inter-area {
224             type boolean;
225         }
226         leaf range-size {
227             type uint16;
228         }
229         list sub-tlvs {
230             uses range-sub-tlvs;
231         }
232     }
233 }