[libvirt] [PATCH v4 23/42] interface: introduce virtinterfaced daemon

Daniel P. Berrangé berrange at redhat.com
Thu Aug 8 15:10:25 UTC 2019


The virtinterfaced daemon will be responsible for providing the interface API
driver functionality. The interface driver is still loaded by the main
libvirtd daemon at this stage, so virtinterfaced must not be running at
the same time.

Reviewed-by: Christophe de Dinechin <dinechin at redhat.com>
Reviewed-by: Andrea Bolognani <abologna at redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange at redhat.com>
---
 .gitignore                              |  4 ++
 libvirt.spec.in                         |  8 ++++
 src/interface/Makefile.inc.am           | 63 +++++++++++++++++++++++++
 src/interface/virtinterfaced.service.in | 24 ++++++++++
 4 files changed, 99 insertions(+)
 create mode 100644 src/interface/virtinterfaced.service.in

diff --git a/.gitignore b/.gitignore
index 60713f6a5f..02d657d54f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -120,6 +120,9 @@
 /src/admin/admin_server_dispatch_stubs.h
 /src/esx/*.generated.*
 /src/hyperv/*.generated.*
+/src/interface/test_virtinterfaced.aug
+/src/interface/virtinterfaced.aug
+/src/interface/virtinterfaced.conf
 /src/libvirt*.def
 /src/libvirt.syms
 /src/libvirt_access.syms
@@ -176,6 +179,7 @@
 /src/util/virkeycodetable*.h
 /src/util/virkeynametable*.h
 /src/virt-aa-helper
+/src/virtinterfaced
 /src/virtlockd
 /src/virtlogd
 /src/virtnetworkd
diff --git a/libvirt.spec.in b/libvirt.spec.in
index 5c936d9de4..1458c4708d 100644
--- a/libvirt.spec.in
+++ b/libvirt.spec.in
@@ -1609,6 +1609,14 @@ exit 0
 %ghost %{_sysconfdir}/libvirt/nwfilter/*.xml
 
 %files daemon-driver-interface
+%config(noreplace) %{_sysconfdir}/libvirt/virtinterfaced.conf
+%{_datadir}/augeas/lenses/virtinterfaced.aug
+%{_datadir}/augeas/lenses/tests/test_virtinterfaced.aug
+%{_unitdir}/virtinterfaced.service
+%{_unitdir}/virtinterfaced.socket
+%{_unitdir}/virtinterfaced-ro.socket
+%{_unitdir}/virtinterfaced-admin.socket
+%attr(0755, root, root) %{_sbindir}/virtinterfaced
 %{_libdir}/%{name}/connection-driver/libvirt_driver_interface.so
 
 %files daemon-driver-network
diff --git a/src/interface/Makefile.inc.am b/src/interface/Makefile.inc.am
index 339a92786b..a88df0bd11 100644
--- a/src/interface/Makefile.inc.am
+++ b/src/interface/Makefile.inc.am
@@ -41,4 +41,67 @@ libvirt_driver_interface_la_LIBADD += $(UDEV_LIBS)
 libvirt_driver_interface_la_SOURCES += $(INTERFACE_DRIVER_UDEV_SOURCES)
 endif WITH_UDEV
 libvirt_driver_interface_la_LIBADD += ../gnulib/lib/libgnu.la
+
+sbin_PROGRAMS += virtinterfaced
+
+nodist_conf_DATA += interface/virtinterfaced.conf
+augeas_DATA += interface/virtinterfaced.aug
+augeastest_DATA += interface/test_virtinterfaced.aug
+CLEANFILES += interface/virtinterfaced.aug
+
+virtinterfaced_SOURCES = $(REMOTE_DAEMON_SOURCES)
+virtinterfaced_CFLAGS = \
+       $(REMOTE_DAEMON_CFLAGS) \
+       -DDAEMON_NAME="\"virtinterfaced\"" \
+       -DMODULE_NAME="\"interface\"" \
+       $(NULL)
+virtinterfaced_LDFLAGS = $(REMOTE_DAEMON_LD_FLAGS)
+virtinterfaced_LDADD = $(REMOTE_DAEMON_LD_ADD)
+
+SYSTEMD_UNIT_FILES += \
+	virtinterfaced.service \
+	virtinterfaced.socket \
+	virtinterfaced-ro.socket \
+	virtinterfaced-admin.socket \
+	$(NULL)
+SYSTEMD_UNIT_FILES_IN += \
+	interface/virtinterfaced.service.in \
+	$(NULL)
+
+VIRTINTERFACED_UNIT_VARS = \
+	$(VIRTD_UNIT_VARS) \
+	-e 's|[@]name[@]|Libvirt interface|g' \
+	-e 's|[@]service[@]|virtinterfaced|g' \
+	-e 's|[@]sockprefix[@]|virtinterfaced|g' \
+	$(NULL)
+
+virtinterfaced.service: interface/virtinterfaced.service.in $(top_builddir)/config.status
+	$(AM_V_GEN)$(SED) $(VIRTINTERFACED_UNIT_VARS) $< > $@-t && mv $@-t $@
+
+virtinterface%.socket: remote/libvirt%.socket.in $(top_builddir)/config.status
+	$(AM_V_GEN)$(SED) $(VIRTINTERFACED_UNIT_VARS) $< > $@-t && mv $@-t $@
+
+interface/virtinterfaced.conf: remote/libvirtd.conf.in
+	$(AM_V_GEN)$(SED) \
+		-e '/[@]CUT_ENABLE_IP[@]/,/[@]END[@]/d' \
+		-e 's/[@]DAEMON_NAME[@]/virtinterfaced/' \
+		$< > $@
+
+interface/virtinterfaced.aug: remote/libvirtd.aug.in
+	$(AM_V_GEN)$(SED) \
+		-e '/[@]CUT_ENABLE_IP[@]/,/[@]END[@]/d' \
+		-e 's/[@]DAEMON_NAME[@]/virtinterfaced/' \
+		-e 's/[@]DAEMON_NAME_UC[@]/Virtinterfaced/' \
+		$< > $@
+
+interface/test_virtinterfaced.aug: remote/test_libvirtd.aug.in \
+		interface/virtinterfaced.conf $(AUG_GENTEST)
+	$(AM_V_GEN)$(AUG_GENTEST) interface/virtinterfaced.conf \
+		$(srcdir)/remote/test_libvirtd.aug.in | \
+		$(SED) \
+		-e '/[@]CUT_ENABLE_IP[@]/,/[@]END[@]/d' \
+		-e 's/[@]DAEMON_NAME[@]/virtinterfaced/' \
+		-e 's/[@]DAEMON_NAME_UC[@]/Virtinterfaced/' \
+		> $@ || rm -f $@
+
 endif WITH_INTERFACE
diff --git a/src/interface/virtinterfaced.service.in b/src/interface/virtinterfaced.service.in
new file mode 100644
index 0000000000..ff3a611d16
--- /dev/null
+++ b/src/interface/virtinterfaced.service.in
@@ -0,0 +1,24 @@
+[Unit]
+Description=Virtualization interface daemon
+Conflicts=libvirtd.service
+Requires=virtinterfaced.socket
+Requires=virtinterfaced-ro.socket
+Requires=virtinterfaced-admin.socket
+After=network.target
+After=dbus.service
+After=apparmor.service
+After=local-fs.target
+Documentation=man:libvirtd(8)
+Documentation=https://libvirt.org
+
+[Service]
+Type=notify
+ExecStart=@sbindir@/virtinterfaced --timeout 120
+ExecReload=/bin/kill -HUP $MAINPID
+Restart=on-failure
+
+[Install]
+WantedBy=multi-user.target
+Also=virtinterfaced.socket
+Also=virtinterfaced-ro.socket
+Also=virtinterfaced-admin.socket
-- 
2.21.0




More information about the libvir-list mailing list