{% from 'frr/static_routes_macro.j2' import static_routes %} ! {% set ip_prefix = 'ip' %} {% set ipv6_prefix = 'ipv6' %} {% if vrf is defined and vrf is not none %} {# We need to add an additional whitespace in front of the prefix #} {# when VRFs are in use, thus we use a variable for prefix handling #} {% set ip_prefix = ' ip' %} {% set ipv6_prefix = ' ipv6' %} vrf {{ vrf }} {% endif %} {# IPv4 routing #} {% if route is defined and route is not none %} {% for prefix, prefix_config in route.items() %} {{ static_routes(ip_prefix, prefix, prefix_config) }} {%- endfor -%} {% endif %} {# IPv4 default routes from DHCP interfaces #} {% if dhcp is defined and dhcp is not none %} {% for interface, interface_config in dhcp.items() %} {% set next_hop = interface | get_dhcp_router %} {% if next_hop is defined and next_hop is not none %} {{ ip_prefix }} route 0.0.0.0/0 {{ next_hop }} {{ interface }} tag 210 {{ interface_config.distance }} {% endif %} {% endfor %} {% endif %} {# IPv6 routing #} {% if route6 is defined and route6 is not none %} {% for prefix, prefix_config in route6.items() %} {{ static_routes(ipv6_prefix, prefix, prefix_config) }} {%- endfor -%} {% endif %} {% if vrf is defined and vrf is not none %} exit-vrf {% endif %} ! {# Policy route tables #} {% if table is defined and table is not none %} {% for table_id, table_config in table.items() %} {% if table_config.route is defined and table_config.route is not none %} {% for prefix, prefix_config in table_config.route.items() %} {{ static_routes('ip', prefix, prefix_config, table_id) }} {%- endfor -%} {% endif %} ! {% if table_config.route6 is defined and table_config.route6 is not none %} {% for prefix, prefix_config in table_config.route6.items() %} {{ static_routes('ipv6', prefix, prefix_config, table_id) }} {%- endfor -%} {% endif %} ! {% endfor %} {% endif %} ! {% if route_map is defined and route_map is not none %} ip protocol static route-map {{ route_map }} ! {% endif %}