diff --git a/encoder/network.php b/encoder/network.php
index 24b94ba..22d8bdf 100755
--- a/encoder/network.php
+++ b/encoder/network.php
@@ -184,7 +184,10 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
}
}
- file_put_contents('/var/www/50-cloud-init.yaml', netplan_yaml(generate_netplan($data, $iface)));
+ if (validate_config($data)) {
+ file_put_contents('/var/www/50-cloud-init.yaml', netplan_yaml(generate_netplan($data, $iface)));
+ }
+
}
}
diff --git a/encoder/static.php b/encoder/static.php
index 44c7e51..747d29f 100755
--- a/encoder/static.php
+++ b/encoder/static.php
@@ -148,7 +148,6 @@ function build_interface(array $cfg, string $type): array
function generate_netplan(array $data, string $iface): array
{
- validate_config($data);
$netplan = [
'network' => [
@@ -201,7 +200,7 @@ function generate_netplan(array $data, string $iface): array
return $netplan;
}
-function validate_config(array $data): void
+function validate_config(array $data): bool
{
$p_enabled = (
$data['primary']['mode'] !== 'disabled' ||
@@ -216,14 +215,22 @@ function validate_config(array $data): void
$p_vlan = trim($data['primary']['network_primary_vlan'] ?? '');
$s_vlan = trim($data['secondary']['network_secondary_vlan'] ?? '');
- /* If both enabled, at least one VLAN is mandatory */
+ /* If both enabled → at least one VLAN required */
if ($p_enabled && $s_enabled && $p_vlan === '' && $s_vlan === '') {
- throw new RuntimeException(
- 'Invalid configuration: Primary and Secondary are enabled but no VLAN is defined.'
- );
+ echo "";
+ return false;
}
+
+ /* Block duplicate VLAN IDs */
+ if ($p_vlan !== '' && $s_vlan !== '' && $p_vlan === $s_vlan) {
+ echo "";
+ return false;
+ }
+
+ return true;
}
+
function netplan_yaml(array $data, int $indent = 0): string
{
$out = '';