summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2021-05-04 16:10:54 +0200
committerThomas Haller <thaller@redhat.com>2021-05-05 14:45:51 +0200
commit25fc86dc16e4811930682433db0941abc634f31c (patch)
tree6854747df5ece96099e328ca390d01f2d96c0fe2
parentf9cea259952a0eef6999b34e5dc75e285a38c644 (diff)
downloadNetworkManager-th/firewall2.tar.gz
firewall: add NMFirewallManagerth/firewall2
This will abstract iptables, nft and firewalld.
-rw-r--r--Makefile.am2
-rw-r--r--src/core/meson.build1
-rw-r--r--src/core/nm-firewall-manager.c90
-rw-r--r--src/core/nm-firewall-manager.h24
4 files changed, 117 insertions, 0 deletions
diff --git a/Makefile.am b/Makefile.am
index 49a4db3ee2..96f38ce433 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -2567,6 +2567,8 @@ src_core_libNetworkManager_la_SOURCES = \
src/core/nm-dhcp-config.h \
src/core/nm-dispatcher.c \
src/core/nm-dispatcher.h \
+ src/core/nm-firewall-manager.c \
+ src/core/nm-firewall-manager.h \
src/core/nm-firewalld-manager.c \
src/core/nm-firewalld-manager.h \
src/core/nm-proxy-config.c \
diff --git a/src/core/meson.build b/src/core/meson.build
index 9758637235..0558f44897 100644
--- a/src/core/meson.build
+++ b/src/core/meson.build
@@ -162,6 +162,7 @@ libNetworkManager = static_library(
'nm-dcb.c',
'nm-dhcp-config.c',
'nm-dispatcher.c',
+ 'nm-firewall-manager.c',
'nm-firewalld-manager.c',
'nm-hostname-manager.c',
'nm-keep-alive.c',
diff --git a/src/core/nm-firewall-manager.c b/src/core/nm-firewall-manager.c
new file mode 100644
index 0000000000..c9f21dd92a
--- /dev/null
+++ b/src/core/nm-firewall-manager.c
@@ -0,0 +1,90 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+
+#include "src/core/nm-default-daemon.h"
+
+#include "nm-firewall-manager.h"
+
+#include "nm-core-utils.h"
+
+/*****************************************************************************/
+
+typedef struct {
+ int i;
+} NMFirewallManagerPrivate;
+
+struct _NMFirewallManager {
+ GObject parent;
+ NMFirewallManagerPrivate _priv;
+};
+
+struct _NMFirewallManagerClass {
+ GObjectClass parent;
+};
+
+G_DEFINE_TYPE(NMFirewallManager, nm_firewall_manager, G_TYPE_OBJECT);
+
+#define NM_FIREWALL_MANAGER_GET_PRIVATE(self) \
+ _NM_GET_PRIVATE(self, NMFirewallManager, NM_IS_FIREWALL_MANAGER)
+
+/*****************************************************************************/
+
+NM_DEFINE_SINGLETON_GETTER(NMFirewallManager, nm_firewall_manager_get, NM_TYPE_FIREWALL_MANAGER);
+
+/*****************************************************************************/
+
+#define _NMLOG_DOMAIN LOGD_FIREWALL
+#define _NMLOG_PREFIX_NAME "firewall"
+#define _NMLOG(level, ...) \
+ G_STMT_START \
+ { \
+ if (nm_logging_enabled((level), (_NMLOG_DOMAIN))) { \
+ char _prefix_name[30]; \
+ \
+ _nm_log((level), \
+ (_NMLOG_DOMAIN), \
+ 0, \
+ NULL, \
+ NULL, \
+ "%s: " _NM_UTILS_MACRO_FIRST(__VA_ARGS__), \
+ (((self) != singleton_instance) ? ({ \
+ g_snprintf(_prefix_name, \
+ sizeof(_prefix_name), \
+ "%s[" NM_HASH_OBFUSCATE_PTR_FMT "]", \
+ ""_NMLOG_PREFIX_NAME, \
+ NM_HASH_OBFUSCATE_PTR(self)); \
+ _prefix_name; \
+ }) \
+ : _NMLOG_PREFIX_NAME) \
+ _NM_UTILS_MACRO_REST(__VA_ARGS__)); \
+ } \
+ } \
+ G_STMT_END
+
+/*****************************************************************************/
+
+static void
+nm_firewall_manager_init(NMFirewallManager *self)
+{
+ NMFirewallManagerPrivate *priv = NM_FIREWALL_MANAGER_GET_PRIVATE(self);
+
+ (void) priv; //XXX
+}
+
+static void
+dispose(GObject *object)
+{
+ NMFirewallManager * self = NM_FIREWALL_MANAGER(object);
+ NMFirewallManagerPrivate *priv = NM_FIREWALL_MANAGER_GET_PRIVATE(self);
+
+ (void) priv; //XXX
+
+ G_OBJECT_CLASS(nm_firewall_manager_parent_class)->dispose(object);
+}
+
+static void
+nm_firewall_manager_class_init(NMFirewallManagerClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS(klass);
+
+ object_class->dispose = dispose;
+}
diff --git a/src/core/nm-firewall-manager.h b/src/core/nm-firewall-manager.h
new file mode 100644
index 0000000000..e98d0cc1ce
--- /dev/null
+++ b/src/core/nm-firewall-manager.h
@@ -0,0 +1,24 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+
+#ifndef __NM_FIREWALL_MANAGER_H__
+#define __NM_FIREWALL_MANAGER_H__
+
+#define NM_TYPE_FIREWALL_MANAGER (nm_firewall_manager_get_type())
+#define NM_FIREWALL_MANAGER(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST((obj), NM_TYPE_FIREWALL_MANAGER, NMFirewallManager))
+#define NM_FIREWALL_MANAGER_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST((klass), NM_TYPE_FIREWALL_MANAGER, NMFirewallManagerClass))
+#define NM_IS_FIREWALL_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), NM_TYPE_FIREWALL_MANAGER))
+#define NM_IS_FIREWALL_MANAGER_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_TYPE((klass), NM_TYPE_FIREWALL_MANAGER))
+#define NM_FIREWALL_MANAGER_GET_CLASS(obj) \
+ (G_TYPE_INSTANCE_GET_CLASS((obj), NM_TYPE_FIREWALL_MANAGER, NMFirewallManagerClass))
+
+typedef struct _NMFirewallManager NMFirewallManager;
+typedef struct _NMFirewallManagerClass NMFirewallManagerClass;
+
+GType nm_firewall_manager_get_type(void);
+
+NMFirewallManager *nm_firewall_manager_get(void);
+
+#endif /* __NM_FIREWALL_MANAGER_H__ */