Route Target Constrain Default Routing Policies Config 23/73723/3
authorClaudio D. Gasparini <claudio.gasparini@pantheon.tech>
Wed, 27 Jun 2018 15:31:27 +0000 (17:31 +0200)
committerClaudio D. Gasparini <claudio.gasparini@pantheon.tech>
Wed, 4 Jul 2018 08:04:19 +0000 (10:04 +0200)
JIRA: BGPCEP-527
Change-Id: Ic59614fd81015a66d2ee4d7d9659f273457f21db
Signed-off-by: Claudio D. Gasparini <claudio.gasparini@pantheon.tech>
bgp/config-example/src/main/resources/initial/routing-policy-config.xml
bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/EffectiveRibInWriter.java

index 9c3c760c4ce0d7892306465eb3a9af9056d888c7..3e4fb385f7a4d015f8a8ef18f96d7af20fb6af92 100644 (file)
                         <reject-route/>
                     </actions>
                 </statement>
+                <statement>
+                    <name>from-external-to-external-RTC</name>
+                    <conditions>
+                        <bgp-conditions xmlns="http://openconfig.net/yang/bgp-policy">
+                            <afi-safi-in xmlns:x="urn:opendaylight:params:xml:ns:yang:bgp:openconfig-extensions">x:ROUTE-TARGET-CONSTRAIN</afi-safi-in>
+                            <match-role-set xmlns="urn:opendaylight:params:xml:ns:yang:odl:bgp:default:policy">
+                                <from-role>
+                                    <role-set>/rpol:routing-policy/rpol:defined-sets/bgppol:bgp-defined-sets/role-sets/role-set[role-set-name="only-ebgp"]</role-set>
+                                </from-role>
+                                <to-role>
+                                    <role-set>/rpol:routing-policy/rpol:defined-sets/bgppol:bgp-defined-sets/role-sets/role-set[role-set-name="only-ebgp"]</role-set>
+                                </to-role>
+                            </match-role-set>
+                        </bgp-conditions>
+                    </conditions>
+                    <actions>
+                        <bgp-actions xmlns="http://openconfig.net/yang/bgp-policy">
+                            <client-attribute-prepend xmlns="urn:opendaylight:params:xml:ns:yang:bgp:route:target:constrain"/>
+                        </bgp-actions>
+                    </actions>
+                </statement>
                 <statement>
                     <name>to-external</name>
                     <conditions>
                     <name>from-internal-or-rr-client-to-route-reflector</name>
                     <conditions>
                         <bgp-conditions xmlns="http://openconfig.net/yang/bgp-policy">
+                            <afi-safi-not-in xmlns:x="urn:opendaylight:params:xml:ns:yang:bgp:openconfig-extensions"
+                                             xmlns="urn:opendaylight:params:xml:ns:yang:odl:bgp:default:policy">x:ROUTE-TARGET-CONSTRAIN</afi-safi-not-in>
                             <match-role-set xmlns="urn:opendaylight:params:xml:ns:yang:odl:bgp:default:policy">
                                 <from-role>
                                     <role-set>/rpol:routing-policy/rpol:defined-sets/bgppol:bgp-defined-sets/role-sets/role-set[role-set-name="ibgp-rr-client"]</role-set>
                         </bgp-actions>
                     </actions>
                 </statement>
+                <statement>
+                    <name>from-internal-or-rr-client-to-route-RTC</name>
+                    <conditions>
+                        <bgp-conditions xmlns="http://openconfig.net/yang/bgp-policy">
+                            <afi-safi-in xmlns:x="urn:opendaylight:params:xml:ns:yang:bgp:openconfig-extensions">x:ROUTE-TARGET-CONSTRAIN</afi-safi-in>
+                            <match-role-set xmlns="urn:opendaylight:params:xml:ns:yang:odl:bgp:default:policy">
+                                <from-role>
+                                    <role-set>/rpol:routing-policy/rpol:defined-sets/bgppol:bgp-defined-sets/role-sets/role-set[role-set-name="ibgp-rr-client"]</role-set>
+                                </from-role>
+                                <to-role>
+                                    <role-set>/rpol:routing-policy/rpol:defined-sets/bgppol:bgp-defined-sets/role-sets/role-set[role-set-name="only-rr-client"]</role-set>
+                                </to-role>
+                            </match-role-set>
+                        </bgp-conditions>
+                    </conditions>
+                    <actions>
+                        <bgp-actions xmlns="http://openconfig.net/yang/bgp-policy">
+                            <set-originator-id-prepend xmlns="urn:opendaylight:params:xml:ns:yang:odl:bgp:default:policy"/>
+                            <set-next-hop>SELF</set-next-hop>
+                        </bgp-actions>
+                    </actions>
+                </statement>
+                <statement>
+                    <name>vpn-membership-RTC</name>
+                    <conditions>
+                        <bgp-conditions xmlns="http://openconfig.net/yang/bgp-policy">
+                            <afi-safi-in xmlns:x="http://openconfig.net/yang/bgp-types">x:L3VPN-IPV4-UNICAST</afi-safi-in>
+                            <afi-safi-in xmlns:x="http://openconfig.net/yang/bgp-types">x:L3VPN-IPV6-UNICAST</afi-safi-in>
+                            <vpn-non-member xmlns="urn:opendaylight:params:xml:ns:yang:odl:bgp:default:policy"/>
+                        </bgp-conditions>
+                    </conditions>
+                    <actions>
+                        <reject-route/>
+                    </actions>
+                </statement>
             </statements>
         </policy-definition>
     </policy-definitions>
index f6e5f6da4d57c17457135fc33f7d878b9a37af95..6dee10295e64953cd0c64bfe5996d24fe9a2fd35 100644 (file)
@@ -268,7 +268,7 @@ final class EffectiveRibInWriter implements PrefixesReceivedCounters, PrefixesIn
             final Optional<RouteTarget> rtMembership = RouteTargetMembeshipUtil.getRT(route);
             if (rtMembership.isPresent()) {
                 final RouteTarget rt = rtMembership.get();
-                if(PeerRole.Ibgp != this.peerImportParameters.getFromPeerRole()) {
+                if(PeerRole.Ebgp != this.peerImportParameters.getFromPeerRole()) {
                     this.rtCache.cacheRoute(route);
                 }
                 this.rtMemberships.add(rt);
@@ -280,7 +280,7 @@ final class EffectiveRibInWriter implements PrefixesReceivedCounters, PrefixesIn
         } else {
             final Optional<RouteTarget> rtMembership = RouteTargetMembeshipUtil.getRT(route);
             if (rtMembership.isPresent()) {
-                if(PeerRole.Ibgp != this.peerImportParameters.getFromPeerRole()) {
+                if(PeerRole.Ebgp != this.peerImportParameters.getFromPeerRole()) {
                     this.rtCache.uncacheRoute(route);
                 }
                 this.rtMemberships.remove(rtMembership.get());