network/roles/fabric/templates/switch.intf.j2
Timotej Lazar ae1cfd5337 exit: enable forwarding directed broadcasts for WoL
Must be set in IPv4 sysctls for all interfaces and every input
interface from which broadcasts are sent. These are the virtual
MLAG interfaces (bridge-*-v0), which are created dynamically.

We enable directed broadcasts for (only MLAG) interfaces enumerated by
the ifaces_directed_broadcast value in NetBox device local context.
2024-09-18 14:27:30 +02:00

57 lines
2.3 KiB
Django/Jinja

{% set fhrp_assignments = query('netbox.netbox.nb_lookup', 'fhrp-group-assignments', raw_data=true) %}
{% set fhrp_groups = query('netbox.netbox.nb_lookup', 'fhrp-groups', raw_data=true) -%}
{% for iface in interfaces | rejectattr('name', 'in', ('lo', 'bridge')) | rejectattr('mgmt_only') | selectattr('enabled') %}
auto {{ iface.name }}
iface {{ iface.name }}
{% if iface.vrf %}
vrf {{ iface.vrf.name }}
{% endif -%}
{% if iface.mtu %}
mtu {{ iface.mtu }}
{% endif -%}
{% if iface.type.value == 'lag' %}
{#- Bond/MLAG stuff. #}
{% set members = interfaces | selectattr('lag') | selectattr('lag.name', '==', iface.name) %}
{% if members %}
bond-slaves {{ members | map(attribute='name') | join(' ') }}
{% endif %}
{% if iface.custom_fields.bond_mode %}
bond-mode {{ iface.custom_fields.bond_mode }}
{% endif %}
{# If the peer shares a bond with the same name, generate a clag-id for it unless the bonded link is to peer itself. #}
{% if peer is defined %}
{% set peer_members = hostvars[peer].interfaces | selectattr('lag') | selectattr('lag.name', '==', iface.name) %}
{% if peer_members | iface_peer | reject('eq', inventory_hostname) %}
clag-id {{ (members + peer_members) | cl_clag_id }}
{% endif %}
{% endif %}
{% endif %}
{#- Set allowed VLANs if we are part of the bridge. #}
{% if iface.bridge and iface.mode %}
{% if iface.mode.value == 'access' and iface.untagged_vlan %}
bridge-access {{ iface.untagged_vlan.vid }}
{% elif iface.mode.value == 'tagged' and iface.tagged_vlans %}
bridge-vids {{ iface.tagged_vlans | map(attribute='vid') | join(' ') }}
{% endif %}
{% endif %}
{#- Addresses. #}
{% for addr in iface.ip_addresses %}
address {{ addr.address }}
{% endfor %}
{% if iface.count_fhrp_groups > 0 %}
{% set fhrp_assignment = fhrp_assignments | selectattr('interface.id', '==', iface.id) | first %}
{% set fhrp_group = fhrp_groups | selectattr('id', '==', fhrp_assignment.group.id) | first %}
address-virtual 00:00:5e:00:01:01 {{ fhrp_group.ip_addresses | sort(attribute='family.value') | map(attribute='address') | join(' ') }}
{% if iface.name in ifaces_directed_broadcast|default([]) %}
{# Enable directed broadcast forwarding from this interface for WoL. #}
post-up echo 1 > /proc/sys/net/ipv4/conf/{{ iface.name | replace('.', '-') }}-v0/bc_forwarding
{% endif %}
{% endif %}
{% endfor %}