systemd: split "nm-sd.h" out of "nm-sd-adapt.h"
authorThomas Haller <thaller@redhat.com>
Fri, 11 Mar 2016 09:25:40 +0000 (10:25 +0100)
committerThomas Haller <thaller@redhat.com>
Fri, 11 Mar 2016 10:02:12 +0000 (11:02 +0100)
Now we have:

"nm-sd.h" is a header file of NetworkManager with utilities
related to systemd. It can be used anywhere freely.

Also, systemd headers that are considered public API (like
"sd-event.h") can be used without restrictions.

When compiling the systemd sources, we always must include
"nm-sd-adapt.h" as first. Similarly, systemd headers must
not include "nm-sd-adapt.h", because they are either public
(in which case the adapter is not needed) or they are internal
(in which case they are themself included via a systemd source).

Sometimes, we must internal API (like "dhcp-lease-internal.h").
In this case, we also must include "nm-sd-adapt.h".

src/Makefile.am
src/devices/nm-lldp-listener.c
src/devices/tests/test-lldp.c
src/dhcp-manager/nm-dhcp-systemd.c
src/main.c
src/nm-iface-helper.c
src/systemd/nm-sd-adapt.c
src/systemd/nm-sd-adapt.h
src/systemd/nm-sd.c [new file with mode: 0644]
src/systemd/nm-sd.h [new file with mode: 0644]
src/tests/test-systemd.c

index f7f2e73..353a31d 100644 (file)
@@ -64,6 +64,8 @@ SYSTEMD_NM_CFLAGS_PATHS = \
        -I$(top_srcdir)/src/systemd
 
 libsystemd_nm_la_SOURCES = \
+       systemd/nm-sd.c \
+       systemd/nm-sd.h \
        systemd/nm-sd-adapt.c \
        systemd/nm-sd-adapt.h \
        systemd/src/basic/alloc-util.c \
index 39e7a40..fe53a17 100644 (file)
 
 #include "nm-default.h"
 
+#include "nm-lldp-listener.h"
+
 #include <net/ethernet.h>
 #include <errno.h>
 
-#include "sd-lldp.h"
-#include "lldp.h"
-#include "nm-lldp-listener.h"
 #include "nm-platform.h"
 #include "nm-utils.h"
 
+#include "sd-lldp.h"
+
+#include "nm-sd-adapt.h"
+#include "lldp.h"
+
 #define MAX_NEIGHBORS         4096
 #define MIN_UPDATE_INTERVAL   2
 
index 2af46ab..97c6ad5 100644 (file)
@@ -27,8 +27,9 @@
 #include <sys/types.h>
 
 #include "nm-lldp-listener.h"
-#include "nm-sd-adapt.h"
+#include "nm-sd.h"
 
+#include "nm-sd-adapt.h"
 #include "lldp.h"
 
 #include "test-common.h"
index 7b3575e..91fa880 100644 (file)
@@ -38,7 +38,6 @@
 #include "sd-dhcp-client.h"
 #include "sd-dhcp6-client.h"
 
-/* we use a private systemd header, thus need to include nm-sd-adapt.h. */
 #include "nm-sd-adapt.h"
 #include "dhcp-lease-internal.h"
 
index 9bbc299..bf00700 100644 (file)
@@ -35,9 +35,9 @@
 #include <string.h>
 #include <sys/resource.h>
 
+#include "main-utils.h"
 #include "nm-dbus-interface.h"
 #include "NetworkManagerUtils.h"
-#include "main-utils.h"
 #include "nm-manager.h"
 #include "nm-linux-platform.h"
 #include "nm-bus-manager.h"
@@ -50,7 +50,7 @@
 #include "nm-auth-manager.h"
 #include "nm-core-internal.h"
 #include "nm-exported-object.h"
-#include "nm-sd-adapt.h"
+#include "nm-sd.h"
 
 #if !defined(NM_DIST_VERSION)
 # define NM_DIST_VERSION VERSION
index 247b771..dab0ec5 100644 (file)
  * Forward declare if_nametoindex. */
 extern unsigned int if_nametoindex (const char *__ifname);
 
+#include "main-utils.h"
 #include "NetworkManagerUtils.h"
 #include "nm-linux-platform.h"
 #include "nm-dhcp-manager.h"
-#include "main-utils.h"
 #include "nm-rdisc.h"
 #include "nm-lndp-rdisc.h"
 #include "nm-utils.h"
 #include "nm-setting-ip6-config.h"
-#include "nm-sd-adapt.h"
+#include "nm-sd.h"
 
 #if !defined(NM_DIST_VERSION)
 # define NM_DIST_VERSION VERSION
index ec276dc..4e30827 100644 (file)
  * with this program; if not, write to the Free Software Foundation, Inc.,
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  *
- * Copyright (C) 2014 Red Hat, Inc.
+ * Copyright (C) 2014 - 2016 Red Hat, Inc.
  */
 
 #include "nm-default.h"
 
 #include "nm-sd-adapt.h"
 
-#include "sd-event.h"
 #include "fd-util.h"
 
 /*****************************************************************************/
@@ -31,115 +30,5 @@ asynchronous_close (int fd) {
        return -1;
 }
 
-/*****************************************************************************
- * Integrating sd_event into glib. Taken and adjusted from
- * https://www.freedesktop.org/software/systemd/man/sd_event_get_fd.html
- *****************************************************************************/
-
-typedef struct SDEventSource {
-       GSource source;
-       GPollFD pollfd;
-       sd_event *event;
-       guint *default_source_id;
-} SDEventSource;
-
-static gboolean
-event_prepare (GSource *source, gint *timeout_)
-{
-       return sd_event_prepare (((SDEventSource *) source)->event) > 0;
-}
-
-static gboolean
-event_check (GSource *source)
-{
-       return sd_event_wait (((SDEventSource *) source)->event, 0) > 0;
-}
-
-static gboolean
-event_dispatch (GSource *source, GSourceFunc callback, gpointer user_data)
-{
-       return sd_event_dispatch (((SDEventSource *)source)->event) > 0;
-}
-
-static void
-event_finalize (GSource *source)
-{
-       SDEventSource *s;
-
-       s = (SDEventSource *) source;
-       sd_event_unref (s->event);
-       if (s->default_source_id)
-               *s->default_source_id = 0;
-}
-
-static SDEventSource *
-event_create_source (sd_event *event, guint *default_source_id)
-{
-       static GSourceFuncs event_funcs = {
-               .prepare = event_prepare,
-               .check = event_check,
-               .dispatch = event_dispatch,
-               .finalize = event_finalize,
-       };
-       SDEventSource *source;
-
-       g_return_val_if_fail (event, NULL);
-
-       source = (SDEventSource *) g_source_new (&event_funcs, sizeof (SDEventSource));
-
-       source->event = sd_event_ref (event);
-       source->pollfd.fd = sd_event_get_fd (event);
-       source->pollfd.events = G_IO_IN | G_IO_HUP | G_IO_ERR;
-       source->default_source_id = default_source_id;
-
-       g_source_add_poll ((GSource *) source, &source->pollfd);
-
-       return source;
-}
-
-static guint
-event_attach (sd_event *event, GMainContext *context)
-{
-       SDEventSource *source;
-       guint id;
-       int r;
-       sd_event *e = event;
-       guint *p_default_source_id = NULL;
-
-       if (!e) {
-               static guint default_source_id = 0;
-
-               if (default_source_id) {
-                       /* The default event cannot be registered multiple times. */
-                       g_return_val_if_reached (0);
-               }
-
-               r = sd_event_default (&e);
-               if (r < 0)
-                       g_return_val_if_reached (0);
-
-               p_default_source_id = &default_source_id;
-       }
-
-       source = event_create_source (e, p_default_source_id);
-       id = g_source_attach ((GSource *) source, context);
-       g_source_unref ((GSource *) source);
-
-
-       if (!event) {
-               *p_default_source_id = id;
-               sd_event_unref (e);
-       }
-
-       g_return_val_if_fail (id, 0);
-       return id;
-}
-
-guint
-nm_sd_event_attach_default (void)
-{
-       return event_attach (NULL, NULL);
-}
-
 /*****************************************************************************/
 
index 1439aac..4fa0f5c 100644 (file)
@@ -26,8 +26,6 @@
 #include <sys/resource.h>
 #include <time.h>
 
-guint nm_sd_event_attach_default (void);
-
 #define noreturn G_GNUC_NORETURN
 
 #ifndef CLOCK_BOOTTIME
diff --git a/src/systemd/nm-sd.c b/src/systemd/nm-sd.c
new file mode 100644 (file)
index 0000000..4d59602
--- /dev/null
@@ -0,0 +1,136 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Copyright (C) 2014 - 2016 Red Hat, Inc.
+ */
+
+#include "nm-default.h"
+
+#include "nm-sd.h"
+
+#include "sd-event.h"
+
+/*****************************************************************************
+ * Integrating sd_event into glib. Taken and adjusted from
+ * https://www.freedesktop.org/software/systemd/man/sd_event_get_fd.html
+ *****************************************************************************/
+
+typedef struct SDEventSource {
+       GSource source;
+       GPollFD pollfd;
+       sd_event *event;
+       guint *default_source_id;
+} SDEventSource;
+
+static gboolean
+event_prepare (GSource *source, gint *timeout_)
+{
+       return sd_event_prepare (((SDEventSource *) source)->event) > 0;
+}
+
+static gboolean
+event_check (GSource *source)
+{
+       return sd_event_wait (((SDEventSource *) source)->event, 0) > 0;
+}
+
+static gboolean
+event_dispatch (GSource *source, GSourceFunc callback, gpointer user_data)
+{
+       return sd_event_dispatch (((SDEventSource *)source)->event) > 0;
+}
+
+static void
+event_finalize (GSource *source)
+{
+       SDEventSource *s;
+
+       s = (SDEventSource *) source;
+       sd_event_unref (s->event);
+       if (s->default_source_id)
+               *s->default_source_id = 0;
+}
+
+static SDEventSource *
+event_create_source (sd_event *event, guint *default_source_id)
+{
+       static GSourceFuncs event_funcs = {
+               .prepare = event_prepare,
+               .check = event_check,
+               .dispatch = event_dispatch,
+               .finalize = event_finalize,
+       };
+       SDEventSource *source;
+
+       g_return_val_if_fail (event, NULL);
+
+       source = (SDEventSource *) g_source_new (&event_funcs, sizeof (SDEventSource));
+
+       source->event = sd_event_ref (event);
+       source->pollfd.fd = sd_event_get_fd (event);
+       source->pollfd.events = G_IO_IN | G_IO_HUP | G_IO_ERR;
+       source->default_source_id = default_source_id;
+
+       g_source_add_poll ((GSource *) source, &source->pollfd);
+
+       return source;
+}
+
+static guint
+event_attach (sd_event *event, GMainContext *context)
+{
+       SDEventSource *source;
+       guint id;
+       int r;
+       sd_event *e = event;
+       guint *p_default_source_id = NULL;
+
+       if (!e) {
+               static guint default_source_id = 0;
+
+               if (default_source_id) {
+                       /* The default event cannot be registered multiple times. */
+                       g_return_val_if_reached (0);
+               }
+
+               r = sd_event_default (&e);
+               if (r < 0)
+                       g_return_val_if_reached (0);
+
+               p_default_source_id = &default_source_id;
+       }
+
+       source = event_create_source (e, p_default_source_id);
+       id = g_source_attach ((GSource *) source, context);
+       g_source_unref ((GSource *) source);
+
+
+       if (!event) {
+               *p_default_source_id = id;
+               sd_event_unref (e);
+       }
+
+       g_return_val_if_fail (id, 0);
+       return id;
+}
+
+guint
+nm_sd_event_attach_default (void)
+{
+       return event_attach (NULL, NULL);
+}
+
+/*****************************************************************************/
+
diff --git a/src/systemd/nm-sd.h b/src/systemd/nm-sd.h
new file mode 100644 (file)
index 0000000..888d44a
--- /dev/null
@@ -0,0 +1,25 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Copyright (C) 2014 - 2016 Red Hat, Inc.
+ */
+
+#ifndef __NM_SD_H__
+#define __NM_SD_H__
+
+guint nm_sd_event_attach_default (void);
+
+#endif /* __NM_SD_H__ */
+
index ceede91..936bff2 100644 (file)
 
 #include "nm-default.h"
 
+#include "nm-sd.h"
+
 #include "sd-dhcp-client.h"
 #include "sd-lldp.h"
 #include "sd-event.h"
-#include "nm-sd-adapt.h"
 
 #include "nm-test-utils.h"