Development
This commit is contained in:
parent
e2573fbf12
commit
f0504f802e
8 changed files with 67 additions and 66 deletions
|
|
@ -286,16 +286,10 @@ def derive_interface(vlan, data):
|
|||
lan = data.get('network_interfaces', {}).get('lan_interface', 'eth0')
|
||||
if is_wg(vlan):
|
||||
wg_vlans = [v for v in data.get('vlans', []) if is_wg(v)]
|
||||
wg_sorted = sorted(
|
||||
wg_vlans,
|
||||
key=lambda v: (
|
||||
derive_vlan_id(v.get('subnet', ''), v.get('subnet_mask', 24)) is None,
|
||||
derive_vlan_id(v.get('subnet', ''), v.get('subnet_mask', 24)) or 0,
|
||||
)
|
||||
)
|
||||
wg_sorted = sorted(wg_vlans, key=lambda v: (v.get('vlan_id') is None, v.get('vlan_id') or 0))
|
||||
idx = next((i for i, v in enumerate(wg_sorted) if v is vlan), 0)
|
||||
return f'wg{idx}'
|
||||
vid = derive_vlan_id(vlan.get('subnet', ''), vlan.get('subnet_mask', 24))
|
||||
vid = vlan.get('vlan_id')
|
||||
return lan if vid == 1 else f'{lan}.{vid}'
|
||||
|
||||
|
||||
|
|
@ -314,12 +308,9 @@ def validate_config(data):
|
|||
# Pre-compute per-VLAN vlan_ids and interface names without mutating data
|
||||
_lan = data.get("network_interfaces", {}).get("lan_interface", "eth0")
|
||||
_all_vlans = data.get("vlans", [])
|
||||
_derived_ids = [
|
||||
derive_vlan_id(_v.get("subnet", ""), _v.get("subnet_mask", 24))
|
||||
for _v in _all_vlans
|
||||
]
|
||||
_stored_ids = [_v.get("vlan_id") for _v in _all_vlans]
|
||||
_wg_sorted = sorted(
|
||||
[(i, _derived_ids[i]) for i, _v in enumerate(_all_vlans) if is_wg(_v)],
|
||||
[(i, _stored_ids[i]) for i, _v in enumerate(_all_vlans) if is_wg(_v)],
|
||||
key=lambda x: (x[1] is None, x[1] or 0)
|
||||
)
|
||||
_wg_order = {orig_i: wg_idx for wg_idx, (orig_i, _) in enumerate(_wg_sorted)}
|
||||
|
|
@ -328,7 +319,7 @@ def validate_config(data):
|
|||
if is_wg(_vlan):
|
||||
vlan_ifaces.append(f"wg{_wg_order[i]}")
|
||||
else:
|
||||
_vid = _derived_ids[i]
|
||||
_vid = _stored_ids[i]
|
||||
vlan_ifaces.append(_lan if _vid == 1 else f"{_lan}.{_vid}")
|
||||
|
||||
# upstream_dns block ============================================
|
||||
|
|
@ -377,10 +368,13 @@ def validate_config(data):
|
|||
vlan_networks = {} # iface -> IPv4Network (used for NAT section)
|
||||
|
||||
for i, (vlan, iface) in enumerate(zip(_all_vlans, vlan_ifaces)):
|
||||
vlan_id = _derived_ids[i]
|
||||
vlan_id = _stored_ids[i]
|
||||
name = vlan.get("name", "?")
|
||||
label = f"vlan '{name}' (id={vlan_id})"
|
||||
|
||||
if vlan_id is None or not isinstance(vlan_id, int) or not (1 <= vlan_id <= 4094):
|
||||
errors.append(f"vlan '{name}': vlan_id must be an integer 1–4094 (got {vlan_id!r}).")
|
||||
|
||||
if name in seen_names:
|
||||
errors.append(f"{label}: duplicate vlan name '{name}' "
|
||||
f"(also used by id={seen_names[name]}).")
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue