Subject: [PATCH 00/10] Declarative static networking interface

From: David Aaron Fendley <[email-masked]>
Date: Wed, 3 Nov 2021 09:27:04 -0400

If I have:

  (service static-networking-service-type
  	   (list (static-networking
  		  (addresses (list (network-address
  				    (device "eno33559296")
  				    (value "10.7.99.99/24"))
  				   (network-address
  				    (device "eno16780032")
  				    (value "10.10.199.98/24"))))
  		  (routes (list (network-route
  				 (destination "default")
  				 (gateway "10.10.199.1"))
  				(network-route
  				 (destination "192.168.0.1/32")
  				 (gateway "10.10.199.1"))))
  		  (name-servers '("10.10.199.17" "10.10.101.2")))))

After reconfigure and restart of the networking service, no routes
listed are created. Only the standard routes for each network:

  > ip a
  
  1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
      link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
      inet 127.0.0.1/8 scope host lo
         valid_lft forever preferred_lft forever
      inet 127.0.0.1/0 scope global lo
         valid_lft forever preferred_lft forever
      inet6 ::1/128 scope host 
         valid_lft forever preferred_lft forever
  2: eno16780032: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
      link/ether 00:50:56:98:d1:9f brd ff:ff:ff:ff:ff:ff
      inet 10.10.199.98/24 scope global eno16780032
         valid_lft forever preferred_lft forever
      inet6 fe80::250:56ff:fe98:d19f/64 scope link 
         valid_lft forever preferred_lft forever
  3: eno33559296: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
      link/ether 00:50:56:98:37:c2 brd ff:ff:ff:ff:ff:ff
      inet 10.7.99.99/24 scope global eno33559296
         valid_lft forever preferred_lft forever
      inet6 fe80::250:56ff:fe98:37c2/64 scope link 
         valid_lft forever preferred_lft forever

  > ip r
  
  10.7.99.0/24 dev eno33559296 proto kernel scope link src 10.7.99.99 
  10.10.199.0/24 dev eno16780032 proto kernel scope link src 10.10.199.98 

If I then change the config to:

  (service static-networking-service-type
  	   (list (static-networking
  		  (addresses (list (network-address
  				    (device "eno33559296")
  				    (value "10.0.7.15/24"))
  				   (network-address
  				    (device "eno16780032")
  				    (value "10.10.2.15/24"))))
  		  (routes (list (network-route
  				 (destination "default")
  				 (gateway "10.0.2.2"))))
  		  (name-servers '("10.0.2.3")))))

After reconfigure and restart of the networking service, routes
specified are still not created, and the addresses and routes are
appended:

  > ip a

  1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
      link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
      inet 127.0.0.1/8 scope host lo
         valid_lft forever preferred_lft forever
      inet 127.0.0.1/0 scope global lo
         valid_lft forever preferred_lft forever
      inet6 ::1/128 scope host 
         valid_lft forever preferred_lft forever
  2: eno16780032: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
      link/ether 00:50:56:98:d1:9f brd ff:ff:ff:ff:ff:ff
      inet 10.10.199.98/24 scope global eno16780032
         valid_lft forever preferred_lft forever
      inet 10.10.2.15/24 scope global eno16780032
         valid_lft forever preferred_lft forever
      inet6 fe80::250:56ff:fe98:d19f/64 scope link 
         valid_lft forever preferred_lft forever
  3: eno33559296: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
      link/ether 00:50:56:98:37:c2 brd ff:ff:ff:ff:ff:ff
      inet 10.7.99.99/24 scope global eno33559296
         valid_lft forever preferred_lft forever
      inet 10.0.7.15/24 scope global eno33559296
         valid_lft forever preferred_lft forever
      inet6 fe80::250:56ff:fe98:37c2/64 scope link 
         valid_lft forever preferred_lft forever

  > ip r

  10.0.7.0/24 dev eno33559296 proto kernel scope link src 10.0.7.15 
  10.7.99.0/24 dev eno33559296 proto kernel scope link src 10.7.99.99 
  10.10.2.0/24 dev eno16780032 proto kernel scope link src 10.10.2.15 
  10.10.199.0/24 dev eno16780032 proto kernel scope link src 10.10.199.98 

Expectation:

Routes declared would be added and standard network routes would be
removed if no longer relevant.

Environment:

These ten patches were applied on top of:

  7af3b822178782d6598865e1d6a780a756dd0cb3

  > guix describe
  
  Generation 2	Nov 02 2021 13:37:58	(current)
    guix 8d02b0d
      repository URL: https://git.savannah.gnu.org/git/guix.git
      branch: master
      commit: 8d02b0d46cfc27b905f9276760aefacf518ae4f7