From 72433c25f954d6a59f1ba7b4f51917683b4764c5 Mon Sep 17 00:00:00 2001 From: Marek Isalski Date: Sat, 31 Jul 2021 15:44:50 +0100 Subject: [PATCH] BGP community steering --- vyos.conf.j2 | 107 +++++++++++++++++++++++++-------------------------- 1 file changed, 53 insertions(+), 54 deletions(-) diff --git a/vyos.conf.j2 b/vyos.conf.j2 index 2fdb2ab..8ed99ed 100644 --- a/vyos.conf.j2 +++ b/vyos.conf.j2 @@ -1362,79 +1362,78 @@ policy { {% if 'community_affects_route_maps' in pillar and 'site_codes' in pillar and 'community_affects_prepend_asn' in pillar %} {% for route_map_prefix,community_suffixes in pillar.get('community_affects',{}).items() %} - {% for community_suffix in community_suffixes %} - {% for digit in "01239" %} - community-list community_affects_65XX{{ digit }}_{{ community_suffix }} { + {% for digit in "01239" %} + community-list community_affects_65XX{{ digit }}_{{ route_map_prefix }} { + {% for community_suffix in ["0"] + community_suffixes %} + {% set loop_parent = loop %} {% for site_code in ['00'] + pillar['site_codes'] %} - rule {{ loop.index }} { + rule {{ loop_parent.index0 * 10 + loop.index }} { action 'permit' regex 65{{ site_code }}{{ digit }}:{{ community_suffix }} } {% endfor %} - } - {% endfor %} + {% endfor %} + } {% endfor %} {% for af in ['IPv4','IPv6'] %} {% for rm in pillar['community_affects_route_maps'] %} route-map {{ route_map_prefix }}-{{ rm }}-{{ af }} { - {% for community_suffix in community_suffixes %} - rule {{ loop.index*10 }} { - match { - community { - community-list community_affects_65XX0_{{ community_suffix }} - } + rule {{ loop.index*10 }} { + match { + community { + community-list community_affects_65XX0_{{ route_map_prefix }} } - action deny } - rule {{ loop.index*10 + 1 }} { - match { - community { - community-list community_affects_65XX1_{{ community_suffix }} - } - } - set { - as-path-prepend "{{ pillar['community_affects_prepend_asn'] }}" + action deny + } + rule {{ loop.index*10 + 1 }} { + match { + community { + community-list community_affects_65XX1_{{ route_map_prefix }} } - call {{ rm }}-{{ af }} - action permit } - rule {{ loop.index*10 + 2 }} { - match { - community { - community-list community_affects_65XX2_{{ community_suffix }} - } - } - set { - as-path-prepend "{{ pillar['community_affects_prepend_asn'] }} {{ pillar['community_affects_prepend_asn'] }}" - } - call {{ rm }}-{{ af }} - action permit + set { + as-path-prepend "{{ pillar['community_affects_prepend_asn'] }}" } - rule {{ loop.index*10 + 3 }} { - match { - community { - community-list community_affects_65XX3_{{ community_suffix }} - } - } - set { - as-path-prepend "{{ pillar['community_affects_prepend_asn'] }} {{ pillar['community_affects_prepend_asn'] }} {{ pillar['community_affects_prepend_asn'] }}" + call {{ rm }}-{{ af }} + action permit + } + rule {{ loop.index*10 + 2 }} { + match { + community { + community-list community_affects_65XX2_{{ route_map_prefix }} } - call {{ rm }}-{{ af }} - action permit } - rule {{ loop.index*10 + 9 }} { - match { - community { - community-list community_affects_65XX9_{{ community_suffix }} - } + set { + as-path-prepend "{{ pillar['community_affects_prepend_asn'] }} {{ pillar['community_affects_prepend_asn'] }}" + } + call {{ rm }}-{{ af }} + action permit + } + rule {{ loop.index*10 + 3 }} { + match { + community { + community-list community_affects_65XX3_{{ route_map_prefix }} } - set { - community "additive no-export" + } + set { + as-path-prepend "{{ pillar['community_affects_prepend_asn'] }} {{ pillar['community_affects_prepend_asn'] }} {{ pillar['community_affects_prepend_asn'] }}" + } + call {{ rm }}-{{ af }} + action permit + } + rule {{ loop.index*10 + 9 }} { + match { + community { + community-list community_affects_65XX9_{{ route_map_prefix }} } - call {{ rm }}-{{ af }} - action permit } - {% endfor %} + set { + community "additive no-export" + } + call {{ rm }}-{{ af }} + action permit + } rule 65535 { match { {% if af == "IPv4" %}