Hi Alexy, are you running netplan under Guix? I would find it useful to have a service using a netplan config, bypassing the guile-based networking service for such advanced use cases as you mention.
Sincerely, Ryan Sundberg Principal Software Engineer Arctype Corporation -------- Original Message -------- From: Alexey Abramov <leven...@mmer.org> Sent: October 3, 2022 11:23:11 AM PDT To: guix-devel@gnu.org Subject: Advanced network configuration Hi Guix, I have a couple of questions regarding our current network configuration in Guix. With the latest changes to the static configuration, live is indeed, became easier, but I have to say that it is still insufficient to define a complete network configuration. Please check out the following (my) use cases: 1. I have servers with multiple network cards. Let's say, the management one and production. both network cards have multiple interfaces, which I need to bond into 803.1ad mode. Management bond has a native vlan where DHCP should be provided AND another vlan for the management traffic. The production interface (after bonding) has another set of VLANs for a different type of traffic as well. Currently, there is no way to define it without writing a custom service with the iproute2 utility. I was hacking on guile-netlink and did some progress with setting bonds. However current static configuration won't let me build it anyway. I have to not only 'link-add' and create a bond, but also amend existing interfaces by 'link-set' them as a slave to my newly created bond master for example. 2. Having a router with Guix at home. I have to run multiple services that provision 'networking' which is not allowed right now. The DHCP client service is greedy right now and binds to all available interfaces. I sent a [1] patch to solve this. However, I cannot define dhcp-client and static configuration at the same time anyway. These two examples lead me to the following questions: 1) To configure the network, I have been happily using netplan app (debain/ubuntu world). The specification they use can be found here [2]. Here is an example: --8<---------------cut here---------------start------------->8--- network: bonds: bond0: interfaces: - eno0 - eno1 parameters: mode: 802.3ad bond2: interfaces: - enp0 - enp1 parameters: mode: 802.3ad ethernets: eno0: match: macaddress: xx:xx:xx:xx:xx:xx set-name: eno0 eno1: match: macaddress: xx:xx:xx:xx:xx:xx set-name: eno1 eno2: match: macaddress: xx:xx:xx:xx:xx:xx set-name: eno2 eno3: match: macaddress: xx:xx:xx:xx:xx:xx set-name: eno3 enp0: match: macaddress: xx:xx:xx:xx:xx:xx set-name: enp0 enp1: match: macaddress: xx:xx:xx:xx:xx:xx set-name: enp1 renderer: networkd version: 2 vlans: bond1.1055: addresses: - 10.0.0.1/24 routes: - to: XX.XX.XX.XX/21 via: 10.x.x.x gateway4: 10.0.0.1 id: 1055 link: bond1 bond2.2055: addresses: - 10.8.0.1/24 id: 2055 link: bond2 bond2.3055: addresses: - 192.168.0.0/16 id: 3055 link: bond2 --8<---------------cut here---------------end--------------->8--- From the example above, you can see that I rename interfaces (i do know that udev can do it, but it is easier to do it here). I build bonds and VLANs with their IPs. I also set routes and default gateway. Would someone be interested in that? I don't see any problems in implementing this with guile-netlink. This is basically my proposal on how we can improve our static network configuration. What do you think? 2) In Systemd world there is a notion of 'target' which is used for *grouping* units and *synchronization* points during the start-up. At this moment *I* need to have dhcp-client and static configuration. Seems like grouping is a key here. Were there any ideas/attempts to make it happen? Or what should I do? Footnotes: [1] https://issues.guix.gnu.org/58223 [2] https://netplan.io/reference -- Alexey