core: add NMIPConfig as base class for NMIP[46]Config

NMIP[46]Config will become much simpler than it is today.
It's sole responsibility will be to expose current settings
on D-Bus, in it's function as a NMDBusObject subtype.

However, it still make sense to let them share a common base class.
Add it.
This commit is contained in:
Thomas Haller 2020-07-29 19:30:22 +02:00
parent adec7bd887
commit c9409f8692
No known key found for this signature in database
GPG key ID: 29C2366E4DFC5728
8 changed files with 213 additions and 24 deletions

View file

@ -2120,6 +2120,14 @@ src_libNetworkManagerBase_la_SOURCES = \
src/nm-dbus-utils.h \
src/nm-dbus-object.c \
src/nm-dbus-object.h \
src/nm-netns.c \
src/nm-netns.h \
src/nm-l3-config-data.c \
src/nm-l3-config-data.h \
src/nm-l3cfg.c \
src/nm-l3cfg.h \
src/nm-ip-config.c \
src/nm-ip-config.h \
src/nm-ip4-config.c \
src/nm-ip4-config.h \
src/nm-ip6-config.c \
@ -2170,11 +2178,6 @@ src_libNetworkManager_la_SOURCES = \
src/nm-checkpoint-manager.c \
src/nm-checkpoint-manager.h \
\
src/nm-l3-config-data.c \
src/nm-l3-config-data.h \
src/nm-l3cfg.c \
src/nm-l3cfg.h \
\
src/devices/nm-acd-manager.c \
src/devices/nm-acd-manager.h \
src/devices/nm-lldp-listener.c \
@ -2315,8 +2318,6 @@ src_libNetworkManager_la_SOURCES = \
src/nm-connectivity.h \
src/nm-dcb.c \
src/nm-dcb.h \
src/nm-netns.c \
src/nm-netns.h \
src/nm-dhcp-config.c \
src/nm-dhcp-config.h \
src/nm-dispatcher.c \

View file

@ -43,6 +43,10 @@ sources = files(
'nm-core-utils.c',
'nm-dbus-object.c',
'nm-dbus-utils.c',
'nm-netns.c',
'nm-l3-config-data.c',
'nm-l3cfg.c',
'nm-ip-config.c',
'nm-ip4-config.c',
'nm-ip6-config.c',
'nm-logging.c',
@ -131,8 +135,6 @@ sources = files(
'nm-auth-manager.c',
'nm-auth-utils.c',
'nm-dbus-manager.c',
'nm-l3-config-data.c',
'nm-l3cfg.c',
'nm-checkpoint.c',
'nm-checkpoint-manager.c',
'nm-config.c',
@ -145,7 +147,6 @@ sources = files(
'nm-hostname-manager.c',
'nm-keep-alive.c',
'nm-manager.c',
'nm-netns.c',
'nm-pacrunner-manager.c',
'nm-policy.c',
'nm-proxy-config.c',

135
src/nm-ip-config.c Normal file
View file

@ -0,0 +1,135 @@
// SPDX-License-Identifier: GPL-2.0+
/*
* Copyright (C) 2005 - 2017 Red Hat, Inc.
* Copyright (C) 2006 - 2008 Novell, Inc.
*/
#include "nm-default.h"
#include "nm-ip-config.h"
#include "nm-l3cfg.h"
/*****************************************************************************/
NM_GOBJECT_PROPERTIES_DEFINE (NMIPConfig,
PROP_L3CFG,
PROP_IS_VPN,
);
typedef struct _NMIPConfigPrivate {
NML3Cfg *l3cfg;
bool is_vpn:1;
} NMIPConfigPrivate;
G_DEFINE_ABSTRACT_TYPE (NMIPConfig, nm_ip_config, NM_TYPE_DBUS_OBJECT)
#define NM_IP_CONFIG_GET_PRIVATE(self) _NM_GET_PRIVATE_PTR(self, NMIPConfig, NM_IS_IP_CONFIG)
/*****************************************************************************/
static void
get_property (GObject *object,
guint prop_id,
GValue *value,
GParamSpec *pspec)
{
NMIPConfig *self = NM_IP_CONFIG (object);
NMIPConfigPrivate *priv = NM_IP_CONFIG_GET_PRIVATE (self);
(void) priv;
switch (prop_id) {
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
static void
set_property (GObject *object,
guint prop_id,
const GValue *value,
GParamSpec *pspec)
{
NMIPConfig *self = NM_IP_CONFIG (object);
NMIPConfigPrivate *priv = NM_IP_CONFIG_GET_PRIVATE (self);
switch (prop_id) {
case PROP_L3CFG:
/* construct-only */
priv->l3cfg = nm_g_object_ref (g_value_get_pointer (value));
nm_assert (!priv->l3cfg || NM_IS_L3CFG (priv->l3cfg));
break;
case PROP_IS_VPN:
/* construct-only */
priv->is_vpn = g_value_get_boolean (value);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
/*****************************************************************************/
static void
nm_ip_config_init (NMIPConfig *self)
{
NMIPConfigPrivate *priv;
priv = G_TYPE_INSTANCE_GET_PRIVATE (self, NM_TYPE_IP_CONFIG, NMIPConfigPrivate);
self->_priv = priv;
}
NMIPConfig *
nm_ip_config_new (int addr_family,
NML3Cfg *l3cfg,
gboolean is_vpn)
{
nm_assert_addr_family (addr_family);
nm_assert (NM_L3CFG (l3cfg));
return g_object_new ( NM_IS_IPv4 (addr_family)
? nm_ip4_config_get_type ()
: nm_ip6_config_get_type (),
NM_IP_CONFIG_L3CFG, l3cfg,
NM_IP_CONFIG_IS_VPN, is_vpn,
NULL);
}
static void
finalize (GObject *object)
{
NMIPConfig *self = NM_IP_CONFIG (object);
NMIPConfigPrivate *priv = NM_IP_CONFIG_GET_PRIVATE (self);
nm_g_object_unref (priv->l3cfg);
G_OBJECT_CLASS (nm_ip_config_parent_class)->finalize (object);
}
static void
nm_ip_config_class_init (NMIPConfigClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
g_type_class_add_private (object_class, sizeof (NMIPConfigPrivate));
object_class->get_property = get_property;
object_class->set_property = set_property;
object_class->finalize = finalize;
obj_properties[PROP_L3CFG] =
g_param_spec_pointer (NM_IP_CONFIG_L3CFG, "", "",
G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS);
obj_properties[PROP_IS_VPN] =
g_param_spec_boolean (NM_IP_CONFIG_IS_VPN, "", "",
FALSE,
G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS);
g_object_class_install_properties (object_class, _PROPERTY_ENUMS_LAST, obj_properties);
}

44
src/nm-ip-config.h Normal file
View file

@ -0,0 +1,44 @@
// SPDX-License-Identifier: GPL-2.0+
/*
* Copyright (C) 2008 - 2013 Red Hat, Inc.
*/
#ifndef __NM_IP_CONFIG_H__
#define __NM_IP_CONFIG_H__
#include "nm-dbus-object.h"
/*****************************************************************************/
#define NM_TYPE_IP_CONFIG (nm_ip_config_get_type ())
#define NM_IP_CONFIG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_IP_CONFIG, NMIPConfig))
#define NM_IP_CONFIG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_IP_CONFIG, NMIPConfigClass))
#define NM_IS_IP_CONFIG(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_IP_CONFIG))
#define NM_IS_IP_CONFIG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_IP_CONFIG))
#define NM_IP_CONFIG_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_IP_CONFIG, NMIPConfigClass))
#define NM_IP_CONFIG_L3CFG "l3cfg"
#define NM_IP_CONFIG_IS_VPN "is-vpn"
struct _NMIPConfigPrivate;
struct _NMIPConfig {
NMDBusObject parent;
struct _NMIPConfigPrivate *_priv;
};
typedef struct {
NMDBusObjectClass parent;
gboolean is_ipv4;
int addr_family;
} NMIPConfigClass;
GType nm_ip_config_get_type (void);
GType nm_ip4_config_get_type (void);
GType nm_ip6_config_get_type (void);
NMIPConfig *nm_ip_config_new (int addr_family,
NML3Cfg *l3cfg,
gboolean is_vpn);
#endif /* __NM_IP_CONFIG_H__ */

View file

@ -307,15 +307,15 @@ typedef struct {
} NMIP4ConfigPrivate;
struct _NMIP4Config {
NMDBusObject parent;
NMIPConfig parent;
NMIP4ConfigPrivate _priv;
};
struct _NMIP4ConfigClass {
NMDBusObjectClass parent;
NMIPConfigClass parent;
};
G_DEFINE_TYPE (NMIP4Config, nm_ip4_config, NM_TYPE_DBUS_OBJECT)
G_DEFINE_TYPE (NMIP4Config, nm_ip4_config, NM_TYPE_IP_CONFIG)
#define NM_IP4_CONFIG_GET_PRIVATE(self) _NM_GET_PRIVATE(self, NMIP4Config, NM_IS_IP4_CONFIG)
@ -3172,10 +3172,14 @@ static const NMDBusInterfaceInfoExtended interface_info_ip4_config = {
};
static void
nm_ip4_config_class_init (NMIP4ConfigClass *config_class)
nm_ip4_config_class_init (NMIP4ConfigClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (config_class);
NMDBusObjectClass *dbus_object_class = NM_DBUS_OBJECT_CLASS (config_class);
GObjectClass *object_class = G_OBJECT_CLASS (klass);
NMDBusObjectClass *dbus_object_class = NM_DBUS_OBJECT_CLASS (klass);
NMIPConfigClass *ip_config_class = NM_IP_CONFIG_CLASS (klass);
ip_config_class->is_ipv4 = TRUE;
ip_config_class->addr_family = AF_INET;
dbus_object_class->export_path = NM_DBUS_EXPORT_PATH_NUMBERED (NM_DBUS_PATH"/IP4Config");
dbus_object_class->interface_infos = NM_DBUS_INTERFACE_INFOS (&interface_info_ip4_config);

View file

@ -12,6 +12,7 @@
#include "nm-glib-aux/nm-dedup-multi.h"
#include "platform/nmp-object.h"
#include "nm-ip-config.h"
/*****************************************************************************/
@ -273,8 +274,6 @@ NM_IS_IP_CONFIG_ADDR_FAMILY (gconstpointer config, int addr_family)
g_return_val_if_reached (FALSE);
}
#define NM_IS_IP_CONFIG(config) NM_IS_IP_CONFIG_ADDR_FAMILY ((config), AF_UNSPEC)
#if _NM_CC_SUPPORT_GENERIC
/* _NM_IS_IP_CONFIG() is a bit unusual. If _Generic() is supported,
* it checks whether @config is either NM_IS_IP4_CONFIG() or NM_IS_IP6_CONFIG(),

View file

@ -67,15 +67,15 @@ typedef struct {
} NMIP6ConfigPrivate;
struct _NMIP6Config {
NMDBusObject parent;
NMIPConfig parent;
NMIP6ConfigPrivate _priv;
};
struct _NMIP6ConfigClass {
NMDBusObjectClass parent;
NMIPConfigClass parent;
};
G_DEFINE_TYPE (NMIP6Config, nm_ip6_config, NM_TYPE_DBUS_OBJECT)
G_DEFINE_TYPE (NMIP6Config, nm_ip6_config, NM_TYPE_IP_CONFIG)
#define NM_IP6_CONFIG_GET_PRIVATE(self) _NM_GET_PRIVATE(self, NMIP6Config, NM_IS_IP6_CONFIG)
@ -2655,10 +2655,14 @@ static const NMDBusInterfaceInfoExtended interface_info_ip6_config = {
};
static void
nm_ip6_config_class_init (NMIP6ConfigClass *config_class)
nm_ip6_config_class_init (NMIP6ConfigClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (config_class);
NMDBusObjectClass *dbus_object_class = NM_DBUS_OBJECT_CLASS (config_class);
GObjectClass *object_class = G_OBJECT_CLASS (klass);
NMDBusObjectClass *dbus_object_class = NM_DBUS_OBJECT_CLASS (klass);
NMIPConfigClass *ip_config_class = NM_IP_CONFIG_CLASS (klass);
ip_config_class->is_ipv4 = FALSE;
ip_config_class->addr_family = AF_INET6;
dbus_object_class->export_path = NM_DBUS_EXPORT_PATH_NUMBERED (NM_DBUS_PATH"/IP6Config");
dbus_object_class->interface_infos = NM_DBUS_INTERFACE_INFOS (&interface_info_ip6_config);

View file

@ -12,6 +12,7 @@
#include "nm-glib-aux/nm-dedup-multi.h"
#include "platform/nmp-object.h"
#include "nm-ip-config.h"
/*****************************************************************************/