From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from gate001.proxmox.com (gate001.proxmox.com [IPv6:2a0f:8001:1:32::40]) by lore.proxmox.com (Postfix) with ESMTPS id 4E48F1FF0AF for ; Fri, 06 Nov 2026 14:11:16 +0100 (CET) Received: from gate001.proxmox.com (localhost.localdomain [127.0.0.1]) by gate001.proxmox.com (Proxmox) with ESMTP id C6404215DC; Fri, 06 Nov 2026 14:11:13 +0100 (CET) From: Christoph Heiss To: pve-devel@lists.proxmox.com Subject: [PATCH installer v5 00/23] fix #2164: add bond and vlan setup across all installers Date: Fri, 6 Nov 2026 14:10:29 +0100 Message-ID: <20261106131058.804870-1-c.heiss@proxmox.com> X-Mailer: git-send-email 2.56.0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Bm-Milter-Handled: 55990f41-d878-4baa-be0a-ee34c49e34d2 X-Bm-Transport-Timestamp: 1793970666992 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.169 Adjusted score from AWL reputation of From: address DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment (newer systems) RCVD_IN_DNSWL_MED -2.3 Sender listed at https://www.dnswl.org/, medium trust SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Message-ID-Hash: VO7O7J3XTDOSN5NA2YFCODDDXNH2GA4Z X-Message-ID-Hash: VO7O7J3XTDOSN5NA2YFCODDDXNH2GA4Z X-MailFrom: c.heiss@proxmox.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.10 Precedence: list List-Id: Proxmox VE development discussion List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: Fixes #2164 [0] by adding the possibility to set up a bond and a VLAN tag for the management interface during the installation, for all of GUI, TUI and auto-installer. For the GUI and TUI, the current name pinning dialog is converted into a full-fledged advanced network options dialog, in the same vein as with the bootdisk options. This makes it practical to then add additional networking options, in this case bond and VLAN options. The auto-installer gains two new sections under [network]: [network.bond] members = ["ab:cd:ef:12:34:56", "ab:cd:ef:12:34:57"] # or, alternatively filter.ID_NET_DRIVER = "igc" filter-match = "all" # general bond options mode = "active-backup" hash-policy = "layer2+3" primary-interface = "ab:cd:ef:12:34:57" [network.vlan] vid = 5 Both being of course independent of each other. [network.vlan] can only be set in combination with [network] source = "from-answer" The respective PDM integration will be sent separately. [0] https://bugzilla.proxmox.com/show_bug.cgi?id=2164 History ======= v4: https://lore.proxmox.com/pve-devel/20261102124539.1008075-1-c.heiss@proxmox.com/ v3: off-list review sample v2: https://lore.proxmox.com/pve-devel/20261020112327.641633-1-c.heiss@proxmox.com/ v1: https://lore.proxmox.com/pve-devel/20260908101647.1057780-1-c.heiss@proxmox.com/ Notable changes v4 -> v5: * dropped now-applied `proxmox` patches * rebased on applied `proxmox-{installer,network}-types` changes * fixed (de-)serialization mismatch for low-level config w.r.t. what the Perl side generates Notable changes v3 -> v4: * add some `Display` derives for proxmox-installer-types * fixed expanding of tab page contents, which caused unnecessary padding Notable changes v2 -> v3: * added VLAN configuration support * rebased atop @Thomas changes, including some patches from him * split bond member selection into static list and udev filters Notable changes v1 -> v2: * rebased on latest masters for each repo * fixed a bug in the GUI installer, passing an invalid index to GTK with a bond set up Questions ========= 1. Since we now discourage the use of the 'balance-alb' and 'balance-tlb' modes in combination with a Linux bridge (as of [1]), should these not even be available for selection here? [1] https://lore.proxmox.com/pve-devel/20260828095721.263382-1-m.sandoval@proxmox.com/ Diffstat ======== pve-installer: Christoph Heiss (23): install: run make tidy tree-wide: use `MacAddress` type instead of string for MAC addresses install: factor out ifupdown2 config generation into own subroutine install: do not rely on interface name map to be fully populated install: config: add option for setting up bond on management interface install: config: add option for setting up vlan on management interface install: network: set up management bond if requested install: network: set up vlan on management interface if requested gui: network: factor out name pinning into advanced options dialog gui: network: add bond setup options to advanced options dialog gui: network: add vlan setup options to advanced network dialog auto: pass through management network bond options to low-level installer auto: pass through management network vlan options to low-level installer tui: drop long obsolete comment about logo formatting tui: views: add widget for displaying a group of checkboxes tui: network: factor out name pinning into advanced options dialog tui: network: match form label style when enabling/disabling elements tui: network: add bond setup options to advanced network dialog tui: network: add vlan setup options to advanced network dialog gui: network: split advanced options dialog into tabs tui: network: split advanced options dialog into tabs gui: network: list bond member candidates sharing a MAC address once tui: network: list bond member candidates sharing a MAC address once Cargo.toml | 4 +- Proxmox/Install.pm | 244 ++++-- Proxmox/Install/Config.pm | 79 ++ Proxmox/Sys/Net.pm | 43 + debian/control | 3 +- proxinstall | 491 +++++++++-- proxmox-auto-installer/Cargo.toml | 1 + proxmox-auto-installer/src/utils.rs | 113 ++- proxmox-auto-installer/tests/parse-answer.rs | 12 +- .../resources/parse_answer/network_bond.json | 25 + .../resources/parse_answer/network_bond.toml | 20 + .../parse_answer/network_bond_and_vlan.json | 29 + .../parse_answer/network_bond_and_vlan.toml | 27 + .../network_bond_with_filter.json | 24 + .../network_bond_with_filter.toml | 22 + ...ace_pinning_mixed_case_mac_addresses.json} | 0 ...ace_pinning_mixed_case_mac_addresses.toml} | 4 +- .../resources/parse_answer/network_vlan.json | 23 + .../resources/parse_answer/network_vlan.toml | 21 + .../network_bond_invalid_hash_policy.json | 3 + .../network_bond_invalid_hash_policy.toml | 20 + .../network_bond_invalid_mode.json | 3 + .../network_bond_invalid_mode.toml | 18 + .../network_bond_primary_not_member.json | 3 + .../network_bond_primary_not_member.toml | 19 + .../network_bond_single_interface.json | 3 + .../network_bond_single_interface.toml | 18 + ...rface_pinning_overlong_interface_name.json | 2 +- .../network_vlan_invalid_vid.json | 3 + .../network_vlan_invalid_vid.toml | 21 + proxmox-installer-common/Cargo.toml | 1 + proxmox-installer-common/src/options.rs | 117 +-- proxmox-installer-common/src/setup.rs | 103 ++- proxmox-post-hook/src/main.rs | 2 +- proxmox-tui-installer/Cargo.toml | 1 + proxmox-tui-installer/src/main.rs | 9 +- proxmox-tui-installer/src/options.rs | 51 +- proxmox-tui-installer/src/setup.rs | 20 +- proxmox-tui-installer/src/views/mod.rs | 186 ++++- proxmox-tui-installer/src/views/network.rs | 766 ++++++++++++++---- .../src/views/tabbed_view.rs | 7 + test/Makefile | 6 +- test/generate-ifupdown2-config.pl | 541 +++++++++++++ 43 files changed, 2723 insertions(+), 385 deletions(-) create mode 100644 proxmox-auto-installer/tests/resources/parse_answer/network_bond.json create mode 100644 proxmox-auto-installer/tests/resources/parse_answer/network_bond.toml create mode 100644 proxmox-auto-installer/tests/resources/parse_answer/network_bond_and_vlan.json create mode 100644 proxmox-auto-installer/tests/resources/parse_answer/network_bond_and_vlan.toml create mode 100644 proxmox-auto-installer/tests/resources/parse_answer/network_bond_with_filter.json create mode 100644 proxmox-auto-installer/tests/resources/parse_answer/network_bond_with_filter.toml rename proxmox-auto-installer/tests/resources/parse_answer/{network_interface_pinning_uppercase_mac_address.json => network_interface_pinning_mixed_case_mac_addresses.json} (100%) rename proxmox-auto-installer/tests/resources/parse_answer/{network_interface_pinning_uppercase_mac_address.toml => network_interface_pinning_mixed_case_mac_addresses.toml} (85%) create mode 100644 proxmox-auto-installer/tests/resources/parse_answer/network_vlan.json create mode 100644 proxmox-auto-installer/tests/resources/parse_answer/network_vlan.toml create mode 100644 proxmox-auto-installer/tests/resources/parse_answer_fail/network_bond_invalid_hash_policy.json create mode 100644 proxmox-auto-installer/tests/resources/parse_answer_fail/network_bond_invalid_hash_policy.toml create mode 100644 proxmox-auto-installer/tests/resources/parse_answer_fail/network_bond_invalid_mode.json create mode 100644 proxmox-auto-installer/tests/resources/parse_answer_fail/network_bond_invalid_mode.toml create mode 100644 proxmox-auto-installer/tests/resources/parse_answer_fail/network_bond_primary_not_member.json create mode 100644 proxmox-auto-installer/tests/resources/parse_answer_fail/network_bond_primary_not_member.toml create mode 100644 proxmox-auto-installer/tests/resources/parse_answer_fail/network_bond_single_interface.json create mode 100644 proxmox-auto-installer/tests/resources/parse_answer_fail/network_bond_single_interface.toml create mode 100644 proxmox-auto-installer/tests/resources/parse_answer_fail/network_vlan_invalid_vid.json create mode 100644 proxmox-auto-installer/tests/resources/parse_answer_fail/network_vlan_invalid_vid.toml create mode 100755 test/generate-ifupdown2-config.pl