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