From 50254f55006b896639a14af1254536ce979a9810 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Mon, 1 Jun 2020 14:22:06 +0900 Subject: [PATCH 1/2] network: wireguard: set ListenPort= when no peers are configured Closes #15786. --- src/network/netdev/wireguard.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/network/netdev/wireguard.c b/src/network/netdev/wireguard.c index bfed13e2ec..713cdaa884 100644 --- a/src/network/netdev/wireguard.c +++ b/src/network/netdev/wireguard.c @@ -219,6 +219,7 @@ static int wireguard_set_interface(NetDev *netdev) { _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *message = NULL; WireguardIPmask *mask_start = NULL; WireguardPeer *peer, *peer_start; + bool sent_once = false; uint32_t serial; Wireguard *w; int r; @@ -227,7 +228,7 @@ static int wireguard_set_interface(NetDev *netdev) { w = WIREGUARD(netdev); assert(w); - for (peer_start = w->peers; peer_start; ) { + for (peer_start = w->peers; peer_start || !sent_once; ) { uint16_t i = 0; message = sd_netlink_message_unref(message); @@ -278,6 +279,8 @@ static int wireguard_set_interface(NetDev *netdev) { r = sd_netlink_send(netdev->manager->genl, message, &serial); if (r < 0) return log_netdev_error_errno(netdev, r, "Could not set wireguard device: %m"); + + sent_once = true; } return 0; From da3509f0f5f68ae59cd403468746396617cd779b Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Mon, 1 Jun 2020 14:23:03 +0900 Subject: [PATCH 2/2] test-network: add test for wireguard without peers --- test/test-network/conf/25-wireguard-no-peer.netdev | 8 ++++++++ test/test-network/conf/25-wireguard-no-peer.network | 2 ++ test/test-network/systemd-networkd-tests.py | 13 +++++++++++-- 3 files changed, 21 insertions(+), 2 deletions(-) create mode 100644 test/test-network/conf/25-wireguard-no-peer.netdev create mode 100644 test/test-network/conf/25-wireguard-no-peer.network diff --git a/test/test-network/conf/25-wireguard-no-peer.netdev b/test/test-network/conf/25-wireguard-no-peer.netdev new file mode 100644 index 0000000000..13fd55d2fb --- /dev/null +++ b/test/test-network/conf/25-wireguard-no-peer.netdev @@ -0,0 +1,8 @@ +[NetDev] +Name=wg97 +Kind=wireguard + +[WireGuard] +PrivateKey=EEGlnEPYJV//kbvvIqxKkQwOiS+UENyPncC4bF46ong= +ListenPort=51821 +FwMark=1235 diff --git a/test/test-network/conf/25-wireguard-no-peer.network b/test/test-network/conf/25-wireguard-no-peer.network new file mode 100644 index 0000000000..5c29d643f5 --- /dev/null +++ b/test/test-network/conf/25-wireguard-no-peer.network @@ -0,0 +1,2 @@ +[Match] +Name=wg97 diff --git a/test/test-network/systemd-networkd-tests.py b/test/test-network/systemd-networkd-tests.py index 6dbc2b0c4f..78309d2651 100755 --- a/test/test-network/systemd-networkd-tests.py +++ b/test/test-network/systemd-networkd-tests.py @@ -746,6 +746,7 @@ class NetworkdNetDevTests(unittest.TestCase, Utilities): 'vtitun99', 'vxcan99', 'vxlan99', + 'wg97', 'wg98', 'wg99', ] @@ -832,6 +833,8 @@ class NetworkdNetDevTests(unittest.TestCase, Utilities): '25-vxlan.netdev', '25-wireguard-23-peers.netdev', '25-wireguard-23-peers.network', + '25-wireguard-no-peer.netdev', + '25-wireguard-no-peer.network', '25-wireguard-preshared-key.txt', '25-wireguard-private-key.txt', '25-wireguard.netdev', @@ -1115,9 +1118,10 @@ class NetworkdNetDevTests(unittest.TestCase, Utilities): def test_wireguard(self): copy_unit_to_networkd_unit_path('25-wireguard.netdev', '25-wireguard.network', '25-wireguard-23-peers.netdev', '25-wireguard-23-peers.network', - '25-wireguard-preshared-key.txt', '25-wireguard-private-key.txt') + '25-wireguard-preshared-key.txt', '25-wireguard-private-key.txt', + '25-wireguard-no-peer.netdev', '25-wireguard-no-peer.network') start_networkd() - self.wait_online(['wg99:carrier', 'wg98:routable']) + self.wait_online(['wg99:carrier', 'wg98:routable', 'wg97:carrier']) if shutil.which('wg'): call('wg') @@ -1142,6 +1146,11 @@ class NetworkdNetDevTests(unittest.TestCase, Utilities): output = check_output('wg show wg98 private-key') self.assertRegex(output, r'CJQUtcS9emY2fLYqDlpSZiE/QJyHkPWr\+WHtZLZ90FU=') + output = check_output('wg show wg97 listen-port') + self.assertRegex(output, '51821') + output = check_output('wg show wg97 fwmark') + self.assertRegex(output, '0x4d3') + def test_geneve(self): copy_unit_to_networkd_unit_path('25-geneve.netdev', 'netdev-link-local-addressing-yes.network') start_networkd()