From 4185de5be57c25407270a9577bc3db0e078decfe Mon Sep 17 00:00:00 2001
From: Hinrikus Wolf <hinrikus@fsmpi.rwth-aachen.de>
Date: Sun, 3 Nov 2024 16:30:26 +0100
Subject: [PATCH] networkd: make VLANs more versatile

---
 networkd/tasks/vlan.yml                       | 4 ++--
 networkd/templates/20-wired-routed.network.j2 | 3 +++
 networkd/templates/20-wired-vlan.network.j2   | 5 +++++
 networkd/templates/vlan.network.j2            | 6 ++++--
 4 files changed, 14 insertions(+), 4 deletions(-)

diff --git a/networkd/tasks/vlan.yml b/networkd/tasks/vlan.yml
index b8f6d15..093acbf 100644
--- a/networkd/tasks/vlan.yml
+++ b/networkd/tasks/vlan.yml
@@ -34,7 +34,7 @@
     group: root
     mode: '0644'
   with_items: "{{ vlan.vlans }}"
-  when: item.bridge
+  when: item.bridge | default(False)
   notify:
     - restart networkd
 - name: ensure bridge networks are configured
@@ -45,6 +45,6 @@
     group: root
     mode: '0644'
   with_items: "{{ vlan.vlans }}"
-  when: item.bridge
+  when: item.bridge | default(False)
   notify:
     - restart networkd
diff --git a/networkd/templates/20-wired-routed.network.j2 b/networkd/templates/20-wired-routed.network.j2
index 6161bd2..16446cf 100644
--- a/networkd/templates/20-wired-routed.network.j2
+++ b/networkd/templates/20-wired-routed.network.j2
@@ -22,6 +22,9 @@ IPForward=yes
 {% for key, value in (network.settings|default({})).items() %}
 {{ key }}={{ value }}
 {% endfor %}
+{% for vlan in network.vlans|default([]) %}
+VLAN=vl-{{ vlan.name }}
+{% endfor %}
 
 {% for route in network.routes|default([{'gateway': network.gateway}]) %}
 [Route]
diff --git a/networkd/templates/20-wired-vlan.network.j2 b/networkd/templates/20-wired-vlan.network.j2
index 4b70521..8d0f671 100644
--- a/networkd/templates/20-wired-vlan.network.j2
+++ b/networkd/templates/20-wired-vlan.network.j2
@@ -1,3 +1,7 @@
+{% if item.1.addresses | default(False) %}
+{% set network = item.1 %}
+{% include "20-wired-routed.network.j2" %}
+{% else %}
 [Match]
 Name={{ item.1.interface }}
 
@@ -9,3 +13,4 @@ BindCarrier={{ item.1.interface }}
 {% if networkd_ipfwd %}
 IPForward=yes
 {% endif %}
+{% endif %}
diff --git a/networkd/templates/vlan.network.j2 b/networkd/templates/vlan.network.j2
index 6b7c90f..2875094 100644
--- a/networkd/templates/vlan.network.j2
+++ b/networkd/templates/vlan.network.j2
@@ -1,4 +1,4 @@
-{% if item.bridge %}
+{% if item.bridge | default(False) %}
 [Match]
 Name=vl-{{ item.name }}
 
@@ -10,7 +10,9 @@ Bridge=vmbr-{{ item.name }}
 	'addresses': item.addresses|default([item.address] if item.address is defined else []),
 	'nameservers': item.nameservers|default([]),
 	'routes': item.routes|default([{'gateway': item.gateway}] if item.gateway is defined else []),
-	'link_local_addressing': item.link_local_addressing|default(None)
+	'link_local_addressing': item.link_local_addressing|default(None),
+	'settings': item.settings|default({}),
+	'custom': item.custom|default([])
 	} %}
 {% include "20-wired-routed.network.j2" %}
 {% endif %}
-- 
GitLab