e65989d2b6d2b67e8ff93f61b01e0dd3668924f3
[bgpcep.git] / bgp / extensions / route-target / src / main / yang / bgp-route-target-constrain.yang
1 module bgp-route-target-constrain {
2     yang-version 1;
3     namespace "urn:opendaylight:params:xml:ns:yang:bgp:route:target:constrain";
4     prefix "bgp-route-target";
5
6     import bgp-types { prefix bgp-t; revision-date 2018-03-29; }
7     import bgp-rib { prefix bgp-rib; revision-date 2018-03-29; }
8     import bmp-monitor { prefix bmp-mon; revision-date 2018-03-29; }
9     import bgp-message { prefix bgp-msg; revision-date 2018-03-29; }
10     import ietf-inet-types { prefix inet; revision-date 2013-07-15; }
11
12     organization "AT&T Services, Inc.";
13
14     contact "Claudio D. Gasparini <claudio.gasparini@pantheon.tech>";
15
16     description
17         "This module contains the base data model of a BGP message.
18         It rolls up the definitions contained in RFC4684.
19
20         Copyright (c) 2018 AT&T Intellectual Property. All rights reserved.
21
22         This program and the accompanying materials are made available
23         under the terms of the Eclipse Public License v1.0 which
24         accompanies this distribution, and is available at
25         http://www.eclipse.org/legal/epl-v10.html";
26
27     revision 2018-06-18 {
28         description "Initial version";
29     }
30
31     identity route-target-constrain-subsequent-address-family {
32         description "SAFI 132 Route Target constrains";
33         reference "https://www.iana.org/assignments/safi-namespace/safi-namespace.xhtml";
34
35         base bgp-t:subsequent-address-family;
36     }
37
38     grouping route-target-constrain {
39         reference "https://tools.ietf.org/html/rfc4684#page-8";
40         description "The Route Target constrains NLRI is carried in BGP [RFC4684] using BGP Multiprotocol
41             Extensions [RFC4760] with an Address Family Identifier (AFI) of 1 (IPV4)
42             and a Subsequent Address Family Identifier (SAFI) of 132 (ROUTE-TARGET)";
43
44         leaf origin-as {
45             type inet:as-number;
46         }
47
48         choice route-target-constrain-choice {
49             case route-target-constrain-default-case {
50                 container route-target-constrain-default-route {
51                     presence
52                         "The presence of this container indicates that the routes
53                         is a default route target";
54                 }
55             }
56             case route-target-constrain-route-case {
57                 uses bgp-t:route-target-extended-community-grouping;
58             }
59             case route-target-constrain-ipv4-route-case {
60                 uses bgp-t:route-target-ipv4-grouping;
61             }
62             case route-target-constrain-as-4-extended-community-case {
63                 uses bgp-t:as-4-route-target-extended-community-grouping;
64             }
65             mandatory true;
66         }
67     }
68
69     grouping route-target-constrain-destination {
70         list route-target-constrain-destination {
71             uses route-target-constrain;
72             uses bgp-msg:path-id-grouping;
73         }
74     }
75
76     grouping route-target-constrain-routes {
77         container route-target-constrain-routes {
78             list route-target-constrain-route {
79                 key "route-key path-id";
80                 uses bgp-rib:route;
81                 uses route-target-constrain;
82             }
83         }
84     }
85
86     augment "/bgp-msg:update/bgp-msg:attributes/bgp-mp:mp-reach-nlri/bgp-mp:advertized-routes/bgp-mp:destination-type" {
87         case destination-route-target-constrain-advertized-case {
88             container destination-route-target-constrain {
89                 uses route-target-constrain-destination;
90             }
91         }
92     }
93
94     augment "/bgp-msg:update/bgp-msg:attributes/bgp-mp:mp-unreach-nlri/bgp-mp:withdrawn-routes/bgp-mp:destination-type" {
95         case destination-route-target-constrain-withdrawn-case {
96             container destination-route-target-constrain{
97                 uses route-target-constrain-destination;
98             }
99         }
100     }
101
102     augment "/bgp-rib:application-rib/bgp-rib:tables/bgp-rib:routes" {
103         case route-target-constrain-routes-case {
104             uses route-target-constrain-routes;
105         }
106     }
107
108     augment "/bgp-rib:bgp-rib/bgp-rib:rib/bgp-rib:loc-rib/bgp-rib:tables/bgp-rib:routes" {
109         case route-target-constrain-routes-case {
110             uses route-target-constrain-routes;
111         }
112     }
113
114     augment "/bgp-rib:bgp-rib/bgp-rib:rib/bgp-rib:peer/bgp-rib:adj-rib-in/bgp-rib:tables/bgp-rib:routes" {
115         case route-target-constrain-routes-case {
116             uses route-target-constrain-routes;
117         }
118     }
119
120     augment "/bgp-rib:bgp-rib/bgp-rib:rib/bgp-rib:peer/bgp-rib:effective-rib-in/bgp-rib:tables/bgp-rib:routes" {
121         case route-target-constrain-routes-case {
122             uses route-target-constrain-routes;
123         }
124     }
125
126     augment "/bgp-rib:bgp-rib/bgp-rib:rib/bgp-rib:peer/bgp-rib:adj-rib-out/bgp-rib:tables/bgp-rib:routes" {
127         case route-target-constrain-routes-case {
128             uses route-target-constrain-routes;
129         }
130     }
131
132     augment "/bmp-mon:bmp-monitor/bmp-mon:monitor/bmp-mon:router/bmp-mon:peer/bmp-mon:pre-policy-rib/bmp-mon:tables/bmp-mon:routes" {
133         case route-target-constrain-routes-case {
134             uses route-target-constrain-routes;
135         }
136     }
137
138     augment "/bmp-mon:bmp-monitor/bmp-mon:monitor/bmp-mon:router/bmp-mon:peer/bmp-mon:post-policy-rib/bmp-mon:tables/bmp-mon:routes" {
139         case route-target-constrain-routes-case {
140             uses route-target-constrain-routes;
141         }
142     }
143 }