Commit ca18b2d4 authored by Dan Winship's avatar Dan Winship

libnm: create NMDhcpConfig as parent of NMDhcp4Config and NMDhcp6Config

As with NMIP4Config and NMIP6Config, merge the two DHCP config classes
into one in the public API.
parent d34910b1
......@@ -251,7 +251,7 @@ print_ip6_config (NMIPConfig *cfg6,
}
gboolean
print_dhcp4_config (NMDhcp4Config *dhcp4,
print_dhcp4_config (NMDhcpConfig *dhcp4,
NmCli *nmc,
const char *group_prefix,
const char *one_field)
......@@ -263,7 +263,7 @@ print_dhcp4_config (NMDhcp4Config *dhcp4,
if (dhcp4 == NULL)
return FALSE;
table = nm_dhcp4_config_get_options (dhcp4);
table = nm_dhcp_config_get_options (dhcp4);
if (table) {
GHashTableIter table_iter;
gpointer key, value;
......@@ -299,7 +299,7 @@ print_dhcp4_config (NMDhcp4Config *dhcp4,
}
gboolean
print_dhcp6_config (NMDhcp6Config *dhcp6,
print_dhcp6_config (NMDhcpConfig *dhcp6,
NmCli *nmc,
const char *group_prefix,
const char *one_field)
......@@ -311,7 +311,7 @@ print_dhcp6_config (NMDhcp6Config *dhcp6,
if (dhcp6 == NULL)
return FALSE;
table = nm_dhcp6_config_get_options (dhcp6);
table = nm_dhcp_config_get_options (dhcp6);
if (table) {
GHashTableIter table_iter;
gpointer key, value;
......
......@@ -26,8 +26,8 @@
gboolean print_ip4_config (NMIPConfig *cfg4, NmCli *nmc, const char *group_prefix, const char *one_field);
gboolean print_ip6_config (NMIPConfig *cfg6, NmCli *nmc, const char *group_prefix, const char *one_field);
gboolean print_dhcp4_config (NMDhcp4Config *dhcp4, NmCli *nmc, const char *group_prefix, const char *one_field);
gboolean print_dhcp6_config (NMDhcp6Config *dhcp6, NmCli *nmc, const char *group_prefix, const char *one_field);
gboolean print_dhcp4_config (NMDhcpConfig *dhcp4, NmCli *nmc, const char *group_prefix, const char *one_field);
gboolean print_dhcp6_config (NMDhcpConfig *dhcp6, NmCli *nmc, const char *group_prefix, const char *one_field);
NMIPAddress *nmc_parse_and_build_address (int family, const char *ip_str, GError **error);
NMIPRoute *nmc_parse_and_build_route (int family, const char *first, const char *second, const char *third, GError **error);
......
......@@ -1137,7 +1137,7 @@ nmc_active_connection_details (NMActiveConnection *acon, NmCli *nmc)
/* DHCP4 */
if (strcasecmp (nmc_fields_con_active_details_groups[group_idx].name, nmc_fields_con_active_details_groups[2].name) == 0) {
gboolean b1 = FALSE;
NMDhcp4Config *dhcp4 = nm_active_connection_get_dhcp4_config (acon);
NMDhcpConfig *dhcp4 = nm_active_connection_get_dhcp4_config (acon);
b1 = print_dhcp4_config (dhcp4, nmc, "DHCP4", group_fld);
was_output = was_output || b1;
......@@ -1155,7 +1155,7 @@ nmc_active_connection_details (NMActiveConnection *acon, NmCli *nmc)
/* DHCP6 */
if (strcasecmp (nmc_fields_con_active_details_groups[group_idx].name, nmc_fields_con_active_details_groups[4].name) == 0) {
gboolean b1 = FALSE;
NMDhcp6Config *dhcp6 = nm_active_connection_get_dhcp6_config (acon);
NMDhcpConfig *dhcp6 = nm_active_connection_get_dhcp6_config (acon);
b1 = print_dhcp6_config (dhcp6, nmc, "DHCP6", group_fld);
was_output = was_output || b1;
......
......@@ -768,8 +768,7 @@ show_device_info (NMDevice *device, NmCli *nmc)
size_t tmpl_len;
gboolean was_output = FALSE;
NMIPConfig *cfg4, *cfg6;
NMDhcp4Config *dhcp4;
NMDhcp6Config *dhcp6;
NMDhcpConfig *dhcp4, *dhcp6;
const char *base_hdr = _("Device details");
GPtrArray *fields_in_section = NULL;
......
......@@ -34,6 +34,8 @@ IGNORE_HFILES= \
nm-dbus-helpers-private.h \
nm-core-internal.h \
nm-device-private.h \
nm-dhcp4-config.h \
nm-dhcp6-config.h \
nm-ip4-config.h \
nm-ip6-config.h \
nm-manager.h \
......
......@@ -129,8 +129,7 @@
<xi:include href="xml/nm-access-point.xml"/>
<xi:include href="xml/nm-wimax-nsp.xml"/>
<xi:include href="xml/nm-ip-config.xml"/>
<xi:include href="xml/nm-dhcp4-config.xml"/>
<xi:include href="xml/nm-dhcp6-config.xml"/>
<xi:include href="xml/nm-dhcp-config.xml"/>
</chapter>
<chapter>
......
......@@ -43,8 +43,7 @@ libnminclude_hfiles = \
nm-device-wifi.h \
nm-device-wimax.h \
nm-device.h \
nm-dhcp4-config.h \
nm-dhcp6-config.h \
nm-dhcp-config.h \
nm-enum-types.h \
nm-ip-config.h \
nm-object.h \
......@@ -65,6 +64,8 @@ libnminclude_HEADERS = \
libnm_la_private_headers = \
nm-dbus-helpers.h \
nm-device-private.h \
nm-dhcp4-config.h \
nm-dhcp6-config.h \
nm-ip4-config.h \
nm-ip6-config.h \
nm-manager.h \
......@@ -92,6 +93,7 @@ libnm_la_csources = \
nm-device-wifi.c \
nm-device-wimax.c \
nm-device.c \
nm-dhcp-config.c \
nm-dhcp4-config.c \
nm-dhcp6-config.c \
nm-enum-types.c \
......
......@@ -43,8 +43,7 @@
#include <nm-device-wifi.h>
#include <nm-device-wimax.h>
#include <nm-device.h>
#include <nm-dhcp4-config.h>
#include <nm-dhcp6-config.h>
#include <nm-dhcp-config.h>
#include <nm-enum-types.h>
#include <nm-ip-config.h>
#include <nm-object.h>
......
......@@ -262,12 +262,10 @@ global:
nm_device_wimax_get_rssi;
nm_device_wimax_get_tx_power;
nm_device_wimax_get_type;
nm_dhcp4_config_get_one_option;
nm_dhcp4_config_get_options;
nm_dhcp4_config_get_type;
nm_dhcp6_config_get_one_option;
nm_dhcp6_config_get_options;
nm_dhcp6_config_get_type;
nm_dhcp_config_get_family;
nm_dhcp_config_get_one_option;
nm_dhcp_config_get_options;
nm_dhcp_config_get_type;
nm_ip_address_equal;
nm_ip_address_get_address;
nm_ip_address_get_address_binary;
......
......@@ -58,10 +58,10 @@ typedef struct {
NMActiveConnectionState state;
gboolean is_default;
NMIPConfig *ip4_config;
NMDhcp4Config *dhcp4_config;
NMDhcpConfig *dhcp4_config;
gboolean is_default6;
NMIPConfig *ip6_config;
NMDhcp6Config *dhcp6_config;
NMDhcpConfig *dhcp6_config;
gboolean is_vpn;
NMDevice *master;
} NMActiveConnectionPrivate;
......@@ -259,14 +259,14 @@ nm_active_connection_get_ip4_config (NMActiveConnection *connection)
* nm_active_connection_get_dhcp4_config:
* @connection: an #NMActiveConnection
*
* Gets the current #NMDhcp4Config (if any) associated with the
* Gets the current IPv4 #NMDhcpConfig (if any) associated with the
* #NMActiveConnection.
*
* Returns: (transfer none): the #NMDhcp4Config, or %NULL if the
* connection does not use DHCP, or is not in the
* %NM_ACTIVE_CONNECTION_STATE_ACTIVATED state.
* Returns: (transfer none): the IPv4 #NMDhcpConfig, or %NULL if the connection
* does not use DHCP, or is not in the %NM_ACTIVE_CONNECTION_STATE_ACTIVATED
* state.
**/
NMDhcp4Config *
NMDhcpConfig *
nm_active_connection_get_dhcp4_config (NMActiveConnection *connection)
{
g_return_val_if_fail (NM_IS_ACTIVE_CONNECTION (connection), NULL);
......@@ -312,14 +312,14 @@ nm_active_connection_get_ip6_config (NMActiveConnection *connection)
* nm_active_connection_get_dhcp6_config:
* @connection: an #NMActiveConnection
*
* Gets the current #NMDhcp6Config (if any) associated with the
* Gets the current IPv6 #NMDhcpConfig (if any) associated with the
* #NMActiveConnection.
*
* Returns: (transfer none): the #NMDhcp6Config, or %NULL if the
* connection does not use DHCPv6, or is not in the
* %NM_ACTIVE_CONNECTION_STATE_ACTIVATED state.
* Returns: (transfer none): the IPv6 #NMDhcpConfig, or %NULL if the connection
* does not use DHCPv6, or is not in the %NM_ACTIVE_CONNECTION_STATE_ACTIVATED
* state.
**/
NMDhcp6Config *
NMDhcpConfig *
nm_active_connection_get_dhcp6_config (NMActiveConnection *connection)
{
g_return_val_if_fail (NM_IS_ACTIVE_CONNECTION (connection), NULL);
......@@ -641,12 +641,12 @@ nm_active_connection_class_init (NMActiveConnectionClass *ap_class)
/**
* NMActiveConnection:dhcp4-config:
*
* The #NMDhcp4Config of the connection.
* The IPv4 #NMDhcpConfig of the connection.
**/
g_object_class_install_property
(object_class, PROP_DHCP4_CONFIG,
g_param_spec_object (NM_ACTIVE_CONNECTION_DHCP4_CONFIG, "", "",
NM_TYPE_DHCP4_CONFIG,
NM_TYPE_DHCP_CONFIG,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS));
......@@ -677,12 +677,12 @@ nm_active_connection_class_init (NMActiveConnectionClass *ap_class)
/**
* NMActiveConnection:dhcp6-config:
*
* The #NMDhcp6Config of the connection.
* The IPv6 #NMDhcpConfig of the connection.
**/
g_object_class_install_property
(object_class, PROP_DHCP6_CONFIG,
g_param_spec_object (NM_ACTIVE_CONNECTION_DHCP6_CONFIG, "", "",
NM_TYPE_DHCP6_CONFIG,
NM_TYPE_DHCP_CONFIG,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS));
......
......@@ -76,10 +76,10 @@ NMActiveConnectionState nm_active_connection_get_state (NMActive
NMDevice *nm_active_connection_get_master (NMActiveConnection *connection);
gboolean nm_active_connection_get_default (NMActiveConnection *connection);
NMIPConfig *nm_active_connection_get_ip4_config (NMActiveConnection *connection);
NMDhcp4Config *nm_active_connection_get_dhcp4_config (NMActiveConnection *connection);
NMDhcpConfig *nm_active_connection_get_dhcp4_config (NMActiveConnection *connection);
gboolean nm_active_connection_get_default6 (NMActiveConnection *connection);
NMIPConfig *nm_active_connection_get_ip6_config (NMActiveConnection *connection);
NMDhcp6Config *nm_active_connection_get_dhcp6_config (NMActiveConnection *connection);
NMDhcpConfig *nm_active_connection_get_dhcp6_config (NMActiveConnection *connection);
gboolean nm_active_connection_get_vpn (NMActiveConnection *connection);
G_END_DECLS
......
......@@ -84,9 +84,9 @@ typedef struct {
gboolean firmware_missing;
gboolean autoconnect;
NMIPConfig *ip4_config;
NMDhcp4Config *dhcp4_config;
NMDhcpConfig *dhcp4_config;
NMIPConfig *ip6_config;
NMDhcp6Config *dhcp6_config;
NMDhcpConfig *dhcp6_config;
NMDeviceState state;
NMDeviceState last_seen_state;
NMDeviceStateReason reason;
......@@ -658,12 +658,12 @@ nm_device_class_init (NMDeviceClass *device_class)
/**
* NMDevice:dhcp4-config:
*
* The #NMDhcp4Config of the device.
* The IPv4 #NMDhcpConfig of the device.
**/
g_object_class_install_property
(object_class, PROP_DHCP4_CONFIG,
g_param_spec_object (NM_DEVICE_DHCP4_CONFIG, "", "",
NM_TYPE_DHCP4_CONFIG,
NM_TYPE_DHCP_CONFIG,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS));
......@@ -682,12 +682,12 @@ nm_device_class_init (NMDeviceClass *device_class)
/**
* NMDevice:dhcp6-config:
*
* The #NMDhcp6Config of the device.
* The IPv6 #NMDhcpConfig of the device.
**/
g_object_class_install_property
(object_class, PROP_DHCP6_CONFIG,
g_param_spec_object (NM_DEVICE_DHCP6_CONFIG, "", "",
NM_TYPE_DHCP6_CONFIG,
NM_TYPE_DHCP_CONFIG,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS));
......@@ -1126,16 +1126,15 @@ nm_device_get_ip4_config (NMDevice *device)
* nm_device_get_dhcp4_config:
* @device: a #NMDevice
*
* Gets the current #NMDhcp4Config associated with the #NMDevice.
* Gets the current IPv4 #NMDhcpConfig associated with the #NMDevice.
*
* Note that as of NetworkManager 0.9.10, you can alternatively use
* nm_active_connection_get_dhcp4_config(), which also works with VPN
* connections.
* You can alternatively use nm_active_connection_get_dhcp4_config(), which also
* works with VPN connections.
*
* Returns: (transfer none): the #NMDhcp4Config or %NULL if the device is not activated or not
* using DHCP.
* Returns: (transfer none): the IPv4 #NMDhcpConfig, or %NULL if the device is
* not activated or not using DHCP.
**/
NMDhcp4Config *
NMDhcpConfig *
nm_device_get_dhcp4_config (NMDevice *device)
{
g_return_val_if_fail (NM_IS_DEVICE (device), NULL);
......@@ -1166,16 +1165,15 @@ nm_device_get_ip6_config (NMDevice *device)
* nm_device_get_dhcp6_config:
* @device: a #NMDevice
*
* Gets the current #NMDhcp6Config associated with the #NMDevice.
* Gets the current IPv6 #NMDhcpConfig associated with the #NMDevice.
*
* Note that as of NetworkManager 0.9.10, you can alternatively use
* nm_active_connection_get_dhcp6_config(), which also works with VPN
* connections.
* You can alternatively use nm_active_connection_get_dhcp6_config(), which also
* works with VPN connections.
*
* Returns: (transfer none): the #NMDhcp6Config or %NULL if the device is not activated or not
* using DHCP.
* Returns: (transfer none): the IPv6 #NMDhcpConfig, or %NULL if the device is
* not activated or not using DHCPv6.
**/
NMDhcp6Config *
NMDhcpConfig *
nm_device_get_dhcp6_config (NMDevice *device)
{
g_return_val_if_fail (NM_IS_DEVICE (device), NULL);
......
......@@ -105,9 +105,9 @@ gboolean nm_device_get_autoconnect (NMDevice *device);
void nm_device_set_autoconnect (NMDevice *device, gboolean autoconnect);
gboolean nm_device_get_firmware_missing (NMDevice *device);
NMIPConfig * nm_device_get_ip4_config (NMDevice *device);
NMDhcp4Config * nm_device_get_dhcp4_config (NMDevice *device);
NMDhcpConfig * nm_device_get_dhcp4_config (NMDevice *device);
NMIPConfig * nm_device_get_ip6_config (NMDevice *device);
NMDhcp6Config * nm_device_get_dhcp6_config (NMDevice *device);
NMDhcpConfig * nm_device_get_dhcp6_config (NMDevice *device);
NMDeviceState nm_device_get_state (NMDevice *device);
NMDeviceStateReason nm_device_get_state_reason (NMDevice *device);
NMActiveConnection * nm_device_get_active_connection(NMDevice *device);
......
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
/*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
* Copyright 2008 - 2014 Red Hat, Inc.
* Copyright 2008 Novell, Inc.
*/
#include <string.h>
#include "nm-dhcp-config.h"
#include "nm-dhcp4-config.h"
#include "nm-dhcp6-config.h"
#include "nm-dbus-interface.h"
#include "nm-object-private.h"
#include "nm-utils.h"
G_DEFINE_ABSTRACT_TYPE (NMDhcpConfig, nm_dhcp_config, NM_TYPE_OBJECT)
#define NM_DHCP_CONFIG_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DHCP_CONFIG, NMDhcpConfigPrivate))
typedef struct {
GHashTable *options;
} NMDhcpConfigPrivate;
enum {
PROP_0,
PROP_FAMILY,
PROP_OPTIONS,
LAST_PROP
};
static void
nm_dhcp_config_init (NMDhcpConfig *config)
{
NMDhcpConfigPrivate *priv = NM_DHCP_CONFIG_GET_PRIVATE (config);
priv->options = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
}
static gboolean
demarshal_dhcp_options (NMObject *object, GParamSpec *pspec, GVariant *value, gpointer field)
{
NMDhcpConfigPrivate *priv = NM_DHCP_CONFIG_GET_PRIVATE (object);
GVariantIter iter;
const char *key;
GVariant *opt;
g_hash_table_remove_all (priv->options);
g_variant_iter_init (&iter, value);
while (g_variant_iter_next (&iter, "{&sv}", &key, &opt)) {
g_hash_table_insert (priv->options, g_strdup (key), g_variant_dup_string (opt, NULL));
g_variant_unref (opt);
}
_nm_object_queue_notify (object, NM_DHCP_CONFIG_OPTIONS);
return TRUE;
}
static void
init_dbus (NMObject *object)
{
NMDhcpConfigPrivate *priv = NM_DHCP_CONFIG_GET_PRIVATE (object);
const NMPropertiesInfo property_info[] = {
{ NM_DHCP_CONFIG_OPTIONS, &priv->options, demarshal_dhcp_options },
{ NULL },
};
NM_OBJECT_CLASS (nm_dhcp_config_parent_class)->init_dbus (object);
_nm_object_register_properties (object,
(NM_IS_DHCP4_CONFIG (object) ?
NM_DBUS_INTERFACE_DHCP4_CONFIG :
NM_DBUS_INTERFACE_DHCP6_CONFIG),
property_info);
}
static void
finalize (GObject *object)
{
NMDhcpConfigPrivate *priv = NM_DHCP_CONFIG_GET_PRIVATE (object);
if (priv->options)
g_hash_table_destroy (priv->options);
G_OBJECT_CLASS (nm_dhcp_config_parent_class)->finalize (object);
}
static void
get_property (GObject *object,
guint prop_id,
GValue *value,
GParamSpec *pspec)
{
NMDhcpConfig *self = NM_DHCP_CONFIG (object);
switch (prop_id) {
case PROP_FAMILY:
g_value_set_int (value, nm_dhcp_config_get_family (self));
case PROP_OPTIONS:
g_value_set_boxed (value, nm_dhcp_config_get_options (self));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
static void
nm_dhcp_config_class_init (NMDhcpConfigClass *config_class)
{
GObjectClass *object_class = G_OBJECT_CLASS (config_class);
NMObjectClass *nm_object_class = NM_OBJECT_CLASS (config_class);
g_type_class_add_private (config_class, sizeof (NMDhcpConfigPrivate));
/* virtual methods */
object_class->get_property = get_property;
object_class->finalize = finalize;
nm_object_class->init_dbus = init_dbus;
/* properties */
/**
* NMDhcpConfig:family:
*
* The IP address family of the configuration; either %AF_INET or %AF_INET6.
**/
g_object_class_install_property
(object_class, PROP_FAMILY,
g_param_spec_int (NM_DHCP_CONFIG_FAMILY, "", "",
0, 255, AF_UNSPEC,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS));
/**
* NMDhcpConfig:options:
*
* The #GHashTable containing options of the configuration.
*
* Type: GLib.HashTable(utf8,utf8)
**/
g_object_class_install_property
(object_class, PROP_OPTIONS,
g_param_spec_boxed (NM_DHCP_CONFIG_OPTIONS, "", "",
G_TYPE_HASH_TABLE,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS));
}
/**
* nm_dhcp_config_get_family:
* @config: a #NMDhcpConfig
*
* Gets the IP address family of the configuration
*
* Returns: the IP address family; either %AF_INET or %AF_INET6
**/
int
nm_dhcp_config_get_family (NMDhcpConfig *config)
{
g_return_val_if_fail (NM_IS_DHCP_CONFIG (config), AF_UNSPEC);
return NM_IS_DHCP4_CONFIG (config) ? AF_INET : AF_INET6;
}
/**
* nm_dhcp_config_get_options:
* @config: a #NMDhcpConfig
*
* Gets all the options contained in the configuration.
*
* Returns: (transfer none) (element-type utf8 utf8): the #GHashTable containing
* strings for keys and values. This is the internal copy used by the
* configuration, and must not be modified.
**/
GHashTable *
nm_dhcp_config_get_options (NMDhcpConfig *config)
{
g_return_val_if_fail (NM_IS_DHCP_CONFIG (config), NULL);
return NM_DHCP_CONFIG_GET_PRIVATE (config)->options;
}
/**
* nm_dhcp_config_get_one_option:
* @config: a #NMDhcpConfig
* @option: the option to retrieve
*
* Gets one option by option name.
*
* Returns: the configuration option's value. This is the internal string used by the
* configuration, and must not be modified.
**/
const char *
nm_dhcp_config_get_one_option (NMDhcpConfig *config, const char *option)
{
g_return_val_if_fail (NM_IS_DHCP_CONFIG (config), NULL);
return g_hash_table_lookup (nm_dhcp_config_get_options (config), option);
}
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
/*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
* Copyright 2008 Red Hat, Inc.
* Copyright 2008 Novell, Inc.
*/
#ifndef __NM_DHCP_CONFIG_H__
#define __NM_DHCP_CONFIG_H__
#if !defined (__NETWORKMANAGER_H_INSIDE__) && !defined (NETWORKMANAGER_COMPILATION)
#error "Only <NetworkManager.h> can be included directly."
#endif
#include <nm-object.h>
G_BEGIN_DECLS
#define NM_TYPE_DHCP_CONFIG (nm_dhcp_config_get_type ())
#define NM_DHCP_CONFIG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_DHCP_CONFIG, NMDhcpConfig))
#define NM_DHCP_CONFIG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_DHCP_CONFIG, NMDhcpConfigClass))
#define NM_IS_DHCP_CONFIG(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_DHCP_CONFIG))
#define NM_IS_DHCP_CONFIG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_DHCP_CONFIG))
struct _NMDhcpConfig {
NMObject parent;
};
typedef struct {
NMObjectClass parent;
/*< private >*/
gpointer padding[8];
} NMDhcpConfigClass;
#define NM_DHCP_CONFIG_FAMILY "family"
#define NM_DHCP_CONFIG_OPTIONS "options"
GType nm_dhcp_config_get_type (void);
int nm_dhcp_config_get_family (NMDhcpConfig *config);
GHashTable *nm_dhcp_config_get_options (NMDhcpConfig *config);
const char *nm_dhcp_config_get_one_option (NMDhcpConfig *config, const char *option);
G_END_DECLS
#endif /* __NM_DHCP_CONFIG_H__ */
......@@ -15,169 +15,23 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
* Copyright 2008 - 2011 Red Hat, Inc.
* Copyright 2008 Novell, Inc.
* Copyright 2014 Red Hat, Inc.
*/
#include <string.h>
#include "nm-dhcp4-config.h"
#include "nm-dbus-interface.h"
#include "nm-object-private.h"
#include "nm-utils.h"
G_DEFINE_TYPE (NMDhcp4Config, nm_dhcp4_config, NM_TYPE_OBJECT)
#define NM_DHCP4_CONFIG_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DHCP4_CONFIG, NMDhcp4ConfigPrivate))
typedef struct {
GHashTable *options;
} NMDhcp4ConfigPrivate;
enum {
PROP_0,
PROP_OPTIONS,
LAST_PROP
};
G_DEFINE_TYPE (NMDhcp4Config, nm_dhcp4_config, NM_TYPE_DHCP_CONFIG)
static void
nm_dhcp4_config_init (NMDhcp4Config *config)
{
NMDhcp4ConfigPrivate *priv = NM_DHCP4_CONFIG_GET_PRIVATE (config);
priv->options = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
}
static gboolean
demarshal_dhcp4_options (NMObject *object, GParamSpec *pspec, GVariant *value, gpointer field)
{
NMDhcp4ConfigPrivate *priv = NM_DHCP4_CONFIG_GET_PRIVATE (object);
GVariantIter iter;
const char *key;
GVariant *opt;
g_hash_table_remove_all (priv->options);
g_variant_iter_init (&iter, value);
while (g_variant_iter_next (&iter, "{&sv}", &key, &opt)) {
g_hash_table_insert (priv->options, g_strdup (key), g_variant_dup_string (opt, NULL));
g_variant_unref (opt);
}
_nm_object_queue_notify (object, NM_DHCP4_CONFIG_OPTIONS);
return TRUE;
}
static void
init_dbus (NMObject *object)
{
NMDhcp4ConfigPrivate *priv = NM_DHCP4_CONFIG_GET_PRIVATE (object);
const NMPropertiesInfo property_info[] = {
{ NM_DHCP4_CONFIG_OPTIONS, &priv->options, demarshal_dhcp4_options },
{ NULL },
};
NM_OBJECT_CLASS (nm_dhcp4_config_parent_class)->init_dbus (object);
_nm_object_register_properties (object,
NM_DBUS_INTERFACE_DHCP4_CONFIG,
property_info);
}
static void
finalize (GObject *object)
{
NMDhcp4ConfigPrivate *priv = NM_DHCP4_CONFIG_GET_PRIVATE (object);
if (priv->options)
g_hash_table_destroy (priv->options);
G_OBJECT_CLASS (nm_dhcp4_config_parent_class)->finalize (object);
}
static void
get_property (GObject *object,
guint prop_id,
GValue *value,
GParamSpec *pspec)
{
NMDhcp4Config *self = NM_DHCP4_CONFIG (object);
switch (prop_id) {
case PROP_OPTIONS:
g_value_set_boxed (value, nm_dhcp4_config_get_options (self));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
static void
nm_dhcp4_config_class_init (NMDhcp4ConfigClass *config_class)
{
GObjectClass *object_class = G_OBJECT_CLASS (config_class);
NMObjectClass *nm_object_class = NM_OBJECT_CLASS (config_class);
g_type_class_add_private (config_class, sizeof (NMDhcp4ConfigPrivate));
_nm_object_class_add_interface (nm_object_class, NM_DBUS_INTERFACE_DHCP4_CONFIG);
/* virtual methods */
object_class->get_property = get_property;
object_class->finalize = finalize;
nm_object_class->init_dbus = init_dbus;
/* properties */
/**