/* 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); }