delete_bifcs.cgi and save_bifc.cgi only called deactivate_interface()
which brings the link down but never removes the virtual device.
Added destroy_interface_device() that does ip link delete for these.
Also had to add bridge creation (ip link add type bridge) because unlike
bond (81d44f8) and VLAN (7761066) that was still missing.
Other fixes in this commit:
debian-linux-lib.pl: bonding opts were single-element arrays causing
trailing spaces in /etc/network/interfaces on every save.
linux-lib.pl: ip link set up/down was gated behind a
bond/vlan/no-ifconfig check but ip addr add runs unconditionally - so
interfaces got an IP but stayed DOWN. Dropped the unnecessary guard.
ⓘ Create and configure missing bond devices with ip link, attach partner interfaces before assigning addresses, avoid legacy module auto-creation when ip is available, and add regression coverage.
Ref.: https://github.com/webmin/webmin/pull/2777
ⓘ Treat Linux active virtual interfaces as secondary IP addresses instead of independent links, fixing alias parsing, hiding invalid status controls, rejecting down-state creation, and removing existing aliases with ip addr del when needed.
Reproduce path:
Example repro before this fix:
1. Go to **Network Configuration → Network Interfaces → Active Now**.
2. Click **Add a new interface**.
3. Enter:
```text
Name: enp0s5:1
IPv4 address: 10.211.55.21
Netmask: 255.255.255.0
Status: Down
```
4. Click **Create**.
Before the fix, Webmin could still create the alias or handle it inconsistently, because `enp0s5:1` is not a real link that can be “down”. It is just an extra IP address on `enp0s5`.
Expected after the fix:
- The UI should not offer `Status` for active virtual aliases.
- If someone submits `up=0` manually anyway, Webmin rejects it with:
`Virtual interfaces cannot be created with down status`
- If an existing active virtual alias is saved as down through lower-level code, Webmin removes the IP using something like:
```bash
ip addr del 10.211.55.21/24 dev enp0s5
```
This PR adds dhcpcd backend support for Debian and Raspberry Pi OS network configuration. It detects dhcpcd only as a final fallback after Netplan, NetworkManager, and ifupdown, preventing Webmin from incorrectly falling back to `/etc/network/interfaces` on dhcpcd-managed systems.
The new backend reads and writes `/etc/dhcpcd.conf`, including DHCP and static IPv4/IPv6 configuration, gateways, static routes, DNS servers, search domains, MTU, and virtual IPv4 aliases. It also supports implicit DHCP-managed interfaces for default dhcpcd setups with no explicit interface blocks, and handles `allowinterfaces` / `denyinterfaces` behavior.
This PR also fixes apply/delete flows for dhcpcd-managed interfaces and virtual aliases, avoids rewriting generated `/etc/resolv.conf`, preserves spacing/comments in touched hosts and nsswitch files, and tightens Active Now handling so virtual aliases are treated as IP addresses rather than independent links.
https://github.com/webmin/webmin/issues/1607