blob: 6302127c4e309986af11a6baf357e4144c35d5b5 [file] [log] [blame]
From 210ae903e7f5e4813feaea9bbac1f03fa3be42cc Mon Sep 17 00:00:00 2001
From: Tomas Pecka <peckato1@users.noreply.github.com>
Date: Tue, 24 Aug 2021 14:59:40 +0200
Subject: [PATCH 2/9] network: Add varlink server
Add a varlink server. In the next commits, we will implement a method
that queries the LLDP neighbors.
---
src/network/meson.build | 2 ++
src/network/networkd-manager.c | 7 +++++++
src/network/networkd-manager.h | 3 +++
src/network/networkd-varlink.c | 34 ++++++++++++++++++++++++++++++++++
src/network/networkd-varlink.h | 7 +++++++
5 files changed, 53 insertions(+)
create mode 100644 src/network/networkd-varlink.c
create mode 100644 src/network/networkd-varlink.h
diff --git a/src/network/meson.build b/src/network/meson.build
index 48d185195c..d93e815fdf 100644
--- a/src/network/meson.build
+++ b/src/network/meson.build
@@ -137,6 +137,8 @@ sources = files(
'networkd-sysctl.h',
'networkd-util.c',
'networkd-util.h',
+ 'networkd-varlink.c',
+ 'networkd-varlink.h',
'networkd-wifi.c',
'networkd-wifi.h',
'tc/cake.c',
diff --git a/src/network/networkd-manager.c b/src/network/networkd-manager.c
index 9d790224cc..5e4c5e38b4 100644
--- a/src/network/networkd-manager.c
+++ b/src/network/networkd-manager.c
@@ -41,6 +41,7 @@
#include "networkd-routing-policy-rule.h"
#include "networkd-speed-meter.h"
#include "networkd-state-file.h"
+#include "networkd-varlink.h"
#include "networkd-wifi.h"
#include "ordered-set.h"
#include "path-lookup.h"
@@ -544,6 +545,8 @@ Manager* manager_free(Manager *m) {
m->fw_ctx = fw_ctx_free(m->fw_ctx);
+ manager_varlink_done(m);
+
return mfree(m);
}
@@ -553,6 +556,10 @@ int manager_start(Manager *m) {
assert(m);
+ r = manager_varlink_init(m);
+ if (r < 0)
+ return r;
+
r = manager_start_speed_meter(m);
if (r < 0)
return log_error_errno(r, "Failed to initialize speed meter: %m");
diff --git a/src/network/networkd-manager.h b/src/network/networkd-manager.h
index 36313589a3..a0c0336ce5 100644
--- a/src/network/networkd-manager.h
+++ b/src/network/networkd-manager.h
@@ -16,6 +16,7 @@
#include "ordered-set.h"
#include "set.h"
#include "time-util.h"
+#include "varlink.h"
struct Manager {
sd_netlink *rtnl;
@@ -95,6 +96,8 @@ struct Manager {
FirewallContext *fw_ctx;
OrderedSet *request_queue;
+
+ VarlinkServer *varlink_server;
};
int manager_new(Manager **ret, bool test_mode);
diff --git a/src/network/networkd-varlink.c b/src/network/networkd-varlink.c
new file mode 100644
index 0000000000..57d8acb967
--- /dev/null
+++ b/src/network/networkd-varlink.c
@@ -0,0 +1,34 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "networkd-varlink.h"
+
+int manager_varlink_init(Manager *m) {
+ _cleanup_(varlink_server_unrefp) VarlinkServer *s = NULL;
+ int r;
+
+ assert(m);
+
+ if (m->varlink_server)
+ return 0;
+
+ r = varlink_server_new(&s, VARLINK_SERVER_ACCOUNT_UID);
+ if (r < 0)
+ return log_error_errno(r, "Failed to allocate varlink server object: %m");
+
+ r = varlink_server_listen_address(s, "/run/systemd/netif/io.systemd.Network", 0666);
+ if (r < 0)
+ return log_error_errno(r, "Failed to bind to varlink socket: %m");
+
+ r = varlink_server_attach_event(s, m->event, SD_EVENT_PRIORITY_NORMAL);
+ if (r < 0)
+ return log_error_errno(r, "Failed to attach varlink connection to event loop: %m");
+
+ m->varlink_server = TAKE_PTR(s);
+ return 0;
+}
+
+void manager_varlink_done(Manager *m) {
+ assert(m);
+
+ m->varlink_server = varlink_server_unref(m->varlink_server);
+}
diff --git a/src/network/networkd-varlink.h b/src/network/networkd-varlink.h
new file mode 100644
index 0000000000..657e054a51
--- /dev/null
+++ b/src/network/networkd-varlink.h
@@ -0,0 +1,7 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include "networkd-manager.h"
+
+int manager_varlink_init(Manager *m);
+void manager_varlink_done(Manager *m);
--
2.35.1