module frr-bgp-route-map { yang-version 1.1; namespace "http://frrouting.org/yang/bgp-route-map"; prefix frr-bgp-route-map; import ietf-inet-types { prefix inet; } import frr-route-map { prefix frr-route-map; } import frr-filter { prefix filter; } import frr-bgp-filter { prefix bgp-filter; } import ietf-routing-types { prefix rt-types; } organization "Free Range Routing"; contact "FRR Users List: FRR Development List: "; description "This module defines bgp route map settings"; revision 2020-01-02 { description "Initial revision"; } identity match-local-preference { base frr-route-map:rmap-match-type; description "Match local-preference of routes"; } identity match-script { base frr-route-map:rmap-match-type; description "Match script of routes"; } identity match-origin { base frr-route-map:rmap-match-type; description "Match BGP route origin code"; } identity rpki { base frr-route-map:rmap-match-type; description "Control rpki specific settings"; } identity probability { base frr-route-map:rmap-match-type; description "Match portion of routes defined by percentage value"; } identity source-vrf { base frr-route-map:rmap-match-type; description "Match source vrf of routes"; } identity peer { base frr-route-map:rmap-match-type; description "Match peer address"; } identity mac-address-list { base frr-route-map:rmap-match-type; description "Match MAC address access-list"; } identity ip-route-source { base frr-route-map:rmap-match-type; description "Match advertising source address of route"; } identity ip-route-source-prefix-list { base frr-route-map:rmap-match-type; description "Match advertising source address of route"; } identity evpn-route-type { base frr-route-map:rmap-match-type; description "Match EVPN route type"; } identity evpn-default-route { base frr-route-map:rmap-match-type; description "Match EVPN default Type-5 route"; } identity evpn-vni { base frr-route-map:rmap-match-type; description "Match EVPN VNI"; } identity evpn-rd { base frr-route-map:rmap-match-type; description "Match EVPN route distinguisher"; } identity match-community { base frr-route-map:rmap-match-type; description "Match BGP community list"; } identity match-large-community { base frr-route-map:rmap-match-type; description "Match BGP large-community list"; } identity match-extcommunity { base frr-route-map:rmap-match-type; description "Match BGP extcommunity list"; } identity as-path-list { base frr-route-map:rmap-match-type; description "Match BGP AS path list"; } identity ipv4-nexthop { base frr-route-map:rmap-match-type; description "Match IPv4 next hop address"; } identity ipv6-nexthop { base frr-route-map:rmap-match-type; description "Match IPv6 next hop address"; } identity distance { base frr-route-map:rmap-set-type; description "Set BGP administrative distance to use"; } identity set-extcommunity-rt { base frr-route-map:rmap-set-type; description "Set BGP extended community attribute"; } identity set-extcommunity-soo { base frr-route-map:rmap-set-type; description "Set BGP extended community attribute"; } identity set-extcommunity-lb { base frr-route-map:rmap-set-type; description "Set BGP extended community attribute"; } identity set-ipv4-nexthop { base frr-route-map:rmap-set-type; description "Set the IPv4 next-hop to peer-address/unchanged"; } identity ipv4-vpn-address { base frr-route-map:rmap-set-type; description "Set IPv4 VPN next-hop address"; } identity ipv6-nexthop-global { base frr-route-map:rmap-set-type; description "Set IPv6 next-hop global address"; } identity ipv6-prefer-global { base frr-route-map:rmap-set-type; description "Set IPv6 next-hop to prefer global address"; } identity ipv6-peer-address { base frr-route-map:rmap-set-type; description "Set IPv6 next-hop peer address"; } identity ipv6-vpn-address { base frr-route-map:rmap-set-type; description "Set IPv6 VPN next-hop address"; } identity label-index { base frr-route-map:rmap-set-type; description "Set the label index to associate with the prefixs"; } identity set-local-preference { base frr-route-map:rmap-set-type; description "Set the BGP local preference path attribute"; } identity set-origin { base frr-route-map:rmap-set-type; description "Set BGP route origin code"; } identity weight { base frr-route-map:rmap-set-type; description "Set the BGP weight attribute"; } identity originator-id { base frr-route-map:rmap-set-type; description "Set the BGP originator ID attribute"; } identity table { base frr-route-map:rmap-set-type; description "Export route to non-main kernel table"; } identity atomic-aggregate { base frr-route-map:rmap-set-type; description "Set BGP atomic-aggregate attribute"; } identity as-path-prepend { base frr-route-map:rmap-set-type; description "Set the BGP AS-path attribute"; } identity as-path-exclude { base frr-route-map:rmap-set-type; description "Set the BGP AS-path attribute"; } identity set-community { base frr-route-map:rmap-set-type; description "Set the BGP community attribute"; } identity set-large-community { base frr-route-map:rmap-set-type; description "Set the BGP large-community attribute"; } identity aggregator { base frr-route-map:rmap-set-type; description "Set the BGP aggregator attribute"; } identity comm-list-delete { base frr-route-map:rmap-set-type; description "Set BGP community list (for deletion)"; } identity large-comm-list-delete { base frr-route-map:rmap-set-type; description "Set BGP large community list (for deletion)"; } grouping extcommunity-non-transitive-types { leaf two-octet-as-specific { type boolean; description "Non-Transitive Two-Octet AS-Specific Extended Community"; } } typedef extcommunity-lb-type { type enumeration { enum "explicit-bandwidth" { value 0; description "Bandwidth value in Mbps"; } enum "cumulative-bandwidth" { value 1; description "Cumulative bandwidth of all multipaths (outbound-only)"; } enum "computed-bandwidth" { value 2; description "Internally computed bandwidth based on number of multipaths (outbound-only)"; } } description "ext-community link bandwidth types."; } augment "/frr-route-map:lib/frr-route-map:route-map/frr-route-map:entry/frr-route-map:match-condition/frr-route-map:rmap-match-condition/frr-route-map:match-condition" { case local-preference { when "derived-from-or-self(/frr-route-map:lib/frr-route-map:route-map/frr-route-map:entry/frr-route-map:match-condition/frr-route-map:condition, 'frr-bgp-route-map:match-local-preference')"; leaf local-preference { type uint32 { range "0..4294967295"; } } } case script { when "derived-from-or-self(/frr-route-map:lib/frr-route-map:route-map/frr-route-map:entry/frr-route-map:match-condition/frr-route-map:condition, 'frr-bgp-route-map:match-script')"; leaf script { type string; } } case origin { when "derived-from-or-self(/frr-route-map:lib/frr-route-map:route-map/frr-route-map:entry/frr-route-map:match-condition/frr-route-map:condition, 'frr-bgp-route-map:match-origin')"; leaf origin { type enumeration { enum "egp" { value 0; description "Remote EGP"; } enum "igp" { value 1; description "Local IGP"; } enum "incomplete" { value 2; description "Unknown heritage"; } } } } case rpki { when "derived-from-or-self(/frr-route-map:lib/frr-route-map:route-map/frr-route-map:entry/frr-route-map:match-condition/frr-route-map:condition, 'frr-bgp-route-map:rpki')"; leaf rpki { type enumeration { enum "invalid" { value 0; description "Invalid prefix"; } enum "notfound" { value 1; description "Prefix not found"; } enum "valid" { value 2; description "Valid prefix"; } } } } case probability { when "derived-from-or-self(/frr-route-map:lib/frr-route-map:route-map/frr-route-map:entry/frr-route-map:match-condition/frr-route-map:condition, 'frr-bgp-route-map:probability')"; leaf probability { type uint8 { range "0..100"; } } } case source-vrf { when "derived-from-or-self(/frr-route-map:lib/frr-route-map:route-map/frr-route-map:entry/frr-route-map:match-condition/frr-route-map:condition, 'frr-bgp-route-map:source-vrf')"; leaf source-vrf { type string; } } case peer { when "derived-from-or-self(/frr-route-map:lib/frr-route-map:route-map/frr-route-map:entry/frr-route-map:match-condition/frr-route-map:condition, 'frr-bgp-route-map:peer')"; choice peer { description "Value of the peer"; case peer-ipv4-address { description "IP address of peer"; leaf peer-ipv4-address { type inet:ipv4-address; } } case peer-interface { description "Interface name of peer"; leaf peer-interface { type string; } } case peer-ipv6-address { description "IPv6 address of peer"; leaf peer-ipv6-address { type inet:ipv6-address; } } case peer-local { description "Static or Redistributed routes"; leaf peer-local { type boolean; } } } } case access-list-name { when "derived-from-or-self(/frr-route-map:lib/frr-route-map:route-map/frr-route-map:entry/frr-route-map:match-condition/frr-route-map:condition, 'frr-bgp-route-map:mac-address-list') or " + "derived-from-or-self(/frr-route-map:lib/frr-route-map:route-map/frr-route-map:entry/frr-route-map:match-condition/frr-route-map:condition, 'frr-bgp-route-map:as-path-list') or " + "derived-from-or-self(/frr-route-map:lib/frr-route-map:route-map/frr-route-map:entry/frr-route-map:match-condition/frr-route-map:condition, 'frr-bgp-route-map:ip-route-source') or " + "derived-from-or-self(/frr-route-map:lib/frr-route-map:route-map/frr-route-map:entry/frr-route-map:match-condition/frr-route-map:condition, 'frr-bgp-route-map:ip-route-source-prefix-list')"; description "Access-list name"; leaf list-name { type filter:access-list-name; } } case evpn-default-route { when "derived-from-or-self(/frr-route-map:lib/frr-route-map:route-map/frr-route-map:entry/frr-route-map:match-condition/frr-route-map:condition, 'frr-bgp-route-map:evpn-default-route')"; description "Match default EVPN type-5 route"; leaf evpn-default-route { type empty; } } case evpn-vni { when "derived-from-or-self(/frr-route-map:lib/frr-route-map:route-map/frr-route-map:entry/frr-route-map:match-condition/frr-route-map:condition, 'frr-bgp-route-map:evpn-vni')"; description "Match eVPN VNI"; leaf evpn-vni { type uint32 { range "1..16777215"; } } } case evpn-route-type { when "derived-from-or-self(/frr-route-map:lib/frr-route-map:route-map/frr-route-map:entry/frr-route-map:match-condition/frr-route-map:condition, 'frr-bgp-route-map:evpn-route-type')"; description "Match eVPN route-type"; leaf evpn-route-type { type enumeration { enum "macip" { value 0; description "Mac-IP route"; } enum "multicast" { value 1; description "IMET route"; } enum "prefix" { value 2; description "Prefix route"; } } } } case evpn-rd { when "derived-from-or-self(/frr-route-map:lib/frr-route-map:route-map/frr-route-map:entry/frr-route-map:match-condition/frr-route-map:condition, 'frr-bgp-route-map:evpn-rd')"; description "Match eVPN route-distinguisher"; leaf route-distinguisher { type rt-types:route-distinguisher; } } case comm-list-name { when "derived-from-or-self(/frr-route-map:lib/frr-route-map:route-map/frr-route-map:entry/frr-route-map:match-condition/frr-route-map:condition, 'frr-bgp-route-map:match-community') or " + "derived-from-or-self(/frr-route-map:lib/frr-route-map:route-map/frr-route-map:entry/frr-route-map:match-condition/frr-route-map:condition, 'frr-bgp-route-map:match-large-community') or " + "derived-from-or-self(/frr-route-map:lib/frr-route-map:route-map/frr-route-map:entry/frr-route-map:match-condition/frr-route-map:condition, 'frr-bgp-route-map:match-extcommunity')"; container comm-list { leaf comm-list-name { type bgp-filter:bgp-list-name; } leaf comm-list-name-exact-match { type boolean; description "Do exact matching of communities"; } } } case ipv4-address { when "derived-from-or-self(/frr-route-map:lib/frr-route-map:route-map/frr-route-map:entry/frr-route-map:match-condition/frr-route-map:condition, 'frr-bgp-route-map:ipv4-nexthop')"; leaf ipv4-address { type inet:ipv4-address; description "IPv4 address"; } } case ipv6-address { when "derived-from-or-self(/frr-route-map:lib/frr-route-map:route-map/frr-route-map:entry/frr-route-map:match-condition/frr-route-map:condition, 'frr-bgp-route-map:ipv6-nexthop')"; leaf ipv6-address { type inet:ipv6-address; description "IPv6 address"; } } } augment "/frr-route-map:lib/frr-route-map:route-map/frr-route-map:entry/frr-route-map:set-action/frr-route-map:rmap-set-action/frr-route-map:set-action" { case distance { when "derived-from-or-self(/frr-route-map:lib/frr-route-map:route-map/frr-route-map:entry/frr-route-map:set-action/frr-route-map:action, 'frr-bgp-route-map:distance')"; leaf distance { type uint8 { range "0..255"; } } } case extcommunity-rt { when "derived-from-or-self(/frr-route-map:lib/frr-route-map:route-map/frr-route-map:entry/frr-route-map:set-action/frr-route-map:action, 'frr-bgp-route-map:set-extcommunity-rt')"; description "Value of the ext-community"; leaf extcommunity-rt { type string; description "Set BGP ext-community route-target attribute"; } } case extcommunity-soo { when "derived-from-or-self(/frr-route-map:lib/frr-route-map:route-map/frr-route-map:entry/frr-route-map:set-action/frr-route-map:action, 'frr-bgp-route-map:set-extcommunity-soo')"; description "Value of the ext-community"; leaf extcommunity-soo { type string; description "Set BGP ext-community site-of-origin attribute"; } } case extcommunity-lb { when "derived-from-or-self(/frr-route-map:lib/frr-route-map:route-map/frr-route-map:entry/frr-route-map:set-action/frr-route-map:action, 'frr-bgp-route-map:set-extcommunity-lb')"; container extcommunity-lb { description "Value of the ext-community."; leaf lb-type { type frr-bgp-route-map:extcommunity-lb-type; } leaf bandwidth { when "../lb-type = 'explicit-bandwidth'"; type uint16 { range "1..25600"; } description "Bandwidth value in Mbps"; } uses extcommunity-non-transitive-types; } } case ipv4-address { when "derived-from-or-self(/frr-route-map:lib/frr-route-map:route-map/frr-route-map:entry/frr-route-map:set-action/frr-route-map:action, 'frr-bgp-route-map:ipv4-vpn-address')"; description "Set the IPv4 address"; leaf ipv4-address { type inet:ipv4-address; } } case ipv4-nexthop { when "derived-from-or-self(/frr-route-map:lib/frr-route-map:route-map/frr-route-map:entry/frr-route-map:set-action/frr-route-map:action, 'frr-bgp-route-map:set-ipv4-nexthop')"; leaf ipv4-nexthop { type string; } } case ipv6-address { when "derived-from-or-self(/frr-route-map:lib/frr-route-map:route-map/frr-route-map:entry/frr-route-map:set-action/frr-route-map:action, 'frr-bgp-route-map:ipv6-nexthop-global') or " + "derived-from-or-self(/frr-route-map:lib/frr-route-map:route-map/frr-route-map:entry/frr-route-map:set-action/frr-route-map:action, 'frr-bgp-route-map:ipv6-vpn-address')"; description "Set the IPv6 address"; leaf ipv6-address { type inet:ipv6-address; } } case preference { when "derived-from-or-self(/frr-route-map:lib/frr-route-map:route-map/frr-route-map:entry/frr-route-map:set-action/frr-route-map:action, 'frr-bgp-route-map:ipv6-prefer-global') or " + "derived-from-or-self(/frr-route-map:lib/frr-route-map:route-map/frr-route-map:entry/frr-route-map:set-action/frr-route-map:action, 'frr-bgp-route-map:ipv6-peer-address')"; leaf preference { type boolean; } } case label-index { when "derived-from-or-self(/frr-route-map:lib/frr-route-map:route-map/frr-route-map:entry/frr-route-map:set-action/frr-route-map:action, 'frr-bgp-route-map:label-index')"; leaf label-index { type uint32 { range "0..1048560"; } } } case local-pref { when "derived-from-or-self(/frr-route-map:lib/frr-route-map:route-map/frr-route-map:entry/frr-route-map:set-action/frr-route-map:action, 'frr-bgp-route-map:set-local-preference')"; leaf local-pref { type string; } } case weight { when "derived-from-or-self(/frr-route-map:lib/frr-route-map:route-map/frr-route-map:entry/frr-route-map:set-action/frr-route-map:action, 'frr-bgp-route-map:weight')"; leaf weight { type uint32 { range "0..4294967295"; } } } case origin { when "derived-from-or-self(/frr-route-map:lib/frr-route-map:route-map/frr-route-map:entry/frr-route-map:set-action/frr-route-map:action, 'frr-bgp-route-map:set-origin')"; leaf origin { type enumeration { enum "egp" { value 0; description "Remote EGP"; } enum "igp" { value 1; description "Local IGP"; } enum "incomplete" { value 2; description "Unknown heritage"; } } } } case originator-id { when "derived-from-or-self(/frr-route-map:lib/frr-route-map:route-map/frr-route-map:entry/frr-route-map:set-action/frr-route-map:action, 'frr-bgp-route-map:originator-id')"; leaf originator-id { type inet:ipv4-address; } } case table { when "derived-from-or-self(/frr-route-map:lib/frr-route-map:route-map/frr-route-map:entry/frr-route-map:set-action/frr-route-map:action, 'frr-bgp-route-map:table')"; leaf table { type uint32 { range "1..4294967295"; } } } case atomic-aggregate { when "derived-from-or-self(/frr-route-map:lib/frr-route-map:route-map/frr-route-map:entry/frr-route-map:set-action/frr-route-map:action, 'frr-bgp-route-map:atomic-aggregate')"; leaf atomic-aggregate { type empty; } } case as-path-prepend { when "derived-from-or-self(/frr-route-map:lib/frr-route-map:route-map/frr-route-map:entry/frr-route-map:set-action/frr-route-map:action, 'frr-bgp-route-map:as-path-prepend')"; choice as-path-prepend { description "Value of the BGP AS-path attribute"; case prepend-as { description "Prepend the mentioned AS-path"; leaf prepend-as-path { type string; } } case last-as { description "Prepend the last ASN in the AS-path"; leaf last-as { type uint8 { range "1..10"; } } } } } case as-path-exclude { when "derived-from-or-self(/frr-route-map:lib/frr-route-map:route-map/frr-route-map:entry/frr-route-map:set-action/frr-route-map:action, 'frr-bgp-route-map:as-path-exclude')"; leaf exclude-as-path { type string; description "Exclude the mentioned AS-path"; } } case community { when "derived-from-or-self(/frr-route-map:lib/frr-route-map:route-map/frr-route-map:entry/frr-route-map:set-action/frr-route-map:action, 'frr-bgp-route-map:set-community')"; choice community { description "Value of the BGP community attribute"; case none { description "No community attribute"; leaf community-none { type boolean; } } case community-string { description "Community string"; leaf community-string { type string; } } } } case large-community { when "derived-from-or-self(/frr-route-map:lib/frr-route-map:route-map/frr-route-map:entry/frr-route-map:set-action/frr-route-map:action, 'frr-bgp-route-map:set-large-community')"; choice large-community { description "Value of the BGP large-community attribute"; case none { description "No large-community attribute"; leaf large-community-none { type boolean; } } case large-community-string { description "Large-Community string"; leaf large-community-string { type string; } } } } case aggregator { when "derived-from-or-self(/frr-route-map:lib/frr-route-map:route-map/frr-route-map:entry/frr-route-map:set-action/frr-route-map:action, 'frr-bgp-route-map:aggregator')"; container aggregator { leaf aggregator-asn { type uint32 { range "1..4294967295"; } description "ASN of the aggregator"; } leaf aggregator-address { when "../aggregator-asn > 0 or " + "../aggregator-asn <= 4294967295"; type inet:ipv4-address; description "IPv4 address of the aggregator"; } } } case comm-list-name { when "derived-from-or-self(/frr-route-map:lib/frr-route-map:route-map/frr-route-map:entry/frr-route-map:set-action/frr-route-map:action, 'frr-bgp-route-map:comm-list-delete') or " + "derived-from-or-self(/frr-route-map:lib/frr-route-map:route-map/frr-route-map:entry/frr-route-map:set-action/frr-route-map:action, 'frr-bgp-route-map:large-comm-list-delete')"; leaf comm-list-name { type bgp-filter:bgp-list-name; } } } }