diff --git a/geant/gap_ansible/roles/base_config/tasks/merge_variables.yaml b/geant/gap_ansible/roles/base_config/tasks/merge_variables.yaml
index fd244bc36e7b5b5b376d8ff1148a2e603c5e7130..67f053571a1e027901e8892f9c38eefe96bd94c5 100644
--- a/geant/gap_ansible/roles/base_config/tasks/merge_variables.yaml
+++ b/geant/gap_ansible/roles/base_config/tasks/merge_variables.yaml
@@ -29,7 +29,7 @@
cpm_filters: "{{ lookup('community.general.merge_variables', 'cpmf__to_merge', pattern_type='suffix') }}"
- name: Prepare PE-specific vars
- when: verb == "deploy_pe_base_config"
+ when: router_role == "pe"
block:
- name: Merge Nokia PE CPM filters
ansible.builtin.set_fact:
@@ -39,7 +39,17 @@
ansible.builtin.set_fact:
cpm_filters: "{{ [cpm_filters, pe_cpm] | community.general.lists_mergeby('family',
list_merge='append') }}"
+
- name: Merge P and PE prefix-lists
ansible.builtin.set_fact:
- nokia_prefix_lists: "{{ [nokia_prefix_lists, nokia_pe_prefix_lists] | community.general.lists_mergeby('name',
+ nokia_prefix_lists: "{{ [nokia_prefix_lists, nokia_pe_prefix_lists, nokia_pe_ias_prefix_lists] | community.general.lists_mergeby('name',
list_merge='append') }}"
+
+ - name: Merge P and PE source-addresses
+ ansible.builtin.set_fact:
+ nokia_applications: "{{ [nokia_applications, nokia_pe_applications] | community.general.lists_mergeby('name', list_merge='append') }}"
+
+
+ - name: Select SDP params for l2ciruit-type
+ ansible.builtin.set_fact:
+ sdp_type: "{{ (sdp_types | selectattr('id', 'equalto', '1'))[0] }}"
diff --git a/geant/gap_ansible/roles/bc_templates/routers/nokia/base_config.j2 b/geant/gap_ansible/roles/bc_templates/routers/nokia/base_config.j2
index 590a0eb80eef631773ee3757357f8a7a858391f4..a3fc0e26751b51c1a8a1464875375d97634df457 100644
--- a/geant/gap_ansible/roles/bc_templates/routers/nokia/base_config.j2
+++ b/geant/gap_ansible/roles/bc_templates/routers/nokia/base_config.j2
@@ -6,11 +6,19 @@
{% include 'sfm.j2' %}
{% include 'cards.j2' %}
{% include 'connectors.j2' %}
- {#{% include 'ntp.j2' %}#}
- {#{% include 'ip_prefix_list.j2' %}#}
- {#{% include 'filters/cpm_filters.j2' %}#}
- {#{% include 'syslog/syslog.j2' %}#}
- {#{% include 'system/security/security.j2' %}#}
- {#{% include 'qos/qos.j2' %}#}
+ {% include 'ntp.j2' %}
+ {% include 'filters/cpm_filters.j2' %}
+ {% include 'syslog/syslog.j2' %}
+ {% include 'system/security/security.j2' %}
+ {% include 'qos/qos.j2' %}
+ {% if router_role == 'pe' %}
+ {% include 'cflowd.j2' %}
+ {% include 'filter_log.j2' %}
+ {% include 'policy_options/policy_options.j2' %}
+ {% include 'service_vprn.j2' %}
+ {% endif %}
+ {# This is because `ip_prefix_list` is related to what defined in VPRN apply_paths #}
+ {% include 'ip_prefix_list.j2' %}
+
</configure>
</config>
diff --git a/geant/gap_ansible/roles/bc_templates/routers/nokia/cflowd.j2 b/geant/gap_ansible/roles/bc_templates/routers/nokia/cflowd.j2
new file mode 100644
index 0000000000000000000000000000000000000000..ef8dcc9feaa4c0f5bb8e225f3e5e546dc432b375
--- /dev/null
+++ b/geant/gap_ansible/roles/bc_templates/routers/nokia/cflowd.j2
@@ -0,0 +1,29 @@
+<cflowd xmlns="urn:nokia.com:sros:ns:yang:sr:conf" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:nokia-attr="urn:nokia.com:sros:ns:yang:sr:attributes" alu:operation="replace">
+ <cache-size>{{ cflowd.basic.cache_size }}</cache-size>
+ <enhanced-distribution>{{ cflowd.basic.enhanced_distribution }}</enhanced-distribution>
+ <overflow>{{ cflowd.basic.overflow }}</overflow>
+ <template-retransmit>{{ cflowd.basic.template_retransmit }}</template-retransmit>
+ <active-flow-timeout>{{ cflowd.basic.active_flow_timeout }}</active-flow-timeout>
+ <inactive-flow-timeout>{{ cflowd.basic.inactive_flow_timeout }}</inactive-flow-timeout>
+ {% if cflowd.sample_profiles is defined %}
+ {% for profile in cflowd.sample_profiles %}
+ <sample-profile>
+ <profile-id>{{ profile.id }}</profile-id>
+ <sample-rate>{{ profile.sample_rate }}</sample-rate>
+ <metering-process>{{ profile.metering_process }}</metering-process>
+ </sample-profile>
+ {% endfor %}
+ {% endif %}
+ {% if cflowd.collectors is defined %}
+ {% for collector in cflowd.collectors %}
+ <collector>
+ <ip-address>{{ collector.ip }}</ip-address>
+ <port>{{ collector.port }}</port>
+ <description>{{ collector.description }}</description>
+ <template-set>{{ collector.template_set }}</template-set>
+ <version>{{ collector.version }}</version>
+ </collector>
+ {% endfor %}
+ {% endif %}
+</cflowd>
+
diff --git a/geant/gap_ansible/roles/bc_templates/routers/nokia/filter_log.j2 b/geant/gap_ansible/roles/bc_templates/routers/nokia/filter_log.j2
new file mode 100644
index 0000000000000000000000000000000000000000..7ab3675a89a19a00aa2ff97342c90e8969fa8e11
--- /dev/null
+++ b/geant/gap_ansible/roles/bc_templates/routers/nokia/filter_log.j2
@@ -0,0 +1,18 @@
+
+<filter xmlns="urn:nokia.com:sros:ns:yang:sr:conf" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:nokia-attr="urn:nokia.com:sros:ns:yang:sr:attributes">
+ {% if pe_filter_logs is defined %}
+ {% for log in pe_filter_logs %}
+ <log alu:operation="replace">
+ <log-id>{{ log.id }}</log-id>
+ <description>{{ log.description }}</description>
+ <destination>
+ {% if log.destination == 'syslog' %}
+ <syslog>
+ <name>1</name>
+ </syslog>
+ {% endif %}
+ </destination>
+ </log>
+ {% endfor %}
+ {% endif %}
+</filter>
diff --git a/geant/gap_ansible/roles/bc_templates/routers/nokia/filters/fw_filters.j2 b/geant/gap_ansible/roles/bc_templates/routers/nokia/filters/fw_filters.j2
index 410f156b2359fb8bd3ce701b65e94689ff90d529..4b804948c8cd8419f5c45cbe29e2be24986b861d 100644
--- a/geant/gap_ansible/roles/bc_templates/routers/nokia/filters/fw_filters.j2
+++ b/geant/gap_ansible/roles/bc_templates/routers/nokia/filters/fw_filters.j2
@@ -109,7 +109,7 @@
{% endif %}
{% endif %}
{# Case when only need to match on protocol, e.g. PIM #}
- {% if term.from.protocol is defined and term.from.protocol == 'pim' %}
+ {% if term.from.protocol is defined and term.from.protocol in ['pim', '58'] %}
<entry>
<entry-id>{{ ns3.entry_id }}</entry-id>
<description>{{ term.name }}</description>
@@ -221,7 +221,7 @@
<next-header>{{ term.from.protocol }}</next-header>
{% endif %}
{% endif %}
- {% include 'port_list_entries.j2' %}
+ {% include 'filters/port_list_entries.j2' %}
<dst-ip>
{% if filter.family == "ipv4" %}
<ip-prefix-list>{{term.from.dst_prefix_list[loop.index0]}}</ip-prefix-list>
diff --git a/geant/gap_ansible/roles/bc_templates/routers/nokia/policy_options/as_paths.j2 b/geant/gap_ansible/roles/bc_templates/routers/nokia/policy_options/as_paths.j2
new file mode 100644
index 0000000000000000000000000000000000000000..fadb9c5b01a5b69c57cd13877f0c9b4d86dea62a
--- /dev/null
+++ b/geant/gap_ansible/roles/bc_templates/routers/nokia/policy_options/as_paths.j2
@@ -0,0 +1,6 @@
+ {% for as_path in as_paths_obj %}
+ <as-path alu:operation="replace">
+ <name>{{ as_path.name }}</name>
+ <expression>{{ as_path.expression}}</expression>
+ </as-path>
+ {% endfor %}
diff --git a/geant/gap_ansible/roles/bc_templates/routers/nokia/policy_options/communities.j2 b/geant/gap_ansible/roles/bc_templates/routers/nokia/policy_options/communities.j2
new file mode 100644
index 0000000000000000000000000000000000000000..631ddacf38c264784038e969961227f8a09f186c
--- /dev/null
+++ b/geant/gap_ansible/roles/bc_templates/routers/nokia/policy_options/communities.j2
@@ -0,0 +1,8 @@
+ {% for community in communities_obj %}
+ <community alu:operation="replace">
+ <name>{{ community.name }}</name>
+ <member>
+ <member>{{ community.member }}</member>
+ </member>
+ </community>
+ {% endfor %}
diff --git a/geant/gap_ansible/roles/bc_templates/routers/nokia/policy_options/policy_options.j2 b/geant/gap_ansible/roles/bc_templates/routers/nokia/policy_options/policy_options.j2
new file mode 100644
index 0000000000000000000000000000000000000000..bb4790c644b63d38021a989f56870478946505b2
--- /dev/null
+++ b/geant/gap_ansible/roles/bc_templates/routers/nokia/policy_options/policy_options.j2
@@ -0,0 +1,30 @@
+ <policy-options xmlns="urn:nokia.com:sros:ns:yang:sr:conf" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:nokia-attr="urn:nokia.com:sros:ns:yang:sr:attributes">
+ {% if nokia_po_prefix_lists is defined %}
+ {% with prefix_lists_obj=nokia_po_prefix_lists %}
+ {% include 'policy_options/prefix_lists.j2' %}
+ {% endwith %}
+ {% endif %}
+
+ {# Communities #}
+ {% if nokia_po_communities is defined %}
+ {% with communities_obj=nokia_po_communities %}
+ {% include 'policy_options/communities.j2' %}
+ {% endwith %}
+ {% endif %}
+
+ {# AS paths #}
+ {% if nokia_po_as_paths is defined %}
+ {% with as_paths_obj=nokia_po_as_paths %}
+ {% include 'policy_options/as_paths.j2' %}
+ {% endwith %}
+ {% endif %}
+
+ {# Policy statements #}
+ {% if nokia_po_policy_statements is defined %}
+ {% with policy_obj=nokia_po_policy_statements %}
+ {% include 'policy_options/policy_statements.j2' %}
+ {% endwith %}
+ {% endif %}
+
+ </policy-options>
+
diff --git a/geant/gap_ansible/roles/bc_templates/routers/nokia/policy_options/policy_statements.j2 b/geant/gap_ansible/roles/bc_templates/routers/nokia/policy_options/policy_statements.j2
new file mode 100644
index 0000000000000000000000000000000000000000..95126f78838203c9bce99458cee179a0a87f5f75
--- /dev/null
+++ b/geant/gap_ansible/roles/bc_templates/routers/nokia/policy_options/policy_statements.j2
@@ -0,0 +1,66 @@
+ {% for pol in policy_obj %}
+ <policy-statement alu:operation="replace">
+ <name>{{ pol.name }}</name>
+ <entry-type>{{ pol.entry_type }}</entry-type>
+ {% for entry in pol.entries %}
+ {% if pol.entry_type == 'named' %}
+ <named-entry>
+ {% endif %}
+ <entry-name>{{ entry.name }}</entry-name>
+ {% if entry.from is defined %}
+ <from>
+ {% if entry.from.as_path is defined %}
+ <as-path>
+ {% if entry.from.as_path.name is defined %}
+ <name>{{ entry.from.as_path.name }}</name>
+ {% endif %}
+ {% if entry.from.as_path.length is defined %}
+ <length>
+ <value>{{ entry.from.as_path.length }}</value>
+ </length>
+ {% endif %}
+ </as-path>
+ {% endif %}
+ {% if entry.from.prefix_list is defined %}
+ {% for pl in entry.from.prefix_list %}
+ <prefix-list>{{ pl }}</prefix-list>
+ {% endfor %}
+ {% endif %}
+ {% if entry.from.community is defined %}
+ <community>
+ <name>{{ entry.from.community }}</name>
+ </community>
+ {% endif %}
+ {% if entry.from.origin_validation_state is defined %}
+ <origin-validation-state>{{ entry.from.origin_validation_state }}</origin-validation-state>
+ {% endif %}
+ {% if entry.from.protocol is defined %}
+ {% for proto in entry.from.protocol %}
+ <protocol>
+ <name>{{ proto }}</name>
+ </protocol>
+ {% endfor %}
+ {% endif %}
+ </from>
+ {% endif %}
+ <action>
+ <action-type>{{ entry.action_type }}</action-type>
+ {% if entry.action is defined %}
+ {% for action_item in entry.action %}
+ {% for act_k, act_v in action_item.items() %}
+ {% if act_k == "community_add" %}
+ <community>
+ <add>{{ act_v }}</add>
+ </community>
+ {% else %}
+ <{{ act_k | replace("_", "-") }}>{{ act_v }}</{{act_k | replace("_", "-") }}>
+ {% endif %}
+ {% endfor %}
+ {% endfor %}
+ {% endif %}
+ </action>
+ </named-entry>
+ {% endfor %}
+ </policy-statement>
+
+ {% endfor %}
diff --git a/geant/gap_ansible/roles/bc_templates/routers/nokia/policy_options/prefix_lists.j2 b/geant/gap_ansible/roles/bc_templates/routers/nokia/policy_options/prefix_lists.j2
new file mode 100644
index 0000000000000000000000000000000000000000..507986e60983c0445d2110328584695d67b2b70a
--- /dev/null
+++ b/geant/gap_ansible/roles/bc_templates/routers/nokia/policy_options/prefix_lists.j2
@@ -0,0 +1,15 @@
+ {% for prefix_list in prefix_lists_obj %}
+ <prefix-list alu:operation="replace">
+ <name>{{ prefix_list.name }}</name>
+ {% for prefix in prefix_list.prefixes %}
+ <prefix>
+ <ip-prefix>{{ prefix.ip }}</ip-prefix>
+ <type>{{ prefix.type }}</type>
+ {% if prefix.type == 'range' %}
+ <start-length>{{ prefix.range_start_length }}</start-length>
+ <end-length>{{ prefix.range_end_length }}</end-length>
+ {% endif %}
+ </prefix>
+ {% endfor %}
+ </prefix-list>
+ {% endfor %}
diff --git a/geant/gap_ansible/roles/bc_templates/routers/nokia/router/base_static_routes.j2 b/geant/gap_ansible/roles/bc_templates/routers/nokia/router/base_static_routes.j2
index 74f967d4810de1f088c9b123a1c192bb07af7ec9..3fc1919ea6b5275211dda574a0b7eb4bb73d8cb8 100644
--- a/geant/gap_ansible/roles/bc_templates/routers/nokia/router/base_static_routes.j2
+++ b/geant/gap_ansible/roles/bc_templates/routers/nokia/router/base_static_routes.j2
@@ -1,4 +1,3 @@
- <static-routes xmlns="urn:nokia.com:sros:ns:yang:sr:conf" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:nokia-attr="urn:nokia.com:sros:ns:yang:sr:attributes">
{% if router_role == 'pe' %}
{% with static_routes_obj=nokia_pe_static_routes %}
{% include 'router/static_routes.j2' %}
@@ -8,5 +7,4 @@
{% include 'router/static_routes.j2' %}
{% endwith %}
{% endif %}
- </static-routes>
diff --git a/geant/gap_ansible/roles/bc_templates/routers/nokia/router/bgp.j2 b/geant/gap_ansible/roles/bc_templates/routers/nokia/router/bgp.j2
index 0ed7821cfb2b07cc1d10a36b1fe8d3990477f219..cf0811e51d32cda103612fe9a97aac280b29c7f4 100644
--- a/geant/gap_ansible/roles/bc_templates/routers/nokia/router/bgp.j2
+++ b/geant/gap_ansible/roles/bc_templates/routers/nokia/router/bgp.j2
@@ -3,17 +3,18 @@
{% with bgp_base_obj=pe_bgp_base, bgp_context='bgp_base' %}
{% include 'router/bgp_base.j2' %}
{% endwith %}
- {% with bgp_obj=pe_bgp_tools %}
+ {% with bgp_obj=pe_bgp_tools, bgp_group_context='bgp_base' %}
{% include "router/bgp_group.j2" %}
{% include "router/bgp_neighbor.j2" %}
{% endwith %}
- {% with bgp_obj=pe_bgp_internal %}
+ {% with bgp_obj=pe_bgp_internal, bgp_group_context='bgp_base' %}
{% include "router/bgp_group.j2" %}
{% endwith %}
{% else %}
- {% with bgp_base_obj=p_bgp_base, bgp_obj=p_bgp_internal, bgp_context='bgp_base' %}
- {% include 'router/bgp_base' %}
- {% include 'router/bgp_group' %}
+ {% with bgp_base_obj=p_bgp_base, bgp_obj=p_bgp_internal, bgp_context='bgp_base',
+ bgp_group_context='bgp_base' %}
+ {% include 'router/bgp_base.j2' %}
+ {% include 'router/bgp_group.j2' %}
{% endwith %}
{% endif %}
</bgp>
diff --git a/geant/gap_ansible/roles/bc_templates/routers/nokia/router/bgp_base.j2 b/geant/gap_ansible/roles/bc_templates/routers/nokia/router/bgp_base.j2
index 965c97b04b538bae743600c6fae9a6a095daedc1..791298633cbf4c9e028cd7c4c2f5327c1ee45545 100644
--- a/geant/gap_ansible/roles/bc_templates/routers/nokia/router/bgp_base.j2
+++ b/geant/gap_ansible/roles/bc_templates/routers/nokia/router/bgp_base.j2
@@ -1,8 +1,10 @@
{% if bgp_context == 'vprn' %}
{% if bgp_base_obj.families is defined %}
+ <family>
{% for fam in bgp_base_obj.families %}
<{{ fam }}>true</{{ fam }}>
{% endfor %}
+ </family>
{% endif %}
{% endif %}
{% if bgp_base_obj.best_path_selection is defined %}
@@ -23,9 +25,12 @@
{% for nhr in bgp_base_obj.next_hop_resolution.shortcut_tunnel %}
<family>
<family-type>{{ nhr.type }}</family-type>
+ {% if nhr.resolution_filter is defined %}
+ <resolution>filter</resolution>
<resolution-filter>
<{{ nhr.resolution_filter }}>true</{{ nhr.resolution_filter }}>
</resolution-filter>
+ {% endif %}
</family>
{% endfor %}
</shortcut-tunnel>
diff --git a/geant/gap_ansible/roles/bc_templates/routers/nokia/router/pim.j2 b/geant/gap_ansible/roles/bc_templates/routers/nokia/router/pim.j2
index 9846452598fdd7fe7211cc7fee6e04d6fc00aca5..ccf8e8d57cb5a95281b18fc5c36c8b3adcd6255e 100644
--- a/geant/gap_ansible/roles/bc_templates/routers/nokia/router/pim.j2
+++ b/geant/gap_ansible/roles/bc_templates/routers/nokia/router/pim.j2
@@ -1,3 +1,4 @@
+
<pim xmlns="urn:nokia.com:sros:ns:yang:sr:conf" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:nokia-attr="urn:nokia.com:sros:ns:yang:sr:attributes">
<rp>
<ipv4>
@@ -27,3 +28,4 @@
<interface-name>system</interface-name>
</interface>
</pim>
+
diff --git a/geant/gap_ansible/roles/bc_templates/routers/nokia/router/router_base.j2 b/geant/gap_ansible/roles/bc_templates/routers/nokia/router/router_base.j2
index 4ebc97d077345f82cf77a8da305e18c5a146ca68..97226c2c70f813548a66d850f388b5cc605b6850 100644
--- a/geant/gap_ansible/roles/bc_templates/routers/nokia/router/router_base.j2
+++ b/geant/gap_ansible/roles/bc_templates/routers/nokia/router/router_base.j2
@@ -42,4 +42,10 @@
{% include 'router/bgp.j2' %}
{% include 'router/isis.j2' %}
{% include 'router/pim.j2' %}
+ {% if router_role == 'pe' %}
+ {% include 'router/flowspec.j2' %}
+ {% include 'router/ldp.j2' %}
+ {% include 'router/rpki.j2' %}
+ {% endif %}
</router>
+
diff --git a/geant/gap_ansible/roles/bc_templates/routers/nokia/service_vprn.j2 b/geant/gap_ansible/roles/bc_templates/routers/nokia/service_vprn.j2
new file mode 100644
index 0000000000000000000000000000000000000000..4d8a57d9b55922e0098b0e67e37a81b3d0aeec54
--- /dev/null
+++ b/geant/gap_ansible/roles/bc_templates/routers/nokia/service_vprn.j2
@@ -0,0 +1,12 @@
+
+<service xmlns="urn:nokia.com:sros:ns:yang:sr:conf" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:nokia-attr="urn:nokia.com:sros:ns:yang:sr:attributes">
+ <md-auto-id>
+ <service-id-range alu:operation="replace">
+ <start>{{ pe_service.md_auto_id.service_id_range.start | default('10001') }}</start>
+ <end>{{ pe_service.md_auto_id.service_id_range.end | default('19999') }}</end>
+ </service-id-range>
+ </md-auto-id>
+ {% include 'router/vprn.j2' %}
+</service>
+ {#{% include 'ip_prefix_list.j2' %}#}
+