core: refactor private data in "src"

- use _NM_GET_PRIVATE() and _NM_GET_PRIVATE_PTR() everywhere.

- reorder statements, to have GObject related functions (init, dispose,
  constructed) at the bottom of each file and in a consistent order w.r.t.
  each other.

- unify whitespaces in signal and properties declarations.

- use NM_GOBJECT_PROPERTIES_DEFINE() and _notify()

- drop unused signal slots in class structures

- drop unused header files for device factories
This commit is contained in:
Thomas Haller 2016-09-29 13:49:01 +02:00
parent 92e9822e1b
commit 4d37f7a1e9
145 changed files with 4637 additions and 4706 deletions

View file

@ -24,26 +24,48 @@
#include <gudev/gudev.h>
#include <gmodule.h>
#include "nm-atm-manager.h"
#include "nm-setting-adsl.h"
#include "nm-device-adsl.h"
#include "nm-device-factory.h"
#include "nm-platform.h"
/*****************************************************************************/
#define NM_TYPE_ATM_MANAGER (nm_atm_manager_get_type ())
#define NM_ATM_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_ATM_MANAGER, NMAtmManager))
#define NM_ATM_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_ATM_MANAGER, NMAtmManagerClass))
#define NM_IS_ATM_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_ATM_MANAGER))
#define NM_IS_ATM_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_ATM_MANAGER))
#define NM_ATM_MANAGER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_ATM_MANAGER, NMAtmManagerClass))
typedef struct _NMAtmManager NMAtmManager;
typedef struct _NMAtmManagerClass NMAtmManagerClass;
static GType nm_atm_manager_get_type (void);
/*****************************************************************************/
typedef struct {
GUdevClient *client;
GSList *devices;
} NMAtmManagerPrivate;
#define NM_ATM_MANAGER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_ATM_MANAGER, NMAtmManagerPrivate))
struct _NMAtmManager {
GObject parent;
NMAtmManagerPrivate _priv;
};
static GType nm_atm_manager_get_type (void);
struct _NMAtmManagerClass {
GObjectClass parent;
};
static void device_factory_interface_init (NMDeviceFactoryInterface *factory_iface);
G_DEFINE_TYPE_EXTENDED (NMAtmManager, nm_atm_manager, G_TYPE_OBJECT, 0,
G_IMPLEMENT_INTERFACE (NM_TYPE_DEVICE_FACTORY, device_factory_interface_init))
#define NM_ATM_MANAGER_GET_PRIVATE(self) _NM_GET_PRIVATE (self, NMAtmManager, NM_IS_ATM_MANAGER)
/*****************************************************************************/
G_MODULE_EXPORT NMDeviceFactory *
@ -225,6 +247,35 @@ NM_DEVICE_FACTORY_DECLARE_TYPES (
/*****************************************************************************/
static void
dispose (GObject *object)
{
NMAtmManager *self = NM_ATM_MANAGER (object);
NMAtmManagerPrivate *priv = NM_ATM_MANAGER_GET_PRIVATE (self);
GSList *iter;
if (priv->client) {
g_signal_handlers_disconnect_by_func (priv->client, handle_uevent, self);
g_clear_object (&priv->client);
}
for (iter = priv->devices; iter; iter = iter->next)
g_object_weak_unref (G_OBJECT (iter->data), device_destroyed, self);
g_clear_pointer (&priv->devices, g_slist_free);
G_OBJECT_CLASS (nm_atm_manager_parent_class)->dispose (object);
}
static void
nm_atm_manager_class_init (NMAtmManagerClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
object_class->dispose = dispose;
}
/*****************************************************************************/
static void
nm_atm_manager_init (NMAtmManager *self)
{
@ -241,32 +292,3 @@ device_factory_interface_init (NMDeviceFactoryInterface *factory_iface)
factory_iface->get_supported_types = get_supported_types;
factory_iface->start = start;
}
static void
dispose (GObject *object)
{
NMAtmManager *self = NM_ATM_MANAGER (object);
NMAtmManagerPrivate *priv = NM_ATM_MANAGER_GET_PRIVATE (self);
GSList *iter;
if (priv->client)
g_signal_handlers_disconnect_by_func (priv->client, handle_uevent, self);
g_clear_object (&priv->client);
for (iter = priv->devices; iter; iter = iter->next)
g_object_weak_unref (G_OBJECT (iter->data), device_destroyed, self);
g_clear_pointer (&priv->devices, g_slist_free);
G_OBJECT_CLASS (nm_atm_manager_parent_class)->dispose (object);
}
static void
nm_atm_manager_class_init (NMAtmManagerClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
g_type_class_add_private (klass, sizeof (NMAtmManagerPrivate));
/* virtual methods */
object_class->dispose = dispose;
}

View file

@ -1,37 +0,0 @@
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
/* NetworkManager -- Network link manager
*
* 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 of the License, 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) 2007 - 2008 Novell, Inc.
* Copyright (C) 2007 - 2014 Red Hat, Inc.
*/
#ifndef __NETWORKMANAGER_ATM_MANAGER_H__
#define __NETWORKMANAGER_ATM_MANAGER_H__
#define NM_TYPE_ATM_MANAGER (nm_atm_manager_get_type ())
#define NM_ATM_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_ATM_MANAGER, NMAtmManager))
typedef struct {
GObject parent;
} NMAtmManager;
typedef struct {
GObjectClass parent;
} NMAtmManagerClass;
#endif /* __NETWORKMANAGER_ATM_MANAGER_H__ */

View file

@ -20,24 +20,23 @@
#include "nm-default.h"
#include "nm-device-adsl.h"
#include <sys/socket.h>
#include <linux/atmdev.h>
#include <linux/atmbr2684.h>
#include <errno.h>
#include <sys/ioctl.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include "nm-device-adsl.h"
#include "nm-device-private.h"
#include "nm-enum-types.h"
#include "nm-platform.h"
#include "ppp-manager/nm-ppp-manager.h"
#include "ppp-manager/nm-ppp-status.h"
#include "nm-setting-adsl.h"
#include "nm-utils.h"
@ -46,19 +45,12 @@
#include "nm-device-logging.h"
_LOG_DECLARE_SELF (NMDeviceAdsl);
G_DEFINE_TYPE (NMDeviceAdsl, nm_device_adsl, NM_TYPE_DEVICE)
#define NM_DEVICE_ADSL_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DEVICE_ADSL, NMDeviceAdslPrivate))
enum {
PROP_0,
PROP_ATM_INDEX,
LAST_PROP
};
/*****************************************************************************/
NM_GOBJECT_PROPERTIES_DEFINE_BASE (
PROP_ATM_INDEX,
);
typedef struct {
guint carrier_poll_id;
int atm_index;
@ -74,6 +66,19 @@ typedef struct {
guint nas_update_count;
} NMDeviceAdslPrivate;
struct _NMDeviceAdsl {
NMDevice parent;
NMDeviceAdslPrivate _priv;
};
struct _NMDeviceAdslClass {
NMDeviceClass parent;
};
G_DEFINE_TYPE (NMDeviceAdsl, nm_device_adsl, NM_TYPE_DEVICE)
#define NM_DEVICE_ADSL_GET_PRIVATE(self) _NM_GET_PRIVATE (self, NMDeviceAdsl, NM_IS_DEVICE_ADSL)
/*****************************************************************************/
static NMDeviceCapabilities
@ -547,6 +552,57 @@ carrier_update_cb (gpointer user_data)
/*****************************************************************************/
static void
get_property (GObject *object, guint prop_id,
GValue *value, GParamSpec *pspec)
{
switch (prop_id) {
case PROP_ATM_INDEX:
g_value_set_int (value, NM_DEVICE_ADSL_GET_PRIVATE ((NMDeviceAdsl *) object)->atm_index);
break;
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)
{
switch (prop_id) {
case PROP_ATM_INDEX:
/* construct only */
NM_DEVICE_ADSL_GET_PRIVATE ((NMDeviceAdsl *) object)->atm_index = g_value_get_int (value);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
/*****************************************************************************/
static void
nm_device_adsl_init (NMDeviceAdsl *self)
{
}
static void
constructed (GObject *object)
{
NMDeviceAdsl *self = NM_DEVICE_ADSL (object);
NMDeviceAdslPrivate *priv = NM_DEVICE_ADSL_GET_PRIVATE (self);
G_OBJECT_CLASS (nm_device_adsl_parent_class)->constructed (object);
priv->carrier_poll_id = g_timeout_add_seconds (5, carrier_update_cb, self);
_LOGD (LOGD_ADSL, "ATM device index %d", priv->atm_index);
g_return_if_fail (priv->atm_index >= 0);
}
NMDevice *
nm_device_adsl_new (const char *udi,
const char *iface,
@ -566,73 +622,22 @@ nm_device_adsl_new (const char *udi,
NULL);
}
static void
constructed (GObject *object)
{
NMDeviceAdsl *self = NM_DEVICE_ADSL (object);
NMDeviceAdslPrivate *priv = NM_DEVICE_ADSL_GET_PRIVATE (self);
G_OBJECT_CLASS (nm_device_adsl_parent_class)->constructed (object);
priv->carrier_poll_id = g_timeout_add_seconds (5, carrier_update_cb, self);
_LOGD (LOGD_ADSL, "ATM device index %d", priv->atm_index);
g_return_if_fail (priv->atm_index >= 0);
}
static void
dispose (GObject *object)
{
adsl_cleanup (NM_DEVICE_ADSL (object));
nm_clear_g_source (&NM_DEVICE_ADSL_GET_PRIVATE (object)->carrier_poll_id);
nm_clear_g_source (&NM_DEVICE_ADSL_GET_PRIVATE ((NMDeviceAdsl *) object)->carrier_poll_id);
G_OBJECT_CLASS (nm_device_adsl_parent_class)->dispose (object);
}
static void
get_property (GObject *object, guint prop_id,
GValue *value, GParamSpec *pspec)
{
switch (prop_id) {
case PROP_ATM_INDEX:
g_value_set_int (value, NM_DEVICE_ADSL_GET_PRIVATE (object)->atm_index);
break;
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)
{
switch (prop_id) {
case PROP_ATM_INDEX:
/* construct only */
NM_DEVICE_ADSL_GET_PRIVATE (object)->atm_index = g_value_get_int (value);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
static void
nm_device_adsl_init (NMDeviceAdsl *self)
{
}
static void
nm_device_adsl_class_init (NMDeviceAdslClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
NMDeviceClass *parent_class = NM_DEVICE_CLASS (klass);
g_type_class_add_private (object_class, sizeof (NMDeviceAdslPrivate));
object_class->constructed = constructed;
object_class->dispose = dispose;
object_class->get_property = get_property;
@ -647,13 +652,13 @@ nm_device_adsl_class_init (NMDeviceAdslClass *klass)
parent_class->act_stage3_ip4_config_start = act_stage3_ip4_config_start;
parent_class->deactivate = deactivate;
/* properties */
g_object_class_install_property
(object_class, PROP_ATM_INDEX,
g_param_spec_int (NM_DEVICE_ADSL_ATM_INDEX, "", "",
-1, G_MAXINT, -1,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS));
obj_properties[PROP_ATM_INDEX] =
g_param_spec_int (NM_DEVICE_ADSL_ATM_INDEX, "", "",
-1, G_MAXINT, -1,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS);
g_object_class_install_properties (object_class, _PROPERTY_ENUMS_LAST, obj_properties);
nm_exported_object_class_add_interface (NM_EXPORTED_OBJECT_CLASS (klass),
NMDBUS_TYPE_DEVICE_ADSL_SKELETON,

View file

@ -22,7 +22,6 @@
#ifndef __NETWORKMANAGER_DEVICE_ADSL_H__
#define __NETWORKMANAGER_DEVICE_ADSL_H__
// Parent class
#include "nm-device.h"
#define NM_TYPE_DEVICE_ADSL (nm_device_adsl_get_type ())
@ -34,13 +33,8 @@
#define NM_DEVICE_ADSL_ATM_INDEX "atm-index"
typedef struct {
NMDevice parent;
} NMDeviceAdsl;
typedef struct {
NMDeviceClass parent;
} NMDeviceAdslClass;
typedef struct _NMDeviceAdsl NMDeviceAdsl;
typedef struct _NMDeviceAdslClass NMDeviceAdslClass;
GType nm_device_adsl_get_type (void);

View file

@ -33,7 +33,6 @@ SYMBOL_VIS_FILE=$(srcdir)/exports.ver
libnm_device_plugin_bluetooth_la_SOURCES = \
nm-bluez-manager.c \
nm-bluez-manager.h \
nm-bluez-common.h \
nm-bluez-device.c \
nm-bluez-device.h \

View file

@ -39,5 +39,6 @@
#define BLUEZ4_SERIAL_INTERFACE "org.bluez.Serial"
#define BLUEZ4_NETWORK_INTERFACE "org.bluez.Network"
#endif /* NM_BLUEZ_COMMON_H */
#define NM_BLUEZ_MANAGER_BDADDR_ADDED "bdaddr-added"
#endif /* NM_BLUEZ_COMMON_H */

View file

@ -21,13 +21,13 @@
#include "nm-default.h"
#include "nm-bluez-device.h"
#include <string.h>
#include "nm-core-internal.h"
#include "nm-bt-error.h"
#include "nm-bluez-common.h"
#include "nm-bluez-device.h"
#include "nm-settings.h"
#include "nm-settings-connection.h"
#include "NetworkManagerUtils.h"
@ -36,9 +36,31 @@
#include "nm-bluez5-dun.h"
#endif
G_DEFINE_TYPE (NMBluezDevice, nm_bluez_device, G_TYPE_OBJECT)
/*****************************************************************************/
#define NM_BLUEZ_DEVICE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_BLUEZ_DEVICE, NMBluezDevicePrivate))
#define VARIANT_IS_OF_TYPE_BOOLEAN(v) ((v) != NULL && ( g_variant_is_of_type ((v), G_VARIANT_TYPE_BOOLEAN) ))
#define VARIANT_IS_OF_TYPE_STRING(v) ((v) != NULL && ( g_variant_is_of_type ((v), G_VARIANT_TYPE_STRING) ))
#define VARIANT_IS_OF_TYPE_OBJECT_PATH(v) ((v) != NULL && ( g_variant_is_of_type ((v), G_VARIANT_TYPE_OBJECT_PATH) ))
#define VARIANT_IS_OF_TYPE_STRING_ARRAY(v) ((v) != NULL && ( g_variant_is_of_type ((v), G_VARIANT_TYPE_STRING_ARRAY) ))
/*****************************************************************************/
NM_GOBJECT_PROPERTIES_DEFINE (NMBluezDevice,
PROP_PATH,
PROP_ADDRESS,
PROP_NAME,
PROP_CAPABILITIES,
PROP_USABLE,
PROP_CONNECTED,
);
enum {
INITIALIZED,
REMOVED,
LAST_SIGNAL
};
static guint signals[LAST_SIGNAL] = { 0 };
typedef struct {
char *path;
@ -75,38 +97,25 @@ typedef struct {
gboolean pan_connection_no_autocreate;
} NMBluezDevicePrivate;
enum {
PROP_0,
PROP_PATH,
PROP_ADDRESS,
PROP_NAME,
PROP_CAPABILITIES,
PROP_USABLE,
PROP_CONNECTED,
LAST_PROP
struct _NMBluezDevice {
GObject parent;
NMBluezDevicePrivate _priv;
};
/* Signals */
enum {
INITIALIZED,
REMOVED,
LAST_SIGNAL
struct _NMBluezDeviceClass {
GObjectClass parent;
};
static guint signals[LAST_SIGNAL] = { 0 };
G_DEFINE_TYPE (NMBluezDevice, nm_bluez_device, G_TYPE_OBJECT)
#define NM_BLUEZ_DEVICE_GET_PRIVATE(self) _NM_GET_PRIVATE (self, NMBluezDevice, NM_IS_BLUEZ_DEVICE)
/*****************************************************************************/
static void cp_connection_added (NMSettings *settings,
NMConnection *connection, NMBluezDevice *self);
static gboolean connection_compatible (NMBluezDevice *self, NMConnection *connection);
#define VARIANT_IS_OF_TYPE_BOOLEAN(v) ((v) != NULL && ( g_variant_is_of_type ((v), G_VARIANT_TYPE_BOOLEAN) ))
#define VARIANT_IS_OF_TYPE_STRING(v) ((v) != NULL && ( g_variant_is_of_type ((v), G_VARIANT_TYPE_STRING) ))
#define VARIANT_IS_OF_TYPE_OBJECT_PATH(v) ((v) != NULL && ( g_variant_is_of_type ((v), G_VARIANT_TYPE_OBJECT_PATH) ))
#define VARIANT_IS_OF_TYPE_STRING_ARRAY(v) ((v) != NULL && ( g_variant_is_of_type ((v), G_VARIANT_TYPE_STRING_ARRAY) ))
/*****************************************************************************/
const char *
@ -292,7 +301,7 @@ check_emit_usable (NMBluezDevice *self)
END:
if (new_usable != priv->usable) {
priv->usable = new_usable;
g_object_notify (G_OBJECT (self), NM_BLUEZ_DEVICE_USABLE);
_notify (self, PROP_USABLE);
}
return G_SOURCE_REMOVE;
@ -424,7 +433,7 @@ bluez_disconnect_cb (GDBusConnection *dbus_connection,
GAsyncResult *res,
gpointer user_data)
{
NMBluezDevicePrivate *priv = NM_BLUEZ_DEVICE_GET_PRIVATE (user_data);
NMBluezDevicePrivate *priv = NM_BLUEZ_DEVICE_GET_PRIVATE ((NMBluezDevice *) user_data);
GError *error = NULL;
GVariant *variant;
@ -628,7 +637,7 @@ nm_bluez_device_connect_finish (NMBluezDevice *self,
device = (const char *) g_simple_async_result_get_op_res_gpointer (simple);
if (device && priv->bluez_version == 5) {
priv->connected = TRUE;
g_object_notify (G_OBJECT (self), NM_BLUEZ_DEVICE_CONNECTED);
_notify (self, PROP_CONNECTED);
}
return device;
@ -695,7 +704,7 @@ _set_property_capabilities (NMBluezDevice *self, const char **uuids)
((uint_val & NM_BT_CAPABILITY_DUN) && (uint_val &NM_BT_CAPABILITY_NAP)) ? " | " : "",
uint_val & NM_BT_CAPABILITY_DUN ? "DUN" : "");
priv->capabilities = uint_val;
g_object_notify (G_OBJECT (self), NM_BLUEZ_DEVICE_CAPABILITIES);
_notify (self, PROP_CAPABILITIES);
}
}
@ -727,7 +736,7 @@ _set_property_address (NMBluezDevice *self, const char *addr)
}
priv->address = g_strdup (addr);
g_object_notify (G_OBJECT (self), NM_BLUEZ_DEVICE_ADDRESS);
_notify (self, PROP_ADDRESS);
}
static void
@ -749,7 +758,7 @@ _take_variant_property_name (NMBluezDevice *self, GVariant *v)
if (g_strcmp0 (priv->name, str)) {
g_free (priv->name);
priv->name = g_strdup (str);
g_object_notify (G_OBJECT (self), NM_BLUEZ_DEVICE_NAME);
_notify (self, PROP_NAME);
}
}
if (v)
@ -779,7 +788,7 @@ _take_variant_property_connected (NMBluezDevice *self, GVariant *v)
if (priv->connected != connected) {
priv->connected = connected;
g_object_notify (G_OBJECT (self), NM_BLUEZ_DEVICE_CONNECTED);
_notify (self, PROP_CONNECTED);
}
}
if (v)
@ -1029,6 +1038,61 @@ on_bus_acquired (GObject *object, GAsyncResult *res, NMBluezDevice *self)
/*****************************************************************************/
static void
get_property (GObject *object, guint prop_id,
GValue *value, GParamSpec *pspec)
{
NMBluezDevicePrivate *priv = NM_BLUEZ_DEVICE_GET_PRIVATE ((NMBluezDevice *) object);
switch (prop_id) {
case PROP_PATH:
g_value_set_string (value, priv->path);
break;
case PROP_ADDRESS:
g_value_set_string (value, priv->address);
break;
case PROP_NAME:
g_value_set_string (value, priv->name);
break;
case PROP_CAPABILITIES:
g_value_set_uint (value, priv->capabilities);
break;
case PROP_USABLE:
g_value_set_boolean (value, priv->usable);
break;
case PROP_CONNECTED:
g_value_set_boolean (value, priv->connected);
break;
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)
{
NMBluezDevicePrivate *priv = NM_BLUEZ_DEVICE_GET_PRIVATE ((NMBluezDevice *) object);
switch (prop_id) {
case PROP_PATH:
/* construct only */
priv->path = g_value_dup_string (value);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
/*****************************************************************************/
static void
nm_bluez_device_init (NMBluezDevice *self)
{
}
NMBluezDevice *
nm_bluez_device_new (const char *path,
const char *adapter_address,
@ -1089,11 +1153,6 @@ nm_bluez_device_new (const char *path,
return self;
}
static void
nm_bluez_device_init (NMBluezDevice *self)
{
}
static void
dispose (GObject *object)
{
@ -1146,7 +1205,7 @@ dispose (GObject *object)
static void
finalize (GObject *object)
{
NMBluezDevicePrivate *priv = NM_BLUEZ_DEVICE_GET_PRIVATE (object);
NMBluezDevicePrivate *priv = NM_BLUEZ_DEVICE_GET_PRIVATE ((NMBluezDevice *) object);
nm_log_dbg (LOGD_BT, "bluez[%s]: finalize NMBluezDevice", priv->path);
@ -1163,122 +1222,65 @@ finalize (GObject *object)
G_OBJECT_CLASS (nm_bluez_device_parent_class)->finalize (object);
}
static void
get_property (GObject *object, guint prop_id,
GValue *value, GParamSpec *pspec)
{
NMBluezDevicePrivate *priv = NM_BLUEZ_DEVICE_GET_PRIVATE (object);
switch (prop_id) {
case PROP_PATH:
g_value_set_string (value, priv->path);
break;
case PROP_ADDRESS:
g_value_set_string (value, priv->address);
break;
case PROP_NAME:
g_value_set_string (value, priv->name);
break;
case PROP_CAPABILITIES:
g_value_set_uint (value, priv->capabilities);
break;
case PROP_USABLE:
g_value_set_boolean (value, priv->usable);
break;
case PROP_CONNECTED:
g_value_set_boolean (value, priv->connected);
break;
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)
{
NMBluezDevicePrivate *priv = NM_BLUEZ_DEVICE_GET_PRIVATE (object);
switch (prop_id) {
case PROP_PATH:
/* construct only */
priv->path = g_value_dup_string (value);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
static void
nm_bluez_device_class_init (NMBluezDeviceClass *config_class)
{
GObjectClass *object_class = G_OBJECT_CLASS (config_class);
g_type_class_add_private (config_class, sizeof (NMBluezDevicePrivate));
/* virtual methods */
object_class->get_property = get_property;
object_class->set_property = set_property;
object_class->dispose = dispose;
object_class->finalize = finalize;
/* Properties */
g_object_class_install_property
(object_class, PROP_PATH,
g_param_spec_string (NM_BLUEZ_DEVICE_PATH, "", "",
NULL,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS));
obj_properties[PROP_PATH] =
g_param_spec_string (NM_BLUEZ_DEVICE_PATH, "", "",
NULL,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS);
g_object_class_install_property
(object_class, PROP_ADDRESS,
g_param_spec_string (NM_BLUEZ_DEVICE_ADDRESS, "", "",
NULL,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS));
obj_properties[PROP_ADDRESS] =
g_param_spec_string (NM_BLUEZ_DEVICE_ADDRESS, "", "",
NULL,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS);
g_object_class_install_property
(object_class, PROP_NAME,
g_param_spec_string (NM_BLUEZ_DEVICE_NAME, "", "",
NULL,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS));
obj_properties[PROP_NAME] =
g_param_spec_string (NM_BLUEZ_DEVICE_NAME, "", "",
NULL,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS);
g_object_class_install_property
(object_class, PROP_CAPABILITIES,
g_param_spec_uint (NM_BLUEZ_DEVICE_CAPABILITIES, "", "",
0, G_MAXUINT, 0,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS));
obj_properties[PROP_CAPABILITIES] =
g_param_spec_uint (NM_BLUEZ_DEVICE_CAPABILITIES, "", "",
0, G_MAXUINT, 0,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS);
g_object_class_install_property
(object_class, PROP_USABLE,
g_param_spec_boolean (NM_BLUEZ_DEVICE_USABLE, "", "",
FALSE,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS));
obj_properties[PROP_USABLE] =
g_param_spec_boolean (NM_BLUEZ_DEVICE_USABLE, "", "",
FALSE,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS);
g_object_class_install_property
(object_class, PROP_CONNECTED,
g_param_spec_boolean (NM_BLUEZ_DEVICE_CONNECTED, "", "",
FALSE,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS));
obj_properties[PROP_CONNECTED] =
g_param_spec_boolean (NM_BLUEZ_DEVICE_CONNECTED, "", "",
FALSE,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS);
g_object_class_install_properties (object_class, _PROPERTY_ENUMS_LAST, obj_properties);
/* Signals */
signals[INITIALIZED] = g_signal_new ("initialized",
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (NMBluezDeviceClass, initialized),
0,
NULL, NULL, NULL,
G_TYPE_NONE, 1, G_TYPE_BOOLEAN);
signals[REMOVED] = g_signal_new (NM_BLUEZ_DEVICE_REMOVED,
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (NMBluezDeviceClass, removed),
0,
NULL, NULL, NULL,
G_TYPE_NONE, 0);
}

View file

@ -41,18 +41,8 @@
/* Signals */
#define NM_BLUEZ_DEVICE_REMOVED "removed"
typedef struct {
GObject parent;
} NMBluezDevice;
typedef struct {
GObjectClass parent;
/* virtual functions */
void (*initialized) (NMBluezDevice *self, gboolean success);
void (*removed) (NMBluezDevice *self);
} NMBluezDeviceClass;
typedef struct _NMBluezDevice NMBluezDevice;
typedef struct _NMBluezDeviceClass NMBluezDeviceClass;
GType nm_bluez_device_get_type (void);

View file

@ -20,8 +20,6 @@
#include "nm-default.h"
#include "nm-bluez-manager.h"
#include <signal.h>
#include <string.h>
#include <stdlib.h>
@ -39,15 +37,21 @@
#include "nm-platform.h"
#include "nm-dbus-compat.h"
#define _NMLOG_DOMAIN LOGD_BT
#define _NMLOG_PREFIX_NAME "bluez"
#define _NMLOG(level, ...) \
G_STMT_START { \
nm_log ((level), _NMLOG_DOMAIN, \
"%s" _NM_UTILS_MACRO_FIRST(__VA_ARGS__), \
_NMLOG_PREFIX_NAME": " \
_NM_UTILS_MACRO_REST(__VA_ARGS__)); \
} G_STMT_END
/*****************************************************************************/
#define NM_TYPE_BLUEZ_MANAGER (nm_bluez_manager_get_type ())
#define NM_BLUEZ_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_BLUEZ_MANAGER, NMBluezManager))
#define NM_BLUEZ_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_BLUEZ_MANAGER, NMBluezManagerClass))
#define NM_IS_BLUEZ_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_BLUEZ_MANAGER))
#define NM_IS_BLUEZ_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_BLUEZ_MANAGER))
#define NM_BLUEZ_MANAGER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_BLUEZ_MANAGER, NMBluezManagerClass))
typedef struct _NMBluezManager NMBluezManager;
typedef struct _NMBluezManagerClass NMBluezManagerClass;
static GType nm_bluez_manager_get_type (void);
/*****************************************************************************/
typedef struct {
int bluez_version;
@ -62,24 +66,37 @@ typedef struct {
GCancellable *async_cancellable;
} NMBluezManagerPrivate;
#define NM_BLUEZ_MANAGER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_BLUEZ_MANAGER, NMBluezManagerPrivate))
struct _NMBluezManager {
GObject parent;
NMBluezManagerPrivate _priv;
};
static GType nm_bluez_manager_get_type (void);
struct _NMBluezManagerClass {
GObjectClass parent;
};
static void device_factory_interface_init (NMDeviceFactoryInterface *factory_iface);
G_DEFINE_TYPE_EXTENDED (NMBluezManager, nm_bluez_manager, G_TYPE_OBJECT, 0,
G_IMPLEMENT_INTERFACE (NM_TYPE_DEVICE_FACTORY, device_factory_interface_init))
static void check_bluez_and_try_setup (NMBluezManager *self);
#define NM_BLUEZ_MANAGER_GET_PRIVATE(self) _NM_GET_PRIVATE (self, NMBluezManager, NM_IS_BLUEZ_MANAGER)
/*****************************************************************************/
G_MODULE_EXPORT NMDeviceFactory *
nm_device_factory_create (GError **error)
{
return (NMDeviceFactory *) g_object_new (NM_TYPE_BLUEZ_MANAGER, NULL);
}
#define _NMLOG_DOMAIN LOGD_BT
#define _NMLOG_PREFIX_NAME "bluez"
#define _NMLOG(level, ...) \
G_STMT_START { \
nm_log ((level), _NMLOG_DOMAIN, \
"%s" _NM_UTILS_MACRO_FIRST(__VA_ARGS__), \
_NMLOG_PREFIX_NAME": " \
_NM_UTILS_MACRO_REST(__VA_ARGS__)); \
} G_STMT_END
/*****************************************************************************/
static void check_bluez_and_try_setup (NMBluezManager *self);
/*****************************************************************************/
@ -382,6 +399,18 @@ start (NMDeviceFactory *factory)
check_bluez_and_try_setup (NM_BLUEZ_MANAGER (factory));
}
static NMDevice *
create_device (NMDeviceFactory *factory,
const char *iface,
const NMPlatformLink *plink,
NMConnection *connection,
gboolean *out_ignore)
{
g_warn_if_fail (plink->type == NM_LINK_TYPE_BNEP);
*out_ignore = TRUE;
return NULL;
}
NM_DEVICE_FACTORY_DECLARE_TYPES (
NM_DEVICE_FACTORY_DECLARE_LINK_TYPES (NM_LINK_TYPE_BNEP)
NM_DEVICE_FACTORY_DECLARE_SETTING_TYPES (NM_SETTING_BLUETOOTH_SETTING_NAME)
@ -389,6 +418,14 @@ NM_DEVICE_FACTORY_DECLARE_TYPES (
/*****************************************************************************/
static void
nm_bluez_manager_init (NMBluezManager *self)
{
NMBluezManagerPrivate *priv = NM_BLUEZ_MANAGER_GET_PRIVATE (self);
priv->settings = g_object_ref (NM_SETTINGS_GET);
}
static void
dispose (GObject *object)
{
@ -414,23 +451,11 @@ dispose (GObject *object)
}
static void
nm_bluez_manager_init (NMBluezManager *self)
nm_bluez_manager_class_init (NMBluezManagerClass *klass)
{
NMBluezManagerPrivate *priv = NM_BLUEZ_MANAGER_GET_PRIVATE (self);
GObjectClass *object_class = G_OBJECT_CLASS (klass);
priv->settings = g_object_ref (NM_SETTINGS_GET);
}
static NMDevice *
create_device (NMDeviceFactory *factory,
const char *iface,
const NMPlatformLink *plink,
NMConnection *connection,
gboolean *out_ignore)
{
g_warn_if_fail (plink->type == NM_LINK_TYPE_BNEP);
*out_ignore = TRUE;
return NULL;
object_class->dispose = dispose;
}
static void
@ -441,14 +466,10 @@ device_factory_interface_init (NMDeviceFactoryInterface *factory_iface)
factory_iface->start = start;
}
static void
nm_bluez_manager_class_init (NMBluezManagerClass *klass)
/*****************************************************************************/
G_MODULE_EXPORT NMDeviceFactory *
nm_device_factory_create (GError **error)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
g_type_class_add_private (klass, sizeof (NMBluezManagerPrivate));
/* virtual methods */
object_class->dispose = dispose;
return (NMDeviceFactory *) g_object_new (NM_TYPE_BLUEZ_MANAGER, NULL);
}

View file

@ -1,39 +0,0 @@
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
/* NetworkManager -- Network link manager
*
* 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 of the License, 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) 2007 - 2008 Novell, Inc.
* Copyright (C) 2007 - 2014 Red Hat, Inc.
*/
#ifndef __NETWORKMANAGER_BLUEZ_MANAGER_H__
#define __NETWORKMANAGER_BLUEZ_MANAGER_H__
#define NM_TYPE_BLUEZ_MANAGER (nm_bluez_manager_get_type ())
#define NM_BLUEZ_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_BLUEZ_MANAGER, NMBluezManager))
#define NM_BLUEZ_MANAGER_BDADDR_ADDED "bdaddr-added"
typedef struct {
GObject parent;
} NMBluezManager;
typedef struct {
GObjectClass parent;
} NMBluezManagerClass;
#endif /* __NETWORKMANAGER_BLUEZ_MANAGER_H__ */

View file

@ -30,9 +30,21 @@
#include "nm-core-internal.h"
#include "nm-settings.h"
G_DEFINE_TYPE (NMBluez4Adapter, nm_bluez4_adapter, G_TYPE_OBJECT)
/*****************************************************************************/
#define NM_BLUEZ4_ADAPTER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_BLUEZ4_ADAPTER, NMBluez4AdapterPrivate))
NM_GOBJECT_PROPERTIES_DEFINE_BASE (
PROP_PATH,
PROP_ADDRESS,
);
enum {
INITIALIZED,
DEVICE_ADDED,
DEVICE_REMOVED,
LAST_SIGNAL,
};
static guint signals[LAST_SIGNAL] = { 0 };
typedef struct {
char *path;
@ -46,26 +58,25 @@ typedef struct {
NMSettings *settings;
} NMBluez4AdapterPrivate;
enum {
PROP_0,
PROP_PATH,
PROP_ADDRESS,
LAST_PROP
struct _NMBluez4Adapter {
GObject parent;
NMBluez4AdapterPrivate _priv;
};
/* Signals */
enum {
INITIALIZED,
DEVICE_ADDED,
DEVICE_REMOVED,
LAST_SIGNAL
struct _NMBluez4AdapterClass {
GObjectClass parent;
};
static guint signals[LAST_SIGNAL] = { 0 };
G_DEFINE_TYPE (NMBluez4Adapter, nm_bluez4_adapter, G_TYPE_OBJECT)
#define NM_BLUEZ4_ADAPTER_GET_PRIVATE(self) _NM_GET_PRIVATE (self, NMBluez4Adapter, NM_IS_BLUEZ4_ADAPTER)
/*****************************************************************************/
static void device_do_remove (NMBluez4Adapter *self, NMBluezDevice *device);
/*****************************************************************************/
const char *
nm_bluez4_adapter_get_path (NMBluez4Adapter *self)
{
@ -235,6 +246,61 @@ query_properties (NMBluez4Adapter *self)
/*****************************************************************************/
static gboolean
_find_all (gpointer key, gpointer value, gpointer user_data)
{
return TRUE;
}
/*****************************************************************************/
static void
get_property (GObject *object, guint prop_id,
GValue *value, GParamSpec *pspec)
{
NMBluez4AdapterPrivate *priv = NM_BLUEZ4_ADAPTER_GET_PRIVATE ((NMBluez4Adapter *) object);
switch (prop_id) {
case PROP_PATH:
g_value_set_string (value, priv->path);
break;
case PROP_ADDRESS:
g_value_set_string (value, priv->address);
break;
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)
{
NMBluez4AdapterPrivate *priv = NM_BLUEZ4_ADAPTER_GET_PRIVATE ((NMBluez4Adapter *) object);
switch (prop_id) {
case PROP_PATH:
/* construct only */
priv->path = g_value_dup_string (value);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
/*****************************************************************************/
static void
nm_bluez4_adapter_init (NMBluez4Adapter *self)
{
NMBluez4AdapterPrivate *priv = NM_BLUEZ4_ADAPTER_GET_PRIVATE (self);
priv->devices = g_hash_table_new_full (g_str_hash, g_str_equal,
NULL, NULL);
}
NMBluez4Adapter *
nm_bluez4_adapter_new (const char *path, NMSettings *settings)
{
@ -266,21 +332,6 @@ nm_bluez4_adapter_new (const char *path, NMSettings *settings)
return self;
}
static void
nm_bluez4_adapter_init (NMBluez4Adapter *self)
{
NMBluez4AdapterPrivate *priv = NM_BLUEZ4_ADAPTER_GET_PRIVATE (self);
priv->devices = g_hash_table_new_full (g_str_hash, g_str_equal,
NULL, NULL);
}
static gboolean
_find_all (gpointer key, gpointer value, gpointer user_data)
{
return TRUE;
}
static void
dispose (GObject *object)
{
@ -297,7 +348,7 @@ dispose (GObject *object)
static void
finalize (GObject *object)
{
NMBluez4AdapterPrivate *priv = NM_BLUEZ4_ADAPTER_GET_PRIVATE (object);
NMBluez4AdapterPrivate *priv = NM_BLUEZ4_ADAPTER_GET_PRIVATE ((NMBluez4Adapter *) object);
g_hash_table_destroy (priv->devices);
g_free (priv->address);
@ -309,75 +360,34 @@ finalize (GObject *object)
g_object_unref (priv->settings);
}
static void
get_property (GObject *object, guint prop_id,
GValue *value, GParamSpec *pspec)
{
NMBluez4AdapterPrivate *priv = NM_BLUEZ4_ADAPTER_GET_PRIVATE (object);
switch (prop_id) {
case PROP_PATH:
g_value_set_string (value, priv->path);
break;
case PROP_ADDRESS:
g_value_set_string (value, priv->address);
break;
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)
{
NMBluez4AdapterPrivate *priv = NM_BLUEZ4_ADAPTER_GET_PRIVATE (object);
switch (prop_id) {
case PROP_PATH:
/* construct only */
priv->path = g_value_dup_string (value);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
static void
nm_bluez4_adapter_class_init (NMBluez4AdapterClass *config_class)
{
GObjectClass *object_class = G_OBJECT_CLASS (config_class);
g_type_class_add_private (config_class, sizeof (NMBluez4AdapterPrivate));
/* virtual methods */
object_class->get_property = get_property;
object_class->set_property = set_property;
object_class->dispose = dispose;
object_class->finalize = finalize;
/* Properties */
g_object_class_install_property
(object_class, PROP_PATH,
g_param_spec_string (NM_BLUEZ4_ADAPTER_PATH, "", "",
NULL,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS));
obj_properties[PROP_PATH] =
g_param_spec_string (NM_BLUEZ4_ADAPTER_PATH, "", "",
NULL,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS);
g_object_class_install_property
(object_class, PROP_ADDRESS,
g_param_spec_string (NM_BLUEZ4_ADAPTER_ADDRESS, "", "",
NULL,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS));
obj_properties[PROP_ADDRESS] =
g_param_spec_string (NM_BLUEZ4_ADAPTER_ADDRESS, "", "",
NULL,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS);
g_object_class_install_properties (object_class, _PROPERTY_ENUMS_LAST, obj_properties);
/* Signals */
signals[INITIALIZED] = g_signal_new ("initialized",
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (NMBluez4AdapterClass, initialized),
0,
NULL, NULL,
g_cclosure_marshal_VOID__BOOLEAN,
G_TYPE_NONE, 1, G_TYPE_BOOLEAN);
@ -385,7 +395,7 @@ nm_bluez4_adapter_class_init (NMBluez4AdapterClass *config_class)
signals[DEVICE_ADDED] = g_signal_new ("device-added",
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (NMBluez4AdapterClass, device_added),
0,
NULL, NULL,
g_cclosure_marshal_VOID__OBJECT,
G_TYPE_NONE, 1, G_TYPE_OBJECT);
@ -393,7 +403,7 @@ nm_bluez4_adapter_class_init (NMBluez4AdapterClass *config_class)
signals[DEVICE_REMOVED] = g_signal_new ("device-removed",
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (NMBluez4AdapterClass, device_removed),
0,
NULL, NULL,
g_cclosure_marshal_VOID__OBJECT,
G_TYPE_NONE, 1, G_TYPE_OBJECT);

View file

@ -33,20 +33,8 @@
#define NM_BLUEZ4_ADAPTER_PATH "path"
#define NM_BLUEZ4_ADAPTER_ADDRESS "address"
typedef struct {
GObject parent;
} NMBluez4Adapter;
typedef struct {
GObjectClass parent;
/* virtual functions */
void (*initialized) (NMBluez4Adapter *self, gboolean success);
void (*device_added) (NMBluez4Adapter *self, NMBluezDevice *device);
void (*device_removed) (NMBluez4Adapter *self, NMBluezDevice *device);
} NMBluez4AdapterClass;
typedef struct _NMBluez4Adapter NMBluez4Adapter;
typedef struct _NMBluez4AdapterClass NMBluez4AdapterClass;
GType nm_bluez4_adapter_get_type (void);
@ -62,4 +50,3 @@ gboolean nm_bluez4_adapter_get_initialized (NMBluez4Adapter *self);
GSList *nm_bluez4_adapter_get_devices (NMBluez4Adapter *self);
#endif /* __NETWORKMANAGER_BLUEZ4_ADAPTER_H__ */

View file

@ -28,11 +28,19 @@
#include <stdlib.h>
#include "nm-bluez4-adapter.h"
#include "nm-bluez-manager.h"
#include "nm-bluez-common.h"
#include "nm-core-internal.h"
#include "nm-settings.h"
/*****************************************************************************/
enum {
BDADDR_ADDED,
LAST_SIGNAL,
};
static guint signals[LAST_SIGNAL] = { 0 };
typedef struct {
gulong name_owner_changed_id;
@ -43,19 +51,22 @@ typedef struct {
NMBluez4Adapter *adapter;
} NMBluez4ManagerPrivate;
#define NM_BLUEZ4_MANAGER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_BLUEZ4_MANAGER, NMBluez4ManagerPrivate))
struct _NMBluez4Manager {
GObject parent;
NMBluez4ManagerPrivate _priv;
};
struct _NMBluez4ManagerClass {
GObjectClass parent;
};
G_DEFINE_TYPE (NMBluez4Manager, nm_bluez4_manager, G_TYPE_OBJECT)
enum {
BDADDR_ADDED,
LAST_SIGNAL
};
#define NM_BLUEZ4_MANAGER_GET_PRIVATE(self) _NM_GET_PRIVATE (self, NMBluez4Manager, NM_IS_BLUEZ4_MANAGER)
static guint signals[LAST_SIGNAL] = { 0 };
/*****************************************************************************/
static void
emit_bdaddr_added (NMBluez4Manager *self, NMBluezDevice *device)
{
g_signal_emit (self, signals[BDADDR_ADDED], 0,
@ -224,18 +235,6 @@ name_owner_changed_cb (GObject *object,
/*****************************************************************************/
NMBluez4Manager *
nm_bluez4_manager_new (NMSettings *settings)
{
NMBluez4Manager *instance;
g_return_val_if_fail (NM_IS_SETTINGS (settings), NULL);
instance = g_object_new (NM_TYPE_BLUEZ4_MANAGER, NULL);
NM_BLUEZ4_MANAGER_GET_PRIVATE (instance)->settings = g_object_ref (settings);
return instance;
}
static void
nm_bluez4_manager_init (NMBluez4Manager *self)
{
@ -258,6 +257,18 @@ nm_bluez4_manager_init (NMBluez4Manager *self)
query_default_adapter (self);
}
NMBluez4Manager *
nm_bluez4_manager_new (NMSettings *settings)
{
NMBluez4Manager *instance;
g_return_val_if_fail (NM_IS_SETTINGS (settings), NULL);
instance = g_object_new (NM_TYPE_BLUEZ4_MANAGER, NULL);
NM_BLUEZ4_MANAGER_GET_PRIVATE (instance)->settings = g_object_ref (settings);
return instance;
}
static void
dispose (GObject *object)
{
@ -277,19 +288,14 @@ nm_bluez4_manager_class_init (NMBluez4ManagerClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
g_type_class_add_private (klass, sizeof (NMBluez4ManagerPrivate));
/* virtual methods */
object_class->dispose = dispose;
/* Signals */
signals[BDADDR_ADDED] =
g_signal_new (NM_BLUEZ_MANAGER_BDADDR_ADDED,
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (NMBluez4ManagerClass, bdaddr_added),
NULL, NULL, NULL,
G_TYPE_NONE, 5, G_TYPE_OBJECT, G_TYPE_STRING,
G_TYPE_STRING, G_TYPE_STRING, G_TYPE_UINT);
g_signal_new (NM_BLUEZ_MANAGER_BDADDR_ADDED,
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST,
0, NULL, NULL, NULL,
G_TYPE_NONE, 5, G_TYPE_OBJECT, G_TYPE_STRING,
G_TYPE_STRING, G_TYPE_STRING, G_TYPE_UINT);
}

View file

@ -28,20 +28,8 @@
#define NM_IS_BLUEZ4_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_BLUEZ4_MANAGER))
#define NM_BLUEZ4_MANAGER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_BLUEZ4_MANAGER, NMBluez4ManagerClass))
typedef struct {
GObject parent;
} NMBluez4Manager;
typedef struct {
GObjectClass parent;
/* Signals */
void (*bdaddr_added) (NMBluez4Manager *manager,
const char *bdaddr,
const char *name,
const char *object_path,
guint uuids);
} NMBluez4ManagerClass;
typedef struct _NMBluez4Manager NMBluez4Manager;
typedef struct _NMBluez4ManagerClass NMBluez4ManagerClass;
GType nm_bluez4_manager_get_type (void);
@ -50,4 +38,3 @@ NMBluez4Manager *nm_bluez4_manager_new (NMSettings *settings);
void nm_bluez4_manager_query_devices (NMBluez4Manager *manager);
#endif /* __NETWORKMANAGER_BLUEZ4_MANAGER_H__ */

View file

@ -30,11 +30,19 @@
#include "nm-core-internal.h"
#include "nm-bluez-manager.h"
#include "nm-bluez-device.h"
#include "nm-bluez-common.h"
#include "nm-settings.h"
/*****************************************************************************/
enum {
BDADDR_ADDED,
LAST_SIGNAL,
};
static guint signals[LAST_SIGNAL] = { 0 };
typedef struct {
NMSettings *settings;
@ -43,20 +51,26 @@ typedef struct {
GHashTable *devices;
} NMBluez5ManagerPrivate;
#define NM_BLUEZ5_MANAGER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_BLUEZ5_MANAGER, NMBluez5ManagerPrivate))
struct _NMBluez5Manager {
GObject parent;
NMBluez5ManagerPrivate _priv;
};
struct _NMBluez5ManagerClass {
GObjectClass parent;
};
G_DEFINE_TYPE (NMBluez5Manager, nm_bluez5_manager, G_TYPE_OBJECT)
enum {
BDADDR_ADDED,
LAST_SIGNAL
};
#define NM_BLUEZ5_MANAGER_GET_PRIVATE(self) _NM_GET_PRIVATE (self, NMBluez5Manager, NM_IS_BLUEZ5_MANAGER)
static guint signals[LAST_SIGNAL] = { 0 };
/*****************************************************************************/
static void device_initialized (NMBluezDevice *device, gboolean success, NMBluez5Manager *self);
static void device_usable (NMBluezDevice *device, GParamSpec *pspec, NMBluez5Manager *self);
/*****************************************************************************/
static void
emit_bdaddr_added (NMBluez5Manager *self, NMBluezDevice *device)
{
@ -310,6 +324,17 @@ bluez_cleanup (NMBluez5Manager *self, gboolean do_signal)
/*****************************************************************************/
static void
nm_bluez5_manager_init (NMBluez5Manager *self)
{
NMBluez5ManagerPrivate *priv = NM_BLUEZ5_MANAGER_GET_PRIVATE (self);
bluez_connect (self);
priv->devices = g_hash_table_new_full (g_str_hash, g_str_equal,
NULL, g_object_unref);
}
NMBluez5Manager *
nm_bluez5_manager_new (NMSettings *settings)
{
@ -322,17 +347,6 @@ nm_bluez5_manager_new (NMSettings *settings)
return instance;
}
static void
nm_bluez5_manager_init (NMBluez5Manager *self)
{
NMBluez5ManagerPrivate *priv = NM_BLUEZ5_MANAGER_GET_PRIVATE (self);
bluez_connect (self);
priv->devices = g_hash_table_new_full (g_str_hash, g_str_equal,
NULL, g_object_unref);
}
static void
dispose (GObject *object)
{
@ -346,7 +360,7 @@ dispose (GObject *object)
static void
finalize (GObject *object)
{
NMBluez5ManagerPrivate *priv = NM_BLUEZ5_MANAGER_GET_PRIVATE (object);
NMBluez5ManagerPrivate *priv = NM_BLUEZ5_MANAGER_GET_PRIVATE ((NMBluez5Manager *) object);
g_hash_table_destroy (priv->devices);
@ -360,19 +374,14 @@ nm_bluez5_manager_class_init (NMBluez5ManagerClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
g_type_class_add_private (klass, sizeof (NMBluez5ManagerPrivate));
/* virtual methods */
object_class->dispose = dispose;
object_class->finalize = finalize;
/* Signals */
signals[BDADDR_ADDED] =
g_signal_new (NM_BLUEZ_MANAGER_BDADDR_ADDED,
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (NMBluez5ManagerClass, bdaddr_added),
NULL, NULL, NULL,
G_TYPE_NONE, 5, G_TYPE_OBJECT, G_TYPE_STRING,
G_TYPE_STRING, G_TYPE_STRING, G_TYPE_UINT);
g_signal_new (NM_BLUEZ_MANAGER_BDADDR_ADDED,
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST,
0, NULL, NULL, NULL,
G_TYPE_NONE, 5, G_TYPE_OBJECT, G_TYPE_STRING,
G_TYPE_STRING, G_TYPE_STRING, G_TYPE_UINT);
}

View file

@ -29,20 +29,8 @@
#define NM_IS_BLUEZ5_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_BLUEZ5_MANAGER))
#define NM_BLUEZ5_MANAGER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_BLUEZ5_MANAGER, NMBluez5ManagerClass))
typedef struct {
GObject parent;
} NMBluez5Manager;
typedef struct {
GObjectClass parent;
/* Signals */
void (*bdaddr_added) (NMBluez5Manager *manager,
const char *bdaddr,
const char *name,
const char *object_path,
guint uuids);
} NMBluez5ManagerClass;
typedef struct _NMBluez5Manager NMBluez5Manager;
typedef struct _NMBluez5ManagerClass NMBluez5ManagerClass;
GType nm_bluez5_manager_get_type (void);
@ -51,4 +39,3 @@ NMBluez5Manager *nm_bluez5_manager_new (NMSettings *settings);
void nm_bluez5_manager_query_devices (NMBluez5Manager *manager);
#endif /* __NETWORKMANAGER_BLUEZ5_MANAGER_H__ */

View file

@ -44,18 +44,27 @@
#include "nmdbus-device-bt.h"
#include "nm-device-logging.h"
_LOG_DECLARE_SELF(NMDeviceBt);
#define MM_DBUS_SERVICE "org.freedesktop.ModemManager1"
#define MM_DBUS_PATH "/org/freedesktop/ModemManager1"
#define MM_DBUS_INTERFACE "org.freedesktop.ModemManager1"
#include "nm-device-logging.h"
_LOG_DECLARE_SELF(NMDeviceBt);
/*****************************************************************************/
G_DEFINE_TYPE (NMDeviceBt, nm_device_bt, NM_TYPE_DEVICE)
NM_GOBJECT_PROPERTIES_DEFINE_BASE (
PROP_BT_NAME,
PROP_BT_CAPABILITIES,
PROP_BT_DEVICE,
);
#define NM_DEVICE_BT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DEVICE_BT, NMDeviceBtPrivate))
enum {
PPP_STATS,
LAST_SIGNAL,
};
static gboolean modem_stage1 (NMDeviceBt *self, NMModem *modem, NMDeviceStateReason *reason);
static guint signals[LAST_SIGNAL] = { 0 };
typedef struct {
GDBusProxy *mm_proxy;
@ -77,22 +86,24 @@ typedef struct {
guint32 bt_type; /* BT type of the current connection */
} NMDeviceBtPrivate;
enum {
PROP_0,
PROP_BT_NAME,
PROP_BT_CAPABILITIES,
PROP_BT_DEVICE,
LAST_PROP
struct _NMDeviceBt {
NMDevice parent;
NMDeviceBtPrivate _priv;
};
enum {
PPP_STATS,
LAST_SIGNAL
struct _NMDeviceBtClass {
NMDeviceClass parent;
};
static guint signals[LAST_SIGNAL] = { 0 };
G_DEFINE_TYPE (NMDeviceBt, nm_device_bt, NM_TYPE_DEVICE)
#define NM_DEVICE_BT_GET_PRIVATE(self) _NM_GET_PRIVATE (self, NMDeviceBt, NM_IS_DEVICE_BT)
/*****************************************************************************/
static gboolean modem_stage1 (NMDeviceBt *self, NMModem *modem, NMDeviceStateReason *reason);
/*****************************************************************************/
guint32 nm_device_bt_get_capabilities (NMDeviceBt *self)
{
@ -133,7 +144,7 @@ can_auto_connect (NMDevice *device,
NMConnection *connection,
char **specific_object)
{
NMDeviceBtPrivate *priv = NM_DEVICE_BT_GET_PRIVATE (device);
NMDeviceBtPrivate *priv = NM_DEVICE_BT_GET_PRIVATE ((NMDeviceBt *) device);
guint32 bt_type;
nm_assert (!specific_object || !*specific_object);
@ -152,7 +163,7 @@ can_auto_connect (NMDevice *device,
static gboolean
check_connection_compatible (NMDevice *device, NMConnection *connection)
{
NMDeviceBtPrivate *priv = NM_DEVICE_BT_GET_PRIVATE (device);
NMDeviceBtPrivate *priv = NM_DEVICE_BT_GET_PRIVATE ((NMDeviceBt *) device);
NMSettingConnection *s_con;
NMSettingBluetooth *s_bt;
const char *bdaddr;
@ -190,7 +201,7 @@ check_connection_available (NMDevice *device,
NMDeviceCheckConAvailableFlags flags,
const char *specific_object)
{
NMDeviceBtPrivate *priv = NM_DEVICE_BT_GET_PRIVATE (device);
NMDeviceBtPrivate *priv = NM_DEVICE_BT_GET_PRIVATE ((NMDeviceBt *) device);
guint32 bt_type;
bt_type = get_connection_bt_type (connection);
@ -211,7 +222,7 @@ complete_connection (NMDevice *device,
const GSList *existing_connections,
GError **error)
{
NMDeviceBtPrivate *priv = NM_DEVICE_BT_GET_PRIVATE (device);
NMDeviceBtPrivate *priv = NM_DEVICE_BT_GET_PRIVATE ((NMDeviceBt *) device);
NMSettingBluetooth *s_bt;
const char *setting_bdaddr;
const char *ctype;
@ -420,7 +431,7 @@ static void
modem_auth_result (NMModem *modem, GError *error, gpointer user_data)
{
NMDevice *device = NM_DEVICE (user_data);
NMDeviceBtPrivate *priv = NM_DEVICE_BT_GET_PRIVATE (device);
NMDeviceBtPrivate *priv = NM_DEVICE_BT_GET_PRIVATE ((NMDeviceBt *) device);
NMDeviceStateReason reason = NM_DEVICE_STATE_REASON_NONE;
if (error) {
@ -488,7 +499,7 @@ device_state_changed (NMDevice *device,
NMDeviceState old_state,
NMDeviceStateReason reason)
{
NMDeviceBtPrivate *priv = NM_DEVICE_BT_GET_PRIVATE (device);
NMDeviceBtPrivate *priv = NM_DEVICE_BT_GET_PRIVATE ((NMDeviceBt *) device);
if (priv->modem)
nm_modem_device_state_changed (priv->modem, new_state, old_state, reason);
@ -828,7 +839,7 @@ static NMActStageReturn
act_stage2_config (NMDevice *device, NMDeviceStateReason *reason)
{
NMDeviceBt *self = NM_DEVICE_BT (device);
NMDeviceBtPrivate *priv = NM_DEVICE_BT_GET_PRIVATE (device);
NMDeviceBtPrivate *priv = NM_DEVICE_BT_GET_PRIVATE (self);
NMConnection *connection;
connection = nm_device_get_applied_connection (device);
@ -863,11 +874,11 @@ act_stage3_ip4_config_start (NMDevice *device,
NMIP4Config **out_config,
NMDeviceStateReason *reason)
{
NMDeviceBtPrivate *priv = NM_DEVICE_BT_GET_PRIVATE (device);
NMDeviceBtPrivate *priv = NM_DEVICE_BT_GET_PRIVATE ((NMDeviceBt *) device);
NMActStageReturn ret;
if (priv->bt_type == NM_BT_CAPABILITY_DUN) {
ret = nm_modem_stage3_ip4_config_start (NM_DEVICE_BT_GET_PRIVATE (device)->modem,
ret = nm_modem_stage3_ip4_config_start (priv->modem,
device,
NM_DEVICE_CLASS (nm_device_bt_parent_class),
reason);
@ -882,11 +893,11 @@ act_stage3_ip6_config_start (NMDevice *device,
NMIP6Config **out_config,
NMDeviceStateReason *reason)
{
NMDeviceBtPrivate *priv = NM_DEVICE_BT_GET_PRIVATE (device);
NMDeviceBtPrivate *priv = NM_DEVICE_BT_GET_PRIVATE ((NMDeviceBt *) device);
NMActStageReturn ret;
if (priv->bt_type == NM_BT_CAPABILITY_DUN) {
ret = nm_modem_stage3_ip6_config_start (NM_DEVICE_BT_GET_PRIVATE (device)->modem,
ret = nm_modem_stage3_ip6_config_start (priv->modem,
nm_device_get_act_request (device),
reason);
} else
@ -898,7 +909,7 @@ act_stage3_ip6_config_start (NMDevice *device,
static void
deactivate (NMDevice *device)
{
NMDeviceBtPrivate *priv = NM_DEVICE_BT_GET_PRIVATE (device);
NMDeviceBtPrivate *priv = NM_DEVICE_BT_GET_PRIVATE ((NMDeviceBt *) device);
priv->have_iface = FALSE;
priv->connected = FALSE;
@ -987,32 +998,56 @@ mm_name_owner_changed (GObject *object,
/*****************************************************************************/
NMDevice *
nm_device_bt_new (NMBluezDevice *bt_device,
const char *udi,
const char *bdaddr,
const char *name,
guint32 capabilities)
static void
get_property (GObject *object, guint prop_id,
GValue *value, GParamSpec *pspec)
{
g_return_val_if_fail (udi != NULL, NULL);
g_return_val_if_fail (bdaddr != NULL, NULL);
g_return_val_if_fail (name != NULL, NULL);
g_return_val_if_fail (capabilities != NM_BT_CAPABILITY_NONE, NULL);
g_return_val_if_fail (NM_IS_BLUEZ_DEVICE (bt_device), NULL);
NMDeviceBtPrivate *priv = NM_DEVICE_BT_GET_PRIVATE ((NMDeviceBt *) object);
return (NMDevice *) g_object_new (NM_TYPE_DEVICE_BT,
NM_DEVICE_UDI, udi,
NM_DEVICE_IFACE, bdaddr,
NM_DEVICE_DRIVER, "bluez",
NM_DEVICE_PERM_HW_ADDRESS, bdaddr,
NM_DEVICE_BT_DEVICE, bt_device,
NM_DEVICE_BT_NAME, name,
NM_DEVICE_BT_CAPABILITIES, capabilities,
NM_DEVICE_TYPE_DESC, "Bluetooth",
NM_DEVICE_DEVICE_TYPE, NM_DEVICE_TYPE_BT,
NULL);
switch (prop_id) {
case PROP_BT_NAME:
g_value_set_string (value, priv->name);
break;
case PROP_BT_CAPABILITIES:
g_value_set_uint (value, priv->capabilities);
break;
case PROP_BT_DEVICE:
g_value_set_object (value, priv->bt_device);
break;
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)
{
NMDeviceBtPrivate *priv = NM_DEVICE_BT_GET_PRIVATE ((NMDeviceBt *) object);
switch (prop_id) {
case PROP_BT_NAME:
/* Construct only */
priv->name = g_value_dup_string (value);
break;
case PROP_BT_CAPABILITIES:
/* Construct only */
priv->capabilities = g_value_get_uint (value);
break;
case PROP_BT_DEVICE:
/* Construct only */
priv->bt_device = g_value_dup_object (value);
g_signal_connect (priv->bt_device, "removed", G_CALLBACK (bluez_device_removed), object);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
/*****************************************************************************/
static void
nm_device_bt_init (NMDeviceBt *self)
{
@ -1043,7 +1078,7 @@ nm_device_bt_init (NMDeviceBt *self)
static void
constructed (GObject *object)
{
NMDeviceBtPrivate *priv = NM_DEVICE_BT_GET_PRIVATE (object);
NMDeviceBtPrivate *priv = NM_DEVICE_BT_GET_PRIVATE ((NMDeviceBt *) object);
const char *my_hwaddr;
G_OBJECT_CLASS (nm_device_bt_parent_class)->constructed (object);
@ -1058,58 +1093,36 @@ constructed (GObject *object)
object);
}
static void
set_property (GObject *object, guint prop_id,
const GValue *value, GParamSpec *pspec)
NMDevice *
nm_device_bt_new (NMBluezDevice *bt_device,
const char *udi,
const char *bdaddr,
const char *name,
guint32 capabilities)
{
NMDeviceBtPrivate *priv = NM_DEVICE_BT_GET_PRIVATE (object);
g_return_val_if_fail (udi != NULL, NULL);
g_return_val_if_fail (bdaddr != NULL, NULL);
g_return_val_if_fail (name != NULL, NULL);
g_return_val_if_fail (capabilities != NM_BT_CAPABILITY_NONE, NULL);
g_return_val_if_fail (NM_IS_BLUEZ_DEVICE (bt_device), NULL);
switch (prop_id) {
case PROP_BT_NAME:
/* Construct only */
priv->name = g_value_dup_string (value);
break;
case PROP_BT_CAPABILITIES:
/* Construct only */
priv->capabilities = g_value_get_uint (value);
break;
case PROP_BT_DEVICE:
/* Construct only */
priv->bt_device = g_value_dup_object (value);
g_signal_connect (priv->bt_device, "removed", G_CALLBACK (bluez_device_removed), object);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
static void
get_property (GObject *object, guint prop_id,
GValue *value, GParamSpec *pspec)
{
NMDeviceBtPrivate *priv = NM_DEVICE_BT_GET_PRIVATE (object);
switch (prop_id) {
case PROP_BT_NAME:
g_value_set_string (value, priv->name);
break;
case PROP_BT_CAPABILITIES:
g_value_set_uint (value, priv->capabilities);
break;
case PROP_BT_DEVICE:
g_value_set_object (value, priv->bt_device);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
return (NMDevice *) g_object_new (NM_TYPE_DEVICE_BT,
NM_DEVICE_UDI, udi,
NM_DEVICE_IFACE, bdaddr,
NM_DEVICE_DRIVER, "bluez",
NM_DEVICE_PERM_HW_ADDRESS, bdaddr,
NM_DEVICE_BT_DEVICE, bt_device,
NM_DEVICE_BT_NAME, name,
NM_DEVICE_BT_CAPABILITIES, capabilities,
NM_DEVICE_TYPE_DESC, "Bluetooth",
NM_DEVICE_DEVICE_TYPE, NM_DEVICE_TYPE_BT,
NULL);
}
static void
dispose (GObject *object)
{
NMDeviceBtPrivate *priv = NM_DEVICE_BT_GET_PRIVATE (object);
NMDeviceBtPrivate *priv = NM_DEVICE_BT_GET_PRIVATE ((NMDeviceBt *) object);
nm_clear_g_source (&priv->timeout_id);
@ -1129,7 +1142,7 @@ dispose (GObject *object)
static void
finalize (GObject *object)
{
NMDeviceBtPrivate *priv = NM_DEVICE_BT_GET_PRIVATE (object);
NMDeviceBtPrivate *priv = NM_DEVICE_BT_GET_PRIVATE ((NMDeviceBt *) object);
g_free (priv->rfcomm_iface);
g_free (priv->name);
@ -1144,8 +1157,6 @@ nm_device_bt_class_init (NMDeviceBtClass *klass)
GObjectClass *object_class = G_OBJECT_CLASS (klass);
NMDeviceClass *device_class = NM_DEVICE_CLASS (klass);
g_type_class_add_private (object_class, sizeof (NMDeviceBtPrivate));
object_class->constructed = constructed;
object_class->get_property = get_property;
object_class->set_property = set_property;
@ -1166,37 +1177,33 @@ nm_device_bt_class_init (NMDeviceBtClass *klass)
device_class->state_changed = device_state_changed;
/* Properties */
g_object_class_install_property
(object_class, PROP_BT_NAME,
g_param_spec_string (NM_DEVICE_BT_NAME, "", "",
NULL,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS));
obj_properties[PROP_BT_NAME] =
g_param_spec_string (NM_DEVICE_BT_NAME, "", "",
NULL,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS);
g_object_class_install_property
(object_class, PROP_BT_CAPABILITIES,
g_param_spec_uint (NM_DEVICE_BT_CAPABILITIES, "", "",
NM_BT_CAPABILITY_NONE, G_MAXUINT, NM_BT_CAPABILITY_NONE,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS));
obj_properties[PROP_BT_CAPABILITIES] =
g_param_spec_uint (NM_DEVICE_BT_CAPABILITIES, "", "",
NM_BT_CAPABILITY_NONE, G_MAXUINT, NM_BT_CAPABILITY_NONE,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS);
g_object_class_install_property
(object_class, PROP_BT_DEVICE,
g_param_spec_object (NM_DEVICE_BT_DEVICE, "", "",
NM_TYPE_BLUEZ_DEVICE,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS));
obj_properties[PROP_BT_DEVICE] =
g_param_spec_object (NM_DEVICE_BT_DEVICE, "", "",
NM_TYPE_BLUEZ_DEVICE,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS);
g_object_class_install_properties (object_class, _PROPERTY_ENUMS_LAST, obj_properties);
/* Signals */
signals[PPP_STATS] =
g_signal_new ("ppp-stats",
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (NMDeviceBtClass, ppp_stats),
NULL, NULL, NULL,
G_TYPE_NONE, 2,
G_TYPE_UINT, G_TYPE_UINT);
g_signal_new ("ppp-stats",
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST,
0, NULL, NULL, NULL,
G_TYPE_NONE, 2,
G_TYPE_UINT, G_TYPE_UINT);
nm_exported_object_class_add_interface (NM_EXPORTED_OBJECT_CLASS (klass),
NMDBUS_TYPE_DEVICE_BLUETOOTH_SKELETON,

View file

@ -25,27 +25,19 @@
#include "nm-bluez-device.h"
#include "nm-modem.h"
#define NM_TYPE_DEVICE_BT (nm_device_bt_get_type ())
#define NM_DEVICE_BT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_DEVICE_BT, NMDeviceBt))
#define NM_DEVICE_BT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_DEVICE_BT, NMDeviceBtClass))
#define NM_IS_DEVICE_BT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_DEVICE_BT))
#define NM_IS_DEVICE_BT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_DEVICE_BT))
#define NM_DEVICE_BT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_DEVICE_BT, NMDeviceBtClass))
#define NM_TYPE_DEVICE_BT (nm_device_bt_get_type ())
#define NM_DEVICE_BT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_DEVICE_BT, NMDeviceBt))
#define NM_DEVICE_BT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_DEVICE_BT, NMDeviceBtClass))
#define NM_IS_DEVICE_BT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_DEVICE_BT))
#define NM_IS_DEVICE_BT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_DEVICE_BT))
#define NM_DEVICE_BT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_DEVICE_BT, NMDeviceBtClass))
#define NM_DEVICE_BT_NAME "name"
#define NM_DEVICE_BT_CAPABILITIES "bt-capabilities"
#define NM_DEVICE_BT_DEVICE "bt-device"
typedef struct {
NMDevice parent;
} NMDeviceBt;
typedef struct {
NMDeviceClass parent;
/* Signals */
void (*ppp_stats) (NMDeviceBt *device, guint32 in_bytes, guint32 out_bytes);
} NMDeviceBtClass;
typedef struct _NMDeviceBt NMDeviceBt;
typedef struct _NMDeviceBtClass NMDeviceBtClass;
GType nm_device_bt_get_type (void);

View file

@ -16,15 +16,18 @@
#include "nm-default.h"
#include "nm-arping-manager.h"
#include <netinet/in.h>
#include <sys/types.h>
#include <sys/wait.h>
#include "nm-arping-manager.h"
#include "nm-platform.h"
#include "nm-utils.h"
#include "NetworkManagerUtils.h"
/*****************************************************************************/
typedef enum {
STATE_INIT,
STATE_PROBING,
@ -32,6 +35,23 @@ typedef enum {
STATE_ANNOUNCING,
} State;
typedef struct {
in_addr_t address;
GPid pid;
guint watch;
gboolean duplicate;
NMArpingManager *manager;
} AddressInfo;
/*****************************************************************************/
enum {
PROBE_TERMINATED,
LAST_SIGNAL,
};
static guint signals[LAST_SIGNAL] = { 0 };
typedef struct {
int ifindex;
State state;
@ -41,23 +61,20 @@ typedef struct {
guint round2_id;
} NMArpingManagerPrivate;
typedef struct {
in_addr_t address;
GPid pid;
guint watch;
gboolean duplicate;
NMArpingManager *manager;
} AddressInfo;
enum {
PROBE_TERMINATED,
LAST_SIGNAL,
struct _NMArpingManager {
GObject parent;
NMArpingManagerPrivate _priv;
};
struct _NMArpingManagerClass {
GObjectClass parent;
};
static guint signals[LAST_SIGNAL] = { 0 };
G_DEFINE_TYPE (NMArpingManager, nm_arping_manager, G_TYPE_OBJECT)
#define NM_ARPING_MANAGER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_ARPING_MANAGER, NMArpingManagerPrivate))
#define NM_ARPING_MANAGER_GET_PRIVATE(self) _NM_GET_PRIVATE (self, NMArpingManager, NM_IS_ARPING_MANAGER)
/*****************************************************************************/
#define _NMLOG_DOMAIN LOGD_IP4
#define _NMLOG_PREFIX_NAME "arping"
@ -74,6 +91,8 @@ G_DEFINE_TYPE (NMArpingManager, nm_arping_manager, G_TYPE_OBJECT)
_NM_UTILS_MACRO_REST (__VA_ARGS__)); \
} G_STMT_END
/*****************************************************************************/
/**
* nm_arping_manager_add_address:
* @self: a #NMArpingManager
@ -350,7 +369,7 @@ send_announcements (NMArpingManager *self, const char *mode_arg)
static gboolean
arp_announce_round2 (gpointer self)
{
NMArpingManagerPrivate *priv = NM_ARPING_MANAGER_GET_PRIVATE (self);
NMArpingManagerPrivate *priv = NM_ARPING_MANAGER_GET_PRIVATE ((NMArpingManager *) self);
priv->round2_id = 0;
send_announcements (self, "-U");
@ -395,18 +414,7 @@ destroy_address_info (gpointer data)
g_slice_free (AddressInfo, info);
}
static void
dispose (GObject *object)
{
NMArpingManager *self = NM_ARPING_MANAGER (object);
NMArpingManagerPrivate *priv = NM_ARPING_MANAGER_GET_PRIVATE (self);
nm_clear_g_source (&priv->timer);
nm_clear_g_source (&priv->round2_id);
g_clear_pointer (&priv->addresses, g_hash_table_destroy);
G_OBJECT_CLASS (nm_arping_manager_parent_class)->dispose (object);
}
/*****************************************************************************/
static void
nm_arping_manager_init (NMArpingManager *self)
@ -427,23 +435,33 @@ nm_arping_manager_new (int ifindex)
self = g_object_new (NM_TYPE_ARPING_MANAGER, NULL);
priv = NM_ARPING_MANAGER_GET_PRIVATE (self);
priv->ifindex = ifindex;
return self;
}
static void
dispose (GObject *object)
{
NMArpingManager *self = NM_ARPING_MANAGER (object);
NMArpingManagerPrivate *priv = NM_ARPING_MANAGER_GET_PRIVATE (self);
nm_clear_g_source (&priv->timer);
nm_clear_g_source (&priv->round2_id);
g_clear_pointer (&priv->addresses, g_hash_table_destroy);
G_OBJECT_CLASS (nm_arping_manager_parent_class)->dispose (object);
}
static void
nm_arping_manager_class_init (NMArpingManagerClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
g_type_class_add_private (klass, sizeof (NMArpingManagerPrivate));
object_class->dispose = dispose;
signals[PROBE_TERMINATED] =
g_signal_new (NM_ARPING_MANAGER_PROBE_TERMINATED,
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST,
0, NULL, NULL, NULL,
G_TYPE_NONE, 0);
g_signal_new (NM_ARPING_MANAGER_PROBE_TERMINATED,
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST,
0, NULL, NULL, NULL,
G_TYPE_NONE, 0);
}

View file

@ -28,13 +28,7 @@
#define NM_ARPING_MANAGER_PROBE_TERMINATED "probe-terminated"
struct _NMArpingManager {
GObject parent;
};
typedef struct {
GObjectClass parent;
} NMArpingManagerClass;
typedef struct _NMArpingManagerClass NMArpingManagerClass;
GType nm_arping_manager_get_type (void);

View file

@ -20,10 +20,11 @@
#include "nm-default.h"
#include "nm-device-bond.h"
#include <errno.h>
#include <stdlib.h>
#include "nm-device-bond.h"
#include "NetworkManagerUtils.h"
#include "nm-device-private.h"
#include "nm-platform.h"
@ -37,14 +38,18 @@
#include "nm-device-logging.h"
_LOG_DECLARE_SELF(NMDeviceBond);
/*****************************************************************************/
struct _NMDeviceBond {
NMDevice parent;
};
struct _NMDeviceBondClass {
NMDeviceClass parent;
};
G_DEFINE_TYPE (NMDeviceBond, nm_device_bond, NM_TYPE_DEVICE)
#define NM_DEVICE_BOND_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DEVICE_BOND, NMDeviceBondPrivate))
typedef struct {
int dummy;
} NMDeviceBondPrivate;
/*****************************************************************************/
static NMDeviceCapabilities
@ -492,11 +497,8 @@ nm_device_bond_init (NMDeviceBond * self)
static void
nm_device_bond_class_init (NMDeviceBondClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
NMDeviceClass *parent_class = NM_DEVICE_CLASS (klass);
g_type_class_add_private (object_class, sizeof (NMDeviceBondPrivate));
NM_DEVICE_CLASS_DECLARE_TYPES (klass, NM_SETTING_BOND_SETTING_NAME, NM_LINK_TYPE_BOND)
parent_class->get_generic_capabilities = get_generic_capabilities;
@ -545,5 +547,4 @@ NM_DEVICE_FACTORY_DEFINE_INTERNAL (BOND, Bond, bond,
NM_DEVICE_FACTORY_DECLARE_LINK_TYPES (NM_LINK_TYPE_BOND)
NM_DEVICE_FACTORY_DECLARE_SETTING_TYPES (NM_SETTING_BOND_SETTING_NAME),
factory_iface->create_device = create_device;
)
);

View file

@ -30,8 +30,8 @@
#define NM_IS_DEVICE_BOND_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_DEVICE_BOND))
#define NM_DEVICE_BOND_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_DEVICE_BOND, NMDeviceBondClass))
typedef NMDevice NMDeviceBond;
typedef NMDeviceClass NMDeviceBondClass;
typedef struct _NMDeviceBond NMDeviceBond;
typedef struct _NMDeviceBondClass NMDeviceBondClass;
GType nm_device_bond_get_type (void);

View file

@ -20,9 +20,10 @@
#include "nm-default.h"
#include "nm-device-bridge.h"
#include <stdlib.h>
#include "nm-device-bridge.h"
#include "NetworkManagerUtils.h"
#include "nm-device-private.h"
#include "nm-enum-types.h"
@ -35,14 +36,18 @@
#include "nm-device-logging.h"
_LOG_DECLARE_SELF(NMDeviceBridge);
/*****************************************************************************/
struct _NMDeviceBridge {
NMDevice parent;
};
struct _NMDeviceBridgeClass {
NMDeviceClass parent;
};
G_DEFINE_TYPE (NMDeviceBridge, nm_device_bridge, NM_TYPE_DEVICE)
#define NM_DEVICE_BRIDGE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DEVICE_BRIDGE, NMDeviceBridgePrivate))
typedef struct {
int dummy;
} NMDeviceBridgePrivate;
/*****************************************************************************/
static NMDeviceCapabilities
@ -421,11 +426,8 @@ nm_device_bridge_init (NMDeviceBridge * self)
static void
nm_device_bridge_class_init (NMDeviceBridgeClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
NMDeviceClass *parent_class = NM_DEVICE_CLASS (klass);
g_type_class_add_private (object_class, sizeof (NMDeviceBridgePrivate));
NM_DEVICE_CLASS_DECLARE_TYPES (klass, NM_SETTING_BRIDGE_SETTING_NAME, NM_LINK_TYPE_BRIDGE)
parent_class->get_generic_capabilities = get_generic_capabilities;
@ -473,5 +475,4 @@ NM_DEVICE_FACTORY_DEFINE_INTERNAL (BRIDGE, Bridge, bridge,
NM_DEVICE_FACTORY_DECLARE_LINK_TYPES (NM_LINK_TYPE_BRIDGE)
NM_DEVICE_FACTORY_DECLARE_SETTING_TYPES (NM_SETTING_BRIDGE_SETTING_NAME),
factory_iface->create_device = create_device;
)
);

View file

@ -30,8 +30,8 @@
#define NM_IS_DEVICE_BRIDGE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_DEVICE_BRIDGE))
#define NM_DEVICE_BRIDGE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_DEVICE_BRIDGE, NMDeviceBridgeClass))
typedef NMDevice NMDeviceBridge;
typedef NMDeviceClass NMDeviceBridgeClass;
typedef struct _NMDeviceBridge NMDeviceBridge;
typedef struct _NMDeviceBridgeClass NMDeviceBridgeClass;
GType nm_device_bridge_get_type (void);

View file

@ -33,11 +33,13 @@
#include "nm-device-private.h"
#include "nm-act-request.h"
#include "nm-ip4-config.h"
#include "NetworkManagerUtils.h"
#include "nm-supplicant-manager.h"
#include "nm-supplicant-interface.h"
#include "nm-supplicant-config.h"
#include "ppp-manager/nm-ppp-manager.h"
#include "ppp-manager/nm-ppp-status.h"
#include "nm-enum-types.h"
#include "nm-platform.h"
#include "nm-platform-utils.h"
@ -1633,7 +1635,6 @@ nm_device_ethernet_class_init (NMDeviceEthernetClass *klass)
NM_DEVICE_CLASS_DECLARE_TYPES (klass, NM_SETTING_WIRED_SETTING_NAME, NM_LINK_TYPE_ETHERNET)
/* virtual methods */
object_class->constructed = constructed;
object_class->dispose = dispose;
object_class->finalize = finalize;

View file

@ -42,7 +42,7 @@ typedef struct {
} NMDeviceEthernet;
typedef struct {
NMDeviceClass parent_class;
NMDeviceClass parent;
} NMDeviceEthernetClass;
GType nm_device_ethernet_get_type (void);

View file

@ -21,6 +21,7 @@
#include "nm-default.h"
#include "nm-device-generic.h"
#include "nm-device-private.h"
#include "nm-enum-types.h"
#include "nm-platform.h"
@ -28,21 +29,31 @@
#include "nmdbus-device-generic.h"
G_DEFINE_TYPE (NMDeviceGeneric, nm_device_generic, NM_TYPE_DEVICE)
/*****************************************************************************/
#define NM_DEVICE_GENERIC_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DEVICE_GENERIC, NMDeviceGenericPrivate))
NM_GOBJECT_PROPERTIES_DEFINE_BASE (
PROP_TYPE_DESCRIPTION,
);
typedef struct {
char *type_description;
} NMDeviceGenericPrivate;
enum {
PROP_0,
PROP_TYPE_DESCRIPTION,
LAST_PROP
struct _NMDeviceGeneric {
NMDevice parent;
NMDeviceGenericPrivate _priv;
};
struct _NMDeviceGenericClass {
NMDeviceClass parent;
};
G_DEFINE_TYPE (NMDeviceGeneric, nm_device_generic, NM_TYPE_DEVICE)
#define NM_DEVICE_GENERIC_GET_PRIVATE(self) _NM_GET_PRIVATE (self, NMDeviceGeneric, NM_IS_DEVICE_GENERIC)
/*****************************************************************************/
static NMDeviceCapabilities
get_generic_capabilities (NMDevice *dev)
{
@ -55,8 +66,8 @@ get_generic_capabilities (NMDevice *dev)
static const char *
get_type_description (NMDevice *device)
{
if (NM_DEVICE_GENERIC_GET_PRIVATE (device)->type_description)
return NM_DEVICE_GENERIC_GET_PRIVATE (device)->type_description;
if (NM_DEVICE_GENERIC_GET_PRIVATE ((NMDeviceGeneric *) device)->type_description)
return NM_DEVICE_GENERIC_GET_PRIVATE ((NMDeviceGeneric *) device)->type_description;
return NM_DEVICE_CLASS (nm_device_generic_parent_class)->get_type_description (device);
}
@ -110,51 +121,6 @@ update_connection (NMDevice *device, NMConnection *connection)
/*****************************************************************************/
NMDevice *
nm_device_generic_new (const NMPlatformLink *plink, gboolean nm_plugin_missing)
{
g_return_val_if_fail (plink != NULL, NULL);
return (NMDevice *) g_object_new (NM_TYPE_DEVICE_GENERIC,
NM_DEVICE_IFACE, plink->name,
NM_DEVICE_TYPE_DESC, "Generic",
NM_DEVICE_DEVICE_TYPE, NM_DEVICE_TYPE_GENERIC,
NM_DEVICE_NM_PLUGIN_MISSING, nm_plugin_missing,
NULL);
}
static void
nm_device_generic_init (NMDeviceGeneric *self)
{
}
static GObject *
constructor (GType type,
guint n_construct_params,
GObjectConstructParam *construct_params)
{
GObject *object;
object = G_OBJECT_CLASS (nm_device_generic_parent_class)->constructor (type,
n_construct_params,
construct_params);
nm_device_set_unmanaged_flags ((NMDevice *) object, NM_UNMANAGED_BY_DEFAULT, TRUE);
return object;
}
static void
dispose (GObject *object)
{
NMDeviceGeneric *self = NM_DEVICE_GENERIC (object);
NMDeviceGenericPrivate *priv = NM_DEVICE_GENERIC_GET_PRIVATE (self);
g_clear_pointer (&priv->type_description, g_free);
G_OBJECT_CLASS (nm_device_generic_parent_class)->dispose (object);
}
static void
get_property (GObject *object, guint prop_id,
GValue *value, GParamSpec *pspec)
@ -189,14 +155,59 @@ set_property (GObject *object, guint prop_id,
}
}
/*****************************************************************************/
static void
nm_device_generic_init (NMDeviceGeneric *self)
{
}
static GObject *
constructor (GType type,
guint n_construct_params,
GObjectConstructParam *construct_params)
{
GObject *object;
object = G_OBJECT_CLASS (nm_device_generic_parent_class)->constructor (type,
n_construct_params,
construct_params);
nm_device_set_unmanaged_flags ((NMDevice *) object, NM_UNMANAGED_BY_DEFAULT, TRUE);
return object;
}
NMDevice *
nm_device_generic_new (const NMPlatformLink *plink, gboolean nm_plugin_missing)
{
g_return_val_if_fail (plink != NULL, NULL);
return (NMDevice *) g_object_new (NM_TYPE_DEVICE_GENERIC,
NM_DEVICE_IFACE, plink->name,
NM_DEVICE_TYPE_DESC, "Generic",
NM_DEVICE_DEVICE_TYPE, NM_DEVICE_TYPE_GENERIC,
NM_DEVICE_NM_PLUGIN_MISSING, nm_plugin_missing,
NULL);
}
static void
dispose (GObject *object)
{
NMDeviceGeneric *self = NM_DEVICE_GENERIC (object);
NMDeviceGenericPrivate *priv = NM_DEVICE_GENERIC_GET_PRIVATE (self);
g_clear_pointer (&priv->type_description, g_free);
G_OBJECT_CLASS (nm_device_generic_parent_class)->dispose (object);
}
static void
nm_device_generic_class_init (NMDeviceGenericClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
NMDeviceClass *parent_class = NM_DEVICE_CLASS (klass);
g_type_class_add_private (klass, sizeof (NMDeviceGenericPrivate));
NM_DEVICE_CLASS_DECLARE_TYPES (klass, NM_SETTING_GENERIC_SETTING_NAME, NM_LINK_TYPE_ANY)
object_class->constructor = constructor;
@ -210,13 +221,13 @@ nm_device_generic_class_init (NMDeviceGenericClass *klass)
parent_class->check_connection_compatible = check_connection_compatible;
parent_class->update_connection = update_connection;
/* properties */
g_object_class_install_property
(object_class, PROP_TYPE_DESCRIPTION,
g_param_spec_string (NM_DEVICE_GENERIC_TYPE_DESCRIPTION, "", "",
NULL,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS));
obj_properties[PROP_TYPE_DESCRIPTION] =
g_param_spec_string (NM_DEVICE_GENERIC_TYPE_DESCRIPTION, "", "",
NULL,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS);
g_object_class_install_properties (object_class, _PROPERTY_ENUMS_LAST, obj_properties);
nm_exported_object_class_add_interface (NM_EXPORTED_OBJECT_CLASS (klass),
NMDBUS_TYPE_DEVICE_GENERIC_SKELETON,

View file

@ -32,14 +32,8 @@
#define NM_DEVICE_GENERIC_TYPE_DESCRIPTION "type-description"
typedef struct {
NMDevice parent;
} NMDeviceGeneric;
typedef struct {
NMDeviceClass parent;
} NMDeviceGenericClass;
typedef struct _NMDeviceGeneric NMDeviceGeneric;
typedef struct _NMDeviceGenericClass NMDeviceGenericClass;
GType nm_device_generic_get_type (void);

View file

@ -20,9 +20,10 @@
#include "nm-default.h"
#include "nm-device-infiniband.h"
#include <linux/if_infiniband.h>
#include "nm-device-infiniband.h"
#include "NetworkManagerUtils.h"
#include "nm-device-private.h"
#include "nm-enum-types.h"
@ -34,32 +35,41 @@
#include "nmdbus-device-infiniband.h"
G_DEFINE_TYPE (NMDeviceInfiniband, nm_device_infiniband, NM_TYPE_DEVICE)
#define NM_DEVICE_INFINIBAND_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DEVICE_INFINIBAND, NMDeviceInfinibandPrivate))
#define NM_DEVICE_INFINIBAND_IS_PARTITION "is-partition"
/*****************************************************************************/
NM_GOBJECT_PROPERTIES_DEFINE_BASE (
PROP_IS_PARTITION,
);
typedef struct {
gboolean is_partition;
int parent_ifindex, p_key;
int parent_ifindex;
int p_key;
} NMDeviceInfinibandPrivate;
enum {
PROP_0,
PROP_IS_PARTITION,
LAST_PROP
struct _NMDeviceInfiniband {
NMDevice parent;
NMDeviceInfinibandPrivate _priv;
};
struct _NMDeviceInfinibandClass {
NMDeviceClass parent;
};
G_DEFINE_TYPE (NMDeviceInfiniband, nm_device_infiniband, NM_TYPE_DEVICE)
#define NM_DEVICE_INFINIBAND_GET_PRIVATE(self) _NM_GET_PRIVATE (self, NMDeviceInfiniband, NM_IS_DEVICE_INFINIBAND)
/*****************************************************************************/
static NMDeviceCapabilities
get_generic_capabilities (NMDevice *dev)
get_generic_capabilities (NMDevice *device)
{
guint32 caps = NM_DEVICE_CAP_CARRIER_DETECT;
if (NM_DEVICE_INFINIBAND_GET_PRIVATE (dev)->is_partition)
if (NM_DEVICE_INFINIBAND_GET_PRIVATE ((NMDeviceInfiniband *) device)->is_partition)
caps |= NM_DEVICE_CAP_IS_SOFTWARE;
return caps;
@ -241,7 +251,7 @@ create_and_realize (NMDevice *device,
const NMPlatformLink **out_plink,
GError **error)
{
NMDeviceInfinibandPrivate *priv = NM_DEVICE_INFINIBAND_GET_PRIVATE (device);
NMDeviceInfinibandPrivate *priv = NM_DEVICE_INFINIBAND_GET_PRIVATE ((NMDeviceInfiniband *) device);
NMSettingInfiniband *s_infiniband;
NMPlatformError plerr;
@ -294,11 +304,13 @@ create_and_realize (NMDevice *device,
static gboolean
unrealize (NMDevice *device, GError **error)
{
NMDeviceInfinibandPrivate *priv = NM_DEVICE_INFINIBAND_GET_PRIVATE (device);
NMDeviceInfinibandPrivate *priv;
NMPlatformError plerr;
g_return_val_if_fail (NM_IS_DEVICE_INFINIBAND (device), FALSE);
priv = NM_DEVICE_INFINIBAND_GET_PRIVATE ((NMDeviceInfiniband *) device);
if (priv->p_key < 0) {
g_set_error (error, NM_DEVICE_ERROR, NM_DEVICE_ERROR_FAILED,
"Only InfiniBand partitions can be removed");
@ -319,18 +331,13 @@ unrealize (NMDevice *device, GError **error)
/*****************************************************************************/
static void
nm_device_infiniband_init (NMDeviceInfiniband * self)
{
}
static void
get_property (GObject *object, guint prop_id,
GValue *value, GParamSpec *pspec)
{
switch (prop_id) {
case PROP_IS_PARTITION:
g_value_set_boolean (value, NM_DEVICE_INFINIBAND_GET_PRIVATE (object)->is_partition);
g_value_set_boolean (value, NM_DEVICE_INFINIBAND_GET_PRIVATE ((NMDeviceInfiniband *) object)->is_partition);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@ -340,11 +347,11 @@ get_property (GObject *object, guint prop_id,
static void
set_property (GObject *object, guint prop_id,
const GValue *value, GParamSpec *pspec)
const GValue *value, GParamSpec *pspec)
{
switch (prop_id) {
case PROP_IS_PARTITION:
NM_DEVICE_INFINIBAND_GET_PRIVATE (object)->is_partition = g_value_get_boolean (value);
NM_DEVICE_INFINIBAND_GET_PRIVATE ((NMDeviceInfiniband *) object)->is_partition = g_value_get_boolean (value);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@ -352,17 +359,21 @@ set_property (GObject *object, guint prop_id,
}
}
/*****************************************************************************/
static void
nm_device_infiniband_init (NMDeviceInfiniband * self)
{
}
static void
nm_device_infiniband_class_init (NMDeviceInfinibandClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
NMDeviceClass *parent_class = NM_DEVICE_CLASS (klass);
g_type_class_add_private (object_class, sizeof (NMDeviceInfinibandPrivate));
NM_DEVICE_CLASS_DECLARE_TYPES (klass, NM_SETTING_INFINIBAND_SETTING_NAME, NM_LINK_TYPE_INFINIBAND)
/* virtual methods */
object_class->get_property = get_property;
object_class->set_property = set_property;
@ -376,13 +387,13 @@ nm_device_infiniband_class_init (NMDeviceInfinibandClass *klass)
parent_class->act_stage1_prepare = act_stage1_prepare;
parent_class->ip4_config_pre_commit = ip4_config_pre_commit;
/* properties */
g_object_class_install_property
(object_class, PROP_IS_PARTITION,
g_param_spec_boolean (NM_DEVICE_INFINIBAND_IS_PARTITION, "", "",
FALSE,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS));
obj_properties[PROP_IS_PARTITION] =
g_param_spec_boolean (NM_DEVICE_INFINIBAND_IS_PARTITION, "", "",
FALSE,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS);
g_object_class_install_properties (object_class, _PROPERTY_ENUMS_LAST, obj_properties);
nm_exported_object_class_add_interface (NM_EXPORTED_OBJECT_CLASS (klass),
NMDBUS_TYPE_DEVICE_INFINIBAND_SKELETON,
@ -464,5 +475,4 @@ NM_DEVICE_FACTORY_DEFINE_INTERNAL (INFINIBAND, Infiniband, infiniband,
factory_iface->create_device = create_device;
factory_iface->get_connection_parent = get_connection_parent;
factory_iface->get_connection_iface = get_connection_iface;
)
)

View file

@ -23,15 +23,15 @@
#include "nm-device.h"
#define NM_TYPE_DEVICE_INFINIBAND (nm_device_infiniband_get_type ())
#define NM_DEVICE_INFINIBAND(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_DEVICE_INFINIBAND, NMDeviceInfiniband))
#define NM_DEVICE_INFINIBAND_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_DEVICE_INFINIBAND, NMDeviceInfinibandClass))
#define NM_IS_DEVICE_INFINIBAND(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_DEVICE_INFINIBAND))
#define NM_IS_DEVICE_INFINIBAND_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_DEVICE_INFINIBAND))
#define NM_DEVICE_INFINIBAND_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_DEVICE_INFINIBAND, NMDeviceInfinibandClass))
#define NM_TYPE_DEVICE_INFINIBAND (nm_device_infiniband_get_type ())
#define NM_DEVICE_INFINIBAND(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_DEVICE_INFINIBAND, NMDeviceInfiniband))
#define NM_DEVICE_INFINIBAND_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_DEVICE_INFINIBAND, NMDeviceInfinibandClass))
#define NM_IS_DEVICE_INFINIBAND(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_DEVICE_INFINIBAND))
#define NM_IS_DEVICE_INFINIBAND_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_DEVICE_INFINIBAND))
#define NM_DEVICE_INFINIBAND_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_DEVICE_INFINIBAND, NMDeviceInfinibandClass))
typedef NMDevice NMDeviceInfiniband;
typedef NMDeviceClass NMDeviceInfinibandClass;
typedef struct _NMDeviceInfiniband NMDeviceInfiniband;
typedef struct _NMDeviceInfinibandClass NMDeviceInfinibandClass;
GType nm_device_infiniband_get_type (void);

View file

@ -42,9 +42,21 @@
#include "nm-device-logging.h"
_LOG_DECLARE_SELF(NMDeviceIPTunnel);
G_DEFINE_TYPE (NMDeviceIPTunnel, nm_device_ip_tunnel, NM_TYPE_DEVICE)
/*****************************************************************************/
#define NM_DEVICE_IP_TUNNEL_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DEVICE_IP_TUNNEL, NMDeviceIPTunnelPrivate))
NM_GOBJECT_PROPERTIES_DEFINE (NMDeviceIPTunnel,
PROP_MODE,
PROP_PARENT,
PROP_LOCAL,
PROP_REMOTE,
PROP_TTL,
PROP_TOS,
PROP_PATH_MTU_DISCOVERY,
PROP_INPUT_KEY,
PROP_OUTPUT_KEY,
PROP_ENCAPSULATION_LIMIT,
PROP_FLOW_LABEL,
);
typedef struct {
NMIPTunnelMode mode;
@ -62,23 +74,19 @@ typedef struct {
guint32 flow_label;
} NMDeviceIPTunnelPrivate;
enum {
PROP_0,
PROP_MODE,
PROP_PARENT,
PROP_LOCAL,
PROP_REMOTE,
PROP_TTL,
PROP_TOS,
PROP_PATH_MTU_DISCOVERY,
PROP_INPUT_KEY,
PROP_OUTPUT_KEY,
PROP_ENCAPSULATION_LIMIT,
PROP_FLOW_LABEL,
LAST_PROP
struct _NMDeviceIPTunnel {
NMDevice parent;
NMDeviceIPTunnelPrivate _priv;
};
struct _NMDeviceIPTunnelClass {
NMDeviceClass parent;
};
G_DEFINE_TYPE (NMDeviceIPTunnel, nm_device_ip_tunnel, NM_TYPE_DEVICE)
#define NM_DEVICE_IP_TUNNEL_GET_PRIVATE(self) _NM_GET_PRIVATE (self, NMDeviceIPTunnel, NM_IS_DEVICE_IP_TUNNEL)
/*****************************************************************************/
static gboolean
@ -118,7 +126,6 @@ update_properties_from_ifindex (NMDevice *device, int ifindex)
{
NMDeviceIPTunnel *self = NM_DEVICE_IP_TUNNEL (device);
NMDeviceIPTunnelPrivate *priv = NM_DEVICE_IP_TUNNEL_GET_PRIVATE (self);
GObject *object = G_OBJECT (device);
NMDevice *parent;
int parent_ifindex;
in_addr_t local4, remote4;
@ -133,23 +140,23 @@ clear:
if (priv->parent || priv->parent_ifindex) {
g_clear_object (&priv->parent);
priv->parent_ifindex = 0;
g_object_notify (object, NM_DEVICE_IP_TUNNEL_PARENT);
_notify (self, PROP_PARENT);
}
if (priv->local) {
g_clear_pointer (&priv->local, g_free);
g_object_notify (object, NM_DEVICE_IP_TUNNEL_LOCAL);
_notify (self, PROP_LOCAL);
}
if (priv->remote) {
g_clear_pointer (&priv->remote, g_free);
g_object_notify (object, NM_DEVICE_IP_TUNNEL_REMOTE);
_notify (self, PROP_REMOTE);
}
if (priv->input_key) {
g_clear_pointer (&priv->input_key, g_free);
g_object_notify (object, NM_DEVICE_IP_TUNNEL_INPUT_KEY);
_notify (self, PROP_INPUT_KEY);
}
if (priv->output_key) {
g_clear_pointer (&priv->output_key, g_free);
g_object_notify (object, NM_DEVICE_IP_TUNNEL_OUTPUT_KEY);
_notify (self, PROP_OUTPUT_KEY);
}
goto out;
@ -176,13 +183,13 @@ clear:
if (g_strcmp0 (priv->input_key, key)) {
g_free (priv->input_key);
priv->input_key = key;
g_object_notify (object, NM_DEVICE_IP_TUNNEL_INPUT_KEY);
_notify (self, PROP_INPUT_KEY);
} else
g_free (key);
} else {
if (priv->input_key) {
g_clear_pointer (&priv->input_key, g_free);
g_object_notify (object, NM_DEVICE_IP_TUNNEL_INPUT_KEY);
_notify (self, PROP_INPUT_KEY);
}
}
@ -191,13 +198,13 @@ clear:
if (g_strcmp0 (priv->output_key, key)) {
g_free (priv->output_key);
priv->output_key = key;
g_object_notify (object, NM_DEVICE_IP_TUNNEL_OUTPUT_KEY);
_notify (self, PROP_OUTPUT_KEY);
} else
g_free (key);
} else {
if (priv->output_key) {
g_clear_pointer (&priv->output_key, g_free);
g_object_notify (object, NM_DEVICE_IP_TUNNEL_OUTPUT_KEY);
_notify (self, PROP_OUTPUT_KEY);
}
}
} else if (priv->mode == NM_IP_TUNNEL_MODE_SIT) {
@ -256,7 +263,7 @@ clear:
parent = nm_manager_get_device_by_ifindex (nm_manager_get (), parent_ifindex);
if (parent)
priv->parent = g_object_ref (parent);
g_object_notify (object, NM_DEVICE_IP_TUNNEL_PARENT);
_notify (self, PROP_PARENT);
}
if (priv->addr_family == AF_INET) {
@ -264,28 +271,28 @@ clear:
g_clear_pointer (&priv->local, g_free);
if (local4)
priv->local = g_strdup (nm_utils_inet4_ntop (local4, NULL));
g_object_notify (object, NM_DEVICE_IP_TUNNEL_LOCAL);
_notify (self, PROP_LOCAL);
}
if (!address_equal_pn (AF_INET, priv->remote, &remote4)) {
g_clear_pointer (&priv->remote, g_free);
if (remote4)
priv->remote = g_strdup (nm_utils_inet4_ntop (remote4, NULL));
g_object_notify (object, NM_DEVICE_IP_TUNNEL_REMOTE);
_notify (self, PROP_REMOTE);
}
} else {
if (!address_equal_pn (AF_INET6, priv->local, &local6)) {
g_clear_pointer (&priv->local, g_free);
if (memcmp (&local6, &in6addr_any, sizeof (in6addr_any)))
priv->local = g_strdup (nm_utils_inet6_ntop (&local6, NULL));
g_object_notify (object, NM_DEVICE_IP_TUNNEL_LOCAL);
_notify (self, PROP_LOCAL);
}
if (!address_equal_pn (AF_INET6, priv->remote, &remote6)) {
g_clear_pointer (&priv->remote, g_free);
if (memcmp (&remote6, &in6addr_any, sizeof (in6addr_any)))
priv->remote = g_strdup (nm_utils_inet6_ntop (&remote6, NULL));
g_object_notify (object, NM_DEVICE_IP_TUNNEL_REMOTE);
_notify (self, PROP_REMOTE);
}
}
@ -293,27 +300,27 @@ out:
if (priv->ttl != ttl) {
priv->ttl = ttl;
g_object_notify (object, NM_DEVICE_IP_TUNNEL_TTL);
_notify (self, PROP_TTL);
}
if (priv->tos != tos) {
priv->tos = tos;
g_object_notify (object, NM_DEVICE_IP_TUNNEL_TOS);
_notify (self, PROP_TOS);
}
if (priv->path_mtu_discovery != pmtud) {
priv->path_mtu_discovery = pmtud;
g_object_notify (object, NM_DEVICE_IP_TUNNEL_PATH_MTU_DISCOVERY);
_notify (self, PROP_PATH_MTU_DISCOVERY);
}
if (priv->encap_limit != encap_limit) {
priv->encap_limit = encap_limit;
g_object_notify (object, NM_DEVICE_IP_TUNNEL_ENCAPSULATION_LIMIT);
_notify (self, PROP_ENCAPSULATION_LIMIT);
}
if (priv->flow_label != flow_label) {
priv->flow_label = flow_label;
g_object_notify (object, NM_DEVICE_IP_TUNNEL_FLOW_LABEL);
_notify (self, PROP_FLOW_LABEL);
}
}
@ -585,25 +592,6 @@ tunnel_mode_to_link_type (NMIPTunnelMode tunnel_mode)
/*****************************************************************************/
static void
nm_device_ip_tunnel_init (NMDeviceIPTunnel *self)
{
}
static void
constructed (GObject *object)
{
NMDeviceIPTunnelPrivate *priv = NM_DEVICE_IP_TUNNEL_GET_PRIVATE (object);
if ( priv->mode == NM_IP_TUNNEL_MODE_IPIP6
|| priv->mode == NM_IP_TUNNEL_MODE_IP6IP6)
priv->addr_family = AF_INET6;
else
priv->addr_family = AF_INET;
G_OBJECT_CLASS (nm_device_ip_tunnel_parent_class)->constructed (object);
}
static gboolean
create_and_realize (NMDevice *device,
NMConnection *connection,
@ -804,11 +792,13 @@ unrealize_notify (NMDevice *device)
update_properties_from_ifindex (device, 0);
}
/*****************************************************************************/
static void
get_property (GObject *object, guint prop_id,
GValue *value, GParamSpec *pspec)
{
NMDeviceIPTunnelPrivate *priv = NM_DEVICE_IP_TUNNEL_GET_PRIVATE (object);
NMDeviceIPTunnelPrivate *priv = NM_DEVICE_IP_TUNNEL_GET_PRIVATE ((NMDeviceIPTunnel *) object);
NMDevice *parent;
switch (prop_id) {
@ -854,9 +844,9 @@ get_property (GObject *object, guint prop_id,
static void
set_property (GObject *object, guint prop_id,
const GValue *value, GParamSpec *pspec)
const GValue *value, GParamSpec *pspec)
{
NMDeviceIPTunnelPrivate *priv = NM_DEVICE_IP_TUNNEL_GET_PRIVATE (object);
NMDeviceIPTunnelPrivate *priv = NM_DEVICE_IP_TUNNEL_GET_PRIVATE ((NMDeviceIPTunnel *) object);
switch (prop_id) {
case PROP_MODE:
@ -867,14 +857,33 @@ set_property (GObject *object, guint prop_id,
}
}
/*****************************************************************************/
static void
nm_device_ip_tunnel_init (NMDeviceIPTunnel *self)
{
}
static void
constructed (GObject *object)
{
NMDeviceIPTunnelPrivate *priv = NM_DEVICE_IP_TUNNEL_GET_PRIVATE ((NMDeviceIPTunnel *) object);
if ( priv->mode == NM_IP_TUNNEL_MODE_IPIP6
|| priv->mode == NM_IP_TUNNEL_MODE_IP6IP6)
priv->addr_family = AF_INET6;
else
priv->addr_family = AF_INET;
G_OBJECT_CLASS (nm_device_ip_tunnel_parent_class)->constructed (object);
}
static void
nm_device_ip_tunnel_class_init (NMDeviceIPTunnelClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
NMDeviceClass *device_class = NM_DEVICE_CLASS (klass);
g_type_class_add_private (klass, sizeof (NMDeviceIPTunnelPrivate));
object_class->constructed = constructed;
object_class->get_property = get_property;
object_class->set_property = set_property;
@ -896,90 +905,80 @@ nm_device_ip_tunnel_class_init (NMDeviceIPTunnelClass *klass)
NM_LINK_TYPE_IPIP,
NM_LINK_TYPE_SIT);
/* properties */
g_object_class_install_property
(object_class, PROP_MODE,
g_param_spec_uint (NM_DEVICE_IP_TUNNEL_MODE, "", "",
0, G_MAXUINT, 0,
G_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS));
obj_properties[PROP_MODE] =
g_param_spec_uint (NM_DEVICE_IP_TUNNEL_MODE, "", "",
0, G_MAXUINT, 0,
G_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS);
/* properties */
g_object_class_install_property
(object_class, PROP_PARENT,
g_param_spec_string (NM_DEVICE_IP_TUNNEL_PARENT, "", "",
NULL,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS));
obj_properties[PROP_PARENT] =
g_param_spec_string (NM_DEVICE_IP_TUNNEL_PARENT, "", "",
NULL,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS);
g_object_class_install_property
(object_class, PROP_LOCAL,
g_param_spec_string (NM_DEVICE_IP_TUNNEL_LOCAL, "", "",
NULL,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS));
obj_properties[PROP_LOCAL] =
g_param_spec_string (NM_DEVICE_IP_TUNNEL_LOCAL, "", "",
NULL,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS);
g_object_class_install_property
(object_class, PROP_REMOTE,
g_param_spec_string (NM_DEVICE_IP_TUNNEL_REMOTE, "", "",
NULL,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS));
obj_properties[PROP_REMOTE] =
g_param_spec_string (NM_DEVICE_IP_TUNNEL_REMOTE, "", "",
NULL,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS);
g_object_class_install_property
(object_class, PROP_TTL,
g_param_spec_uchar (NM_DEVICE_IP_TUNNEL_TTL, "", "",
0, 255, 0,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS));
obj_properties[PROP_TTL] =
g_param_spec_uchar (NM_DEVICE_IP_TUNNEL_TTL, "", "",
0, 255, 0,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS);
g_object_class_install_property
(object_class, PROP_TOS,
g_param_spec_uchar (NM_DEVICE_IP_TUNNEL_TOS, "", "",
0, 255, 0,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS));
obj_properties[PROP_TOS] =
g_param_spec_uchar (NM_DEVICE_IP_TUNNEL_TOS, "", "",
0, 255, 0,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS);
g_object_class_install_property
(object_class, PROP_PATH_MTU_DISCOVERY,
g_param_spec_boolean (NM_DEVICE_IP_TUNNEL_PATH_MTU_DISCOVERY, "", "",
FALSE,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS));
obj_properties[PROP_PATH_MTU_DISCOVERY] =
g_param_spec_boolean (NM_DEVICE_IP_TUNNEL_PATH_MTU_DISCOVERY, "", "",
FALSE,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS);
g_object_class_install_property
(object_class, PROP_INPUT_KEY,
g_param_spec_string (NM_DEVICE_IP_TUNNEL_INPUT_KEY, "", "",
NULL,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS));
obj_properties[PROP_INPUT_KEY] =
g_param_spec_string (NM_DEVICE_IP_TUNNEL_INPUT_KEY, "", "",
NULL,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS);
g_object_class_install_property
(object_class, PROP_OUTPUT_KEY,
g_param_spec_string (NM_DEVICE_IP_TUNNEL_OUTPUT_KEY, "", "",
NULL,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS));
obj_properties[PROP_OUTPUT_KEY] =
g_param_spec_string (NM_DEVICE_IP_TUNNEL_OUTPUT_KEY, "", "",
NULL,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS);
g_object_class_install_property
(object_class, PROP_ENCAPSULATION_LIMIT,
g_param_spec_uchar (NM_DEVICE_IP_TUNNEL_ENCAPSULATION_LIMIT, "", "",
0, 255, 0,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS));
obj_properties[PROP_ENCAPSULATION_LIMIT] =
g_param_spec_uchar (NM_DEVICE_IP_TUNNEL_ENCAPSULATION_LIMIT, "", "",
0, 255, 0,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS);
g_object_class_install_property
(object_class, PROP_FLOW_LABEL,
g_param_spec_uint (NM_DEVICE_IP_TUNNEL_FLOW_LABEL, "", "",
0, (1 << 20) - 1, 0,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS));
obj_properties[PROP_FLOW_LABEL] =
g_param_spec_uint (NM_DEVICE_IP_TUNNEL_FLOW_LABEL, "", "",
0, (1 << 20) - 1, 0,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS);
g_object_class_install_properties (object_class, _PROPERTY_ENUMS_LAST, obj_properties);
nm_exported_object_class_add_interface (NM_EXPORTED_OBJECT_CLASS (klass),
NMDBUS_TYPE_DEVICE_IPTUNNEL_SKELETON,
NULL);
}
/*****************************************************************************/
#define NM_TYPE_IP_TUNNEL_FACTORY (nm_ip_tunnel_factory_get_type ())
@ -1057,4 +1056,4 @@ NM_DEVICE_FACTORY_DEFINE_INTERNAL (IP_TUNNEL, IPTunnel, ip_tunnel,
factory_iface->create_device = create_device;
factory_iface->get_connection_parent = get_connection_parent;
factory_iface->get_connection_iface = get_connection_iface;
)
);

View file

@ -43,13 +43,8 @@
#define NM_DEVICE_IP_TUNNEL_ENCAPSULATION_LIMIT "encapsulation-limit"
#define NM_DEVICE_IP_TUNNEL_FLOW_LABEL "flow-label"
typedef struct {
NMDevice parent;
} NMDeviceIPTunnel;
typedef struct {
NMDeviceClass parent;
} NMDeviceIPTunnelClass;
typedef struct _NMDeviceIPTunnel NMDeviceIPTunnel;
typedef struct _NMDeviceIPTunnelClass NMDeviceIPTunnelClass;
GType nm_device_ip_tunnel_get_type (void);

View file

@ -41,9 +41,14 @@
#include "nm-device-logging.h"
_LOG_DECLARE_SELF(NMDeviceMacvlan);
G_DEFINE_TYPE (NMDeviceMacvlan, nm_device_macvlan, NM_TYPE_DEVICE)
/*****************************************************************************/
#define NM_DEVICE_MACVLAN_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DEVICE_MACVLAN, NMDeviceMacvlanPrivate))
NM_GOBJECT_PROPERTIES_DEFINE (NMDeviceMacvlan,
PROP_PARENT,
PROP_MODE,
PROP_NO_PROMISC,
PROP_TAP,
);
typedef struct {
int parent_ifindex;
@ -52,16 +57,21 @@ typedef struct {
NMPlatformLnkMacvlan props;
} NMDeviceMacvlanPrivate;
enum {
PROP_0,
PROP_PARENT,
PROP_MODE,
PROP_NO_PROMISC,
PROP_TAP,
LAST_PROP
struct _NMDeviceMacvlan {
NMDevice parent;
NMDeviceMacvlanPrivate _priv;
};
struct _NMDeviceMacvlanClass {
NMDeviceClass parent;
};
G_DEFINE_TYPE (NMDeviceMacvlan, nm_device_macvlan, NM_TYPE_DEVICE)
#define NM_DEVICE_MACVLAN_GET_PRIVATE(self) _NM_GET_PRIVATE (self, NMDeviceMacvlan, NM_IS_DEVICE_MACVLAN)
/*****************************************************************************/
static int modes[][2] = {
{ NM_SETTING_MACVLAN_MODE_VEPA, MACVLAN_MODE_VEPA },
{ NM_SETTING_MACVLAN_MODE_BRIDGE, MACVLAN_MODE_BRIDGE },
@ -158,17 +168,17 @@ nm_device_macvlan_set_parent (NMDeviceMacvlan *self, NMDevice *parent)
}
/* Recheck availability now that the parent has changed */
nm_device_queue_recheck_available (self,
nm_device_queue_recheck_available (device,
NM_DEVICE_STATE_REASON_PARENT_CHANGED,
NM_DEVICE_STATE_REASON_PARENT_CHANGED);
g_object_notify (G_OBJECT (device), NM_DEVICE_MACVLAN_PARENT);
_notify (self, PROP_PARENT);
}
static void
update_properties (NMDevice *device)
{
NMDeviceMacvlan *self = NM_DEVICE_MACVLAN (device);
NMDeviceMacvlanPrivate *priv = NM_DEVICE_MACVLAN_GET_PRIVATE (device);
NMDeviceMacvlanPrivate *priv = NM_DEVICE_MACVLAN_GET_PRIVATE (self);
GObject *object = G_OBJECT (device);
const NMPlatformLnkMacvlan *props;
const NMPlatformLink *plink;
@ -191,9 +201,9 @@ update_properties (NMDevice *device)
nm_device_macvlan_set_parent (self, parent);
}
if (priv->props.mode != props->mode)
g_object_notify (object, NM_DEVICE_MACVLAN_MODE);
_notify (self, PROP_MODE);
if (priv->props.no_promisc != props->no_promisc)
g_object_notify (object, NM_DEVICE_MACVLAN_NO_PROMISC);
_notify (self, PROP_NO_PROMISC);
priv->parent_ifindex = plink->parent;
priv->props = *props;
@ -272,7 +282,7 @@ get_generic_capabilities (NMDevice *dev)
static gboolean
is_available (NMDevice *device, NMDeviceCheckDevAvailableFlags flags)
{
if (!NM_DEVICE_MACVLAN_GET_PRIVATE (device)->parent)
if (!NM_DEVICE_MACVLAN_GET_PRIVATE ((NMDeviceMacvlan *) device)->parent)
return FALSE;
return NM_DEVICE_CLASS (nm_device_macvlan_parent_class)->is_available (device, flags);
@ -343,7 +353,7 @@ match_parent (NMDeviceMacvlan *self, const char *parent)
static gboolean
match_hwaddr (NMDevice *device, NMConnection *connection, gboolean fail_if_no_hwaddr)
{
NMDeviceMacvlanPrivate *priv = NM_DEVICE_MACVLAN_GET_PRIVATE (device);
NMDeviceMacvlanPrivate *priv = NM_DEVICE_MACVLAN_GET_PRIVATE ((NMDeviceMacvlan *) device);
NMSettingWired *s_wired;
const char *setting_mac;
const char *parent_mac;
@ -366,7 +376,7 @@ match_hwaddr (NMDevice *device, NMConnection *connection, gboolean fail_if_no_hw
static gboolean
check_connection_compatible (NMDevice *device, NMConnection *connection)
{
NMDeviceMacvlanPrivate *priv = NM_DEVICE_MACVLAN_GET_PRIVATE (device);
NMDeviceMacvlanPrivate *priv = NM_DEVICE_MACVLAN_GET_PRIVATE ((NMDeviceMacvlan *) device);
NMSettingMacvlan *s_macvlan;
const char *parent = NULL;
@ -445,7 +455,7 @@ complete_connection (NMDevice *device,
static void
update_connection (NMDevice *device, NMConnection *connection)
{
NMDeviceMacvlanPrivate *priv = NM_DEVICE_MACVLAN_GET_PRIVATE (device);
NMDeviceMacvlanPrivate *priv = NM_DEVICE_MACVLAN_GET_PRIVATE ((NMDeviceMacvlan *) device);
NMSettingMacvlan *s_macvlan = nm_connection_get_setting_macvlan (connection);
const char *setting_parent, *new_parent;
int new_mode;
@ -529,16 +539,11 @@ realize_start_notify (NMDevice *device, const NMPlatformLink *plink)
/*****************************************************************************/
static void
nm_device_macvlan_init (NMDeviceMacvlan *self)
{
}
static void
get_property (GObject *object, guint prop_id,
GValue *value, GParamSpec *pspec)
{
NMDeviceMacvlanPrivate *priv = NM_DEVICE_MACVLAN_GET_PRIVATE (object);
NMDeviceMacvlanPrivate *priv = NM_DEVICE_MACVLAN_GET_PRIVATE ((NMDeviceMacvlan *) object);
NMDevice *parent;
switch (prop_id) {
@ -566,9 +571,9 @@ get_property (GObject *object, guint prop_id,
static void
set_property (GObject *object, guint prop_id,
const GValue *value, GParamSpec *pspec)
const GValue *value, GParamSpec *pspec)
{
NMDeviceMacvlanPrivate *priv = NM_DEVICE_MACVLAN_GET_PRIVATE (object);
NMDeviceMacvlanPrivate *priv = NM_DEVICE_MACVLAN_GET_PRIVATE ((NMDeviceMacvlan *) object);
switch (prop_id) {
case PROP_TAP:
@ -579,6 +584,13 @@ set_property (GObject *object, guint prop_id,
}
}
/*****************************************************************************/
static void
nm_device_macvlan_init (NMDeviceMacvlan *self)
{
}
static void
dispose (GObject *object)
{
@ -593,8 +605,6 @@ nm_device_macvlan_class_init (NMDeviceMacvlanClass *klass)
GObjectClass *object_class = G_OBJECT_CLASS (klass);
NMDeviceClass *device_class = NM_DEVICE_CLASS (klass);
g_type_class_add_private (klass, sizeof (NMDeviceMacvlanPrivate));
NM_DEVICE_CLASS_DECLARE_TYPES (klass, NULL, NM_LINK_TYPE_MACVLAN, NM_LINK_TYPE_MACVTAP)
object_class->dispose = dispose;
@ -614,35 +624,32 @@ nm_device_macvlan_class_init (NMDeviceMacvlanClass *klass)
device_class->realize_start_notify = realize_start_notify;
device_class->update_connection = update_connection;
/* properties */
g_object_class_install_property
(object_class, PROP_PARENT,
g_param_spec_string (NM_DEVICE_MACVLAN_PARENT, "", "",
NULL,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS));
obj_properties[PROP_PARENT] =
g_param_spec_string (NM_DEVICE_MACVLAN_PARENT, "", "",
NULL,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS);
g_object_class_install_property
(object_class, PROP_MODE,
g_param_spec_string (NM_DEVICE_MACVLAN_MODE, "", "",
NULL,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS));
obj_properties[PROP_MODE] =
g_param_spec_string (NM_DEVICE_MACVLAN_MODE, "", "",
NULL,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS);
g_object_class_install_property
(object_class, PROP_NO_PROMISC,
g_param_spec_boolean (NM_DEVICE_MACVLAN_NO_PROMISC, "", "",
FALSE,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS));
obj_properties[PROP_NO_PROMISC] =
g_param_spec_boolean (NM_DEVICE_MACVLAN_NO_PROMISC, "", "",
FALSE,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS);
g_object_class_install_property
(object_class, PROP_TAP,
g_param_spec_boolean (NM_DEVICE_MACVLAN_TAP, "", "",
FALSE,
G_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS));
obj_properties[PROP_TAP] =
g_param_spec_boolean (NM_DEVICE_MACVLAN_TAP, "", "",
FALSE,
G_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS);
g_object_class_install_properties (object_class, _PROPERTY_ENUMS_LAST, obj_properties);
nm_exported_object_class_add_interface (NM_EXPORTED_OBJECT_CLASS (klass),
NMDBUS_TYPE_DEVICE_MACVLAN_SKELETON,
@ -735,5 +742,4 @@ NM_DEVICE_FACTORY_DEFINE_INTERNAL (MACVLAN, Macvlan, macvlan,
factory_iface->create_device = create_device;
factory_iface->get_connection_parent = get_connection_parent;
factory_iface->get_connection_iface = get_connection_iface;
)
);

View file

@ -35,8 +35,8 @@
#define NM_DEVICE_MACVLAN_NO_PROMISC "no-promisc"
#define NM_DEVICE_MACVLAN_TAP "tap"
typedef NMDevice NMDeviceMacvlan;
typedef NMDeviceClass NMDeviceMacvlanClass;
typedef struct _NMDeviceMacvlan NMDeviceMacvlan;
typedef struct _NMDeviceMacvlanClass NMDeviceMacvlanClass;
GType nm_device_macvlan_get_type (void);

View file

@ -20,12 +20,13 @@
#include "nm-default.h"
#include "nm-device-tun.h"
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include "nm-act-request.h"
#include "nm-device-tun.h"
#include "nm-device-private.h"
#include "nm-ip4-config.h"
#include "nm-platform.h"
@ -38,27 +39,37 @@
#include "nm-device-logging.h"
_LOG_DECLARE_SELF(NMDeviceTun);
G_DEFINE_TYPE (NMDeviceTun, nm_device_tun, NM_TYPE_DEVICE)
/*****************************************************************************/
#define NM_DEVICE_TUN_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DEVICE_TUN, NMDeviceTunPrivate))
typedef struct {
NMPlatformTunProperties props;
const char *mode;
} NMDeviceTunPrivate;
enum {
PROP_0,
NM_GOBJECT_PROPERTIES_DEFINE (NMDeviceTun,
PROP_OWNER,
PROP_GROUP,
PROP_MODE,
PROP_NO_PI,
PROP_VNET_HDR,
PROP_MULTI_QUEUE,
);
LAST_PROP
typedef struct {
NMPlatformTunProperties props;
const char *mode;
} NMDeviceTunPrivate;
struct _NMDeviceTun {
NMDevice parent;
NMDeviceTunPrivate _priv;
};
struct _NMDeviceTunClass {
NMDeviceClass parent;
};
G_DEFINE_TYPE (NMDeviceTun, nm_device_tun, NM_TYPE_DEVICE)
#define NM_DEVICE_TUN_GET_PRIVATE(self) _NM_GET_PRIVATE (self, NMDeviceTun, NM_IS_DEVICE_TUN)
/*****************************************************************************/
static void
reload_tun_properties (NMDeviceTun *self)
{
@ -89,15 +100,15 @@ reload_tun_properties (NMDeviceTun *self)
g_object_freeze_notify (object);
if (priv->props.owner != props.owner)
g_object_notify (object, NM_DEVICE_TUN_OWNER);
_notify (self, PROP_OWNER);
if (priv->props.group != props.group)
g_object_notify (object, NM_DEVICE_TUN_GROUP);
_notify (self, PROP_GROUP);
if (priv->props.no_pi != props.no_pi)
g_object_notify (object, NM_DEVICE_TUN_NO_PI);
_notify (self, PROP_NO_PI);
if (priv->props.vnet_hdr != props.vnet_hdr)
g_object_notify (object, NM_DEVICE_TUN_VNET_HDR);
_notify (self, PROP_VNET_HDR);
if (priv->props.multi_queue != props.multi_queue)
g_object_notify (object, NM_DEVICE_TUN_MULTI_QUEUE);
_notify (self, PROP_MULTI_QUEUE);
memcpy (&priv->props, &props, sizeof (NMPlatformTunProperties));
@ -244,7 +255,7 @@ static void
realize_start_notify (NMDevice *device, const NMPlatformLink *plink)
{
NM_DEVICE_CLASS (nm_device_tun_parent_class)->realize_start_notify (device, plink);
reload_tun_properties (device);
reload_tun_properties ((NMDeviceTun *) device);
}
static gboolean
@ -332,26 +343,18 @@ unrealize_notify (NMDevice *device)
{
NMDeviceTun *self = NM_DEVICE_TUN (device);
NMDeviceTunPrivate *priv = NM_DEVICE_TUN_GET_PRIVATE (self);
GParamSpec **properties;
guint n_properties, i;
guint i;
NM_DEVICE_CLASS (nm_device_tun_parent_class)->unrealize_notify (device);
memset (&priv->props, 0, sizeof (NMPlatformTunProperties));
properties = g_object_class_list_properties (G_OBJECT_GET_CLASS (self), &n_properties);
for (i = 0; i < n_properties; i++)
g_object_notify_by_pspec (G_OBJECT (self), properties[i]);
g_free (properties);
for (i = 1; i < _PROPERTY_ENUMS_LAST; i++)
g_object_notify_by_pspec ((GObject *) self, obj_properties[i]);
}
/*****************************************************************************/
static void
nm_device_tun_init (NMDeviceTun *self)
{
}
static void
get_property (GObject *object, guint prop_id,
GValue *value, GParamSpec *pspec)
@ -411,21 +414,25 @@ set_property (GObject *object, guint prop_id,
}
}
/*****************************************************************************/
static void
nm_device_tun_init (NMDeviceTun *self)
{
}
static void
nm_device_tun_class_init (NMDeviceTunClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
NMDeviceClass *device_class = NM_DEVICE_CLASS (klass);
g_type_class_add_private (klass, sizeof (NMDeviceTunPrivate));
NM_DEVICE_CLASS_DECLARE_TYPES (klass, NULL, NM_LINK_TYPE_TUN, NM_LINK_TYPE_TAP)
object_class->get_property = get_property;
object_class->set_property = set_property;
device_class->connection_type = NM_SETTING_TUN_SETTING_NAME;
device_class->link_changed = link_changed;
device_class->complete_connection = complete_connection;
device_class->check_connection_compatible = check_connection_compatible;
@ -437,42 +444,38 @@ nm_device_tun_class_init (NMDeviceTunClass *klass)
device_class->act_stage1_prepare = act_stage1_prepare;
device_class->ip4_config_pre_commit = ip4_config_pre_commit;
/* properties */
g_object_class_install_property
(object_class, PROP_OWNER,
g_param_spec_int64 (NM_DEVICE_TUN_OWNER, "", "",
-1, G_MAXUINT32, -1,
G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
obj_properties[PROP_OWNER] =
g_param_spec_int64 (NM_DEVICE_TUN_OWNER, "", "",
-1, G_MAXUINT32, -1,
G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
g_object_class_install_property
(object_class, PROP_GROUP,
g_param_spec_int64 (NM_DEVICE_TUN_GROUP, "", "",
-1, G_MAXUINT32, -1,
G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
obj_properties[PROP_GROUP] =
g_param_spec_int64 (NM_DEVICE_TUN_GROUP, "", "",
-1, G_MAXUINT32, -1,
G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
g_object_class_install_property
(object_class, PROP_MODE,
g_param_spec_string (NM_DEVICE_TUN_MODE, "", "",
"tun",
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS));
obj_properties[PROP_MODE] =
g_param_spec_string (NM_DEVICE_TUN_MODE, "", "",
"tun",
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS);
g_object_class_install_property
(object_class, PROP_NO_PI,
g_param_spec_boolean (NM_DEVICE_TUN_NO_PI, "", "",
FALSE,
G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
obj_properties[PROP_NO_PI] =
g_param_spec_boolean (NM_DEVICE_TUN_NO_PI, "", "",
FALSE,
G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
g_object_class_install_property
(object_class, PROP_VNET_HDR,
g_param_spec_boolean (NM_DEVICE_TUN_VNET_HDR, "", "",
FALSE,
G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
obj_properties[PROP_VNET_HDR] =
g_param_spec_boolean (NM_DEVICE_TUN_VNET_HDR, "", "",
FALSE,
G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
g_object_class_install_property
(object_class, PROP_MULTI_QUEUE,
g_param_spec_boolean (NM_DEVICE_TUN_MULTI_QUEUE, "", "",
FALSE,
G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
obj_properties[PROP_MULTI_QUEUE] =
g_param_spec_boolean (NM_DEVICE_TUN_MULTI_QUEUE, "", "",
FALSE,
G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
g_object_class_install_properties (object_class, _PROPERTY_ENUMS_LAST, obj_properties);
nm_exported_object_class_add_interface (NM_EXPORTED_OBJECT_CLASS (klass),
NMDBUS_TYPE_DEVICE_TUN_SKELETON,
@ -530,5 +533,5 @@ NM_DEVICE_FACTORY_DEFINE_INTERNAL (TUN, Tun, tun,
NM_DEVICE_FACTORY_DECLARE_LINK_TYPES (NM_LINK_TYPE_TUN, NM_LINK_TYPE_TAP)
NM_DEVICE_FACTORY_DECLARE_SETTING_TYPES (NM_SETTING_TUN_SETTING_NAME),
factory_iface->create_device = create_device;
)
);

View file

@ -37,8 +37,8 @@
#define NM_DEVICE_TUN_VNET_HDR "vnet-hdr"
#define NM_DEVICE_TUN_MULTI_QUEUE "multi-queue"
typedef NMDevice NMDeviceTun;
typedef NMDeviceClass NMDeviceTunClass;
typedef struct _NMDeviceTun NMDeviceTun;
typedef struct _NMDeviceTunClass NMDeviceTunClass;
GType nm_device_tun_get_type (void);

View file

@ -51,7 +51,7 @@ struct _NMDeviceVeth {
};
struct _NMDeviceVethClass {
NMDeviceEthernetClass parent_class;
NMDeviceEthernetClass parent;
};
NM_GOBJECT_PROPERTIES_DEFINE (NMDeviceVeth,

View file

@ -43,9 +43,12 @@
#include "nm-device-logging.h"
_LOG_DECLARE_SELF(NMDeviceVlan);
G_DEFINE_TYPE (NMDeviceVlan, nm_device_vlan, NM_TYPE_DEVICE)
/*****************************************************************************/
#define NM_DEVICE_VLAN_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DEVICE_VLAN, NMDeviceVlanPrivate))
NM_GOBJECT_PROPERTIES_DEFINE (NMDeviceVlan,
PROP_PARENT,
PROP_VLAN_ID,
);
typedef struct {
NMDevice *parent;
@ -54,14 +57,19 @@ typedef struct {
guint vlan_id;
} NMDeviceVlanPrivate;
enum {
PROP_0,
PROP_PARENT,
PROP_VLAN_ID,
LAST_PROP
struct _NMDeviceVlan {
NMDevice parent;
NMDeviceVlanPrivate _priv;
};
struct _NMDeviceVlanClass {
NMDeviceClass parent;
};
G_DEFINE_TYPE (NMDeviceVlan, nm_device_vlan, NM_TYPE_DEVICE)
#define NM_DEVICE_VLAN_GET_PRIVATE(self) _NM_GET_PRIVATE (self, NMDeviceVlan, NM_IS_DEVICE_VLAN)
/*****************************************************************************/
static void
@ -91,18 +99,18 @@ parent_hwaddr_maybe_changed (NMDevice *parent,
NMSettingIPConfig *s_ip6;
/* Never touch assumed devices */
if (nm_device_uses_assumed_connection (self))
if (nm_device_uses_assumed_connection ((NMDevice *) self))
return;
connection = nm_device_get_applied_connection (self);
connection = nm_device_get_applied_connection ((NMDevice *) self);
if (!connection)
return;
/* Update the VLAN MAC only if configuration does not specify one */
if (nm_device_hw_addr_is_explict (self))
if (nm_device_hw_addr_is_explict ((NMDevice *) self))
return;
old_mac = nm_device_get_hw_address (self);
old_mac = nm_device_get_hw_address ((NMDevice *) self);
new_mac = nm_device_get_hw_address (parent);
if (nm_streq0 (old_mac, new_mac))
return;
@ -110,7 +118,7 @@ parent_hwaddr_maybe_changed (NMDevice *parent,
_LOGD (LOGD_VLAN, "parent hardware address changed to %s%s%s",
NM_PRINT_FMT_QUOTE_STRING (new_mac));
if (new_mac) {
nm_device_hw_addr_set (self, new_mac, "vlan-parent");
nm_device_hw_addr_set ((NMDevice *) self, new_mac, "vlan-parent");
/* When changing the hw address the interface is taken down,
* removing the IPv6 configuration; reapply it.
*/
@ -152,10 +160,10 @@ nm_device_vlan_set_parent (NMDeviceVlan *self, NMDevice *parent)
}
/* Recheck availability now that the parent has changed */
nm_device_queue_recheck_available (self,
nm_device_queue_recheck_available (device,
NM_DEVICE_STATE_REASON_PARENT_CHANGED,
NM_DEVICE_STATE_REASON_PARENT_CHANGED);
g_object_notify (G_OBJECT (device), NM_DEVICE_VLAN_PARENT);
_notify (self, PROP_PARENT);
}
static void
@ -170,7 +178,7 @@ update_properties (NMDevice *device)
g_return_if_fail (NM_IS_DEVICE_VLAN (device));
priv = NM_DEVICE_VLAN_GET_PRIVATE (device);
priv = NM_DEVICE_VLAN_GET_PRIVATE ((NMDeviceVlan *) device);
ifindex = nm_device_get_ifindex (device);
@ -188,7 +196,7 @@ update_properties (NMDevice *device)
vlan_id = plnk ? plnk->id : 0;
if (vlan_id != priv->vlan_id) {
priv->vlan_id = vlan_id;
g_object_notify ((GObject *) device, NM_DEVICE_VLAN_ID);
_notify ((NMDeviceVlan *) device, PROP_VLAN_ID);
}
g_object_thaw_notify ((GObject *) device);
@ -209,7 +217,7 @@ create_and_realize (NMDevice *device,
const NMPlatformLink **out_plink,
GError **error)
{
NMDeviceVlanPrivate *priv = NM_DEVICE_VLAN_GET_PRIVATE (device);
NMDeviceVlanPrivate *priv = NM_DEVICE_VLAN_GET_PRIVATE ((NMDeviceVlan *) device);
const char *iface = nm_device_get_iface (device);
NMSettingVlan *s_vlan;
int parent_ifindex;
@ -257,7 +265,7 @@ create_and_realize (NMDevice *device,
nm_device_vlan_set_parent (NM_DEVICE_VLAN (device), parent);
if (vlan_id != priv->vlan_id) {
priv->vlan_id = vlan_id;
g_object_notify ((GObject *) device, NM_DEVICE_VLAN_ID);
_notify ((NMDeviceVlan *) device, PROP_VLAN_ID);
}
return TRUE;
@ -268,8 +276,8 @@ unrealize_notify (NMDevice *device)
{
NM_DEVICE_CLASS (nm_device_vlan_parent_class)->unrealize_notify (device);
NM_DEVICE_VLAN_GET_PRIVATE (device)->vlan_id = 0;
g_object_notify (G_OBJECT (device), NM_DEVICE_VLAN_ID);
NM_DEVICE_VLAN_GET_PRIVATE ((NMDeviceVlan *) device)->vlan_id = 0;
_notify ((NMDeviceVlan *) device, PROP_VLAN_ID);
nm_device_vlan_set_parent (NM_DEVICE_VLAN (device), NULL);
}
@ -287,7 +295,7 @@ get_generic_capabilities (NMDevice *dev)
static gboolean
is_available (NMDevice *device, NMDeviceCheckDevAvailableFlags flags)
{
if (!NM_DEVICE_VLAN_GET_PRIVATE (device)->parent)
if (!NM_DEVICE_VLAN_GET_PRIVATE ((NMDeviceVlan *) device)->parent)
return FALSE;
return NM_DEVICE_CLASS (nm_device_vlan_parent_class)->is_available (device, flags);
@ -373,7 +381,7 @@ match_hwaddr (NMDevice *device, NMConnection *connection, gboolean fail_if_no_hw
if (!setting_mac)
return !fail_if_no_hwaddr;
priv = NM_DEVICE_VLAN_GET_PRIVATE (device);
priv = NM_DEVICE_VLAN_GET_PRIVATE ((NMDeviceVlan *) device);
if (!priv->parent)
return !fail_if_no_hwaddr;
@ -384,7 +392,7 @@ match_hwaddr (NMDevice *device, NMConnection *connection, gboolean fail_if_no_hw
static gboolean
check_connection_compatible (NMDevice *device, NMConnection *connection)
{
NMDeviceVlanPrivate *priv = NM_DEVICE_VLAN_GET_PRIVATE (device);
NMDeviceVlanPrivate *priv = NM_DEVICE_VLAN_GET_PRIVATE ((NMDeviceVlan *) device);
NMSettingVlan *s_vlan;
const char *parent = NULL;
@ -468,7 +476,7 @@ complete_connection (NMDevice *device,
static void
update_connection (NMDevice *device, NMConnection *connection)
{
NMDeviceVlanPrivate *priv = NM_DEVICE_VLAN_GET_PRIVATE (device);
NMDeviceVlanPrivate *priv = NM_DEVICE_VLAN_GET_PRIVATE ((NMDeviceVlan *) device);
NMSettingVlan *s_vlan = nm_connection_get_setting_vlan (connection);
int ifindex = nm_device_get_ifindex (device);
const char *setting_parent, *new_parent;
@ -534,7 +542,7 @@ update_connection (NMDevice *device, NMConnection *connection)
static NMActStageReturn
act_stage1_prepare (NMDevice *dev, NMDeviceStateReason *reason)
{
NMDeviceVlanPrivate *priv = NM_DEVICE_VLAN_GET_PRIVATE (dev);
NMDeviceVlanPrivate *priv = NM_DEVICE_VLAN_GET_PRIVATE ((NMDeviceVlan *) dev);
NMSettingVlan *s_vlan;
NMActStageReturn ret;
@ -601,16 +609,11 @@ ip4_config_pre_commit (NMDevice *device, NMIP4Config *config)
/*****************************************************************************/
static void
nm_device_vlan_init (NMDeviceVlan * self)
{
}
static void
get_property (GObject *object, guint prop_id,
GValue *value, GParamSpec *pspec)
{
NMDeviceVlanPrivate *priv = NM_DEVICE_VLAN_GET_PRIVATE (object);
NMDeviceVlanPrivate *priv = NM_DEVICE_VLAN_GET_PRIVATE ((NMDeviceVlan *) object);
switch (prop_id) {
case PROP_PARENT:
@ -625,11 +628,11 @@ get_property (GObject *object, guint prop_id,
}
}
/*****************************************************************************/
static void
set_property (GObject *object, guint prop_id,
const GValue *value, GParamSpec *pspec)
nm_device_vlan_init (NMDeviceVlan * self)
{
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
}
static void
@ -648,11 +651,7 @@ nm_device_vlan_class_init (NMDeviceVlanClass *klass)
NM_DEVICE_CLASS_DECLARE_TYPES (klass, NM_SETTING_VLAN_SETTING_NAME, NM_LINK_TYPE_VLAN)
g_type_class_add_private (object_class, sizeof (NMDeviceVlanPrivate));
/* virtual methods */
object_class->get_property = get_property;
object_class->set_property = set_property;
object_class->dispose = dispose;
parent_class->create_and_realize = create_and_realize;
@ -669,18 +668,18 @@ nm_device_vlan_class_init (NMDeviceVlanClass *klass)
parent_class->complete_connection = complete_connection;
parent_class->update_connection = update_connection;
/* properties */
g_object_class_install_property
(object_class, PROP_PARENT,
g_param_spec_string (NM_DEVICE_VLAN_PARENT, "", "",
NULL,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_VLAN_ID,
g_param_spec_uint (NM_DEVICE_VLAN_ID, "", "",
0, 4095, 0,
G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
obj_properties[PROP_PARENT] =
g_param_spec_string (NM_DEVICE_VLAN_PARENT, "", "",
NULL,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS);
obj_properties[PROP_VLAN_ID] =
g_param_spec_uint (NM_DEVICE_VLAN_ID, "", "",
0, 4095, 0,
G_PARAM_READABLE
| G_PARAM_STATIC_STRINGS);
g_object_class_install_properties (object_class, _PROPERTY_ENUMS_LAST, obj_properties);
nm_exported_object_class_add_interface (NM_EXPORTED_OBJECT_CLASS (klass),
NMDBUS_TYPE_DEVICE_VLAN_SKELETON,
@ -765,5 +764,4 @@ NM_DEVICE_FACTORY_DEFINE_INTERNAL (VLAN, Vlan, vlan,
factory_iface->create_device = create_device;
factory_iface->get_connection_parent = get_connection_parent;
factory_iface->get_connection_iface = get_connection_iface;
)
);

View file

@ -40,8 +40,8 @@ typedef enum {
#define NM_DEVICE_VLAN_PARENT "parent"
#define NM_DEVICE_VLAN_ID "vlan-id"
typedef NMDevice NMDeviceVlan;
typedef NMDeviceClass NMDeviceVlanClass;
typedef struct _NMDeviceVlan NMDeviceVlan;
typedef struct _NMDeviceVlanClass NMDeviceVlanClass;
GType nm_device_vlan_get_type (void);

View file

@ -40,17 +40,9 @@
#include "nm-device-logging.h"
_LOG_DECLARE_SELF(NMDeviceVxlan);
G_DEFINE_TYPE (NMDeviceVxlan, nm_device_vxlan, NM_TYPE_DEVICE)
/*****************************************************************************/
#define NM_DEVICE_VXLAN_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DEVICE_VXLAN, NMDeviceVxlanPrivate))
typedef struct {
NMDevice *parent;
NMPlatformLnkVxlan props;
} NMDeviceVxlanPrivate;
enum {
PROP_0,
NM_GOBJECT_PROPERTIES_DEFINE (NMDeviceVxlan,
PROP_PARENT,
PROP_ID,
PROP_LOCAL,
@ -67,17 +59,33 @@ enum {
PROP_RSC,
PROP_L2MISS,
PROP_L3MISS,
);
LAST_PROP
typedef struct {
NMDevice *parent;
NMPlatformLnkVxlan props;
} NMDeviceVxlanPrivate;
struct _NMDeviceVxlan {
NMDevice parent;
NMDeviceVxlanPrivate _priv;
};
struct _NMDeviceVxlanClass {
NMDeviceClass parent;
};
G_DEFINE_TYPE (NMDeviceVxlan, nm_device_vxlan, NM_TYPE_DEVICE)
#define NM_DEVICE_VXLAN_GET_PRIVATE(self) _NM_GET_PRIVATE (self, NMDeviceVxlan, NM_IS_DEVICE_VXLAN)
/*****************************************************************************/
static void
update_properties (NMDevice *device)
{
NMDeviceVxlan *self = NM_DEVICE_VXLAN (device);
NMDeviceVxlanPrivate *priv = NM_DEVICE_VXLAN_GET_PRIVATE (device);
NMDeviceVxlanPrivate *priv = NM_DEVICE_VXLAN_GET_PRIVATE (self);
GObject *object = G_OBJECT (device);
const NMPlatformLnkVxlan *props;
NMDevice *parent;
@ -95,42 +103,42 @@ update_properties (NMDevice *device)
parent = nm_manager_get_device_by_ifindex (nm_manager_get (), props->parent_ifindex);
if (parent)
priv->parent = g_object_ref (parent);
g_object_notify (object, NM_DEVICE_VXLAN_PARENT);
_notify (self, PROP_PARENT);
}
if (priv->props.id != props->id)
g_object_notify (object, NM_DEVICE_VXLAN_ID);
_notify (self, PROP_ID);
if (priv->props.local != props->local)
g_object_notify (object, NM_DEVICE_VXLAN_LOCAL);
_notify (self, PROP_LOCAL);
if (memcmp (&priv->props.local6, &props->local6, sizeof (props->local6)) != 0)
g_object_notify (object, NM_DEVICE_VXLAN_LOCAL);
_notify (self, PROP_LOCAL);
if (priv->props.group != props->group)
g_object_notify (object, NM_DEVICE_VXLAN_GROUP);
_notify (self, PROP_GROUP);
if (memcmp (&priv->props.group6, &props->group6, sizeof (props->group6)) != 0)
g_object_notify (object, NM_DEVICE_VXLAN_GROUP);
_notify (self, PROP_GROUP);
if (priv->props.tos != props->tos)
g_object_notify (object, NM_DEVICE_VXLAN_TOS);
_notify (self, PROP_TOS);
if (priv->props.ttl != props->ttl)
g_object_notify (object, NM_DEVICE_VXLAN_TTL);
_notify (self, PROP_TTL);
if (priv->props.learning != props->learning)
g_object_notify (object, NM_DEVICE_VXLAN_LEARNING);
_notify (self, PROP_LEARNING);
if (priv->props.ageing != props->ageing)
g_object_notify (object, NM_DEVICE_VXLAN_AGEING);
_notify (self, PROP_AGEING);
if (priv->props.limit != props->limit)
g_object_notify (object, NM_DEVICE_VXLAN_LIMIT);
_notify (self, PROP_LIMIT);
if (priv->props.src_port_min != props->src_port_min)
g_object_notify (object, NM_DEVICE_VXLAN_SRC_PORT_MIN);
_notify (self, PROP_SRC_PORT_MIN);
if (priv->props.src_port_max != props->src_port_max)
g_object_notify (object, NM_DEVICE_VXLAN_SRC_PORT_MAX);
_notify (self, PROP_SRC_PORT_MAX);
if (priv->props.dst_port != props->dst_port)
g_object_notify (object, NM_DEVICE_VXLAN_DST_PORT);
_notify (self, PROP_DST_PORT);
if (priv->props.proxy != props->proxy)
g_object_notify (object, NM_DEVICE_VXLAN_PROXY);
_notify (self, PROP_PROXY);
if (priv->props.rsc != props->rsc)
g_object_notify (object, NM_DEVICE_VXLAN_RSC);
_notify (self, PROP_RSC);
if (priv->props.l2miss != props->l2miss)
g_object_notify (object, NM_DEVICE_VXLAN_L2MISS);
_notify (self, PROP_L2MISS);
if (priv->props.l3miss != props->l3miss)
g_object_notify (object, NM_DEVICE_VXLAN_L3MISS);
_notify (self, PROP_L3MISS);
priv->props = *props;
@ -165,17 +173,14 @@ unrealize_notify (NMDevice *device)
{
NMDeviceVxlan *self = NM_DEVICE_VXLAN (device);
NMDeviceVxlanPrivate *priv = NM_DEVICE_VXLAN_GET_PRIVATE (self);
GParamSpec **properties;
guint n_properties, i;
guint i;
NM_DEVICE_CLASS (nm_device_vxlan_parent_class)->unrealize_notify (device);
memset (&priv->props, 0, sizeof (NMPlatformLnkVxlan));
properties = g_object_class_list_properties (G_OBJECT_GET_CLASS (self), &n_properties);
for (i = 0; i < n_properties; i++)
g_object_notify_by_pspec (G_OBJECT (self), properties[i]);
g_free (properties);
for (i = 1; i < _PROPERTY_ENUMS_LAST; i++)
g_object_notify_by_pspec (G_OBJECT (self), obj_properties[i]);
}
static gboolean
@ -300,7 +305,7 @@ address_matches (const char *str, in_addr_t addr4, struct in6_addr *addr6)
static gboolean
check_connection_compatible (NMDevice *device, NMConnection *connection)
{
NMDeviceVxlanPrivate *priv = NM_DEVICE_VXLAN_GET_PRIVATE (device);
NMDeviceVxlanPrivate *priv = NM_DEVICE_VXLAN_GET_PRIVATE ((NMDeviceVxlan *) device);
NMSettingVxlan *s_vxlan;
const char *parent;
@ -394,7 +399,7 @@ complete_connection (NMDevice *device,
static void
update_connection (NMDevice *device, NMConnection *connection)
{
NMDeviceVxlanPrivate *priv = NM_DEVICE_VXLAN_GET_PRIVATE (device);
NMDeviceVxlanPrivate *priv = NM_DEVICE_VXLAN_GET_PRIVATE ((NMDeviceVxlan *) device);
NMSettingVxlan *s_vxlan = nm_connection_get_setting_vxlan (connection);
NMDevice *parent = NULL;
const char *setting_parent, *new_parent;
@ -545,16 +550,11 @@ ip4_config_pre_commit (NMDevice *device, NMIP4Config *config)
/*****************************************************************************/
static void
nm_device_vxlan_init (NMDeviceVxlan *self)
{
}
static void
get_property (GObject *object, guint prop_id,
GValue *value, GParamSpec *pspec)
{
NMDeviceVxlanPrivate *priv = NM_DEVICE_VXLAN_GET_PRIVATE (object);
NMDeviceVxlanPrivate *priv = NM_DEVICE_VXLAN_GET_PRIVATE ((NMDeviceVxlan *) object);
NMDevice *parent;
switch (prop_id) {
@ -619,10 +619,17 @@ get_property (GObject *object, guint prop_id,
}
}
/*****************************************************************************/
static void
nm_device_vxlan_init (NMDeviceVxlan *self)
{
}
static void
dispose (GObject *object)
{
NMDeviceVxlanPrivate *priv = NM_DEVICE_VXLAN_GET_PRIVATE (object);
NMDeviceVxlanPrivate *priv = NM_DEVICE_VXLAN_GET_PRIVATE ((NMDeviceVxlan *) object);
g_clear_object (&priv->parent);
G_OBJECT_CLASS (nm_device_vxlan_parent_class)->dispose (object);
@ -634,8 +641,6 @@ nm_device_vxlan_class_init (NMDeviceVxlanClass *klass)
GObjectClass *object_class = G_OBJECT_CLASS (klass);
NMDeviceClass *device_class = NM_DEVICE_CLASS (klass);
g_type_class_add_private (klass, sizeof (NMDeviceVxlanPrivate));
NM_DEVICE_CLASS_DECLARE_TYPES (klass, NULL, NM_LINK_TYPE_VXLAN)
object_class->get_property = get_property;
@ -653,118 +658,103 @@ nm_device_vxlan_class_init (NMDeviceVxlanClass *klass)
device_class->act_stage1_prepare = act_stage1_prepare;
device_class->ip4_config_pre_commit = ip4_config_pre_commit;
/* properties */
g_object_class_install_property
(object_class, PROP_PARENT,
g_param_spec_string (NM_DEVICE_VXLAN_PARENT, "", "",
NULL,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS));
obj_properties[PROP_PARENT] =
g_param_spec_string (NM_DEVICE_VXLAN_PARENT, "", "",
NULL,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS);
g_object_class_install_property
(object_class, PROP_ID,
g_param_spec_uint (NM_DEVICE_VXLAN_ID, "", "",
0, G_MAXUINT32, 0,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS));
obj_properties[PROP_ID] =
g_param_spec_uint (NM_DEVICE_VXLAN_ID, "", "",
0, G_MAXUINT32, 0,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS);
g_object_class_install_property
(object_class, PROP_LOCAL,
g_param_spec_string (NM_DEVICE_VXLAN_LOCAL, "", "",
NULL,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS));
obj_properties[PROP_LOCAL] =
g_param_spec_string (NM_DEVICE_VXLAN_LOCAL, "", "",
NULL,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS);
g_object_class_install_property
(object_class, PROP_GROUP,
g_param_spec_string (NM_DEVICE_VXLAN_GROUP, "", "",
NULL,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS));
obj_properties[PROP_GROUP] =
g_param_spec_string (NM_DEVICE_VXLAN_GROUP, "", "",
NULL,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS);
g_object_class_install_property
(object_class, PROP_TOS,
g_param_spec_uchar (NM_DEVICE_VXLAN_TOS, "", "",
0, 255, 0,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS));
obj_properties[PROP_TOS] =
g_param_spec_uchar (NM_DEVICE_VXLAN_TOS, "", "",
0, 255, 0,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS);
g_object_class_install_property
(object_class, PROP_TTL,
g_param_spec_uchar (NM_DEVICE_VXLAN_TTL, "", "",
0, 255, 0,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS));
obj_properties[PROP_TTL] =
g_param_spec_uchar (NM_DEVICE_VXLAN_TTL, "", "",
0, 255, 0,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS);
g_object_class_install_property
(object_class, PROP_LEARNING,
g_param_spec_boolean (NM_DEVICE_VXLAN_LEARNING, "", "",
FALSE,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS));
obj_properties[PROP_LEARNING] =
g_param_spec_boolean (NM_DEVICE_VXLAN_LEARNING, "", "",
FALSE,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS);
g_object_class_install_property
(object_class, PROP_AGEING,
g_param_spec_uint (NM_DEVICE_VXLAN_AGEING, "", "",
0, G_MAXUINT32, 0,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS));
obj_properties[PROP_AGEING] =
g_param_spec_uint (NM_DEVICE_VXLAN_AGEING, "", "",
0, G_MAXUINT32, 0,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS);
g_object_class_install_property
(object_class, PROP_LIMIT,
g_param_spec_uint (NM_DEVICE_VXLAN_LIMIT, "", "",
0, G_MAXUINT32, 0,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS));
obj_properties[PROP_LIMIT] =
g_param_spec_uint (NM_DEVICE_VXLAN_LIMIT, "", "",
0, G_MAXUINT32, 0,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS);
g_object_class_install_property
(object_class, PROP_SRC_PORT_MIN,
g_param_spec_uint (NM_DEVICE_VXLAN_SRC_PORT_MIN, "", "",
0, 65535, 0,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS));
obj_properties[PROP_SRC_PORT_MIN] =
g_param_spec_uint (NM_DEVICE_VXLAN_SRC_PORT_MIN, "", "",
0, 65535, 0,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS);
g_object_class_install_property
(object_class, PROP_SRC_PORT_MAX,
g_param_spec_uint (NM_DEVICE_VXLAN_SRC_PORT_MAX, "", "",
0, 65535, 0,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS));
obj_properties[PROP_SRC_PORT_MAX] =
g_param_spec_uint (NM_DEVICE_VXLAN_SRC_PORT_MAX, "", "",
0, 65535, 0,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS);
g_object_class_install_property
(object_class, PROP_DST_PORT,
g_param_spec_uint (NM_DEVICE_VXLAN_DST_PORT, "", "",
0, 65535, 0,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS));
obj_properties[PROP_DST_PORT] =
g_param_spec_uint (NM_DEVICE_VXLAN_DST_PORT, "", "",
0, 65535, 0,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS);
g_object_class_install_property
(object_class, PROP_PROXY,
g_param_spec_boolean (NM_DEVICE_VXLAN_PROXY, "", "",
FALSE,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS));
obj_properties[PROP_PROXY] =
g_param_spec_boolean (NM_DEVICE_VXLAN_PROXY, "", "",
FALSE,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS);
g_object_class_install_property
(object_class, PROP_RSC,
g_param_spec_boolean (NM_DEVICE_VXLAN_RSC, "", "",
FALSE,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS));
obj_properties[PROP_RSC] =
g_param_spec_boolean (NM_DEVICE_VXLAN_RSC, "", "",
FALSE,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS);
g_object_class_install_property
(object_class, PROP_L2MISS,
g_param_spec_boolean (NM_DEVICE_VXLAN_L2MISS, "", "",
FALSE,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS));
obj_properties[PROP_L2MISS] =
g_param_spec_boolean (NM_DEVICE_VXLAN_L2MISS, "", "",
FALSE,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS);
g_object_class_install_property
(object_class, PROP_L3MISS,
g_param_spec_boolean (NM_DEVICE_VXLAN_L3MISS, "", "",
FALSE,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS));
obj_properties[PROP_L3MISS] =
g_param_spec_boolean (NM_DEVICE_VXLAN_L3MISS, "", "",
FALSE,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS);
g_object_class_install_properties (object_class, _PROPERTY_ENUMS_LAST, obj_properties);
nm_exported_object_class_add_interface (NM_EXPORTED_OBJECT_CLASS (klass),
NMDBUS_TYPE_DEVICE_VXLAN_SKELETON,
@ -830,5 +820,5 @@ NM_DEVICE_FACTORY_DEFINE_INTERNAL (VXLAN, Vxlan, vxlan,
factory_iface->create_device = create_device;
factory_iface->get_connection_parent = get_connection_parent;
factory_iface->get_connection_iface = get_connection_iface;
)
);

View file

@ -47,8 +47,8 @@
#define NM_DEVICE_VXLAN_L2MISS "l2miss"
#define NM_DEVICE_VXLAN_L3MISS "l3miss"
typedef NMDevice NMDeviceVxlan;
typedef NMDeviceClass NMDeviceVxlanClass;
typedef struct _NMDeviceVxlan NMDeviceVxlan;
typedef struct _NMDeviceVxlanClass NMDeviceVxlanClass;
GType nm_device_vxlan_get_type (void);

View file

@ -12643,7 +12643,6 @@ nm_device_class_init (NMDeviceClass *klass)
exported_object_class->export_path = NM_DBUS_PATH "/Devices/%u";
/* Virtual methods */
object_class->dispose = dispose;
object_class->finalize = finalize;
object_class->set_property = set_property;
@ -12675,7 +12674,6 @@ nm_device_class_init (NMDeviceClass *klass)
klass->unmanaged_on_quit = unmanaged_on_quit;
klass->deactivate_reset_hw_addr = deactivate_reset_hw_addr;
/* Properties */
obj_properties[PROP_UDI] =
g_param_spec_string (NM_DEVICE_UDI, "", "",
NULL,
@ -12893,7 +12891,6 @@ nm_device_class_init (NMDeviceClass *klass)
g_object_class_install_properties (object_class, _PROPERTY_ENUMS_LAST, obj_properties);
/* Signals */
signals[STATE_CHANGED] =
g_signal_new (NM_DEVICE_STATE_CHANGED,
G_OBJECT_CLASS_TYPE (object_class),

View file

@ -28,10 +28,9 @@ pkglib_LTLIBRARIES = libnm-device-plugin-team.la
SYMBOL_VIS_FILE=$(srcdir)/exports.ver
libnm_device_plugin_team_la_SOURCES = \
nm-device-team.c \
nm-device-team.h \
nm-team-factory.c \
nm-team-factory.h
nm-device-team.c \
nm-device-team.h
libnm_device_plugin_team_la_LDFLAGS = \
-module -avoid-version \

View file

@ -20,6 +20,8 @@
#include "nm-default.h"
#include "nm-device-team.h"
#include <sys/types.h>
#include <unistd.h>
#include <signal.h>
@ -27,7 +29,6 @@
#include <teamdctl.h>
#include <stdlib.h>
#include "nm-device-team.h"
#include "NetworkManagerUtils.h"
#include "nm-device-private.h"
#include "nm-platform.h"
@ -41,9 +42,7 @@
#include "nm-device-logging.h"
_LOG_DECLARE_SELF(NMDeviceTeam);
G_DEFINE_TYPE (NMDeviceTeam, nm_device_team, NM_TYPE_DEVICE)
#define NM_DEVICE_TEAM_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DEVICE_TEAM, NMDeviceTeamPrivate))
/*****************************************************************************/
NM_GOBJECT_PROPERTIES_DEFINE (NMDeviceTeam,
PROP_CONFIG,
@ -59,6 +58,21 @@ typedef struct {
char *config;
} NMDeviceTeamPrivate;
struct _NMDeviceTeam {
NMDevice parent;
NMDeviceTeamPrivate _priv;
};
struct _NMDeviceTeamClass {
NMDeviceClass parent;
};
G_DEFINE_TYPE (NMDeviceTeam, nm_device_team, NM_TYPE_DEVICE)
#define NM_DEVICE_TEAM_GET_PRIVATE(self) _NM_GET_PRIVATE (self, NMDeviceTeam, NM_IS_DEVICE_TEAM)
/*****************************************************************************/
static gboolean teamd_start (NMDevice *device, NMSettingTeam *s_team);
/*****************************************************************************/
@ -179,7 +193,7 @@ teamd_read_config (NMDevice *device)
static gboolean
teamd_read_timeout_cb (gpointer user_data)
{
NMDeviceTeamPrivate *priv = NM_DEVICE_TEAM_GET_PRIVATE (user_data);
NMDeviceTeamPrivate *priv = NM_DEVICE_TEAM_GET_PRIVATE ((NMDeviceTeam *) user_data);
teamd_read_config ((NMDevice *) user_data);
priv->teamd_read_timeout = 0;
@ -286,7 +300,7 @@ master_update_slave_connection (NMDevice *self,
static void
teamd_cleanup (NMDevice *device, gboolean free_tdc)
{
NMDeviceTeamPrivate *priv = NM_DEVICE_TEAM_GET_PRIVATE (device);
NMDeviceTeamPrivate *priv = NM_DEVICE_TEAM_GET_PRIVATE ((NMDeviceTeam *) device);
nm_clear_g_source (&priv->teamd_process_watch);
nm_clear_g_source (&priv->teamd_timeout);
@ -309,7 +323,7 @@ teamd_timeout_cb (gpointer user_data)
{
NMDeviceTeam *self = NM_DEVICE_TEAM (user_data);
NMDevice *device = NM_DEVICE (self);
NMDeviceTeamPrivate *priv = NM_DEVICE_TEAM_GET_PRIVATE (device);
NMDeviceTeamPrivate *priv = NM_DEVICE_TEAM_GET_PRIVATE (self);
g_return_val_if_fail (priv->teamd_timeout, FALSE);
priv->teamd_timeout = 0;
@ -637,7 +651,7 @@ enslave_slave (NMDevice *device,
gboolean configure)
{
NMDeviceTeam *self = NM_DEVICE_TEAM (device);
NMDeviceTeamPrivate *priv = NM_DEVICE_TEAM_GET_PRIVATE (device);
NMDeviceTeamPrivate *priv = NM_DEVICE_TEAM_GET_PRIVATE (self);
gboolean success = TRUE, no_firmware = FALSE;
const char *slave_iface = nm_device_get_ip_iface (slave);
NMSettingTeamPort *s_team_port;
@ -696,7 +710,7 @@ release_slave (NMDevice *device,
gboolean configure)
{
NMDeviceTeam *self = NM_DEVICE_TEAM (device);
NMDeviceTeamPrivate *priv = NM_DEVICE_TEAM_GET_PRIVATE (device);
NMDeviceTeamPrivate *priv = NM_DEVICE_TEAM_GET_PRIVATE (self);
gboolean success, no_firmware = FALSE;
if (configure) {
@ -750,19 +764,6 @@ create_and_realize (NMDevice *device,
/*****************************************************************************/
NMDevice *
nm_device_team_new (const char *iface)
{
return (NMDevice *) g_object_new (NM_TYPE_DEVICE_TEAM,
NM_DEVICE_IFACE, iface,
NM_DEVICE_DRIVER, "team",
NM_DEVICE_TYPE_DESC, "Team",
NM_DEVICE_DEVICE_TYPE, NM_DEVICE_TYPE_TEAM,
NM_DEVICE_LINK_TYPE, NM_LINK_TYPE_TEAM,
NM_DEVICE_IS_MASTER, TRUE,
NULL);
}
static void
get_property (GObject *object, guint prop_id,
GValue *value, GParamSpec *pspec)
@ -780,6 +781,8 @@ get_property (GObject *object, guint prop_id,
}
}
/*****************************************************************************/
static void
nm_device_team_init (NMDeviceTeam * self)
{
@ -789,7 +792,7 @@ static void
constructed (GObject *object)
{
NMDevice *device = NM_DEVICE (object);
NMDeviceTeamPrivate *priv = NM_DEVICE_TEAM_GET_PRIVATE (object);
NMDeviceTeamPrivate *priv = NM_DEVICE_TEAM_GET_PRIVATE ((NMDeviceTeam *) device);
char *tmp_str = NULL;
G_OBJECT_CLASS (nm_device_team_parent_class)->constructed (object);
@ -806,11 +809,24 @@ constructed (GObject *object)
g_free (tmp_str);
}
NMDevice *
nm_device_team_new (const char *iface)
{
return (NMDevice *) g_object_new (NM_TYPE_DEVICE_TEAM,
NM_DEVICE_IFACE, iface,
NM_DEVICE_DRIVER, "team",
NM_DEVICE_TYPE_DESC, "Team",
NM_DEVICE_DEVICE_TYPE, NM_DEVICE_TYPE_TEAM,
NM_DEVICE_LINK_TYPE, NM_LINK_TYPE_TEAM,
NM_DEVICE_IS_MASTER, TRUE,
NULL);
}
static void
dispose (GObject *object)
{
NMDevice *device = NM_DEVICE (object);
NMDeviceTeamPrivate *priv = NM_DEVICE_TEAM_GET_PRIVATE (object);
NMDeviceTeamPrivate *priv = NM_DEVICE_TEAM_GET_PRIVATE ((NMDeviceTeam *) device);
if (priv->teamd_dbus_watch) {
g_bus_unwatch_name (priv->teamd_dbus_watch);
@ -829,8 +845,6 @@ nm_device_team_class_init (NMDeviceTeamClass *klass)
GObjectClass *object_class = G_OBJECT_CLASS (klass);
NMDeviceClass *parent_class = NM_DEVICE_CLASS (klass);
g_type_class_add_private (object_class, sizeof (NMDeviceTeamPrivate));
NM_DEVICE_CLASS_DECLARE_TYPES (klass, NM_SETTING_TEAM_SETTING_NAME, NM_LINK_TYPE_TEAM)
object_class->constructed = constructed;

View file

@ -33,8 +33,8 @@
/* Properties */
#define NM_DEVICE_TEAM_CONFIG "config"
typedef NMDevice NMDeviceTeam;
typedef NMDeviceClass NMDeviceTeamClass;
typedef struct _NMDeviceTeam NMDeviceTeam;
typedef struct _NMDeviceTeamClass NMDeviceTeamClass;
GType nm_device_team_get_type (void);

View file

@ -25,13 +25,34 @@
#include "nm-manager.h"
#include "nm-device-factory.h"
#include "nm-team-factory.h"
#include "nm-device-team.h"
#include "nm-platform.h"
#include "nm-core-internal.h"
/*****************************************************************************/
#define NM_TYPE_TEAM_FACTORY (nm_team_factory_get_type ())
#define NM_TEAM_FACTORY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_TEAM_FACTORY, NMTeamFactory))
#define NM_TEAM_FACTORY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_TEAM_FACTORY, NMTeamFactoryClass))
#define NM_IS_TEAM_FACTORY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_TEAM_FACTORY))
#define NM_IS_TEAM_FACTORY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_TEAM_FACTORY))
#define NM_TEAM_FACTORY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_TEAM_FACTORY, NMTeamFactoryClass))
typedef struct _NMTeamFactory NMTeamFactory;
typedef struct _NMTeamFactoryClass NMTeamFactoryClass;
static GType nm_team_factory_get_type (void);
/*****************************************************************************/
struct _NMTeamFactory {
GObject parent;
};
struct _NMTeamFactoryClass {
GObjectClass parent;
};
static void device_factory_interface_init (NMDeviceFactoryInterface *factory_iface);
G_DEFINE_TYPE_EXTENDED (NMTeamFactory, nm_team_factory, G_TYPE_OBJECT, 0,
@ -39,15 +60,6 @@ G_DEFINE_TYPE_EXTENDED (NMTeamFactory, nm_team_factory, G_TYPE_OBJECT, 0,
/*****************************************************************************/
G_MODULE_EXPORT NMDeviceFactory *
nm_device_factory_create (GError **error)
{
nm_manager_set_capability (nm_manager_get (), NM_CAPABILITY_TEAM);
return (NMDeviceFactory *) g_object_new (NM_TYPE_TEAM_FACTORY, NULL);
}
/*****************************************************************************/
static NMDevice *
create_device (NMDeviceFactory *factory,
const char *iface,
@ -70,6 +82,11 @@ nm_team_factory_init (NMTeamFactory *self)
{
}
static void
nm_team_factory_class_init (NMTeamFactoryClass *klass)
{
}
static void
device_factory_interface_init (NMDeviceFactoryInterface *factory_iface)
{
@ -77,7 +94,11 @@ device_factory_interface_init (NMDeviceFactoryInterface *factory_iface)
factory_iface->get_supported_types = get_supported_types;
}
static void
nm_team_factory_class_init (NMTeamFactoryClass *klass)
/*****************************************************************************/
G_MODULE_EXPORT NMDeviceFactory *
nm_device_factory_create (GError **error)
{
nm_manager_set_capability (nm_manager_get (), NM_CAPABILITY_TEAM);
return (NMDeviceFactory *) g_object_new (NM_TYPE_TEAM_FACTORY, NULL);
}

View file

@ -1,35 +0,0 @@
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
/* NetworkManager -- Network link manager
*
* 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 of the License, 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 Red Hat, Inc.
*/
#ifndef __NETWORKMANAGER_TEAM_FACTORY_H__
#define __NETWORKMANAGER_TEAM_FACTORY_H__
#define NM_TYPE_TEAM_FACTORY (nm_team_factory_get_type ())
#define NM_TEAM_FACTORY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_TEAM_FACTORY, NMTeamFactory))
typedef struct {
GObject parent;
} NMTeamFactory;
typedef struct {
GObjectClass parent;
} NMTeamFactoryClass;
#endif /* __NETWORKMANAGER_TEAM_FACTORY_H__ */

View file

@ -26,6 +26,8 @@
#include "nm-default.h"
#include "nm-device-olpc-mesh.h"
#include <netinet/in.h>
#include <string.h>
#include <sys/stat.h>
@ -37,7 +39,6 @@
#include "nm-device.h"
#include "nm-device-wifi.h"
#include "nm-device-olpc-mesh.h"
#include "nm-device-private.h"
#include "nm-utils.h"
#include "NetworkManagerUtils.h"
@ -56,24 +57,32 @@
#include "nm-device-logging.h"
_LOG_DECLARE_SELF(NMDeviceOlpcMesh);
G_DEFINE_TYPE (NMDeviceOlpcMesh, nm_device_olpc_mesh, NM_TYPE_DEVICE)
/*****************************************************************************/
#define NM_DEVICE_OLPC_MESH_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DEVICE_OLPC_MESH, NMDeviceOlpcMeshPrivate))
enum {
PROP_0,
NM_GOBJECT_PROPERTIES_DEFINE (NMDeviceOlpcMesh,
PROP_COMPANION,
PROP_ACTIVE_CHANNEL,
);
LAST_PROP
};
struct _NMDeviceOlpcMeshPrivate {
typedef struct {
NMDevice *companion;
NMManager *manager;
gboolean stage1_waiting;
} NMDeviceOlpcMeshPrivate;
struct _NMDeviceOlpcMesh {
NMDevice parent;
NMDeviceOlpcMeshPrivate _priv;
};
struct _NMDeviceOlpcMeshClass {
NMDeviceClass parent;
};
G_DEFINE_TYPE (NMDeviceOlpcMesh, nm_device_olpc_mesh, NM_TYPE_DEVICE)
#define NM_DEVICE_OLPC_MESH_GET_PRIVATE(self) _NM_GET_PRIVATE (self, NMDeviceOlpcMesh, NM_IS_DEVICE_OLPC_MESH)
/*****************************************************************************/
static gboolean
@ -158,7 +167,7 @@ static NMActStageReturn
act_stage1_prepare (NMDevice *device, NMDeviceStateReason *reason)
{
NMDeviceOlpcMesh *self = NM_DEVICE_OLPC_MESH (device);
NMDeviceOlpcMeshPrivate *priv = NM_DEVICE_OLPC_MESH_GET_PRIVATE (device);
NMDeviceOlpcMeshPrivate *priv = NM_DEVICE_OLPC_MESH_GET_PRIVATE (self);
NMActStageReturn ret;
gboolean scanning;
@ -196,7 +205,7 @@ _mesh_set_channel (NMDeviceOlpcMesh *self, guint32 channel)
if (nm_platform_mesh_get_channel (NM_PLATFORM_GET, ifindex) != channel) {
if (nm_platform_mesh_set_channel (NM_PLATFORM_GET, ifindex, channel))
g_object_notify (G_OBJECT (self), NM_DEVICE_OLPC_MESH_ACTIVE_CHANNEL);
_notify (self, PROP_ACTIVE_CHANNEL);
}
}
@ -256,7 +265,7 @@ companion_cleanup (NMDeviceOlpcMesh *self)
g_signal_handlers_disconnect_by_data (priv->companion, self);
g_clear_object (&priv->companion);
}
g_object_notify (G_OBJECT (self), NM_DEVICE_OLPC_MESH_COMPANION);
_notify (self, PROP_COMPANION);
}
static void
@ -354,7 +363,7 @@ check_companion (NMDeviceOlpcMesh *self, NMDevice *other)
g_signal_connect (G_OBJECT (other), NM_DEVICE_AUTOCONNECT_ALLOWED,
G_CALLBACK (companion_autoconnect_allowed_cb), self);
g_object_notify (G_OBJECT (self), NM_DEVICE_OLPC_MESH_COMPANION);
_notify (self, PROP_COMPANION);
return TRUE;
}
@ -417,17 +426,28 @@ state_changed (NMDevice *device,
/*****************************************************************************/
NMDevice *
nm_device_olpc_mesh_new (const char *iface)
static void
get_property (GObject *object, guint prop_id,
GValue *value, GParamSpec *pspec)
{
return (NMDevice *) g_object_new (NM_TYPE_DEVICE_OLPC_MESH,
NM_DEVICE_IFACE, iface,
NM_DEVICE_TYPE_DESC, "802.11 OLPC Mesh",
NM_DEVICE_DEVICE_TYPE, NM_DEVICE_TYPE_OLPC_MESH,
NM_DEVICE_LINK_TYPE, NM_LINK_TYPE_OLPC_MESH,
NULL);
NMDeviceOlpcMesh *device = NM_DEVICE_OLPC_MESH (object);
NMDeviceOlpcMeshPrivate *priv = NM_DEVICE_OLPC_MESH_GET_PRIVATE (device);
switch (prop_id) {
case PROP_COMPANION:
nm_utils_g_value_set_object_path (value, priv->companion);
break;
case PROP_ACTIVE_CHANNEL:
g_value_set_uint (value, nm_platform_mesh_get_channel (NM_PLATFORM_GET, nm_device_get_ifindex (NM_DEVICE (device))));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
/*****************************************************************************/
static void
nm_device_olpc_mesh_init (NMDeviceOlpcMesh * self)
{
@ -450,35 +470,15 @@ constructed (GObject *object)
nm_device_set_dhcp_timeout (NM_DEVICE (self), 20);
}
static void
get_property (GObject *object, guint prop_id,
GValue *value, GParamSpec *pspec)
NMDevice *
nm_device_olpc_mesh_new (const char *iface)
{
NMDeviceOlpcMesh *device = NM_DEVICE_OLPC_MESH (object);
NMDeviceOlpcMeshPrivate *priv = NM_DEVICE_OLPC_MESH_GET_PRIVATE (device);
switch (prop_id) {
case PROP_COMPANION:
nm_utils_g_value_set_object_path (value, priv->companion);
break;
case PROP_ACTIVE_CHANNEL:
g_value_set_uint (value, nm_platform_mesh_get_channel (NM_PLATFORM_GET, nm_device_get_ifindex (NM_DEVICE (device))));
break;
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)
{
switch (prop_id) {
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
return (NMDevice *) g_object_new (NM_TYPE_DEVICE_OLPC_MESH,
NM_DEVICE_IFACE, iface,
NM_DEVICE_TYPE_DESC, "802.11 OLPC Mesh",
NM_DEVICE_DEVICE_TYPE, NM_DEVICE_TYPE_OLPC_MESH,
NM_DEVICE_LINK_TYPE, NM_LINK_TYPE_OLPC_MESH,
NULL);
}
static void
@ -504,39 +504,33 @@ nm_device_olpc_mesh_class_init (NMDeviceOlpcMeshClass *klass)
GObjectClass *object_class = G_OBJECT_CLASS (klass);
NMDeviceClass *parent_class = NM_DEVICE_CLASS (klass);
g_type_class_add_private (object_class, sizeof (NMDeviceOlpcMeshPrivate));
NM_DEVICE_CLASS_DECLARE_TYPES (klass, NM_SETTING_OLPC_MESH_SETTING_NAME, NM_LINK_TYPE_OLPC_MESH)
object_class->constructed = constructed;
object_class->get_property = get_property;
object_class->set_property = set_property;
object_class->dispose = dispose;
parent_class->check_connection_compatible = check_connection_compatible;
parent_class->can_auto_connect = can_auto_connect;
parent_class->complete_connection = complete_connection;
parent_class->is_available = is_available;
parent_class->act_stage1_prepare = act_stage1_prepare;
parent_class->act_stage2_config = act_stage2_config;
parent_class->state_changed = state_changed;
/* Properties */
g_object_class_install_property
(object_class, PROP_COMPANION,
g_param_spec_string (NM_DEVICE_OLPC_MESH_COMPANION, "", "",
NULL,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS));
obj_properties[PROP_COMPANION] =
g_param_spec_string (NM_DEVICE_OLPC_MESH_COMPANION, "", "",
NULL,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS);
g_object_class_install_property
(object_class, PROP_ACTIVE_CHANNEL,
g_param_spec_uint (NM_DEVICE_OLPC_MESH_ACTIVE_CHANNEL, "", "",
0, G_MAXUINT32, 0,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS));
obj_properties[PROP_ACTIVE_CHANNEL] =
g_param_spec_uint (NM_DEVICE_OLPC_MESH_ACTIVE_CHANNEL, "", "",
0, G_MAXUINT32, 0,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS);
g_object_class_install_properties (object_class, _PROPERTY_ENUMS_LAST, obj_properties);
nm_exported_object_class_add_interface (NM_EXPORTED_OBJECT_CLASS (klass),
NMDBUS_TYPE_DEVICE_OLPC_MESH_SKELETON,

View file

@ -41,25 +41,8 @@
#define NM_DEVICE_OLPC_MESH_BITRATE "bitrate"
#define NM_DEVICE_OLPC_MESH_ACTIVE_CHANNEL "active-channel"
#ifndef NM_DEVICE_OLPC_MESH_DEFINED
#define NM_DEVICE_OLPC_MESH_DEFINED
typedef struct _NMDeviceOlpcMesh NMDeviceOlpcMesh;
#endif
typedef struct _NMDeviceOlpcMeshClass NMDeviceOlpcMeshClass;
typedef struct _NMDeviceOlpcMeshPrivate NMDeviceOlpcMeshPrivate;
struct _NMDeviceOlpcMesh
{
NMDevice parent;
};
struct _NMDeviceOlpcMeshClass
{
NMDeviceClass parent;
};
GType nm_device_olpc_mesh_get_type (void);

View file

@ -30,19 +30,30 @@
#include "nm-settings-connection.h"
#include "nm-platform.h"
#define NM_TYPE_WIFI_FACTORY (nm_wifi_factory_get_type ())
#define NM_WIFI_FACTORY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_WIFI_FACTORY, NMWifiFactory))
/*****************************************************************************/
typedef struct {
GObject parent;
} NMWifiFactory;
#define NM_TYPE_WIFI_FACTORY (nm_wifi_factory_get_type ())
#define NM_WIFI_FACTORY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_WIFI_FACTORY, NMWifiFactory))
#define NM_WIFI_FACTORY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_WIFI_FACTORY, NMWifiFactoryClass))
#define NM_IS_WIFI_FACTORY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_WIFI_FACTORY))
#define NM_IS_WIFI_FACTORY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_WIFI_FACTORY))
#define NM_WIFI_FACTORY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_WIFI_FACTORY, NMWifiFactoryClass))
typedef struct {
GObjectClass parent;
} NMWifiFactoryClass;
typedef struct _NMWifiFactory NMWifiFactory;
typedef struct _NMWifiFactoryClass NMWifiFactoryClass;
static GType nm_wifi_factory_get_type (void);
/*****************************************************************************/
struct _NMWifiFactory {
GObject parent;
};
struct _NMWifiFactoryClass {
GObjectClass parent;
};
static void device_factory_interface_init (NMDeviceFactoryInterface *factory_iface);
G_DEFINE_TYPE_EXTENDED (NMWifiFactory, nm_wifi_factory, G_TYPE_OBJECT, 0,
@ -50,14 +61,6 @@ G_DEFINE_TYPE_EXTENDED (NMWifiFactory, nm_wifi_factory, G_TYPE_OBJECT, 0,
/*****************************************************************************/
G_MODULE_EXPORT NMDeviceFactory *
nm_device_factory_create (GError **error)
{
return (NMDeviceFactory *) g_object_new (NM_TYPE_WIFI_FACTORY, NULL);
}
/*****************************************************************************/
static NMDevice *
create_device (NMDeviceFactory *factory,
const char *iface,
@ -101,12 +104,7 @@ NM_DEVICE_FACTORY_DECLARE_TYPES (
NM_DEVICE_FACTORY_DECLARE_SETTING_TYPES (NM_SETTING_WIRELESS_SETTING_NAME, NM_SETTING_OLPC_MESH_SETTING_NAME)
)
static void
device_factory_interface_init (NMDeviceFactoryInterface *factory_iface)
{
factory_iface->create_device = create_device;
factory_iface->get_supported_types = get_supported_types;
}
/*****************************************************************************/
static void
nm_wifi_factory_init (NMWifiFactory *self)
@ -118,3 +116,17 @@ nm_wifi_factory_class_init (NMWifiFactoryClass *wf_class)
{
}
static void
device_factory_interface_init (NMDeviceFactoryInterface *factory_iface)
{
factory_iface->create_device = create_device;
factory_iface->get_supported_types = get_supported_types;
}
/*****************************************************************************/
G_MODULE_EXPORT NMDeviceFactory *
nm_device_factory_create (GError **error)
{
return (NMDeviceFactory *) g_object_new (NM_TYPE_WIFI_FACTORY, NULL);
}

View file

@ -68,7 +68,6 @@ SYMBOL_VIS_FILE=$(srcdir)/exports.ver
libnm_device_plugin_wwan_la_SOURCES = \
nm-wwan-factory.c \
nm-wwan-factory.h \
nm-device-modem.c \
nm-device-modem.h

View file

@ -20,9 +20,10 @@
#include "nm-default.h"
#include "nm-device-modem.h"
#include <string.h>
#include "nm-device-modem.h"
#include "nm-modem.h"
#include "nm-device-private.h"
#include "nm-rfkill-manager.h"
@ -31,14 +32,18 @@
#include "NetworkManagerUtils.h"
#include "nm-core-internal.h"
#include "nmdbus-device-modem.h"
#include "nm-device-logging.h"
_LOG_DECLARE_SELF(NMDeviceModem);
#include "nmdbus-device-modem.h"
/*****************************************************************************/
G_DEFINE_TYPE (NMDeviceModem, nm_device_modem, NM_TYPE_DEVICE)
#define NM_DEVICE_MODEM_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DEVICE_MODEM, NMDeviceModemPrivate))
NM_GOBJECT_PROPERTIES_DEFINE_BASE (
PROP_MODEM,
PROP_CAPABILITIES,
PROP_CURRENT_CAPABILITIES,
);
typedef struct {
NMModem *modem;
@ -47,13 +52,19 @@ typedef struct {
gboolean rf_enabled;
} NMDeviceModemPrivate;
enum {
PROP_0,
PROP_MODEM,
PROP_CAPABILITIES,
PROP_CURRENT_CAPABILITIES,
struct _NMDeviceModem {
NMDevice parent;
NMDeviceModemPrivate _priv;
};
struct _NMDeviceModemClass {
NMDeviceClass parent;
};
G_DEFINE_TYPE (NMDeviceModem, nm_device_modem, NM_TYPE_DEVICE)
#define NM_DEVICE_MODEM_GET_PRIVATE(self) _NM_GET_PRIVATE (self, NMDeviceModem, NM_IS_DEVICE_MODEM)
/*****************************************************************************/
static void
@ -281,7 +292,7 @@ modem_state_cb (NMModem *modem,
gpointer user_data)
{
NMDevice *device = NM_DEVICE (user_data);
NMDeviceModemPrivate *priv = NM_DEVICE_MODEM_GET_PRIVATE (device);
NMDeviceModemPrivate *priv = NM_DEVICE_MODEM_GET_PRIVATE ((NMDeviceModem *) device);
NMDeviceState dev_state = nm_device_get_state (device);
if (new_state <= NM_MODEM_STATE_DISABLING &&
@ -335,9 +346,10 @@ modem_removed_cb (NMModem *modem, gpointer user_data)
static gboolean
owns_iface (NMDevice *device, const char *iface)
{
NMDeviceModemPrivate *priv = NM_DEVICE_MODEM_GET_PRIVATE (device);
NMDeviceModemPrivate *priv = NM_DEVICE_MODEM_GET_PRIVATE ((NMDeviceModem *) device);
g_return_val_if_fail (priv->modem, FALSE);
g_assert (priv->modem);
return nm_modem_owns_port (priv->modem, iface);
}
@ -350,7 +362,7 @@ device_state_changed (NMDevice *device,
NMDeviceStateReason reason)
{
NMDeviceModem *self = NM_DEVICE_MODEM (device);
NMDeviceModemPrivate *priv = NM_DEVICE_MODEM_GET_PRIVATE (device);
NMDeviceModemPrivate *priv = NM_DEVICE_MODEM_GET_PRIVATE (self);
NMConnection *connection = nm_device_get_applied_connection (device);
g_assert (priv->modem);
@ -394,7 +406,7 @@ get_generic_capabilities (NMDevice *device)
static const char *
get_type_description (NMDevice *device)
{
NMDeviceModemPrivate *priv = NM_DEVICE_MODEM_GET_PRIVATE (device);
NMDeviceModemPrivate *priv = NM_DEVICE_MODEM_GET_PRIVATE ((NMDeviceModem *) device);
if (NM_FLAGS_HAS (priv->current_caps, NM_DEVICE_MODEM_CAPABILITY_GSM_UMTS))
return "gsm";
@ -409,7 +421,7 @@ check_connection_compatible (NMDevice *device, NMConnection *connection)
if (!NM_DEVICE_CLASS (nm_device_modem_parent_class)->check_connection_compatible (device, connection))
return FALSE;
return nm_modem_check_connection_compatible (NM_DEVICE_MODEM_GET_PRIVATE (device)->modem, connection);
return nm_modem_check_connection_compatible (NM_DEVICE_MODEM_GET_PRIVATE ((NMDeviceModem *) device)->modem, connection);
}
static gboolean
@ -444,7 +456,7 @@ complete_connection (NMDevice *device,
const GSList *existing_connections,
GError **error)
{
NMDeviceModemPrivate *priv = NM_DEVICE_MODEM_GET_PRIVATE (device);
NMDeviceModemPrivate *priv = NM_DEVICE_MODEM_GET_PRIVATE ((NMDeviceModem *) device);
return nm_modem_complete_connection (priv->modem, connection, existing_connections, error);
}
@ -452,7 +464,7 @@ complete_connection (NMDevice *device,
static void
deactivate (NMDevice *device)
{
nm_modem_deactivate (NM_DEVICE_MODEM_GET_PRIVATE (device)->modem, device);
nm_modem_deactivate (NM_DEVICE_MODEM_GET_PRIVATE ((NMDeviceModem *) device)->modem, device);
}
/*****************************************************************************/
@ -490,7 +502,7 @@ deactivate_async (NMDevice *self,
callback,
user_data,
deactivate_async);
nm_modem_deactivate_async (NM_DEVICE_MODEM_GET_PRIVATE (self)->modem,
nm_modem_deactivate_async (NM_DEVICE_MODEM_GET_PRIVATE ((NMDeviceModem *) self)->modem,
self,
cancellable,
(GAsyncReadyCallback) modem_deactivate_async_ready,
@ -512,7 +524,7 @@ act_stage1_prepare (NMDevice *device, NMDeviceStateReason *reason)
req = nm_device_get_act_request (device);
g_assert (req);
return nm_modem_act_stage1_prepare (NM_DEVICE_MODEM_GET_PRIVATE (device)->modem, req, reason);
return nm_modem_act_stage1_prepare (NM_DEVICE_MODEM_GET_PRIVATE ((NMDeviceModem *) device)->modem, req, reason);
}
static NMActStageReturn
@ -523,7 +535,7 @@ act_stage2_config (NMDevice *device, NMDeviceStateReason *reason)
req = nm_device_get_act_request (device);
g_assert (req);
return nm_modem_act_stage2_config (NM_DEVICE_MODEM_GET_PRIVATE (device)->modem, req, reason);
return nm_modem_act_stage2_config (NM_DEVICE_MODEM_GET_PRIVATE ((NMDeviceModem *) device)->modem, req, reason);
}
static NMActStageReturn
@ -531,7 +543,7 @@ act_stage3_ip4_config_start (NMDevice *device,
NMIP4Config **out_config,
NMDeviceStateReason *reason)
{
return nm_modem_stage3_ip4_config_start (NM_DEVICE_MODEM_GET_PRIVATE (device)->modem,
return nm_modem_stage3_ip4_config_start (NM_DEVICE_MODEM_GET_PRIVATE ((NMDeviceModem *) device)->modem,
device,
NM_DEVICE_CLASS (nm_device_modem_parent_class),
reason);
@ -540,7 +552,7 @@ act_stage3_ip4_config_start (NMDevice *device,
static void
ip4_config_pre_commit (NMDevice *device, NMIP4Config *config)
{
nm_modem_ip4_pre_commit (NM_DEVICE_MODEM_GET_PRIVATE (device)->modem, device, config);
nm_modem_ip4_pre_commit (NM_DEVICE_MODEM_GET_PRIVATE ((NMDeviceModem *) device)->modem, device, config);
}
static NMActStageReturn
@ -548,7 +560,7 @@ act_stage3_ip6_config_start (NMDevice *device,
NMIP6Config **out_config,
NMDeviceStateReason *reason)
{
return nm_modem_stage3_ip6_config_start (NM_DEVICE_MODEM_GET_PRIVATE (device)->modem,
return nm_modem_stage3_ip6_config_start (NM_DEVICE_MODEM_GET_PRIVATE ((NMDeviceModem *) device)->modem,
nm_device_get_act_request (device),
reason);
}
@ -572,7 +584,7 @@ get_ip_iface_identifier (NMDevice *device, NMUtilsIPv6IfaceId *out_iid)
static gboolean
get_enabled (NMDevice *device)
{
NMDeviceModemPrivate *priv = NM_DEVICE_MODEM_GET_PRIVATE (device);
NMDeviceModemPrivate *priv = NM_DEVICE_MODEM_GET_PRIVATE ((NMDeviceModem *) device);
NMModemState modem_state = nm_modem_get_state (priv->modem);
return priv->rf_enabled && (modem_state >= NM_MODEM_STATE_LOCKED);
@ -621,6 +633,100 @@ is_available (NMDevice *device, NMDeviceCheckDevAvailableFlags flags)
/*****************************************************************************/
static void
set_modem (NMDeviceModem *self, NMModem *modem)
{
NMDeviceModemPrivate *priv = NM_DEVICE_MODEM_GET_PRIVATE (self);
g_return_if_fail (modem != NULL);
priv->modem = g_object_ref (modem);
g_signal_connect (modem, NM_MODEM_PPP_FAILED, G_CALLBACK (ppp_failed), self);
g_signal_connect (modem, NM_MODEM_PREPARE_RESULT, G_CALLBACK (modem_prepare_result), self);
g_signal_connect (modem, NM_MODEM_IP4_CONFIG_RESULT, G_CALLBACK (modem_ip4_config_result), self);
g_signal_connect (modem, NM_MODEM_IP6_CONFIG_RESULT, G_CALLBACK (modem_ip6_config_result), self);
g_signal_connect (modem, NM_MODEM_AUTH_REQUESTED, G_CALLBACK (modem_auth_requested), self);
g_signal_connect (modem, NM_MODEM_AUTH_RESULT, G_CALLBACK (modem_auth_result), self);
g_signal_connect (modem, NM_MODEM_STATE_CHANGED, G_CALLBACK (modem_state_cb), self);
g_signal_connect (modem, NM_MODEM_REMOVED, G_CALLBACK (modem_removed_cb), self);
/* In the old ModemManager the data port is known from the very beginning;
* while in the new ModemManager the data port is set afterwards when the bearer gets
* created */
g_signal_connect (modem, "notify::" NM_MODEM_DATA_PORT, G_CALLBACK (data_port_changed_cb), self);
g_signal_connect (modem, "notify::" NM_MODEM_DEVICE_ID, G_CALLBACK (ids_changed_cb), self);
g_signal_connect (modem, "notify::" NM_MODEM_SIM_ID, G_CALLBACK (ids_changed_cb), self);
g_signal_connect (modem, "notify::" NM_MODEM_SIM_OPERATOR_ID, G_CALLBACK (ids_changed_cb), self);
}
/*****************************************************************************/
static void
get_property (GObject *object, guint prop_id,
GValue *value, GParamSpec *pspec)
{
NMDeviceModemPrivate *priv = NM_DEVICE_MODEM_GET_PRIVATE ((NMDeviceModem *) object);
switch (prop_id) {
case PROP_MODEM:
g_value_set_object (value, priv->modem);
break;
case PROP_CAPABILITIES:
g_value_set_uint (value, priv->caps);
break;
case PROP_CURRENT_CAPABILITIES:
g_value_set_uint (value, priv->current_caps);
break;
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)
{
NMDeviceModemPrivate *priv = NM_DEVICE_MODEM_GET_PRIVATE ((NMDeviceModem *) object);
switch (prop_id) {
case PROP_MODEM:
/* construct-only */
set_modem (NM_DEVICE_MODEM (object), g_value_get_object (value));
break;
case PROP_CAPABILITIES:
priv->caps = g_value_get_uint (value);
break;
case PROP_CURRENT_CAPABILITIES:
priv->current_caps = g_value_get_uint (value);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
/*****************************************************************************/
static void
nm_device_modem_init (NMDeviceModem *self)
{
}
static void
constructed (GObject *object)
{
G_OBJECT_CLASS (nm_device_modem_parent_class)->constructed (object);
/* DHCP is always done by the modem firmware, not by the network, and
* by the time we get around to DHCP the firmware should already know
* the IP addressing details. So the DHCP timeout can be much shorter.
*/
nm_device_set_dhcp_timeout (NM_DEVICE (object), 15);
}
NMDevice *
nm_device_modem_new (NMModem *modem)
{
@ -656,100 +762,10 @@ nm_device_modem_new (NMModem *modem)
return device;
}
static void
nm_device_modem_init (NMDeviceModem *self)
{
}
static void
constructed (GObject *object)
{
G_OBJECT_CLASS (nm_device_modem_parent_class)->constructed (object);
/* DHCP is always done by the modem firmware, not by the network, and
* by the time we get around to DHCP the firmware should already know
* the IP addressing details. So the DHCP timeout can be much shorter.
*/
nm_device_set_dhcp_timeout (NM_DEVICE (object), 15);
}
static void
set_modem (NMDeviceModem *self, NMModem *modem)
{
NMDeviceModemPrivate *priv = NM_DEVICE_MODEM_GET_PRIVATE (self);
g_return_if_fail (modem != NULL);
priv->modem = g_object_ref (modem);
g_signal_connect (modem, NM_MODEM_PPP_FAILED, G_CALLBACK (ppp_failed), self);
g_signal_connect (modem, NM_MODEM_PREPARE_RESULT, G_CALLBACK (modem_prepare_result), self);
g_signal_connect (modem, NM_MODEM_IP4_CONFIG_RESULT, G_CALLBACK (modem_ip4_config_result), self);
g_signal_connect (modem, NM_MODEM_IP6_CONFIG_RESULT, G_CALLBACK (modem_ip6_config_result), self);
g_signal_connect (modem, NM_MODEM_AUTH_REQUESTED, G_CALLBACK (modem_auth_requested), self);
g_signal_connect (modem, NM_MODEM_AUTH_RESULT, G_CALLBACK (modem_auth_result), self);
g_signal_connect (modem, NM_MODEM_STATE_CHANGED, G_CALLBACK (modem_state_cb), self);
g_signal_connect (modem, NM_MODEM_REMOVED, G_CALLBACK (modem_removed_cb), self);
/* In the old ModemManager the data port is known from the very beginning;
* while in the new ModemManager the data port is set afterwards when the bearer gets
* created */
g_signal_connect (modem, "notify::" NM_MODEM_DATA_PORT, G_CALLBACK (data_port_changed_cb), self);
g_signal_connect (modem, "notify::" NM_MODEM_DEVICE_ID, G_CALLBACK (ids_changed_cb), self);
g_signal_connect (modem, "notify::" NM_MODEM_SIM_ID, G_CALLBACK (ids_changed_cb), self);
g_signal_connect (modem, "notify::" NM_MODEM_SIM_OPERATOR_ID, G_CALLBACK (ids_changed_cb), self);
}
static void
set_property (GObject *object, guint prop_id,
const GValue *value, GParamSpec *pspec)
{
NMDeviceModemPrivate *priv = NM_DEVICE_MODEM_GET_PRIVATE (object);
switch (prop_id) {
case PROP_MODEM:
/* construct-only */
set_modem (NM_DEVICE_MODEM (object), g_value_get_object (value));
break;
case PROP_CAPABILITIES:
priv->caps = g_value_get_uint (value);
break;
case PROP_CURRENT_CAPABILITIES:
priv->current_caps = g_value_get_uint (value);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
static void
get_property (GObject *object, guint prop_id,
GValue *value, GParamSpec *pspec)
{
NMDeviceModemPrivate *priv = NM_DEVICE_MODEM_GET_PRIVATE (object);
switch (prop_id) {
case PROP_MODEM:
g_value_set_object (value, priv->modem);
break;
case PROP_CAPABILITIES:
g_value_set_uint (value, priv->caps);
break;
case PROP_CURRENT_CAPABILITIES:
g_value_set_uint (value, priv->current_caps);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
static void
dispose (GObject *object)
{
NMDeviceModemPrivate *priv = NM_DEVICE_MODEM_GET_PRIVATE (object);
NMDeviceModemPrivate *priv = NM_DEVICE_MODEM_GET_PRIVATE ((NMDeviceModem *) object);
if (priv->modem)
g_signal_handlers_disconnect_by_data (priv->modem, NM_DEVICE_MODEM (object));
@ -764,9 +780,6 @@ nm_device_modem_class_init (NMDeviceModemClass *mclass)
GObjectClass *object_class = G_OBJECT_CLASS (mclass);
NMDeviceClass *device_class = NM_DEVICE_CLASS (mclass);
g_type_class_add_private (object_class, sizeof (NMDeviceModemPrivate));
/* Virtual methods */
object_class->dispose = dispose;
object_class->get_property = get_property;
object_class->set_property = set_property;
@ -793,27 +806,25 @@ nm_device_modem_class_init (NMDeviceModemClass *mclass)
device_class->state_changed = device_state_changed;
/* Properties */
g_object_class_install_property
(object_class, PROP_MODEM,
g_param_spec_object (NM_DEVICE_MODEM_MODEM, "", "",
NM_TYPE_MODEM,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS));
obj_properties[PROP_MODEM] =
g_param_spec_object (NM_DEVICE_MODEM_MODEM, "", "",
NM_TYPE_MODEM,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS);
g_object_class_install_property
(object_class, PROP_CAPABILITIES,
g_param_spec_uint (NM_DEVICE_MODEM_CAPABILITIES, "", "",
0, G_MAXUINT32, NM_DEVICE_MODEM_CAPABILITY_NONE,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS));
obj_properties[PROP_CAPABILITIES] =
g_param_spec_uint (NM_DEVICE_MODEM_CAPABILITIES, "", "",
0, G_MAXUINT32, NM_DEVICE_MODEM_CAPABILITY_NONE,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS);
g_object_class_install_property
(object_class, PROP_CURRENT_CAPABILITIES,
g_param_spec_uint (NM_DEVICE_MODEM_CURRENT_CAPABILITIES, "", "",
0, G_MAXUINT32, NM_DEVICE_MODEM_CAPABILITY_NONE,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS));
obj_properties[PROP_CURRENT_CAPABILITIES] =
g_param_spec_uint (NM_DEVICE_MODEM_CURRENT_CAPABILITIES, "", "",
0, G_MAXUINT32, NM_DEVICE_MODEM_CAPABILITY_NONE,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS);
g_object_class_install_properties (object_class, _PROPERTY_ENUMS_LAST, obj_properties);
nm_exported_object_class_add_interface (NM_EXPORTED_OBJECT_CLASS (mclass),
NMDBUS_TYPE_DEVICE_MODEM_SKELETON,

View file

@ -35,14 +35,8 @@
#define NM_DEVICE_MODEM_CAPABILITIES "modem-capabilities"
#define NM_DEVICE_MODEM_CURRENT_CAPABILITIES "current-capabilities"
typedef struct {
NMDevice parent;
} NMDeviceModem;
typedef struct {
NMDeviceClass parent;
} NMDeviceModemClass;
typedef struct _NMDeviceModem NMDeviceModem;
typedef struct _NMDeviceModemClass NMDeviceModemClass;
GType nm_device_modem_get_type (void);

View file

@ -20,27 +20,39 @@
#include "nm-default.h"
#include "nm-modem-broadband.h"
#include <string.h>
#include <arpa/inet.h>
#include <libmm-glib.h>
#include "nm-modem-broadband.h"
#include "nm-core-internal.h"
#include "NetworkManagerUtils.h"
#include "nm-device-private.h"
#include "nm-platform.h"
#include "nm-ip4-config.h"
#include "nm-ip6-config.h"
#define NM_MODEM_BROADBAND_MODEM "modem"
G_DEFINE_TYPE (NMModemBroadband, nm_modem_broadband, NM_TYPE_MODEM)
#define MODEM_CAPS_3GPP(caps) (caps & (MM_MODEM_CAPABILITY_GSM_UMTS | \
MM_MODEM_CAPABILITY_LTE | \
MM_MODEM_CAPABILITY_LTE_ADVANCED))
#define MODEM_CAPS_3GPP2(caps) (caps & (MM_MODEM_CAPABILITY_CDMA_EVDO))
/* Maximum time to keep the DBus call waiting for a connection result */
#define MODEM_CONNECT_TIMEOUT_SECS 120
/*****************************************************************************/
typedef enum {
CONNECT_STEP_FIRST,
CONNECT_STEP_WAIT_FOR_SIM,
CONNECT_STEP_UNLOCK,
CONNECT_STEP_WAIT_FOR_READY,
CONNECT_STEP_CONNECT,
CONNECT_STEP_LAST
CONNECT_STEP_FIRST,
CONNECT_STEP_WAIT_FOR_SIM,
CONNECT_STEP_UNLOCK,
CONNECT_STEP_WAIT_FOR_READY,
CONNECT_STEP_CONNECT,
CONNECT_STEP_LAST,
} ConnectStep;
typedef struct {
@ -57,7 +69,13 @@ typedef struct {
GError *first_error;
} ConnectContext;
struct _NMModemBroadbandPrivate {
/*****************************************************************************/
NM_GOBJECT_PROPERTIES_DEFINE_BASE (
PROP_MODEM,
);
typedef struct {
/* The modem object from dbus */
MMObject *modem_object;
/* Per-interface objects */
@ -73,21 +91,20 @@ struct _NMModemBroadbandPrivate {
MMBearerIpConfig *ipv6_config;
guint32 pin_tries;
} NMModemBroadbandPrivate;
struct _NMModemBroadband {
NMModem parent;
NMModemBroadbandPrivate _priv;
};
enum {
PROP_0,
PROP_MODEM,
struct _NMModemBroadbandClass {
NMModemClass parent;
};
#define MODEM_CAPS_3GPP(caps) (caps & (MM_MODEM_CAPABILITY_GSM_UMTS | \
MM_MODEM_CAPABILITY_LTE | \
MM_MODEM_CAPABILITY_LTE_ADVANCED))
G_DEFINE_TYPE (NMModemBroadband, nm_modem_broadband, NM_TYPE_MODEM)
#define MODEM_CAPS_3GPP2(caps) (caps & (MM_MODEM_CAPABILITY_CDMA_EVDO))
/* Maximum time to keep the DBus call waiting for a connection result */
#define MODEM_CONNECT_TIMEOUT_SECS 120
#define NM_MODEM_BROADBAND_GET_PRIVATE(self) _NM_GET_PRIVATE (self, NMModemBroadband, NM_IS_MODEM_BROADBAND)
/*****************************************************************************/
@ -172,7 +189,7 @@ get_capabilities (NMModem *_self,
/* For now, we don't care about the capability combinations, just merge all
* combinations in a single mask */
if (mm_modem_get_supported_capabilities (self->priv->modem_iface, &supported, &n_supported)) {
if (mm_modem_get_supported_capabilities (self->_priv.modem_iface, &supported, &n_supported)) {
guint i;
for (i = 0; i < n_supported; i++)
@ -182,7 +199,7 @@ get_capabilities (NMModem *_self,
}
*modem_caps = (NMDeviceModemCapabilities) all_supported;
*current_caps = (NMDeviceModemCapabilities) mm_modem_get_current_capabilities (self->priv->modem_iface);
*current_caps = (NMDeviceModemCapabilities) mm_modem_get_current_capabilities (self->_priv.modem_iface);
}
static gboolean
@ -193,7 +210,7 @@ owns_port (NMModem *_self, const char *iface)
guint n_ports = 0, i;
gboolean owns = FALSE;
mm_modem_peek_ports (self->priv->modem_iface, &ports, &n_ports);
mm_modem_peek_ports (self->_priv.modem_iface, &ports, &n_ports);
for (i = 0; i < n_ports && !owns; i++)
owns = (g_strcmp0 (iface, ports[i].name) == 0);
return owns;
@ -206,7 +223,7 @@ ask_for_pin (NMModemBroadband *self)
{
guint32 tries;
tries = self->priv->pin_tries++;
tries = self->_priv.pin_tries++;
nm_modem_get_secrets (NM_MODEM (self),
NM_SETTING_GSM_SETTING_NAME,
tries ? TRUE : FALSE,
@ -312,8 +329,8 @@ create_gsm_connect_properties (NMConnection *connection)
static void
connect_context_clear (NMModemBroadband *self)
{
if (self->priv->ctx) {
ConnectContext *ctx = self->priv->ctx;
if (self->_priv.ctx) {
ConnectContext *ctx = self->_priv.ctx;
g_clear_error (&ctx->first_error);
g_clear_pointer (&ctx->ip_types, (GDestroyNotify) g_array_unref);
@ -322,7 +339,7 @@ connect_context_clear (NMModemBroadband *self)
g_clear_object (&ctx->connect_properties);
g_clear_object (&ctx->self);
g_slice_free (ConnectContext, ctx);
self->priv->ctx = NULL;
self->_priv.ctx = NULL;
}
}
@ -333,20 +350,20 @@ connect_ready (MMModemSimple *simple_iface,
GAsyncResult *res,
NMModemBroadband *self)
{
ConnectContext *ctx = self->priv->ctx;
ConnectContext *ctx = self->_priv.ctx;
GError *error = NULL;
NMModemIPMethod ip4_method = NM_MODEM_IP_METHOD_UNKNOWN;
NMModemIPMethod ip6_method = NM_MODEM_IP_METHOD_UNKNOWN;
self->priv->bearer = mm_modem_simple_connect_finish (simple_iface, res, &error);
self->_priv.bearer = mm_modem_simple_connect_finish (simple_iface, res, &error);
if (!ctx)
return;
if (!self->priv->bearer) {
if (!self->_priv.bearer) {
if (g_error_matches (error, MM_MOBILE_EQUIPMENT_ERROR, MM_MOBILE_EQUIPMENT_ERROR_SIM_PIN) ||
(g_error_matches (error, MM_CORE_ERROR, MM_CORE_ERROR_UNAUTHORIZED) &&
mm_modem_get_unlock_required (self->priv->modem_iface) == MM_MODEM_LOCK_SIM_PIN)) {
mm_modem_get_unlock_required (self->_priv.modem_iface) == MM_MODEM_LOCK_SIM_PIN)) {
g_error_free (error);
/* Request PIN */
@ -379,13 +396,13 @@ connect_ready (MMModemSimple *simple_iface,
}
/* Grab IP configurations */
self->priv->ipv4_config = mm_bearer_get_ipv4_config (self->priv->bearer);
if (self->priv->ipv4_config)
ip4_method = get_bearer_ip_method (self->priv->ipv4_config);
self->_priv.ipv4_config = mm_bearer_get_ipv4_config (self->_priv.bearer);
if (self->_priv.ipv4_config)
ip4_method = get_bearer_ip_method (self->_priv.ipv4_config);
self->priv->ipv6_config = mm_bearer_get_ipv6_config (self->priv->bearer);
if (self->priv->ipv6_config)
ip6_method = get_bearer_ip_method (self->priv->ipv6_config);
self->_priv.ipv6_config = mm_bearer_get_ipv6_config (self->_priv.bearer);
if (self->_priv.ipv6_config)
ip6_method = get_bearer_ip_method (self->_priv.ipv6_config);
if (ip4_method == NM_MODEM_IP_METHOD_UNKNOWN &&
ip6_method == NM_MODEM_IP_METHOD_UNKNOWN) {
@ -396,10 +413,10 @@ connect_ready (MMModemSimple *simple_iface,
}
g_object_set (self,
NM_MODEM_DATA_PORT, mm_bearer_get_interface (self->priv->bearer),
NM_MODEM_DATA_PORT, mm_bearer_get_interface (self->_priv.bearer),
NM_MODEM_IP4_METHOD, ip4_method,
NM_MODEM_IP6_METHOD, ip6_method,
NM_MODEM_IP_TIMEOUT, mm_bearer_get_ip_timeout (self->priv->bearer),
NM_MODEM_IP_TIMEOUT, mm_bearer_get_ip_timeout (self->_priv.bearer),
NULL);
ctx->step++;
@ -416,13 +433,13 @@ send_pin_ready (MMSim *sim, GAsyncResult *result, NMModemBroadband *self)
if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
return;
if (!self->priv->ctx || self->priv->ctx->step != CONNECT_STEP_UNLOCK)
if (!self->_priv.ctx || self->_priv.ctx->step != CONNECT_STEP_UNLOCK)
g_return_if_reached ();
if (error) {
if (g_error_matches (error, MM_MOBILE_EQUIPMENT_ERROR, MM_MOBILE_EQUIPMENT_ERROR_SIM_PIN) ||
(g_error_matches (error, MM_CORE_ERROR, MM_CORE_ERROR_UNAUTHORIZED) &&
mm_modem_get_unlock_required (self->priv->modem_iface) == MM_MODEM_LOCK_SIM_PIN)) {
mm_modem_get_unlock_required (self->_priv.modem_iface) == MM_MODEM_LOCK_SIM_PIN)) {
ask_for_pin (self);
} else {
g_signal_emit_by_name (self, NM_MODEM_PREPARE_RESULT, FALSE, translate_mm_error (self, error));
@ -430,14 +447,14 @@ send_pin_ready (MMSim *sim, GAsyncResult *result, NMModemBroadband *self)
return;
}
self->priv->ctx->step++;
self->_priv.ctx->step++;
connect_context_step (self);
}
static void
connect_context_step (NMModemBroadband *self)
{
ConnectContext *ctx = self->priv->ctx;
ConnectContext *ctx = self->_priv.ctx;
switch (ctx->step) {
case CONNECT_STEP_FIRST:
@ -445,7 +462,7 @@ connect_context_step (NMModemBroadband *self)
/* fall through */
case CONNECT_STEP_WAIT_FOR_SIM:
if (MODEM_CAPS_3GPP (ctx->caps) && !self->priv->sim_iface) {
if (MODEM_CAPS_3GPP (ctx->caps) && !self->_priv.sim_iface) {
/* Have to wait for the SIM to show up */
break;
}
@ -454,13 +471,13 @@ connect_context_step (NMModemBroadband *self)
case CONNECT_STEP_UNLOCK:
if ( MODEM_CAPS_3GPP (ctx->caps)
&& mm_modem_get_unlock_required (self->priv->modem_iface) == MM_MODEM_LOCK_SIM_PIN) {
&& mm_modem_get_unlock_required (self->_priv.modem_iface) == MM_MODEM_LOCK_SIM_PIN) {
NMSettingGsm *s_gsm = nm_connection_get_setting_gsm (ctx->connection);
const char *pin = nm_setting_gsm_get_pin (s_gsm);
/* If we have a PIN already, send it. If we don't, get it. */
if (pin) {
mm_sim_send_pin (self->priv->sim_iface,
mm_sim_send_pin (self->_priv.sim_iface,
pin,
ctx->cancellable,
(GAsyncReadyCallback) send_pin_ready,
@ -476,7 +493,7 @@ connect_context_step (NMModemBroadband *self)
case CONNECT_STEP_WAIT_FOR_READY: {
GError *error = NULL;
if (mm_modem_get_state (self->priv->modem_iface) <= MM_MODEM_STATE_LOCKED)
if (mm_modem_get_state (self->_priv.modem_iface) <= MM_MODEM_STATE_LOCKED)
break;
/* Create core connect properties based on the modem capabilities */
@ -532,7 +549,7 @@ connect_context_step (NMModemBroadband *self)
nm_modem_ip_type_to_string (current),
ctx->ip_type_tries + 1);
mm_modem_simple_connect (self->priv->simple_iface,
mm_modem_simple_connect (self->_priv.simple_iface,
ctx->connect_properties,
NULL,
(GAsyncReadyCallback) connect_ready,
@ -544,7 +561,7 @@ connect_context_step (NMModemBroadband *self)
/* fall through */
case CONNECT_STEP_LAST:
if (self->priv->ipv4_config || self->priv->ipv6_config) {
if (self->_priv.ipv4_config || self->_priv.ipv6_config) {
g_signal_emit_by_name (self, NM_MODEM_PREPARE_RESULT, TRUE, NM_DEVICE_STATE_REASON_NONE);
} else {
/* If we have a saved error from a previous attempt, use it */
@ -571,9 +588,9 @@ act_stage1_prepare (NMModem *_self,
NMModemBroadband *self = NM_MODEM_BROADBAND (_self);
/* Make sure we can get the Simple interface from the modem */
if (!self->priv->simple_iface) {
self->priv->simple_iface = mm_object_get_modem_simple (self->priv->modem_object);
if (!self->priv->simple_iface) {
if (!self->_priv.simple_iface) {
self->_priv.simple_iface = mm_object_get_modem_simple (self->_priv.modem_object);
if (!self->_priv.simple_iface) {
_LOGW ("cannot access the Simple mobile broadband modem interface");
*reason = NM_DEVICE_STATE_REASON_MODEM_INIT_FAILED;
return NM_ACT_STAGE_RETURN_FAILURE;
@ -583,12 +600,12 @@ act_stage1_prepare (NMModem *_self,
connect_context_clear (self);
/* Allocate new context for this connect stage attempt */
self->priv->ctx = g_slice_new0 (ConnectContext);
self->priv->ctx->caps = mm_modem_get_current_capabilities (self->priv->modem_iface);
self->priv->ctx->cancellable = g_cancellable_new ();
self->priv->ctx->connection = g_object_ref (connection);
self->_priv.ctx = g_slice_new0 (ConnectContext);
self->_priv.ctx->caps = mm_modem_get_current_capabilities (self->_priv.modem_iface);
self->_priv.ctx->cancellable = g_cancellable_new ();
self->_priv.ctx->connection = g_object_ref (connection);
g_dbus_proxy_set_default_timeout (G_DBUS_PROXY (self->priv->simple_iface), MODEM_CONNECT_TIMEOUT_SECS * 1000);
g_dbus_proxy_set_default_timeout (G_DBUS_PROXY (self->_priv.simple_iface), MODEM_CONNECT_TIMEOUT_SECS * 1000);
connect_context_step (self);
return NM_ACT_STAGE_RETURN_POSTPONE;
@ -603,7 +620,7 @@ check_connection_compatible (NMModem *_self, NMConnection *connection)
MMModemCapability modem_caps;
NMSettingConnection *s_con;
modem_caps = mm_modem_get_current_capabilities (self->priv->modem_iface);
modem_caps = mm_modem_get_current_capabilities (self->_priv.modem_iface);
s_con = nm_connection_get_setting_connection (connection);
g_assert (s_con);
@ -650,7 +667,7 @@ complete_connection (NMModem *_self,
MMModemCapability modem_caps;
NMSettingPpp *s_ppp;
modem_caps = mm_modem_get_current_capabilities (self->priv->modem_iface);
modem_caps = mm_modem_get_current_capabilities (self->_priv.modem_iface);
/* PPP settings common to 3GPP and 3GPP2 */
s_ppp = nm_connection_get_setting_ppp (connection);
@ -827,12 +844,12 @@ set_mm_enabled (NMModem *_self,
NMModemBroadband *self = NM_MODEM_BROADBAND (_self);
if (enabled) {
mm_modem_enable (self->priv->modem_iface,
mm_modem_enable (self->_priv.modem_iface,
NULL, /* cancellable */
(GAsyncReadyCallback)modem_enable_ready,
g_object_ref (self));
} else {
mm_modem_disable (self->priv->modem_iface,
mm_modem_disable (self->_priv.modem_iface,
NULL, /* cancellable */
(GAsyncReadyCallback)modem_disable_ready,
g_object_ref (self));
@ -871,13 +888,13 @@ static_stage3_ip4_done (NMModemBroadband *self)
const gchar **dns;
guint i;
g_assert (self->priv->ipv4_config);
g_assert (self->priv->bearer);
g_assert (self->_priv.ipv4_config);
g_assert (self->_priv.bearer);
_LOGI ("IPv4 static configuration:");
/* Fully fail if invalid IP address retrieved */
address_string = mm_bearer_ip_config_get_address (self->priv->ipv4_config);
address_string = mm_bearer_ip_config_get_address (self->_priv.ipv4_config);
if (!ip4_string_to_num (address_string, &address_network)) {
error = g_error_new (NM_DEVICE_ERROR,
NM_DEVICE_ERROR_INVALID_CONNECTION,
@ -888,17 +905,17 @@ static_stage3_ip4_done (NMModemBroadband *self)
}
/* Missing gateway not a hard failure */
gw_string = mm_bearer_ip_config_get_gateway (self->priv->ipv4_config);
gw_string = mm_bearer_ip_config_get_gateway (self->_priv.ipv4_config);
ip4_string_to_num (gw_string, &gw);
data_port = mm_bearer_get_interface (self->priv->bearer);
data_port = mm_bearer_get_interface (self->_priv.bearer);
g_assert (data_port);
config = nm_ip4_config_new (nm_platform_link_get_ifindex (NM_PLATFORM_GET, data_port));
memset (&address, 0, sizeof (address));
address.address = address_network;
address.peer_address = address_network;
address.plen = mm_bearer_ip_config_get_prefix (self->priv->ipv4_config);
address.plen = mm_bearer_ip_config_get_prefix (self->_priv.ipv4_config);
address.addr_source = NM_IP_CONFIG_SOURCE_WWAN;
if (address.plen <= 32)
nm_ip4_config_add_address (config, &address);
@ -911,7 +928,7 @@ static_stage3_ip4_done (NMModemBroadband *self)
}
/* DNS servers */
dns = mm_bearer_ip_config_get_dns (self->priv->ipv4_config);
dns = mm_bearer_ip_config_get_dns (self->_priv.ipv4_config);
for (i = 0; dns && dns[i]; i++) {
if ( ip4_string_to_num (dns[i], &address_network)
&& address_network > 0) {
@ -955,13 +972,13 @@ stage3_ip6_done (NMModemBroadband *self)
const gchar **dns;
guint i;
g_assert (self->priv->ipv6_config);
g_assert (self->_priv.ipv6_config);
memset (&address, 0, sizeof (address));
ip_method = get_bearer_ip_method (self->priv->ipv6_config);
ip_method = get_bearer_ip_method (self->_priv.ipv6_config);
address_string = mm_bearer_ip_config_get_address (self->priv->ipv6_config);
address_string = mm_bearer_ip_config_get_address (self->_priv.ipv6_config);
if (!address_string) {
/* DHCP/SLAAC is allowed to skip addresses; other methods require it */
if (ip_method != NM_MODEM_IP_METHOD_AUTO) {
@ -985,17 +1002,17 @@ stage3_ip6_done (NMModemBroadband *self)
_LOGI ("IPv6 base configuration:");
data_port = mm_bearer_get_interface (self->priv->bearer);
data_port = mm_bearer_get_interface (self->_priv.bearer);
g_assert (data_port);
config = nm_ip6_config_new (nm_platform_link_get_ifindex (NM_PLATFORM_GET, data_port));
address.plen = mm_bearer_ip_config_get_prefix (self->priv->ipv6_config);
address.plen = mm_bearer_ip_config_get_prefix (self->_priv.ipv6_config);
if (address.plen <= 128)
nm_ip6_config_add_address (config, &address);
_LOGI (" address %s/%d", address_string, address.plen);
address_string = mm_bearer_ip_config_get_gateway (self->priv->ipv6_config);
address_string = mm_bearer_ip_config_get_gateway (self->_priv.ipv6_config);
if (address_string) {
if (!inet_pton (AF_INET6, address_string, (void *) &(address.address))) {
error = g_error_new (NM_DEVICE_ERROR,
@ -1017,7 +1034,7 @@ stage3_ip6_done (NMModemBroadband *self)
}
/* DNS servers */
dns = mm_bearer_ip_config_get_dns (self->priv->ipv6_config);
dns = mm_bearer_ip_config_get_dns (self->_priv.ipv6_config);
for (i = 0; dns[i]; i++) {
struct in6_addr addr;
@ -1125,14 +1142,14 @@ disconnect (NMModem *modem,
}
/* If no simple iface, we're done */
if (!ctx->self->priv->simple_iface) {
if (!ctx->self->_priv.simple_iface) {
disconnect_context_complete (ctx);
return;
}
_LOGD ("notifying ModemManager about the modem disconnection");
ctx->cancellable = cancellable ? g_object_ref (cancellable) : NULL;
mm_modem_simple_disconnect (ctx->self->priv->simple_iface,
mm_modem_simple_disconnect (ctx->self->_priv.simple_iface,
NULL, /* bearer path; if NULL given ALL get disconnected */
cancellable,
(GAsyncReadyCallback) simple_disconnect_ready,
@ -1149,11 +1166,11 @@ deactivate_cleanup (NMModem *_self, NMDevice *device)
/* TODO: cancel SimpleConnect() if any */
/* Cleanup IPv4 addresses and routes */
g_clear_object (&self->priv->ipv4_config);
g_clear_object (&self->priv->ipv6_config);
g_clear_object (&self->priv->bearer);
g_clear_object (&self->_priv.ipv4_config);
g_clear_object (&self->_priv.ipv6_config);
g_clear_object (&self->_priv.bearer);
self->priv->pin_tries = 0;
self->_priv.pin_tries = 0;
/* Chain up parent's */
NM_MODEM_CLASS (nm_modem_broadband_parent_class)->deactivate_cleanup (_self, device);
@ -1202,7 +1219,7 @@ modem_state_changed (MMModem *modem,
mm_state_to_nm (new_state),
mm_modem_state_change_reason_get_string (reason));
if (self->priv->ctx && self->priv->ctx->step == CONNECT_STEP_WAIT_FOR_READY)
if (self->_priv.ctx && self->_priv.ctx->step == CONNECT_STEP_WAIT_FOR_READY)
connect_context_step (self);
}
@ -1223,6 +1240,137 @@ mm_ip_family_to_nm (MMBearerIpFamily family)
return nm_type;
}
static void
get_sim_ready (MMModem *modem,
GAsyncResult *res,
NMModemBroadband *self)
{
GError *error = NULL;
MMSim *new_sim;
new_sim = mm_modem_get_sim_finish (modem, res, &error);
if (new_sim != self->_priv.sim_iface) {
g_clear_object (&self->_priv.sim_iface);
self->_priv.sim_iface = new_sim;
} else
g_clear_object (&new_sim);
if (self->_priv.sim_iface) {
g_object_set (G_OBJECT (self),
NM_MODEM_SIM_ID, mm_sim_get_identifier (self->_priv.sim_iface),
NM_MODEM_SIM_OPERATOR_ID, mm_sim_get_operator_identifier (self->_priv.sim_iface),
NULL);
/* If we're waiting for the SIM during a connect, proceed with the connect */
if (self->_priv.ctx && self->_priv.ctx->step == CONNECT_STEP_WAIT_FOR_SIM)
connect_context_step (self);
} else {
_NMLOG (g_error_matches (error, MM_CORE_ERROR, MM_CORE_ERROR_NOT_FOUND)
? LOGL_INFO : LOGL_WARN,
"failed to retrieve SIM object: %s",
NM_G_ERROR_MSG (error));
}
g_clear_error (&error);
g_object_unref (self);
}
static void
sim_changed (MMModem *modem, GParamSpec *pspec, gpointer user_data)
{
NMModemBroadband *self = NM_MODEM_BROADBAND (user_data);
g_return_if_fail (modem == self->_priv.modem_iface);
if (mm_modem_get_sim_path (self->_priv.modem_iface)) {
mm_modem_get_sim (self->_priv.modem_iface,
NULL, /* cancellable */
(GAsyncReadyCallback) get_sim_ready,
g_object_ref (self));
} else
g_object_set (G_OBJECT (self),
NM_MODEM_SIM_ID, NULL,
NM_MODEM_SIM_OPERATOR_ID, NULL,
NULL);
}
static void
supported_ip_families_changed (MMModem *modem, GParamSpec *pspec, gpointer user_data)
{
NMModemBroadband *self = NM_MODEM_BROADBAND (user_data);
g_return_if_fail (modem == self->_priv.modem_iface);
g_object_set (G_OBJECT (self),
NM_MODEM_IP_TYPES,
mm_ip_family_to_nm (mm_modem_get_supported_ip_families (modem)),
NULL);
}
/*****************************************************************************/
static void
get_property (GObject *object,
guint prop_id,
GValue *value,
GParamSpec *pspec)
{
NMModemBroadband *self = NM_MODEM_BROADBAND (object);
switch (prop_id) {
case PROP_MODEM:
g_value_set_object (value, self->_priv.modem_object);
break;
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)
{
NMModemBroadband *self = NM_MODEM_BROADBAND (object);
switch (prop_id) {
case PROP_MODEM:
/* construct-only */
self->_priv.modem_object = g_value_dup_object (value);
self->_priv.modem_iface = mm_object_get_modem (self->_priv.modem_object);
g_assert (self->_priv.modem_iface != NULL);
g_signal_connect (self->_priv.modem_iface,
"state-changed",
G_CALLBACK (modem_state_changed),
self);
g_signal_connect (self->_priv.modem_iface,
"notify::sim",
G_CALLBACK (sim_changed),
self);
sim_changed (self->_priv.modem_iface, NULL, self);
g_signal_connect (self->_priv.modem_iface,
"notify::supported-ip-families",
G_CALLBACK (supported_ip_families_changed),
self);
/* Note: don't grab the Simple iface here; the Modem interface is the
* only one assumed to be always valid and available */
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
/*****************************************************************************/
static void
nm_modem_broadband_init (NMModemBroadband *self)
{
}
NMModem *
nm_modem_broadband_new (GObject *object, GError **error)
{
@ -1257,149 +1405,19 @@ nm_modem_broadband_new (GObject *object, GError **error)
return modem;
}
static void
get_sim_ready (MMModem *modem,
GAsyncResult *res,
NMModemBroadband *self)
{
GError *error = NULL;
MMSim *new_sim;
new_sim = mm_modem_get_sim_finish (modem, res, &error);
if (new_sim != self->priv->sim_iface) {
g_clear_object (&self->priv->sim_iface);
self->priv->sim_iface = new_sim;
} else
g_clear_object (&new_sim);
if (self->priv->sim_iface) {
g_object_set (G_OBJECT (self),
NM_MODEM_SIM_ID, mm_sim_get_identifier (self->priv->sim_iface),
NM_MODEM_SIM_OPERATOR_ID, mm_sim_get_operator_identifier (self->priv->sim_iface),
NULL);
/* If we're waiting for the SIM during a connect, proceed with the connect */
if (self->priv->ctx && self->priv->ctx->step == CONNECT_STEP_WAIT_FOR_SIM)
connect_context_step (self);
} else {
_NMLOG (g_error_matches (error, MM_CORE_ERROR, MM_CORE_ERROR_NOT_FOUND)
? LOGL_INFO : LOGL_WARN,
"failed to retrieve SIM object: %s",
NM_G_ERROR_MSG (error));
}
g_clear_error (&error);
g_object_unref (self);
}
static void
sim_changed (MMModem *modem, GParamSpec *pspec, gpointer user_data)
{
NMModemBroadband *self = NM_MODEM_BROADBAND (user_data);
g_return_if_fail (modem == self->priv->modem_iface);
if (mm_modem_get_sim_path (self->priv->modem_iface)) {
mm_modem_get_sim (self->priv->modem_iface,
NULL, /* cancellable */
(GAsyncReadyCallback) get_sim_ready,
g_object_ref (self));
} else
g_object_set (G_OBJECT (self),
NM_MODEM_SIM_ID, NULL,
NM_MODEM_SIM_OPERATOR_ID, NULL,
NULL);
}
static void
supported_ip_families_changed (MMModem *modem, GParamSpec *pspec, gpointer user_data)
{
NMModemBroadband *self = NM_MODEM_BROADBAND (user_data);
g_return_if_fail (modem == self->priv->modem_iface);
g_object_set (G_OBJECT (self),
NM_MODEM_IP_TYPES,
mm_ip_family_to_nm (mm_modem_get_supported_ip_families (modem)),
NULL);
}
static void
nm_modem_broadband_init (NMModemBroadband *self)
{
self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
NM_TYPE_MODEM_BROADBAND,
NMModemBroadbandPrivate);
}
static void
set_property (GObject *object,
guint prop_id,
const GValue *value,
GParamSpec *pspec)
{
NMModemBroadband *self = NM_MODEM_BROADBAND (object);
switch (prop_id) {
case PROP_MODEM:
/* construct-only */
self->priv->modem_object = g_value_dup_object (value);
self->priv->modem_iface = mm_object_get_modem (self->priv->modem_object);
g_assert (self->priv->modem_iface != NULL);
g_signal_connect (self->priv->modem_iface,
"state-changed",
G_CALLBACK (modem_state_changed),
self);
g_signal_connect (self->priv->modem_iface,
"notify::sim",
G_CALLBACK (sim_changed),
self);
sim_changed (self->priv->modem_iface, NULL, self);
g_signal_connect (self->priv->modem_iface,
"notify::supported-ip-families",
G_CALLBACK (supported_ip_families_changed),
self);
/* Note: don't grab the Simple iface here; the Modem interface is the
* only one assumed to be always valid and available */
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
static void
get_property (GObject *object,
guint prop_id,
GValue *value,
GParamSpec *pspec)
{
NMModemBroadband *self = NM_MODEM_BROADBAND (object);
switch (prop_id) {
case PROP_MODEM:
g_value_set_object (value, self->priv->modem_object);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
static void
dispose (GObject *object)
{
NMModemBroadband *self = NM_MODEM_BROADBAND (object);
connect_context_clear (self);
g_clear_object (&self->priv->ipv4_config);
g_clear_object (&self->priv->ipv6_config);
g_clear_object (&self->priv->bearer);
g_clear_object (&self->priv->modem_iface);
g_clear_object (&self->priv->simple_iface);
g_clear_object (&self->priv->sim_iface);
g_clear_object (&self->priv->modem_object);
g_clear_object (&self->_priv.ipv4_config);
g_clear_object (&self->_priv.ipv6_config);
g_clear_object (&self->_priv.bearer);
g_clear_object (&self->_priv.modem_iface);
g_clear_object (&self->_priv.simple_iface);
g_clear_object (&self->_priv.sim_iface);
g_clear_object (&self->_priv.modem_object);
G_OBJECT_CLASS (nm_modem_broadband_parent_class)->dispose (object);
}
@ -1410,9 +1428,6 @@ nm_modem_broadband_class_init (NMModemBroadbandClass *klass)
GObjectClass *object_class = G_OBJECT_CLASS (klass);
NMModemClass *modem_class = NM_MODEM_CLASS (klass);
g_type_class_add_private (object_class, sizeof (NMModemBroadbandPrivate));
/* Virtual methods */
object_class->dispose = dispose;
object_class->get_property = get_property;
object_class->set_property = set_property;
@ -1430,11 +1445,11 @@ nm_modem_broadband_class_init (NMModemBroadbandClass *klass)
modem_class->act_stage1_prepare = act_stage1_prepare;
modem_class->owns_port = owns_port;
/* Properties */
g_object_class_install_property
(object_class, PROP_MODEM,
g_param_spec_object (NM_MODEM_BROADBAND_MODEM, "", "",
MM_GDBUS_TYPE_OBJECT,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS));
obj_properties[PROP_MODEM] =
g_param_spec_object (NM_MODEM_BROADBAND_MODEM, "", "",
MM_GDBUS_TYPE_OBJECT,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS);
g_object_class_install_properties (object_class, _PROPERTY_ENUMS_LAST, obj_properties);
}

View file

@ -30,18 +30,8 @@
#define NM_IS_MODEM_BROADBAND_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_MODEM_BROADBAND))
#define NM_MODEM_BROADBAND_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_MODEM_BROADBAND, NMModemBroadbandClass))
typedef struct _NMModemBroadband NMModemBroadband;
typedef struct _NMModemBroadbandClass NMModemBroadbandClass;
typedef struct _NMModemBroadbandPrivate NMModemBroadbandPrivate;
struct _NMModemBroadband {
NMModem parent;
NMModemBroadbandPrivate *priv;
};
struct _NMModemBroadbandClass {
NMModemClass parent;
};
typedef struct _NMModemBroadband NMModemBroadband;
typedef struct _NMModemBroadbandClass NMModemBroadbandClass;
GType nm_modem_broadband_get_type (void);

View file

@ -43,9 +43,16 @@
#define MODEM_POKE_INTERVAL 120
G_DEFINE_TYPE (NMModemManager, nm_modem_manager, G_TYPE_OBJECT)
/*****************************************************************************/
struct _NMModemManagerPrivate {
enum {
MODEM_ADDED,
LAST_SIGNAL,
};
static guint signals[LAST_SIGNAL] = { 0 };
typedef struct {
GDBusConnection *dbus_connection;
MMManager *modem_manager;
guint mm_launch_id;
@ -57,15 +64,21 @@ struct _NMModemManagerPrivate {
GDBusProxy *ofono_proxy;
#endif
/* Common */
GHashTable *modems;
} NMModemManagerPrivate;
struct _NMModemManager {
GObject parent;
NMModemManagerPrivate _priv;
};
enum {
MODEM_ADDED,
LAST_SIGNAL,
struct _NMModemManagerClass {
GObjectClass parent;
};
static guint signals[LAST_SIGNAL] = { 0 };
G_DEFINE_TYPE (NMModemManager, nm_modem_manager, G_TYPE_OBJECT)
#define NM_MODEM_MANAGER_GET_PRIVATE(self) _NM_GET_PRIVATE (self, NMModemManager, NM_IS_MODEM_MANAGER)
/*****************************************************************************/
@ -75,13 +88,13 @@ handle_new_modem (NMModemManager *self, NMModem *modem)
const char *path;
path = nm_modem_get_path (modem);
if (g_hash_table_lookup (self->priv->modems, path)) {
if (g_hash_table_lookup (self->_priv.modems, path)) {
g_warn_if_reached ();
return;
}
/* Track the new modem */
g_hash_table_insert (self->priv->modems, g_strdup (path), modem);
g_hash_table_insert (self->_priv.modems, g_strdup (path), modem);
g_signal_emit (self, signals[MODEM_ADDED], 0, modem);
}
@ -95,12 +108,12 @@ remove_one_modem (gpointer key, gpointer value, gpointer user_data)
static void
clear_modem_manager (NMModemManager *self)
{
if (!self->priv->modem_manager)
if (!self->_priv.modem_manager)
return;
nm_clear_g_signal_handler (self->priv->modem_manager, &self->priv->mm_name_owner_changed_id);
nm_clear_g_signal_handler (self->priv->modem_manager, &self->priv->mm_object_added_id);
nm_clear_g_signal_handler (self->priv->modem_manager, &self->priv->mm_object_removed_id);
g_clear_object (&self->priv->modem_manager);
nm_clear_g_signal_handler (self->_priv.modem_manager, &self->_priv.mm_name_owner_changed_id);
nm_clear_g_signal_handler (self->_priv.modem_manager, &self->_priv.mm_object_added_id);
nm_clear_g_signal_handler (self->_priv.modem_manager, &self->_priv.mm_object_removed_id);
g_clear_object (&self->_priv.modem_manager);
}
static void
@ -115,7 +128,7 @@ modem_object_added (MMManager *modem_manager,
/* Ensure we don't have the same modem already */
path = mm_object_get_path (modem_object);
if (g_hash_table_lookup (self->priv->modems, path)) {
if (g_hash_table_lookup (self->_priv.modems, path)) {
nm_log_warn (LOGD_MB, "modem with path %s already exists, ignoring", path);
return;
}
@ -153,12 +166,12 @@ modem_object_removed (MMManager *manager,
const gchar *path;
path = mm_object_get_path (modem_object);
modem = (NMModem *) g_hash_table_lookup (self->priv->modems, path);
modem = (NMModem *) g_hash_table_lookup (self->_priv.modems, path);
if (!modem)
return;
nm_modem_emit_removed (modem);
g_hash_table_remove (self->priv->modems, path);
g_hash_table_remove (self->_priv.modems, path);
}
static void
@ -169,9 +182,9 @@ modem_manager_available (NMModemManager *self)
nm_log_info (LOGD_MB, "ModemManager available in the bus");
/* Update initial modems list */
modems = g_dbus_object_manager_get_objects (G_DBUS_OBJECT_MANAGER (self->priv->modem_manager));
modems = g_dbus_object_manager_get_objects (G_DBUS_OBJECT_MANAGER (self->_priv.modem_manager));
for (l = modems; l; l = g_list_next (l))
modem_object_added (self->priv->modem_manager, MM_OBJECT (l->data), self);
modem_object_added (self->_priv.modem_manager, MM_OBJECT (l->data), self);
g_list_free_full (modems, (GDestroyNotify) g_object_unref);
}
@ -187,7 +200,7 @@ modem_manager_name_owner_changed (MMManager *modem_manager,
gchar *name_owner;
/* Quit poking, if any */
nm_clear_g_source (&self->priv->mm_launch_id);
nm_clear_g_source (&self->_priv.mm_launch_id);
name_owner = g_dbus_object_manager_client_get_name_owner (G_DBUS_OBJECT_MANAGER_CLIENT (modem_manager));
if (!name_owner) {
@ -226,7 +239,7 @@ ofono_create_modem (NMModemManager *self, const char *path)
* receive ModemAdded signals before GetModems() returns, so some of the
* modems returned from GetModems() may already have been created.
*/
if (!g_hash_table_lookup (self->priv->modems, path)) {
if (!g_hash_table_lookup (self->_priv.modems, path)) {
modem = nm_modem_ofono_new (path);
if (modem)
handle_new_modem (self, modem);
@ -256,10 +269,10 @@ ofono_signal_cb (GDBusProxy *proxy,
g_variant_get (parameters, "(o)", &object_path);
nm_log_info (LOGD_MB, "oFono modem removed: %s", object_path);
modem = (NMModem *) g_hash_table_lookup (self->priv->modems, object_path);
modem = (NMModem *) g_hash_table_lookup (self->_priv.modems, object_path);
if (modem) {
nm_modem_emit_removed (modem);
g_hash_table_remove (self->priv->modems, object_path);
g_hash_table_remove (self->_priv.modems, object_path);
} else {
nm_log_warn (LOGD_MB, "could not remove modem %s, not found in table",
object_path);
@ -297,11 +310,11 @@ ofono_check_name_owner (NMModemManager *self)
{
gs_free char *name_owner = NULL;
name_owner = g_dbus_proxy_get_name_owner (G_DBUS_PROXY (self->priv->ofono_proxy));
name_owner = g_dbus_proxy_get_name_owner (G_DBUS_PROXY (self->_priv.ofono_proxy));
if (name_owner) {
nm_log_info (LOGD_MB, "oFono is now available");
g_dbus_proxy_call (self->priv->ofono_proxy,
g_dbus_proxy_call (self->_priv.ofono_proxy,
"GetModems",
NULL,
G_DBUS_CALL_FLAGS_NONE,
@ -316,7 +329,7 @@ ofono_check_name_owner (NMModemManager *self)
nm_log_info (LOGD_MB, "oFono disappeared from bus");
/* Remove any oFono modems that might be left around */
g_hash_table_iter_init (&iter, self->priv->modems);
g_hash_table_iter_init (&iter, self->_priv.modems);
while (g_hash_table_iter_next (&iter, NULL, (gpointer) &modem)) {
if (NM_IS_MODEM_OFONO (modem)) {
nm_modem_emit_removed (modem);
@ -340,18 +353,18 @@ ofono_proxy_new_cb (GObject *source_object, GAsyncResult *res, gpointer user_dat
gs_unref_object NMModemManager *self = NM_MODEM_MANAGER (user_data);
gs_free_error GError *error = NULL;
self->priv->ofono_proxy = g_dbus_proxy_new_finish (res, &error);
self->_priv.ofono_proxy = g_dbus_proxy_new_finish (res, &error);
if (error) {
nm_log_warn (LOGD_MB, "error getting oFono bus proxy: %s", error->message);
return;
}
g_signal_connect (self->priv->ofono_proxy,
g_signal_connect (self->_priv.ofono_proxy,
"notify::g-name-owner",
G_CALLBACK (ofono_name_owner_changed),
self);
g_signal_connect (self->priv->ofono_proxy,
g_signal_connect (self->_priv.ofono_proxy,
"g-signal",
G_CALLBACK (ofono_signal_cb),
self);
@ -362,8 +375,8 @@ ofono_proxy_new_cb (GObject *source_object, GAsyncResult *res, gpointer user_dat
static void
ensure_ofono_client (NMModemManager *self)
{
g_assert (self->priv->dbus_connection);
g_dbus_proxy_new (self->priv->dbus_connection,
g_assert (self->_priv.dbus_connection);
g_dbus_proxy_new (self->_priv.dbus_connection,
G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START,
NULL,
OFONO_DBUS_SERVICE,
@ -408,7 +421,7 @@ static void
modem_manager_poke (NMModemManager *self)
{
/* If there is no current owner right away, ensure we poke to get one */
g_dbus_connection_call (self->priv->dbus_connection,
g_dbus_connection_call (self->_priv.dbus_connection,
"org.freedesktop.ModemManager1",
"/org/freedesktop/ModemManager1",
DBUS_INTERFACE_PEER,
@ -427,7 +440,7 @@ modem_manager_check_name_owner (NMModemManager *self)
{
gs_free gchar *name_owner = NULL;
name_owner = g_dbus_object_manager_client_get_name_owner (G_DBUS_OBJECT_MANAGER_CLIENT (self->priv->modem_manager));
name_owner = g_dbus_object_manager_client_get_name_owner (G_DBUS_OBJECT_MANAGER_CLIENT (self->_priv.modem_manager));
if (name_owner) {
/* Available! */
modem_manager_available (self);
@ -448,10 +461,10 @@ manager_new_ready (GObject *source,
GError *error = NULL;
g_return_if_fail (!self->priv->modem_manager);
g_return_if_fail (!self->_priv.modem_manager);
self->priv->modem_manager = mm_manager_new_finish (res, &error);
if (!self->priv->modem_manager) {
self->_priv.modem_manager = mm_manager_new_finish (res, &error);
if (!self->_priv.modem_manager) {
/* We're not really supposed to get any error here. If we do get one,
* though, just re-schedule the MMManager creation after some time.
* During this period, name-owner changes won't be followed. */
@ -461,18 +474,18 @@ manager_new_ready (GObject *source,
schedule_modem_manager_relaunch (self, MODEM_POKE_INTERVAL);
} else {
/* Setup signals in the GDBusObjectManagerClient */
self->priv->mm_name_owner_changed_id =
g_signal_connect (self->priv->modem_manager,
self->_priv.mm_name_owner_changed_id =
g_signal_connect (self->_priv.modem_manager,
"notify::name-owner",
G_CALLBACK (modem_manager_name_owner_changed),
self);
self->priv->mm_object_added_id =
g_signal_connect (self->priv->modem_manager,
self->_priv.mm_object_added_id =
g_signal_connect (self->_priv.modem_manager,
"object-added",
G_CALLBACK (modem_object_added),
self);
self->priv->mm_object_removed_id =
g_signal_connect (self->priv->modem_manager,
self->_priv.mm_object_removed_id =
g_signal_connect (self->_priv.modem_manager,
"object-removed",
G_CALLBACK (modem_object_removed),
self);
@ -487,13 +500,13 @@ manager_new_ready (GObject *source,
static void
ensure_modem_manager (NMModemManager *self)
{
g_assert (self->priv->dbus_connection);
g_assert (self->_priv.dbus_connection);
/* Create the GDBusObjectManagerClient. We do not request to autostart, as
* we don't really want the MMManager creation to fail. We can always poke
* later on if we want to request the autostart */
if (!self->priv->modem_manager) {
mm_manager_new (self->priv->dbus_connection,
if (!self->_priv.modem_manager) {
mm_manager_new (self->_priv.dbus_connection,
G_DBUS_OBJECT_MANAGER_CLIENT_FLAGS_DO_NOT_AUTO_START,
NULL,
(GAsyncReadyCallback)manager_new_ready,
@ -508,7 +521,7 @@ ensure_modem_manager (NMModemManager *self)
static gboolean
mm_launch_cb (NMModemManager *self)
{
self->priv->mm_launch_id = 0;
self->_priv.mm_launch_id = 0;
ensure_modem_manager (self);
return G_SOURCE_REMOVE;
}
@ -520,9 +533,9 @@ schedule_modem_manager_relaunch (NMModemManager *self,
/* No need to pass an extra reference to self; timeout/idle will be
* cancelled if the object gets disposed. */
if (n_seconds)
self->priv->mm_launch_id = g_timeout_add_seconds (n_seconds, (GSourceFunc)mm_launch_cb, self);
self->_priv.mm_launch_id = g_timeout_add_seconds (n_seconds, (GSourceFunc)mm_launch_cb, self);
else
self->priv->mm_launch_id = g_idle_add ((GSourceFunc)mm_launch_cb, self);
self->_priv.mm_launch_id = g_idle_add ((GSourceFunc)mm_launch_cb, self);
}
static void
@ -533,8 +546,8 @@ bus_get_ready (GObject *source,
gs_unref_object NMModemManager *self = NM_MODEM_MANAGER (user_data);
gs_free_error GError *error = NULL;
self->priv->dbus_connection = g_bus_get_finish (res, &error);
if (!self->priv->dbus_connection) {
self->_priv.dbus_connection = g_bus_get_finish (res, &error);
if (!self->_priv.dbus_connection) {
nm_log_warn (LOGD_MB, "error getting bus connection: %s", error->message);
return;
}
@ -551,11 +564,8 @@ bus_get_ready (GObject *source,
static void
nm_modem_manager_init (NMModemManager *self)
{
self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, NM_TYPE_MODEM_MANAGER, NMModemManagerPrivate);
self->_priv.modems = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref);
self->priv->modems = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref);
// FIXME: this doesn't handle bus-daemon restart
g_bus_get (G_BUS_TYPE_SYSTEM,
NULL,
(GAsyncReadyCallback)bus_get_ready,
@ -567,26 +577,25 @@ dispose (GObject *object)
{
NMModemManager *self = NM_MODEM_MANAGER (object);
nm_clear_g_source (&self->priv->mm_launch_id);
nm_clear_g_source (&self->_priv.mm_launch_id);
clear_modem_manager (self);
#if WITH_OFONO
if (self->priv->ofono_proxy) {
g_signal_handlers_disconnect_by_func (self->priv->ofono_proxy, ofono_name_owner_changed, self);
g_signal_handlers_disconnect_by_func (self->priv->ofono_proxy, ofono_signal_cb, self);
g_clear_object (&self->priv->ofono_proxy);
if (self->_priv.ofono_proxy) {
g_signal_handlers_disconnect_by_func (self->_priv.ofono_proxy, ofono_name_owner_changed, self);
g_signal_handlers_disconnect_by_func (self->_priv.ofono_proxy, ofono_signal_cb, self);
g_clear_object (&self->_priv.ofono_proxy);
}
#endif
g_clear_object (&self->priv->dbus_connection);
g_clear_object (&self->_priv.dbus_connection);
if (self->priv->modems) {
g_hash_table_foreach_remove (self->priv->modems, remove_one_modem, object);
g_hash_table_destroy (self->priv->modems);
if (self->_priv.modems) {
g_hash_table_foreach_remove (self->_priv.modems, remove_one_modem, object);
g_hash_table_destroy (self->_priv.modems);
}
/* Chain up to the parent class */
G_OBJECT_CLASS (nm_modem_manager_parent_class)->dispose (object);
}
@ -595,15 +604,12 @@ nm_modem_manager_class_init (NMModemManagerClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
g_type_class_add_private (object_class, sizeof (NMModemManagerPrivate));
object_class->dispose = dispose;
signals[MODEM_ADDED] =
g_signal_new (NM_MODEM_MANAGER_MODEM_ADDED,
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (NMModemManagerClass, modem_added),
NULL, NULL, NULL,
G_TYPE_NONE, 1, NM_TYPE_MODEM);
g_signal_new (NM_MODEM_MANAGER_MODEM_ADDED,
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST,
0, NULL, NULL, NULL,
G_TYPE_NONE, 1, NM_TYPE_MODEM);
}

View file

@ -25,23 +25,17 @@
#include "nm-modem.h"
#define NM_TYPE_MODEM_MANAGER (nm_modem_manager_get_type ())
#define NM_MODEM_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_MODEM_MANAGER, NMModemManager))
#define NM_TYPE_MODEM_MANAGER (nm_modem_manager_get_type ())
#define NM_MODEM_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_MODEM_MANAGER, NMModemManager))
#define NM_MODEM_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_MODEM_MANAGER, NMModemManagerClass))
#define NM_IS_MODEM_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_MODEM_MANAGER))
#define NM_IS_MODEM_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_MODEM_MANAGER))
#define NM_MODEM_MANAGER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_MODEM_MANAGER, NMModemManagerClass))
#define NM_MODEM_MANAGER_MODEM_ADDED "modem-added"
typedef struct _NMModemManagerPrivate NMModemManagerPrivate;
typedef struct {
GObject parent;
NMModemManagerPrivate *priv;
} NMModemManager;
typedef struct {
GObjectClass parent;
void (*modem_added) (NMModemManager *self, NMModem *modem);
} NMModemManagerClass;
typedef struct _NMModemManager NMModemManager;
typedef struct _NMModemManagerClass NMModemManagerClass;
GType nm_modem_manager_get_type (void);

View file

@ -28,10 +28,7 @@
#include "nm-device-private.h"
#include "nm-modem.h"
#include "nm-platform.h"
G_DEFINE_TYPE (NMModemOfono, nm_modem_ofono, NM_TYPE_MODEM)
#define NM_MODEM_OFONO_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_MODEM_OFONO, NMModemOfonoPrivate))
#include "nm-ip4-config.h"
#define VARIANT_IS_OF_TYPE_BOOLEAN(v) ((v) != NULL && ( g_variant_is_of_type ((v), G_VARIANT_TYPE_BOOLEAN) ))
#define VARIANT_IS_OF_TYPE_STRING(v) ((v) != NULL && ( g_variant_is_of_type ((v), G_VARIANT_TYPE_STRING) ))
@ -39,6 +36,8 @@ G_DEFINE_TYPE (NMModemOfono, nm_modem_ofono, NM_TYPE_MODEM)
#define VARIANT_IS_OF_TYPE_STRING_ARRAY(v) ((v) != NULL && ( g_variant_is_of_type ((v), G_VARIANT_TYPE_STRING_ARRAY) ))
#define VARIANT_IS_OF_TYPE_DICTIONARY(v) ((v) != NULL && ( g_variant_is_of_type ((v), G_VARIANT_TYPE_DICTIONARY) ))
/*****************************************************************************/
typedef struct {
GHashTable *connect_properties;
@ -58,6 +57,19 @@ typedef struct {
NMIP4Config *ip4_config;
} NMModemOfonoPrivate;
struct _NMModemOfono {
NMModem parent;
NMModemOfonoPrivate _priv;
};
struct _NMModemOfonoClass {
NMModemClass parent;
};
G_DEFINE_TYPE (NMModemOfono, nm_modem_ofono, NM_TYPE_MODEM)
#define NM_MODEM_OFONO_GET_PRIVATE(self) _NM_GET_PRIVATE (self, NMModemOfono, NM_IS_MODEM_OFONO)
/*****************************************************************************/
#define _NMLOG_DOMAIN LOGD_MB
@ -239,7 +251,7 @@ disconnect (NMModem *modem,
user_data,
disconnect);
}
/* Setup cancellable */
ctx->cancellable = cancellable ? g_object_ref (cancellable) : NULL;
if (disconnect_context_complete_if_cancelled (ctx))
return;
@ -261,17 +273,16 @@ disconnect (NMModem *modem,
}
static void
deactivate_cleanup (NMModem *_self, NMDevice *device)
deactivate_cleanup (NMModem *modem, NMDevice *device)
{
NMModemOfono *self = NM_MODEM_OFONO (_self);
NMModemOfono *self = NM_MODEM_OFONO (modem);
NMModemOfonoPrivate *priv = NM_MODEM_OFONO_GET_PRIVATE (self);
/* TODO: cancel SimpleConnect() if any */
g_clear_object (&priv->ip4_config);
/* Chain up parent's */
NM_MODEM_CLASS (nm_modem_ofono_parent_class)->deactivate_cleanup (_self, device);
NM_MODEM_CLASS (nm_modem_ofono_parent_class)->deactivate_cleanup (modem, device);
}
@ -700,30 +711,6 @@ modem_get_properties_done (GDBusProxy *proxy, GAsyncResult *result, gpointer use
g_variant_unref (v_properties);
}
NMModem *
nm_modem_ofono_new (const char *path)
{
gs_free char *basename = NULL;
g_return_val_if_fail (path != NULL, NULL);
nm_log_info (LOGD_MB, "ofono: creating new Ofono modem path %s", path);
/* Use short modem name (not its object path) as the NM device name (which
* comes from NM_MODEM_UID)and the device ID.
*/
basename = g_path_get_basename (path);
return (NMModem *) g_object_new (NM_TYPE_MODEM_OFONO,
NM_MODEM_PATH, path,
NM_MODEM_UID, basename,
NM_MODEM_DEVICE_ID, basename,
NM_MODEM_CONTROL_PORT, "ofono", /* mandatory */
NM_MODEM_DRIVER, "ofono",
NM_MODEM_STATE, NM_MODEM_STATE_INITIALIZING,
NULL);
}
static void
stage1_prepare_done (GDBusProxy *proxy, GAsyncResult *result, gpointer user_data)
{
@ -933,11 +920,11 @@ out:
}
static NMActStageReturn
static_stage3_ip4_config_start (NMModem *_self,
static_stage3_ip4_config_start (NMModem *modem,
NMActRequest *req,
NMDeviceStateReason *reason)
{
NMModemOfono *self = NM_MODEM_OFONO (_self);
NMModemOfono *self = NM_MODEM_OFONO (modem);
NMModemOfonoPrivate *priv = NM_MODEM_OFONO_GET_PRIVATE (self);
NMActStageReturn ret = NM_ACT_STAGE_RETURN_FAILURE;
GError *error = NULL;
@ -1123,6 +1110,8 @@ modem_proxy_new_cb (GDBusProxy *proxy, GAsyncResult *result, gpointer user_data)
g_object_ref (self));
}
/*****************************************************************************/
static void
nm_modem_ofono_init (NMModemOfono *self)
{
@ -1144,6 +1133,30 @@ constructed (GObject *object)
g_object_ref (self));
}
NMModem *
nm_modem_ofono_new (const char *path)
{
gs_free char *basename = NULL;
g_return_val_if_fail (path != NULL, NULL);
nm_log_info (LOGD_MB, "ofono: creating new Ofono modem path %s", path);
/* Use short modem name (not its object path) as the NM device name (which
* comes from NM_MODEM_UID)and the device ID.
*/
basename = g_path_get_basename (path);
return (NMModem *) g_object_new (NM_TYPE_MODEM_OFONO,
NM_MODEM_PATH, path,
NM_MODEM_UID, basename,
NM_MODEM_DEVICE_ID, basename,
NM_MODEM_CONTROL_PORT, "ofono", /* mandatory */
NM_MODEM_DRIVER, "ofono",
NM_MODEM_STATE, NM_MODEM_STATE_INITIALIZING,
NULL);
}
static void
dispose (GObject *object)
{
@ -1182,9 +1195,6 @@ nm_modem_ofono_class_init (NMModemOfonoClass *klass)
GObjectClass *object_class = G_OBJECT_CLASS (klass);
NMModemClass *modem_class = NM_MODEM_CLASS (klass);
g_type_class_add_private (object_class, sizeof (NMModemOfonoPrivate));
/* Virtual methods */
object_class->constructed = constructed;
object_class->dispose = dispose;
@ -1194,9 +1204,6 @@ nm_modem_ofono_class_init (NMModemOfonoClass *klass)
modem_class->deactivate_cleanup = deactivate_cleanup;
modem_class->check_connection_compatible = check_connection_compatible;
/* same as nm-modem-broadband */
modem_class->act_stage1_prepare = act_stage1_prepare;
/* same as nm-modem-broadband */
modem_class->static_stage3_ip4_config_start = static_stage3_ip4_config_start;
}

View file

@ -38,13 +38,8 @@
#define OFONO_DBUS_INTERFACE_CONNECTION_CONTEXT "org.ofono.ConnectionContext"
#define OFONO_DBUS_INTERFACE_SIM_MANAGER "org.ofono.SimManager"
typedef struct {
NMModem parent;
} NMModemOfono;
typedef struct {
NMModemClass parent;
} NMModemOfonoClass;
typedef struct _NMModemOfono NMModemOfono;
typedef struct _NMModemOfonoClass NMModemOfonoClass;
GType nm_modem_ofono_get_type (void);

View file

@ -32,13 +32,14 @@
#include "nm-device-private.h"
#include "nm-modem-enum-types.h"
#include "nm-route-manager.h"
#include "nm-act-request.h"
#include "nm-ip4-config.h"
#include "nm-ip6-config.h"
#include "ppp-manager/nm-ppp-status.h"
G_DEFINE_TYPE (NMModem, nm_modem, G_TYPE_OBJECT)
/*****************************************************************************/
#define NM_MODEM_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_MODEM, NMModemPrivate))
enum {
PROP_0,
NM_GOBJECT_PROPERTIES_DEFINE (NMModem,
PROP_CONTROL_PORT,
PROP_DATA_PORT,
PROP_PATH,
@ -52,11 +53,24 @@ enum {
PROP_SIM_ID,
PROP_IP_TYPES,
PROP_SIM_OPERATOR_ID,
);
LAST_PROP
enum {
PPP_STATS,
PPP_FAILED,
PREPARE_RESULT,
IP4_CONFIG_RESULT,
IP6_CONFIG_RESULT,
AUTH_REQUESTED,
AUTH_RESULT,
REMOVED,
STATE_CHANGED,
LAST_SIGNAL,
};
typedef struct {
static guint signals[LAST_SIGNAL] = { 0 };
typedef struct _NMModemPrivate {
char *uid;
char *path;
char *driver;
@ -86,22 +100,9 @@ typedef struct {
guint32 out_bytes;
} NMModemPrivate;
enum {
PPP_STATS,
PPP_FAILED,
PREPARE_RESULT,
IP4_CONFIG_RESULT,
IP6_CONFIG_RESULT,
AUTH_REQUESTED,
AUTH_RESULT,
REMOVED,
STATE_CHANGED,
LAST_SIGNAL
};
static guint signals[LAST_SIGNAL] = { 0 };
G_DEFINE_TYPE (NMModem, nm_modem, G_TYPE_OBJECT)
#define NM_MODEM_GET_PRIVATE(self) _NM_GET_PRIVATE_PTR (self, NMModem, NM_IS_MODEM)
/*****************************************************************************/
/* State/enabled/connected */
@ -154,7 +155,7 @@ nm_modem_set_state (NMModem *self,
reason ? reason : "none");
priv->state = new_state;
g_object_notify (G_OBJECT (self), NM_MODEM_STATE);
_notify (self, PROP_STATE);
g_signal_emit (self, signals[STATE_CHANGED], 0, new_state, old_state, reason);
}
}
@ -397,7 +398,7 @@ set_data_port (NMModem *self, const char *new_data_port)
if (g_strcmp0 (priv->data_port, new_data_port) != 0) {
g_free (priv->data_port);
priv->data_port = g_strdup (new_data_port);
g_object_notify (G_OBJECT (self), NM_MODEM_DATA_PORT);
_notify (self, PROP_DATA_PORT);
}
}
@ -1305,49 +1306,11 @@ nm_modem_get_capabilities (NMModem *self,
/*****************************************************************************/
static void
nm_modem_init (NMModem *self)
{
}
static GObject*
constructor (GType type,
guint n_construct_params,
GObjectConstructParam *construct_params)
{
GObject *object;
NMModemPrivate *priv;
object = G_OBJECT_CLASS (nm_modem_parent_class)->constructor (type,
n_construct_params,
construct_params);
if (!object)
return NULL;
priv = NM_MODEM_GET_PRIVATE (object);
if (!priv->data_port && !priv->control_port) {
nm_log_err (LOGD_HW, "neither modem command nor data interface provided");
goto err;
}
if (!priv->path) {
nm_log_err (LOGD_HW, "D-Bus path not provided");
goto err;
}
return object;
err:
g_object_unref (object);
return NULL;
}
static void
get_property (GObject *object, guint prop_id,
GValue *value, GParamSpec *pspec)
{
NMModemPrivate *priv = NM_MODEM_GET_PRIVATE (object);
NMModemPrivate *priv = NM_MODEM_GET_PRIVATE ((NMModem *) object);
switch (prop_id) {
case PROP_PATH:
@ -1399,7 +1362,7 @@ static void
set_property (GObject *object, guint prop_id,
const GValue *value, GParamSpec *pspec)
{
NMModemPrivate *priv = NM_MODEM_GET_PRIVATE (object);
NMModemPrivate *priv = NM_MODEM_GET_PRIVATE ((NMModem *) object);
const char *s;
switch (prop_id) {
@ -1458,10 +1421,53 @@ set_property (GObject *object, guint prop_id,
}
}
/*****************************************************************************/
static void
nm_modem_init (NMModem *self)
{
self->_priv = G_TYPE_INSTANCE_GET_PRIVATE (self, NM_TYPE_MODEM, NMModemPrivate);
}
static GObject*
constructor (GType type,
guint n_construct_params,
GObjectConstructParam *construct_params)
{
GObject *object;
NMModemPrivate *priv;
object = G_OBJECT_CLASS (nm_modem_parent_class)->constructor (type,
n_construct_params,
construct_params);
if (!object)
return NULL;
priv = NM_MODEM_GET_PRIVATE ((NMModem *) object);
if (!priv->data_port && !priv->control_port) {
nm_log_err (LOGD_HW, "neither modem command nor data interface provided");
goto err;
}
if (!priv->path) {
nm_log_err (LOGD_HW, "D-Bus path not provided");
goto err;
}
return object;
err:
g_object_unref (object);
return NULL;
}
/*****************************************************************************/
static void
dispose (GObject *object)
{
NMModemPrivate *priv = NM_MODEM_GET_PRIVATE (object);
NMModemPrivate *priv = NM_MODEM_GET_PRIVATE ((NMModem *) object);
if (priv->act_request) {
g_object_unref (priv->act_request);
@ -1474,7 +1480,7 @@ dispose (GObject *object)
static void
finalize (GObject *object)
{
NMModemPrivate *priv = NM_MODEM_GET_PRIVATE (object);
NMModemPrivate *priv = NM_MODEM_GET_PRIVATE ((NMModem *) object);
g_free (priv->uid);
g_free (priv->path);
@ -1495,7 +1501,6 @@ nm_modem_class_init (NMModemClass *klass)
g_type_class_add_private (object_class, sizeof (NMModemPrivate));
/* Virtual methods */
object_class->constructor = constructor;
object_class->set_property = set_property;
object_class->get_property = get_property;
@ -1506,131 +1511,114 @@ nm_modem_class_init (NMModemClass *klass)
klass->stage3_ip6_config_request = stage3_ip6_config_request;
klass->deactivate_cleanup = deactivate_cleanup;
/* Properties */
obj_properties[PROP_UID] =
g_param_spec_string (NM_MODEM_UID, "", "",
NULL,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS);
g_object_class_install_property
(object_class, PROP_UID,
g_param_spec_string (NM_MODEM_UID, "", "",
NULL,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS));
obj_properties[PROP_PATH] =
g_param_spec_string (NM_MODEM_PATH, "", "",
NULL,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS);
g_object_class_install_property
(object_class, PROP_PATH,
g_param_spec_string (NM_MODEM_PATH, "", "",
NULL,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS));
obj_properties[PROP_DRIVER] =
g_param_spec_string (NM_MODEM_DRIVER, "", "",
NULL,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS);
g_object_class_install_property
(object_class, PROP_DRIVER,
g_param_spec_string (NM_MODEM_DRIVER, "", "",
NULL,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS));
obj_properties[PROP_CONTROL_PORT] =
g_param_spec_string (NM_MODEM_CONTROL_PORT, "", "",
NULL,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS);
g_object_class_install_property
(object_class, PROP_CONTROL_PORT,
g_param_spec_string (NM_MODEM_CONTROL_PORT, "", "",
NULL,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS));
obj_properties[PROP_DATA_PORT] =
g_param_spec_string (NM_MODEM_DATA_PORT, "", "",
NULL,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT |
G_PARAM_STATIC_STRINGS);
g_object_class_install_property
(object_class, PROP_DATA_PORT,
g_param_spec_string (NM_MODEM_DATA_PORT, "", "",
NULL,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT |
G_PARAM_STATIC_STRINGS));
obj_properties[PROP_IP4_METHOD] =
g_param_spec_uint (NM_MODEM_IP4_METHOD, "", "",
NM_MODEM_IP_METHOD_UNKNOWN,
NM_MODEM_IP_METHOD_AUTO,
NM_MODEM_IP_METHOD_UNKNOWN,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT |
G_PARAM_STATIC_STRINGS);
g_object_class_install_property
(object_class, PROP_IP4_METHOD,
g_param_spec_uint (NM_MODEM_IP4_METHOD, "", "",
NM_MODEM_IP_METHOD_UNKNOWN,
NM_MODEM_IP_METHOD_AUTO,
NM_MODEM_IP_METHOD_UNKNOWN,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT |
G_PARAM_STATIC_STRINGS));
obj_properties[PROP_IP6_METHOD] =
g_param_spec_uint (NM_MODEM_IP6_METHOD, "", "",
NM_MODEM_IP_METHOD_UNKNOWN,
NM_MODEM_IP_METHOD_AUTO,
NM_MODEM_IP_METHOD_UNKNOWN,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT |
G_PARAM_STATIC_STRINGS);
g_object_class_install_property
(object_class, PROP_IP6_METHOD,
g_param_spec_uint (NM_MODEM_IP6_METHOD, "", "",
NM_MODEM_IP_METHOD_UNKNOWN,
NM_MODEM_IP_METHOD_AUTO,
NM_MODEM_IP_METHOD_UNKNOWN,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT |
G_PARAM_STATIC_STRINGS));
obj_properties[PROP_IP_TIMEOUT] =
g_param_spec_uint (NM_MODEM_IP_TIMEOUT, "", "",
0, 360, 20,
G_PARAM_READWRITE |
G_PARAM_STATIC_STRINGS);
g_object_class_install_property
(object_class, PROP_IP_TIMEOUT,
g_param_spec_uint (NM_MODEM_IP_TIMEOUT, "", "",
0, 360, 20,
G_PARAM_READWRITE |
G_PARAM_STATIC_STRINGS));
obj_properties[PROP_STATE] =
g_param_spec_enum (NM_MODEM_STATE, "", "",
NM_TYPE_MODEM_STATE,
NM_MODEM_STATE_UNKNOWN,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS);
g_object_class_install_property
(object_class, PROP_STATE,
g_param_spec_enum (NM_MODEM_STATE, "", "",
NM_TYPE_MODEM_STATE,
NM_MODEM_STATE_UNKNOWN,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS));
obj_properties[PROP_DEVICE_ID] =
g_param_spec_string (NM_MODEM_DEVICE_ID, "", "",
NULL,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS);
g_object_class_install_property
(object_class, PROP_DEVICE_ID,
g_param_spec_string (NM_MODEM_DEVICE_ID, "", "",
NULL,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS));
obj_properties[PROP_SIM_ID] =
g_param_spec_string (NM_MODEM_SIM_ID, "", "",
NULL,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT |
G_PARAM_STATIC_STRINGS);
g_object_class_install_property
(object_class, PROP_SIM_ID,
g_param_spec_string (NM_MODEM_SIM_ID, "", "",
NULL,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT |
G_PARAM_STATIC_STRINGS));
obj_properties[PROP_IP_TYPES] =
g_param_spec_uint (NM_MODEM_IP_TYPES,
"IP Types",
"Supported IP types",
0, G_MAXUINT32, NM_MODEM_IP_TYPE_IPV4,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT |
G_PARAM_STATIC_STRINGS);
g_object_class_install_property
(object_class, PROP_IP_TYPES,
g_param_spec_uint (NM_MODEM_IP_TYPES,
"IP Types",
"Supported IP types",
0, G_MAXUINT32, NM_MODEM_IP_TYPE_IPV4,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
obj_properties[PROP_SIM_OPERATOR_ID] =
g_param_spec_string (NM_MODEM_SIM_OPERATOR_ID, "", "",
NULL,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT |
G_PARAM_STATIC_STRINGS);
g_object_class_install_property
(object_class, PROP_SIM_OPERATOR_ID,
g_param_spec_string (NM_MODEM_SIM_OPERATOR_ID, "", "",
NULL,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT |
G_PARAM_STATIC_STRINGS));
/* Signals */
g_object_class_install_properties (object_class, _PROPERTY_ENUMS_LAST, obj_properties);
signals[PPP_STATS] =
g_signal_new ("ppp-stats",
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (NMModemClass, ppp_stats),
NULL, NULL, NULL,
G_TYPE_NONE, 2,
G_TYPE_UINT, G_TYPE_UINT);
g_signal_new ("ppp-stats",
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST,
0, NULL, NULL, NULL,
G_TYPE_NONE, 2,
G_TYPE_UINT, G_TYPE_UINT);
signals[PPP_FAILED] =
g_signal_new ("ppp-failed",
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (NMModemClass, ppp_failed),
NULL, NULL, NULL,
G_TYPE_NONE, 1, G_TYPE_UINT);
g_signal_new ("ppp-failed",
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST,
0, NULL, NULL, NULL,
G_TYPE_NONE, 1, G_TYPE_UINT);
signals[IP4_CONFIG_RESULT] =
g_signal_new (NM_MODEM_IP4_CONFIG_RESULT,
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (NMModemClass, ip4_config_result),
NULL, NULL, NULL,
G_TYPE_NONE, 2, G_TYPE_OBJECT, G_TYPE_POINTER);
g_signal_new (NM_MODEM_IP4_CONFIG_RESULT,
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST,
0, NULL, NULL, NULL,
G_TYPE_NONE, 2, G_TYPE_OBJECT, G_TYPE_POINTER);
/**
* NMModem::ip6-config-result:
@ -1646,50 +1634,44 @@ nm_modem_class_init (NMModemClass *klass)
* should be started after applying @config to the data port.
*/
signals[IP6_CONFIG_RESULT] =
g_signal_new (NM_MODEM_IP6_CONFIG_RESULT,
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (NMModemClass, ip6_config_result),
NULL, NULL, NULL,
G_TYPE_NONE, 3, G_TYPE_OBJECT, G_TYPE_BOOLEAN, G_TYPE_POINTER);
g_signal_new (NM_MODEM_IP6_CONFIG_RESULT,
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST,
0, NULL, NULL, NULL,
G_TYPE_NONE, 3, G_TYPE_OBJECT, G_TYPE_BOOLEAN, G_TYPE_POINTER);
signals[PREPARE_RESULT] =
g_signal_new (NM_MODEM_PREPARE_RESULT,
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (NMModemClass, prepare_result),
NULL, NULL, NULL,
G_TYPE_NONE, 2, G_TYPE_BOOLEAN, G_TYPE_UINT);
g_signal_new (NM_MODEM_PREPARE_RESULT,
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST,
0, NULL, NULL, NULL,
G_TYPE_NONE, 2, G_TYPE_BOOLEAN, G_TYPE_UINT);
signals[AUTH_REQUESTED] =
g_signal_new (NM_MODEM_AUTH_REQUESTED,
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (NMModemClass, auth_requested),
NULL, NULL, NULL,
G_TYPE_NONE, 0);
g_signal_new (NM_MODEM_AUTH_REQUESTED,
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST,
0, NULL, NULL, NULL,
G_TYPE_NONE, 0);
signals[AUTH_RESULT] =
g_signal_new (NM_MODEM_AUTH_RESULT,
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (NMModemClass, auth_result),
NULL, NULL, NULL,
G_TYPE_NONE, 1, G_TYPE_POINTER);
g_signal_new (NM_MODEM_AUTH_RESULT,
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST,
0, NULL, NULL, NULL,
G_TYPE_NONE, 1, G_TYPE_POINTER);
signals[REMOVED] =
g_signal_new (NM_MODEM_REMOVED,
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (NMModemClass, removed),
NULL, NULL, NULL,
G_TYPE_NONE, 0);
g_signal_new (NM_MODEM_REMOVED,
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST,
0, NULL, NULL, NULL,
G_TYPE_NONE, 0);
signals[STATE_CHANGED] =
g_signal_new (NM_MODEM_STATE_CHANGED,
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (NMModemClass, state_changed),
NULL, NULL, NULL,
G_TYPE_NONE, 2, NM_TYPE_MODEM_STATE, NM_TYPE_MODEM_STATE);
g_signal_new (NM_MODEM_STATE_CHANGED,
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST,
0, NULL, NULL, NULL,
G_TYPE_NONE, 2, NM_TYPE_MODEM_STATE, NM_TYPE_MODEM_STATE);
}

View file

@ -76,7 +76,7 @@ typedef enum {
* combination of flags is possible. For example, (%NM_MODEM_IP_TYPE_IPV4 |
* %NM_MODEM_IP_TYPE_IPV6) indicates that the modem supports IPv4 and IPv6
* but not simultaneously on the same bearer.
*/
*/
typedef enum {
NM_MODEM_IP_TYPE_UNKNOWN = 0x0,
NM_MODEM_IP_TYPE_IPV4 = 0x1,
@ -100,9 +100,11 @@ typedef enum { /*< underscore_name=nm_modem_state >*/
NM_MODEM_STATE_CONNECTED = 12,
} NMModemState;
struct _NMModemPrivate;
typedef struct {
GObject parent;
struct _NMModemPrivate *_priv;
} NMModem;
typedef struct {
@ -153,26 +155,6 @@ typedef struct {
void (*deactivate_cleanup) (NMModem *self, NMDevice *device);
gboolean (*owns_port) (NMModem *self, const char *iface);
/* Signals */
void (*ppp_stats) (NMModem *self, guint32 in_bytes, guint32 out_bytes);
void (*ppp_failed) (NMModem *self, NMDeviceStateReason reason);
void (*prepare_result) (NMModem *self, gboolean success, NMDeviceStateReason reason);
void (*ip4_config_result) (NMModem *self, NMIP4Config *config, GError *error);
void (*ip6_config_result) (NMModem *self,
NMIP6Config *config,
gboolean do_slaac,
GError *error);
void (*auth_requested) (NMModem *self);
void (*auth_result) (NMModem *self, GError *error);
void (*state_changed) (NMModem *self,
NMModemState new_state,
NMModemState old_state);
void (*removed) (NMModem *self);
} NMModemClass;
GType nm_modem_get_type (void);

View file

@ -24,33 +24,47 @@
#include <gmodule.h>
#include "nm-device-factory.h"
#include "nm-wwan-factory.h"
#include "nm-setting-gsm.h"
#include "nm-setting-cdma.h"
#include "nm-modem-manager.h"
#include "nm-device-modem.h"
#include "nm-platform.h"
/*****************************************************************************/
#define NM_TYPE_WWAN_FACTORY (nm_wwan_factory_get_type ())
#define NM_WWAN_FACTORY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_WWAN_FACTORY, NMWwanFactory))
#define NM_WWAN_FACTORY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_WWAN_FACTORY, NMWwanFactoryClass))
#define NM_IS_WWAN_FACTORY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_WWAN_FACTORY))
#define NM_IS_WWAN_FACTORY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_WWAN_FACTORY))
#define NM_WWAN_FACTORY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_WWAN_FACTORY, NMWwanFactoryClass))
typedef struct _NMWwanFactory NMWwanFactory;
typedef struct _NMWwanFactoryClass NMWwanFactoryClass;
static GType nm_wwan_factory_get_type (void);
/*****************************************************************************/
typedef struct {
NMModemManager *mm;
} NMWwanFactoryPrivate;
struct _NMWwanFactory {
GObject parent;
NMWwanFactoryPrivate _priv;
};
struct _NMWwanFactoryClass {
GObjectClass parent;
};
static void device_factory_interface_init (NMDeviceFactoryInterface *factory_iface);
G_DEFINE_TYPE_EXTENDED (NMWwanFactory, nm_wwan_factory, G_TYPE_OBJECT, 0,
G_IMPLEMENT_INTERFACE (NM_TYPE_DEVICE_FACTORY, device_factory_interface_init))
#define NM_WWAN_FACTORY_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_WWAN_FACTORY, NMWwanFactoryPrivate))
typedef struct {
NMModemManager *mm;
} NMWwanFactoryPrivate;
/*****************************************************************************/
G_MODULE_EXPORT NMDeviceFactory *
nm_device_factory_create (GError **error)
{
return (NMDeviceFactory *) g_object_new (NM_TYPE_WWAN_FACTORY, NULL);
}
#define NM_WWAN_FACTORY_GET_PRIVATE(self) _NM_GET_PRIVATE (self, NMWwanFactory, NM_IS_WWAN_FACTORY)
/*****************************************************************************/
@ -121,19 +135,13 @@ start (NMDeviceFactory *factory)
self);
}
/*****************************************************************************/
static void
nm_wwan_factory_init (NMWwanFactory *self)
{
}
static void
device_factory_interface_init (NMDeviceFactoryInterface *factory_iface)
{
factory_iface->get_supported_types = get_supported_types;
factory_iface->create_device = create_device;
factory_iface->start = start;
}
static void
dispose (GObject *object)
{
@ -153,7 +161,21 @@ nm_wwan_factory_class_init (NMWwanFactoryClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
g_type_class_add_private (object_class, sizeof (NMWwanFactoryPrivate));
object_class->dispose = dispose;
}
static void
device_factory_interface_init (NMDeviceFactoryInterface *factory_iface)
{
factory_iface->get_supported_types = get_supported_types;
factory_iface->create_device = create_device;
factory_iface->start = start;
}
/*****************************************************************************/
G_MODULE_EXPORT NMDeviceFactory *
nm_device_factory_create (GError **error)
{
return (NMDeviceFactory *) g_object_new (NM_TYPE_WWAN_FACTORY, NULL);
}

View file

@ -1,35 +0,0 @@
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
/* NetworkManager -- Network link manager
*
* 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 of the License, 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 Red Hat, Inc.
*/
#ifndef __NETWORKMANAGER_WWAN_FACTORY_H__
#define __NETWORKMANAGER_WWAN_FACTORY_H__
#define NM_TYPE_WWAN_FACTORY (nm_wwan_factory_get_type ())
#define NM_WWAN_FACTORY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_WWAN_FACTORY, NMWwanFactory))
typedef struct {
GObject parent;
} NMWwanFactory;
typedef struct {
GObjectClass parent;
} NMWwanFactoryClass;
#endif /* __NETWORKMANAGER_WWAN_FACTORY_H__ */

View file

@ -52,7 +52,7 @@ struct _NMDhcpListener {
};
struct _NMDhcpListenerClass {
GObjectClass parent_class;
GObjectClass parent;
};
enum {

View file

@ -20,6 +20,8 @@
#include "nm-default.h"
#include "nm-dns-dnsmasq.h"
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
@ -28,7 +30,6 @@
#include <sys/stat.h>
#include <linux/if.h>
#include "nm-dns-dnsmasq.h"
#include "nm-core-internal.h"
#include "nm-platform.h"
#include "nm-utils.h"
@ -37,16 +38,14 @@
#include "nm-bus-manager.h"
#include "NetworkManagerUtils.h"
G_DEFINE_TYPE (NMDnsDnsmasq, nm_dns_dnsmasq, NM_TYPE_DNS_PLUGIN)
#define NM_DNS_DNSMASQ_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DNS_DNSMASQ, NMDnsDnsmasqPrivate))
#define PIDFILE NMRUNDIR "/dnsmasq.pid"
#define CONFDIR NMCONFDIR "/dnsmasq.d"
#define DNSMASQ_DBUS_SERVICE "org.freedesktop.NetworkManager.dnsmasq"
#define DNSMASQ_DBUS_PATH "/uk/org/thekelleys/dnsmasq"
/*****************************************************************************/
typedef struct {
GDBusProxy *dnsmasq;
GCancellable *dnsmasq_cancellable;
@ -56,6 +55,19 @@ typedef struct {
GVariant *set_server_ex_args;
} NMDnsDnsmasqPrivate;
struct _NMDnsDnsmasq {
NMDnsPlugin parent;
NMDnsDnsmasqPrivate _priv;
};
struct _NMDnsDnsmasqClass {
NMDnsPluginClass parent;
};
G_DEFINE_TYPE (NMDnsDnsmasq, nm_dns_dnsmasq, NM_TYPE_DNS_PLUGIN)
#define NM_DNS_DNSMASQ_GET_PRIVATE(self) _NM_GET_PRIVATE (self, NMDnsDnsmasq, NM_IS_DNS_DNSMASQ)
/*****************************************************************************/
#define _NMLOG_DOMAIN LOGD_DNS
@ -653,21 +665,21 @@ get_name (NMDnsPlugin *plugin)
/*****************************************************************************/
static void
nm_dns_dnsmasq_init (NMDnsDnsmasq *self)
{
}
NMDnsPlugin *
nm_dns_dnsmasq_new (void)
{
return g_object_new (NM_TYPE_DNS_DNSMASQ, NULL);
}
static void
nm_dns_dnsmasq_init (NMDnsDnsmasq *self)
{
}
static void
dispose (GObject *object)
{
NMDnsDnsmasqPrivate *priv = NM_DNS_DNSMASQ_GET_PRIVATE (object);
NMDnsDnsmasqPrivate *priv = NM_DNS_DNSMASQ_GET_PRIVATE ((NMDnsDnsmasq *) object);
nm_clear_g_cancellable (&priv->dnsmasq_cancellable);
nm_clear_g_cancellable (&priv->update_cancellable);
@ -685,8 +697,6 @@ nm_dns_dnsmasq_class_init (NMDnsDnsmasqClass *dns_class)
NMDnsPluginClass *plugin_class = NM_DNS_PLUGIN_CLASS (dns_class);
GObjectClass *object_class = G_OBJECT_CLASS (dns_class);
g_type_class_add_private (dns_class, sizeof (NMDnsDnsmasqPrivate));
object_class->dispose = dispose;
plugin_class->child_quit = child_quit;
@ -694,4 +704,3 @@ nm_dns_dnsmasq_class_init (NMDnsDnsmasqClass *dns_class)
plugin_class->update = update;
plugin_class->get_name = get_name;
}

View file

@ -28,17 +28,11 @@
#define NM_IS_DNS_DNSMASQ_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_DNS_DNSMASQ))
#define NM_DNS_DNSMASQ_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_DNS_DNSMASQ, NMDnsDnsmasqClass))
typedef struct {
NMDnsPlugin parent;
} NMDnsDnsmasq;
typedef struct {
NMDnsPluginClass parent;
} NMDnsDnsmasqClass;
typedef struct _NMDnsDnsmasq NMDnsDnsmasq;
typedef struct _NMDnsDnsmasqClass NMDnsDnsmasqClass;
GType nm_dns_dnsmasq_get_type (void);
NMDnsPlugin *nm_dns_dnsmasq_new (void);
#endif /* __NETWORKMANAGER_DNS_DNSMASQ_H__ */

View file

@ -19,6 +19,8 @@
#include "nm-default.h"
#include "nm-dns-plugin.h"
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
@ -26,27 +28,28 @@
#include <sys/wait.h>
#include "nm-core-internal.h"
#include "nm-dns-plugin.h"
#include "NetworkManagerUtils.h"
typedef struct {
/*****************************************************************************/
enum {
FAILED,
CHILD_QUIT,
LAST_SIGNAL,
};
static guint signals[LAST_SIGNAL] = { 0 };
typedef struct _NMDnsPluginPrivate {
GPid pid;
guint watch_id;
char *progname;
char *pidfile;
} NMDnsPluginPrivate;
#define NM_DNS_PLUGIN_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DNS_PLUGIN, NMDnsPluginPrivate))
G_DEFINE_TYPE_EXTENDED (NMDnsPlugin, nm_dns_plugin, G_TYPE_OBJECT, G_TYPE_FLAG_ABSTRACT, {})
enum {
FAILED,
CHILD_QUIT,
LAST_SIGNAL
};
static guint signals[LAST_SIGNAL] = { 0 };
#define NM_DNS_PLUGIN_GET_PRIVATE(self) _NM_GET_PRIVATE_PTR (self, NMDnsPlugin, NM_IS_DNS_PLUGIN)
/*****************************************************************************/
@ -265,6 +268,7 @@ nm_dns_plugin_stop (NMDnsPlugin *self)
static void
nm_dns_plugin_init (NMDnsPlugin *self)
{
self->_priv = G_TYPE_INSTANCE_GET_PRIVATE (self, NM_TYPE_DNS_PLUGIN, NMDnsPluginPrivate);
}
static void
@ -284,17 +288,20 @@ nm_dns_plugin_class_init (NMDnsPluginClass *plugin_class)
g_type_class_add_private (plugin_class, sizeof (NMDnsPluginPrivate));
/* virtual methods */
object_class->dispose = dispose;
plugin_class->is_caching = is_caching;
/* signals */
/* Emitted by the plugin and consumed by NMDnsManager when
* some error happens with the nameserver subprocess. Causes NM to fall
* back to writing out a non-local-caching resolv.conf until the next
* DNS update.
*/
signals[FAILED] =
g_signal_new (NM_DNS_PLUGIN_FAILED,
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (NMDnsPluginClass, failed),
NULL, NULL,
0, NULL, NULL,
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE, 0);
@ -307,4 +314,3 @@ nm_dns_plugin_class_init (NMDnsPluginClass *plugin_class)
g_cclosure_marshal_VOID__INT,
G_TYPE_NONE, 1, G_TYPE_INT);
}

View file

@ -32,8 +32,11 @@
#define NM_DNS_PLUGIN_FAILED "failed"
#define NM_DNS_PLUGIN_CHILD_QUIT "child-quit"
struct _NMDnsPluginPrivate;
typedef struct {
GObject parent;
struct _NMDnsPluginPrivate *_priv;
} NMDnsPlugin;
typedef struct {
@ -62,13 +65,6 @@ typedef struct {
/* Signals */
/* Emitted by the plugin and consumed by NMDnsManager when
* some error happens with the nameserver subprocess. Causes NM to fall
* back to writing out a non-local-caching resolv.conf until the next
* DNS update.
*/
void (*failed) (NMDnsPlugin *self);
/* Emitted by the plugin base class when the nameserver subprocess
* quits. This signal is consumed by the plugin subclasses and not
* by NMDnsManager. If the subclass decides the exit status (as returned
@ -108,4 +104,3 @@ GPid nm_dns_plugin_child_pid (NMDnsPlugin *self);
gboolean nm_dns_plugin_child_kill (NMDnsPlugin *self);
#endif /* __NETWORKMANAGER_DNS_PLUGIN_H__ */

View file

@ -41,20 +41,18 @@
#include "nm-device.h"
#include "NetworkManagerUtils.h"
G_DEFINE_TYPE (NMDnsSystemdResolved, nm_dns_systemd_resolved, NM_TYPE_DNS_PLUGIN)
#define NM_DNS_SYSTEMD_RESOLVED_GET_PRIVATE(o) \
(G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DNS_SYSTEMD_RESOLVED, \
NMDnsSystemdResolvedPrivate))
#define SYSTEMD_RESOLVED_DBUS_SERVICE "org.freedesktop.resolve1"
#define SYSTEMD_RESOLVED_DBUS_PATH "/org/freedesktop/resolve1"
/*****************************************************************************/
typedef struct {
int ifindex;
GList *configs;
} InterfaceConfig;
/*****************************************************************************/
typedef struct {
GDBusProxy *resolve;
GCancellable *init_cancellable;
@ -63,6 +61,19 @@ typedef struct {
GQueue domain_updates;
} NMDnsSystemdResolvedPrivate;
struct _NMDnsSystemdResolved {
NMDnsPlugin parent;
NMDnsSystemdResolvedPrivate _priv;
};
struct _NMDnsSystemdResolvedClass {
NMDnsPluginClass parent;
};
G_DEFINE_TYPE (NMDnsSystemdResolved, nm_dns_systemd_resolved, NM_TYPE_DNS_PLUGIN)
#define NM_DNS_SYSTEMD_RESOLVED_GET_PRIVATE(self) _NM_GET_PRIVATE (self, NMDnsSystemdResolved, NM_IS_DNS_SYSTEMD_RESOLVED)
/*****************************************************************************/
#define _NMLOG_DOMAIN LOGD_DNS
@ -319,12 +330,6 @@ get_name (NMDnsPlugin *plugin)
/*****************************************************************************/
NMDnsPlugin *
nm_dns_systemd_resolved_new (void)
{
return g_object_new (NM_TYPE_DNS_SYSTEMD_RESOLVED, NULL);
}
static void
resolved_proxy_created (GObject *source, GAsyncResult *r, gpointer user_data)
{
@ -350,6 +355,7 @@ resolved_proxy_created (GObject *source, GAsyncResult *r, gpointer user_data)
send_updates (self);
}
/*****************************************************************************/
static void
nm_dns_systemd_resolved_init (NMDnsSystemdResolved *self)
@ -380,6 +386,12 @@ nm_dns_systemd_resolved_init (NMDnsSystemdResolved *self)
self);
}
NMDnsPlugin *
nm_dns_systemd_resolved_new (void)
{
return g_object_new (NM_TYPE_DNS_SYSTEMD_RESOLVED, NULL);
}
static void
dispose (GObject *object)
{
@ -400,12 +412,9 @@ nm_dns_systemd_resolved_class_init (NMDnsSystemdResolvedClass *dns_class)
NMDnsPluginClass *plugin_class = NM_DNS_PLUGIN_CLASS (dns_class);
GObjectClass *object_class = G_OBJECT_CLASS (dns_class);
g_type_class_add_private (dns_class, sizeof (NMDnsSystemdResolvedPrivate));
object_class->dispose = dispose;
plugin_class->is_caching = is_caching;
plugin_class->update = update;
plugin_class->get_name = get_name;
}

View file

@ -29,17 +29,11 @@
#define NM_IS_DNS_SYSTEMD_RESOLVED_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_DNS_SYSTEMD_RESOLVED))
#define NM_DNS_SYSTEMD_RESOLVED_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_DNS_SYSTEMD_RESOLVED, NMDnsSystemdResolvedClass))
typedef struct {
NMDnsPlugin parent;
} NMDnsSystemdResolved;
typedef struct {
NMDnsPluginClass parent;
} NMDnsSystemdResolvedClass;
typedef struct _NMDnsSystemdResolved NMDnsSystemdResolved;
typedef struct _NMDnsSystemdResolvedClass NMDnsSystemdResolvedClass;
GType nm_dns_systemd_resolved_get_type (void);
NMDnsPlugin *nm_dns_systemd_resolved_new (void);
#endif /* __NETWORKMANAGER_DNS_SYSTEMD_RESOLVED_H__ */

View file

@ -20,8 +20,19 @@
#include "nm-default.h"
#include "nm-dns-unbound.h"
#include "NetworkManagerUtils.h"
/*****************************************************************************/
struct _NMDnsUnbound {
NMDnsPlugin parent;
};
struct _NMDnsUnboundClass {
NMDnsPluginClass parent;
};
G_DEFINE_TYPE (NMDnsUnbound, nm_dns_unbound, NM_TYPE_DNS_PLUGIN)
/*****************************************************************************/
@ -58,17 +69,17 @@ get_name (NMDnsPlugin *plugin)
/*****************************************************************************/
static void
nm_dns_unbound_init (NMDnsUnbound *unbound)
{
}
NMDnsPlugin *
nm_dns_unbound_new (void)
{
return g_object_new (NM_TYPE_DNS_UNBOUND, NULL);
}
static void
nm_dns_unbound_init (NMDnsUnbound *unbound)
{
}
static void
nm_dns_unbound_class_init (NMDnsUnboundClass *klass)
{

View file

@ -27,13 +27,8 @@
#define NM_IS_DNS_UNBOUND_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_DNS_UNBOUND))
#define NM_DNS_UNBOUND_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_DNS_UNBOUND, NMDnsUnboundClass))
typedef struct {
NMDnsPlugin parent;
} NMDnsUnbound;
typedef struct {
NMDnsPluginClass parent;
} NMDnsUnboundClass;
typedef struct _NMDnsUnbound NMDnsUnbound;
typedef struct _NMDnsUnboundClass NMDnsUnboundClass;
GType nm_dns_unbound_get_type (void);

View file

@ -20,6 +20,8 @@
#include "nm-default.h"
#include "nm-dnsmasq-manager.h"
#include <sys/types.h>
#include <sys/wait.h>
#include <signal.h>
@ -28,12 +30,44 @@
#include <arpa/inet.h>
#include <stdlib.h>
#include "nm-dnsmasq-manager.h"
#include "nm-dnsmasq-utils.h"
#include "nm-utils.h"
#include "NetworkManagerUtils.h"
#include "nm-core-internal.h"
#define CONFDIR NMCONFDIR "/dnsmasq-shared.d"
/*****************************************************************************/
enum {
STATE_CHANGED,
LAST_SIGNAL,
};
static guint signals[LAST_SIGNAL] = { 0 };
typedef struct {
char *iface;
char *pidfile;
GPid pid;
guint dm_watch_id;
} NMDnsMasqManagerPrivate;
struct _NMDnsMasqManager {
GObject parent;
NMDnsMasqManagerPrivate _priv;
};
struct _NMDnsMasqManagerClass {
GObjectClass parent;
};
G_DEFINE_TYPE (NMDnsMasqManager, nm_dnsmasq_manager, G_TYPE_OBJECT)
#define NM_DNSMASQ_MANAGER_GET_PRIVATE(self) _NM_GET_PRIVATE (self, NMDnsMasqManager, NM_IS_DNSMASQ_MANAGER)
/*****************************************************************************/
#define _NMLOG_DOMAIN LOGD_SHARING
#define _NMLOG_PREFIX_NAME "dnsmasq-manager"
#define _NMLOG(level, ...) \
@ -44,26 +78,7 @@
_NM_UTILS_MACRO_REST(__VA_ARGS__)); \
} G_STMT_END
typedef struct {
char *iface;
char *pidfile;
GPid pid;
guint dm_watch_id;
} NMDnsMasqManagerPrivate;
#define NM_DNSMASQ_MANAGER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DNSMASQ_MANAGER, NMDnsMasqManagerPrivate))
#define CONFDIR NMCONFDIR "/dnsmasq-shared.d"
G_DEFINE_TYPE (NMDnsMasqManager, nm_dnsmasq_manager, G_TYPE_OBJECT)
enum {
STATE_CHANGED,
LAST_SIGNAL
};
static guint signals[LAST_SIGNAL] = { 0 };
/*****************************************************************************/
typedef struct {
GPtrArray *array;
@ -334,6 +349,13 @@ nm_dnsmasq_manager_stop (NMDnsMasqManager *manager)
unlink (priv->pidfile);
}
/*****************************************************************************/
static void
nm_dnsmasq_manager_init (NMDnsMasqManager *manager)
{
}
NMDnsMasqManager *
nm_dnsmasq_manager_new (const char *iface)
{
@ -349,15 +371,10 @@ nm_dnsmasq_manager_new (const char *iface)
return manager;
}
static void
nm_dnsmasq_manager_init (NMDnsMasqManager *manager)
{
}
static void
finalize (GObject *object)
{
NMDnsMasqManagerPrivate *priv = NM_DNSMASQ_MANAGER_GET_PRIVATE (object);
NMDnsMasqManagerPrivate *priv = NM_DNSMASQ_MANAGER_GET_PRIVATE ((NMDnsMasqManager *) object);
nm_dnsmasq_manager_stop (NM_DNSMASQ_MANAGER (object));
@ -372,11 +389,8 @@ nm_dnsmasq_manager_class_init (NMDnsMasqManagerClass *manager_class)
{
GObjectClass *object_class = G_OBJECT_CLASS (manager_class);
g_type_class_add_private (manager_class, sizeof (NMDnsMasqManagerPrivate));
object_class->finalize = finalize;
/* signals */
signals[STATE_CHANGED] =
g_signal_new (NM_DNS_MASQ_MANAGER_STATE_CHANGED,
G_OBJECT_CLASS_TYPE (object_class),

View file

@ -35,18 +35,12 @@
typedef enum {
NM_DNSMASQ_STATUS_UNKNOWN,
NM_DNSMASQ_STATUS_DEAD,
NM_DNSMASQ_STATUS_RUNNING,
} NMDnsMasqStatus;
typedef struct {
GObject parent;
} NMDnsMasqManager;
typedef struct {
GObjectClass parent;
} NMDnsMasqManagerClass;
typedef struct _NMDnsMasqManager NMDnsMasqManager;
typedef struct _NMDnsMasqManagerClass NMDnsMasqManagerClass;
GType nm_dnsmasq_manager_get_type (void);

View file

@ -1170,7 +1170,6 @@ nm_active_connection_class_init (NMActiveConnectionClass *ac_class)
exported_object_class->export_path = NM_DBUS_PATH "/ActiveConnection/%u";
/* virtual methods */
object_class->get_property = get_property;
object_class->set_property = set_property;
object_class->constructed = constructed;

View file

@ -32,6 +32,46 @@
#include "nm-config.h"
#include "nm-settings-connection.h"
/*****************************************************************************/
typedef enum {
BACKEND_LOG = (1 << 0),
BACKEND_AUDITD = (1 << 1),
_BACKEND_LAST,
BACKEND_ALL = ((_BACKEND_LAST - 1) << 1) - 1,
} AuditBackend;
typedef struct {
const char *name;
GValue value;
gboolean need_encoding;
AuditBackend backends;
} AuditField;
/*****************************************************************************/
typedef struct {
NMConfig *config;
int auditd_fd;
} NMAuditManagerPrivate;
struct _NMAuditManager {
GObject parent;
#if HAVE_LIBAUDIT
NMAuditManagerPrivate _priv;
#endif
};
struct _NMAuditManagerClass {
GObjectClass parent;
};
G_DEFINE_TYPE (NMAuditManager, nm_audit_manager, G_TYPE_OBJECT)
#define NM_AUDIT_MANAGER_GET_PRIVATE(self) _NM_GET_PRIVATE (self, NMAuditManager, NM_IS_AUDIT_MANAGER)
/*****************************************************************************/
#define AUDIT_LOG_LEVEL LOGL_INFO
#define _NMLOG_PREFIX_NAME "audit"
@ -43,33 +83,12 @@
_NM_UTILS_MACRO_REST (__VA_ARGS__)); \
} G_STMT_END
typedef enum {
BACKEND_LOG = (1 << 0),
BACKEND_AUDITD = (1 << 1),
_BACKEND_LAST,
BACKEND_ALL = ((_BACKEND_LAST - 1) << 1) - 1,
} AuditBackend;
typedef struct {
const char *name;
GValue value;
gboolean need_encoding;
AuditBackend backends;
} AuditField;
#if HAVE_LIBAUDIT
typedef struct {
NMConfig *config;
int auditd_fd;
} NMAuditManagerPrivate;
#define NM_AUDIT_MANAGER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_AUDIT_MANAGER, NMAuditManagerPrivate))
#endif
G_DEFINE_TYPE (NMAuditManager, nm_audit_manager, G_TYPE_OBJECT)
/*****************************************************************************/
NM_DEFINE_SINGLETON_GETTER (NMAuditManager, nm_audit_manager_get, NM_TYPE_AUDIT_MANAGER);
/*****************************************************************************/
static void
_audit_field_init_string (AuditField *field, const char *name, const char *str,
gboolean need_encoding, AuditBackend backends)
@ -346,6 +365,8 @@ config_changed_cb (NMConfig *config,
}
#endif
/*****************************************************************************/
static void
nm_audit_manager_init (NMAuditManager *self)
{
@ -389,11 +410,5 @@ nm_audit_manager_class_init (NMAuditManagerClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
#if HAVE_LIBAUDIT
g_type_class_add_private (klass, sizeof (NMAuditManagerPrivate));
#endif
/* virtual methods */
object_class->dispose = dispose;
}

View file

@ -32,13 +32,7 @@
#define NM_IS_AUDIT_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_AUDIT_MANAGER))
#define NM_AUDIT_MANAGER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_AUDIT_MANAGER, NMAuditManagerClass))
struct _NMAuditManager {
GObject parent;
};
typedef struct {
GObjectClass parent;
} NMAuditManagerClass;
typedef struct _NMAuditManagerClass NMAuditManagerClass;
#define NM_AUDIT_OP_CONN_ADD "connection-add"
#define NM_AUDIT_OP_CONN_DELETE "connection-delete"

View file

@ -30,32 +30,14 @@
#define POLKIT_OBJECT_PATH "/org/freedesktop/PolicyKit1/Authority"
#define POLKIT_INTERFACE "org.freedesktop.PolicyKit1.Authority"
/*****************************************************************************/
#define _NMLOG_PREFIX_NAME "auth"
#define _NMLOG_DOMAIN LOGD_CORE
#define _NMLOG(level, ...) \
G_STMT_START { \
if (nm_logging_enabled ((level), (_NMLOG_DOMAIN))) { \
char __prefix[30] = _NMLOG_PREFIX_NAME; \
\
if ((self) != singleton_instance) \
g_snprintf (__prefix, sizeof (__prefix), ""_NMLOG_PREFIX_NAME"[%p]", (self)); \
_nm_log ((level), (_NMLOG_DOMAIN), 0, \
"%s: " _NM_UTILS_MACRO_FIRST(__VA_ARGS__), \
__prefix _NM_UTILS_MACRO_REST(__VA_ARGS__)); \
} \
} G_STMT_END
enum {
PROP_0,
NM_GOBJECT_PROPERTIES_DEFINE_BASE (
PROP_POLKIT_ENABLED,
LAST_PROP
};
);
enum {
CHANGED_SIGNAL,
LAST_SIGNAL,
};
@ -71,11 +53,37 @@ typedef struct {
#endif
} NMAuthManagerPrivate;
NM_DEFINE_SINGLETON_REGISTER (NMAuthManager);
struct _NMAuthManager {
GObject parent;
NMAuthManagerPrivate _priv;
};
struct _NMAuthManagerClass {
GObjectClass parent;
};
G_DEFINE_TYPE (NMAuthManager, nm_auth_manager, G_TYPE_OBJECT)
#define NM_AUTH_MANAGER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_AUTH_MANAGER, NMAuthManagerPrivate))
#define NM_AUTH_MANAGER_GET_PRIVATE(self) _NM_GET_PRIVATE (self, NMAuthManager, NM_IS_AUTH_MANAGER)
NM_DEFINE_SINGLETON_REGISTER (NMAuthManager);
/*****************************************************************************/
#define _NMLOG_PREFIX_NAME "auth"
#define _NMLOG_DOMAIN LOGD_CORE
#define _NMLOG(level, ...) \
G_STMT_START { \
if (nm_logging_enabled ((level), (_NMLOG_DOMAIN))) { \
char __prefix[30] = _NMLOG_PREFIX_NAME; \
\
if ((self) != singleton_instance) \
g_snprintf (__prefix, sizeof (__prefix), ""_NMLOG_PREFIX_NAME"[%p]", (self)); \
_nm_log ((level), (_NMLOG_DOMAIN), 0, \
"%s: " _NM_UTILS_MACRO_FIRST(__VA_ARGS__), \
__prefix _NM_UTILS_MACRO_REST(__VA_ARGS__)); \
} \
} G_STMT_END
/*****************************************************************************/
@ -477,32 +485,12 @@ nm_auth_manager_get ()
return singleton_instance;
}
NMAuthManager *
nm_auth_manager_setup (gboolean polkit_enabled)
{
NMAuthManager *self;
g_return_val_if_fail (!singleton_instance, singleton_instance);
self = g_object_new (NM_TYPE_AUTH_MANAGER,
NM_AUTH_MANAGER_POLKIT_ENABLED, polkit_enabled,
NULL);
_LOGD ("set instance");
singleton_instance = self;
nm_singleton_instance_register ();
nm_log_dbg (LOGD_CORE, "setup %s singleton (%p)", "NMAuthManager", singleton_instance);
return self;
}
/*****************************************************************************/
static void
get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
{
NMAuthManagerPrivate *priv = NM_AUTH_MANAGER_GET_PRIVATE (object);
NMAuthManagerPrivate *priv = NM_AUTH_MANAGER_GET_PRIVATE ((NMAuthManager *) object);
switch (prop_id) {
case PROP_POLKIT_ENABLED:
@ -517,7 +505,7 @@ get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
static void
set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
{
NMAuthManagerPrivate *priv = NM_AUTH_MANAGER_GET_PRIVATE (object);
NMAuthManagerPrivate *priv = NM_AUTH_MANAGER_GET_PRIVATE ((NMAuthManager *) object);
switch (prop_id) {
case PROP_POLKIT_ENABLED:
@ -530,6 +518,8 @@ set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *p
}
}
/*****************************************************************************/
static void
nm_auth_manager_init (NMAuthManager *self)
{
@ -571,6 +561,25 @@ constructed (GObject *object)
#endif
}
NMAuthManager *
nm_auth_manager_setup (gboolean polkit_enabled)
{
NMAuthManager *self;
g_return_val_if_fail (!singleton_instance, singleton_instance);
self = g_object_new (NM_TYPE_AUTH_MANAGER,
NM_AUTH_MANAGER_POLKIT_ENABLED, polkit_enabled,
NULL);
_LOGD ("set instance");
singleton_instance = self;
nm_singleton_instance_register ();
nm_log_dbg (LOGD_CORE, "setup %s singleton (%p)", "NMAuthManager", singleton_instance);
return self;
}
static void
dispose (GObject *object)
@ -605,20 +614,19 @@ nm_auth_manager_class_init (NMAuthManagerClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
g_type_class_add_private (klass, sizeof (NMAuthManagerPrivate));
object_class->get_property = get_property;
object_class->set_property = set_property;
object_class->constructed = constructed;
object_class->dispose = dispose;
g_object_class_install_property
(object_class, PROP_POLKIT_ENABLED,
obj_properties[PROP_POLKIT_ENABLED] =
g_param_spec_boolean (NM_AUTH_MANAGER_POLKIT_ENABLED, "", "",
FALSE,
G_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS));
G_PARAM_STATIC_STRINGS);
g_object_class_install_properties (object_class, _PROPERTY_ENUMS_LAST, obj_properties);
signals[CHANGED_SIGNAL] = g_signal_new (NM_AUTH_MANAGER_SIGNAL_CHANGED,
NM_TYPE_AUTH_MANAGER,
@ -629,6 +637,5 @@ nm_auth_manager_class_init (NMAuthManagerClass *klass)
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE,
0);
}

View file

@ -30,18 +30,12 @@
#define NM_IS_AUTH_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_AUTH_MANAGER))
#define NM_AUTH_MANAGER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_AUTH_MANAGER, NMAuthManagerClass))
#define NM_AUTH_MANAGER_POLKIT_ENABLED "polkit-enabled"
#define NM_AUTH_MANAGER_SIGNAL_CHANGED "changed"
typedef struct {
GObject parent;
} NMAuthManager;
typedef struct {
GObjectClass parent;
} NMAuthManagerClass;
typedef struct _NMAuthManager NMAuthManager;
typedef struct _NMAuthManagerClass NMAuthManagerClass;
GType nm_auth_manager_get_type (void);
@ -68,4 +62,3 @@ gboolean nm_auth_manager_polkit_authority_check_authorization_finish (NMAuthMana
#endif
#endif /* NM_AUTH_MANAGER_H */

View file

@ -21,6 +21,8 @@
#include "nm-default.h"
#include "nm-bus-manager.h"
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
@ -28,39 +30,29 @@
#include <string.h>
#include "nm-dbus-interface.h"
#include "nm-bus-manager.h"
#include "nm-core-internal.h"
#include "nm-dbus-compat.h"
#include "nm-exported-object.h"
#include "NetworkManagerUtils.h"
#define _NMLOG_DOMAIN LOGD_CORE
#define _NMLOG_PREFIX_NAME "bus-manager"
#define _NMLOG(level, ...) \
G_STMT_START { \
nm_log ((level), _NMLOG_DOMAIN, \
"%s" _NM_UTILS_MACRO_FIRST(__VA_ARGS__), \
_NMLOG_PREFIX_NAME": " \
_NM_UTILS_MACRO_REST(__VA_ARGS__)); \
} G_STMT_END
/* The base path for our GDBusObjectManagerServers. They do not contain
* "NetworkManager" because GDBusObjectManagerServer requires that all
* exported objects be *below* the base path, and eg the Manager object
* is the base path already.
*/
#define OBJECT_MANAGER_SERVER_BASE_PATH "/org/freedesktop"
/*****************************************************************************/
enum {
DBUS_CONNECTION_CHANGED = 0,
PRIVATE_CONNECTION_NEW,
PRIVATE_CONNECTION_DISCONNECTED,
NUMBER_OF_SIGNALS
NUMBER_OF_SIGNALS,
};
static guint signals[NUMBER_OF_SIGNALS];
G_DEFINE_TYPE(NMBusManager, nm_bus_manager, G_TYPE_OBJECT)
#define NM_BUS_MANAGER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), \
NM_TYPE_BUS_MANAGER, \
NMBusManagerPrivate))
typedef struct _PrivateServer PrivateServer;
typedef struct {
GDBusConnection *connection;
GDBusObjectManagerServer *obj_manager;
@ -74,16 +66,38 @@ typedef struct {
guint reconnect_id;
} NMBusManagerPrivate;
struct _NMBusManager {
GObject parent;
NMBusManagerPrivate _priv;
};
struct _NMBusManagerClass {
GObjectClass parent;
};
G_DEFINE_TYPE(NMBusManager, nm_bus_manager, G_TYPE_OBJECT)
#define NM_BUS_MANAGER_GET_PRIVATE(self) _NM_GET_PRIVATE (self, NMBusManager, NM_IS_BUS_MANAGER)
/*****************************************************************************/
#define _NMLOG_DOMAIN LOGD_CORE
#define _NMLOG_PREFIX_NAME "bus-manager"
#define _NMLOG(level, ...) \
G_STMT_START { \
nm_log ((level), _NMLOG_DOMAIN, \
"%s" _NM_UTILS_MACRO_FIRST(__VA_ARGS__), \
_NMLOG_PREFIX_NAME": " \
_NM_UTILS_MACRO_REST(__VA_ARGS__)); \
} G_STMT_END
/*****************************************************************************/
static gboolean nm_bus_manager_init_bus (NMBusManager *self);
static void nm_bus_manager_cleanup (NMBusManager *self);
static void start_reconnection_timeout (NMBusManager *self);
/* The base path for our GDBusObjectManagerServers. They do not contain
* "NetworkManager" because GDBusObjectManagerServer requires that all
* exported objects be *below* the base path, and eg the Manager object
* is the base path already.
*/
#define OBJECT_MANAGER_SERVER_BASE_PATH "/org/freedesktop"
/*****************************************************************************/
NM_DEFINE_SINGLETON_REGISTER (NMBusManager);
@ -115,7 +129,7 @@ nm_bus_manager_setup (NMBusManager *instance)
/*****************************************************************************/
struct _PrivateServer {
typedef struct {
const char *tag;
GQuark detail;
char *address;
@ -133,7 +147,7 @@ struct _PrivateServer {
GHashTable *obj_managers;
NMBusManager *manager;
};
} PrivateServer;
typedef struct {
GDBusConnection *connection;
@ -618,81 +632,6 @@ nm_bus_manager_get_unix_user (NMBusManager *self,
/*****************************************************************************/
static void
nm_bus_manager_init (NMBusManager *self)
{
NMBusManagerPrivate *priv = NM_BUS_MANAGER_GET_PRIVATE (self);
priv->obj_manager = g_dbus_object_manager_server_new (OBJECT_MANAGER_SERVER_BASE_PATH);
}
static void
nm_bus_manager_dispose (GObject *object)
{
NMBusManager *self = NM_BUS_MANAGER (object);
NMBusManagerPrivate *priv = NM_BUS_MANAGER_GET_PRIVATE (self);
GList *exported, *iter;
g_slist_free_full (priv->private_servers, private_server_free);
priv->private_servers = NULL;
nm_bus_manager_cleanup (self);
if (priv->obj_manager) {
/* The ObjectManager owns the last reference to many exported
* objects, and when that reference is dropped the objects unregister
* themselves via nm_bus_manager_unregister_object(). By that time
* priv->obj_manager is already NULL and that prints warnings. Unregister
* them before clearing the ObjectManager instead.
*/
exported = g_dbus_object_manager_get_objects ((GDBusObjectManager *) priv->obj_manager);
for (iter = exported; iter; iter = iter->next) {
nm_bus_manager_unregister_object (self, iter->data);
g_object_unref (iter->data);
}
g_list_free (exported);
g_clear_object (&priv->obj_manager);
}
nm_clear_g_source (&priv->reconnect_id);
G_OBJECT_CLASS (nm_bus_manager_parent_class)->dispose (object);
}
static void
nm_bus_manager_class_init (NMBusManagerClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
g_type_class_add_private (klass, sizeof (NMBusManagerPrivate));
object_class->dispose = nm_bus_manager_dispose;
signals[DBUS_CONNECTION_CHANGED] =
g_signal_new (NM_BUS_MANAGER_DBUS_CONNECTION_CHANGED,
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (NMBusManagerClass, dbus_connection_changed),
NULL, NULL, NULL,
G_TYPE_NONE, 1, G_TYPE_POINTER);
signals[PRIVATE_CONNECTION_NEW] =
g_signal_new (NM_BUS_MANAGER_PRIVATE_CONNECTION_NEW,
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED,
0, NULL, NULL, NULL,
G_TYPE_NONE, 2, G_TYPE_DBUS_CONNECTION, G_TYPE_DBUS_OBJECT_MANAGER_SERVER);
signals[PRIVATE_CONNECTION_DISCONNECTED] =
g_signal_new (NM_BUS_MANAGER_PRIVATE_CONNECTION_DISCONNECTED,
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED,
G_STRUCT_OFFSET (NMBusManagerClass, private_connection_disconnected),
NULL, NULL, NULL,
G_TYPE_NONE, 1, G_TYPE_POINTER);
}
/* Only cleanup a specific dbus connection, not all our private data */
static void
nm_bus_manager_cleanup (NMBusManager *self)
@ -1005,3 +944,78 @@ nm_bus_manager_new_proxy (NMBusManager *self,
}
return proxy;
}
/*****************************************************************************/
static void
nm_bus_manager_init (NMBusManager *self)
{
NMBusManagerPrivate *priv = NM_BUS_MANAGER_GET_PRIVATE (self);
priv->obj_manager = g_dbus_object_manager_server_new (OBJECT_MANAGER_SERVER_BASE_PATH);
}
static void
dispose (GObject *object)
{
NMBusManager *self = NM_BUS_MANAGER (object);
NMBusManagerPrivate *priv = NM_BUS_MANAGER_GET_PRIVATE (self);
GList *exported, *iter;
g_slist_free_full (priv->private_servers, private_server_free);
priv->private_servers = NULL;
nm_bus_manager_cleanup (self);
if (priv->obj_manager) {
/* The ObjectManager owns the last reference to many exported
* objects, and when that reference is dropped the objects unregister
* themselves via nm_bus_manager_unregister_object(). By that time
* priv->obj_manager is already NULL and that prints warnings. Unregister
* them before clearing the ObjectManager instead.
*/
exported = g_dbus_object_manager_get_objects ((GDBusObjectManager *) priv->obj_manager);
for (iter = exported; iter; iter = iter->next) {
nm_bus_manager_unregister_object (self, iter->data);
g_object_unref (iter->data);
}
g_list_free (exported);
g_clear_object (&priv->obj_manager);
}
nm_clear_g_source (&priv->reconnect_id);
G_OBJECT_CLASS (nm_bus_manager_parent_class)->dispose (object);
}
static void
nm_bus_manager_class_init (NMBusManagerClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
object_class->dispose = dispose;
signals[DBUS_CONNECTION_CHANGED] =
g_signal_new (NM_BUS_MANAGER_DBUS_CONNECTION_CHANGED,
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_LAST,
0, NULL, NULL, NULL,
G_TYPE_NONE, 1, G_TYPE_POINTER);
signals[PRIVATE_CONNECTION_NEW] =
g_signal_new (NM_BUS_MANAGER_PRIVATE_CONNECTION_NEW,
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED,
0, NULL, NULL, NULL,
G_TYPE_NONE, 2, G_TYPE_DBUS_CONNECTION, G_TYPE_DBUS_OBJECT_MANAGER_SERVER);
signals[PRIVATE_CONNECTION_DISCONNECTED] =
g_signal_new (NM_BUS_MANAGER_PRIVATE_CONNECTION_DISCONNECTED,
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED,
0, NULL, NULL, NULL,
G_TYPE_NONE, 1, G_TYPE_POINTER);
}

View file

@ -33,23 +33,7 @@
#define NM_BUS_MANAGER_PRIVATE_CONNECTION_NEW "private-connection-new"
#define NM_BUS_MANAGER_PRIVATE_CONNECTION_DISCONNECTED "private-connection-disconnected"
struct _NMBusManager {
GObject parent;
};
typedef struct {
GObjectClass parent;
/* Signals */
void (*dbus_connection_changed) (NMBusManager *mgr,
GDBusConnection *connection);
void (*private_connection_new) (NMBusManager *mgr,
GDBusConnection *connection);
void (*private_connection_disconnected) (NMBusManager *mgr,
GDBusConnection *connection);
} NMBusManagerClass;
typedef struct _NMBusManagerClass NMBusManagerClass;
GType nm_bus_manager_get_type (void);

View file

@ -302,4 +302,3 @@ nm_checkpoint_manager_unref (NMCheckpointManager *self)
g_slice_free (NMCheckpointManager, self);
}

View file

@ -22,6 +22,7 @@
#define __NM_CHECKPOINT_MANAGER_H__
#include "nm-dbus-interface.h"
#include "nm-checkpoint.h"
typedef struct _NMCheckpointManager NMCheckpointManager;
@ -47,4 +48,3 @@ gboolean nm_checkpoint_manager_rollback (NMCheckpointManager *self,
GError **error);
#endif /* __NM_CHECKPOINT_MANAGER_H__ */

View file

@ -19,6 +19,7 @@
*/
#include "nm-default.h"
#include "nm-checkpoint.h"
#include <string.h>
@ -34,6 +35,49 @@
#include "nm-utils.h"
#include "nmdbus-checkpoint.h"
/*****************************************************************************/
typedef struct {
char *original_dev_path;
NMDevice *device;
NMConnection *applied_connection;
NMConnection *settings_connection;
NMDeviceState state;
bool realized:1;
bool unmanaged_explicit:1;
} DeviceCheckpoint;
NM_GOBJECT_PROPERTIES_DEFINE_BASE (
PROP_DEVICES,
PROP_CREATED,
PROP_ROLLBACK_TIMEOUT,
);
typedef struct {
/* properties */
GHashTable *devices;
gint64 created;
guint32 rollback_timeout;
/* private members */
NMManager *manager;
gint64 rollback_ts;
} NMCheckpointPrivate;
struct _NMCheckpoint {
NMExportedObject parent;
NMCheckpointPrivate _priv;
};
struct _NMCheckpointClass {
NMExportedObjectClass parent;
};
G_DEFINE_TYPE (NMCheckpoint, nm_checkpoint, NM_TYPE_EXPORTED_OBJECT)
#define NM_CHECKPOINT_GET_PRIVATE(self) _NM_GET_PRIVATE (self, NMCheckpoint, NM_IS_CHECKPOINT)
/*****************************************************************************/
#define _NMLOG_PREFIX_NAME "checkpoint"
#define _NMLOG_DOMAIN LOGD_CORE
@ -52,44 +96,7 @@
} \
} G_STMT_END
typedef struct {
char *original_dev_path;
NMDevice *device;
NMConnection *applied_connection;
NMConnection *settings_connection;
NMDeviceState state;
bool realized:1;
bool unmanaged_explicit:1;
} DeviceCheckpoint;
typedef struct {
/* properties */
GHashTable *devices;
gint64 created;
guint32 rollback_timeout;
/* private members */
NMManager *manager;
gint64 rollback_ts;
} NMCheckpointPrivate;
struct _NMCheckpoint {
NMExportedObject parent;
NMCheckpointPrivate _priv;
};
typedef struct {
NMExportedObjectClass parent;
} NMCheckpointClass;
G_DEFINE_TYPE (NMCheckpoint, nm_checkpoint, NM_TYPE_EXPORTED_OBJECT)
#define NM_CHECKPOINT_GET_PRIVATE(self) _NM_GET_PRIVATE(self, NMCheckpoint, NM_IS_CHECKPOINT)
NM_GOBJECT_PROPERTIES_DEFINE_BASE (
PROP_DEVICES,
PROP_CREATED,
PROP_ROLLBACK_TIMEOUT,
);
/*****************************************************************************/
guint64
nm_checkpoint_get_rollback_ts (NMCheckpoint *self)
@ -289,6 +296,39 @@ device_checkpoint_destroy (gpointer data)
g_slice_free (DeviceCheckpoint, dev_checkpoint);
}
/*****************************************************************************/
static void
get_property (GObject *object, guint prop_id,
GValue *value, GParamSpec *pspec)
{
NMCheckpoint *self = NM_CHECKPOINT (object);
NMCheckpointPrivate *priv = NM_CHECKPOINT_GET_PRIVATE (self);
gs_free_slist GSList *devices = NULL;
GHashTableIter iter;
NMDevice *device;
switch (prop_id) {
case PROP_DEVICES:
g_hash_table_iter_init (&iter, priv->devices);
while (g_hash_table_iter_next (&iter, (gpointer *) &device, NULL))
devices = g_slist_append (devices, device);
nm_utils_g_value_set_object_path_array (value, devices, NULL, NULL);
break;
case PROP_CREATED:
g_value_set_int64 (value, priv->created);
break;
case PROP_ROLLBACK_TIMEOUT:
g_value_set_uint (value, priv->rollback_timeout);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
/*****************************************************************************/
static void
nm_checkpoint_init (NMCheckpoint *self)
{
@ -355,51 +395,18 @@ dispose (GObject *object)
G_OBJECT_CLASS (nm_checkpoint_parent_class)->dispose (object);
}
static void
get_property (GObject *object, guint prop_id,
GValue *value, GParamSpec *pspec)
{
NMCheckpoint *self = NM_CHECKPOINT (object);
NMCheckpointPrivate *priv = NM_CHECKPOINT_GET_PRIVATE (self);
gs_free_slist GSList *devices = NULL;
GHashTableIter iter;
NMDevice *device;
switch (prop_id) {
case PROP_DEVICES:
g_hash_table_iter_init (&iter, priv->devices);
while (g_hash_table_iter_next (&iter, (gpointer *) &device, NULL))
devices = g_slist_append (devices, device);
nm_utils_g_value_set_object_path_array (value, devices, NULL, NULL);
break;
case PROP_CREATED:
g_value_set_int64 (value, priv->created);
break;
case PROP_ROLLBACK_TIMEOUT:
g_value_set_uint (value, priv->rollback_timeout);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
static void
nm_checkpoint_class_init (NMCheckpointClass *checkpoint_class)
{
GObjectClass *object_class = G_OBJECT_CLASS (checkpoint_class);
NMExportedObjectClass *exported_object_class = NM_EXPORTED_OBJECT_CLASS (checkpoint_class);
g_type_class_add_private (checkpoint_class, sizeof (NMCheckpointPrivate));
exported_object_class->export_path = NM_DBUS_PATH "/Checkpoint/%u";
exported_object_class->export_on_construction = FALSE;
/* virtual methods */
object_class->dispose = dispose;
object_class->get_property = get_property;
/* properties */
obj_properties[PROP_DEVICES] =
g_param_spec_boxed (NM_CHECKPOINT_DEVICES, "", "",
G_TYPE_STRV,

View file

@ -31,12 +31,13 @@
#define NM_IS_CHECKPOINT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_CHECKPOINT))
#define NM_CHECKPOINT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_CHECKPOINT, NMCheckpointClass))
typedef struct _NMCheckpoint NMCheckpoint;
#define NM_CHECKPOINT_DEVICES "devices"
#define NM_CHECKPOINT_CREATED "created"
#define NM_CHECKPOINT_ROLLBACK_TIMEOUT "rollback-timeout"
typedef struct _NMCheckpoint NMCheckpoint;
typedef struct _NMCheckpointClass NMCheckpointClass;
GType nm_checkpoint_get_type (void);
NMCheckpoint *nm_checkpoint_new (NMManager *manager, GPtrArray *devices, guint32 rollback_timeout,

View file

@ -30,6 +30,8 @@
#include "nm-core-internal.h"
#include "nm-keyfile-internal.h"
/*****************************************************************************/
typedef struct {
char *group_name;
gboolean stop_match;
@ -42,6 +44,33 @@ typedef struct {
} match_device;
} MatchSectionInfo;
struct _NMGlobalDnsDomain {
char *name;
char **servers;
char **options;
};
struct _NMGlobalDnsConfig {
char **searches;
char **options;
GHashTable *domains;
char **domain_list;
gboolean internal;
};
/*****************************************************************************/
NM_GOBJECT_PROPERTIES_DEFINE_BASE (
PROP_CONFIG_MAIN_FILE,
PROP_CONFIG_DESCRIPTION,
PROP_KEYFILE_USER,
PROP_KEYFILE_INTERN,
PROP_CONNECTIVITY_URI,
PROP_CONNECTIVITY_INTERVAL,
PROP_CONNECTIVITY_RESPONSE,
PROP_NO_AUTO_DEFAULT,
);
typedef struct {
char *config_main_file;
char *config_description;
@ -82,38 +111,18 @@ typedef struct {
char *value_cached;
} NMConfigDataPrivate;
struct _NMGlobalDnsDomain {
char *name;
char **servers;
char **options;
struct _NMConfigData {
GObject parent;
NMConfigDataPrivate _priv;
};
struct _NMGlobalDnsConfig {
char **searches;
char **options;
GHashTable *domains;
char **domain_list;
gboolean internal;
struct _NMConfigDataClass {
GObjectClass parent;
};
enum {
PROP_0,
PROP_CONFIG_MAIN_FILE,
PROP_CONFIG_DESCRIPTION,
PROP_KEYFILE_USER,
PROP_KEYFILE_INTERN,
PROP_CONNECTIVITY_URI,
PROP_CONNECTIVITY_INTERVAL,
PROP_CONNECTIVITY_RESPONSE,
PROP_NO_AUTO_DEFAULT,
LAST_PROP
};
G_DEFINE_TYPE (NMConfigData, nm_config_data, G_TYPE_OBJECT)
#define NM_CONFIG_DATA_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_CONFIG_DATA, NMConfigDataPrivate))
#define NM_CONFIG_DATA_GET_PRIVATE(self) _NM_GET_PRIVATE (self, NMConfigData, NM_IS_CONFIG_DATA)
/*****************************************************************************/
@ -162,7 +171,7 @@ nm_config_data_get_value (const NMConfigData *self, const char *group, const cha
const char *nm_config_data_get_value_cached (const NMConfigData *self, const char *group, const char *key, NMConfigGetValueFlags flags)
{
NMConfigDataPrivate *priv;
const NMConfigDataPrivate *priv;
g_return_val_if_fail (NM_IS_CONFIG_DATA (self), NULL);
g_return_val_if_fail (group && *group, NULL);
@ -171,8 +180,8 @@ const char *nm_config_data_get_value_cached (const NMConfigData *self, const cha
priv = NM_CONFIG_DATA_GET_PRIVATE (self);
/* we modify @value_cached. In C++ jargon, the field is mutable. */
g_free (priv->value_cached);
priv->value_cached = nm_config_keyfile_get_value (priv->keyfile, group, key, flags);
g_free (((NMConfigDataPrivate *) priv)->value_cached);
((NMConfigDataPrivate *) priv)->value_cached = nm_config_keyfile_get_value (priv->keyfile, group, key, flags);
return priv->value_cached;
}
@ -243,7 +252,7 @@ nm_config_data_get_no_auto_default (const NMConfigData *self)
gboolean
nm_config_data_get_no_auto_default_for_device (const NMConfigData *self, NMDevice *device)
{
NMConfigDataPrivate *priv;
const NMConfigDataPrivate *priv;
g_return_val_if_fail (NM_IS_CONFIG_DATA (self), FALSE);
g_return_val_if_fail (NM_IS_DEVICE (device), FALSE);
@ -297,7 +306,7 @@ nm_config_data_get_assume_ipv6ll_only (const NMConfigData *self, NMDevice *devic
GKeyFile *
nm_config_data_clone_keyfile_intern (const NMConfigData *self)
{
NMConfigDataPrivate *priv;
const NMConfigDataPrivate *priv;
GKeyFile *keyfile;
g_return_val_if_fail (NM_IS_CONFIG_DATA (self), FALSE);
@ -373,7 +382,7 @@ nm_config_data_get_keys (const NMConfigData *self, const char *group)
gboolean
nm_config_data_is_intern_atomic_group (const NMConfigData *self, const char *group)
{
NMConfigDataPrivate *priv;
const NMConfigDataPrivate *priv;
g_return_val_if_fail (NM_IS_CONFIG_DATA (self), FALSE);
g_return_val_if_fail (group && *group, FALSE);
@ -532,7 +541,7 @@ nm_config_data_log (const NMConfigData *self,
const char *key_prefix,
/* FILE* */ gpointer print_stream)
{
NMConfigDataPrivate *priv;
const NMConfigDataPrivate *priv;
gs_strfreev char **groups = NULL;
gsize ngroups;
guint g, k;
@ -1127,7 +1136,7 @@ nm_config_data_get_device_config (const NMConfigData *self,
NMDevice *device,
gboolean *has_match)
{
NMConfigDataPrivate *priv;
const NMConfigDataPrivate *priv;
const MatchSectionInfo *connection_info;
char *value = NULL;
@ -1166,7 +1175,7 @@ nm_config_data_get_connection_default (const NMConfigData *self,
const char *property,
NMDevice *device)
{
NMConfigDataPrivate *priv;
const NMConfigDataPrivate *priv;
char *value = NULL;
g_return_val_if_fail (self, NULL);
@ -1409,47 +1418,7 @@ set_property (GObject *object,
}
}
static void
dispose (GObject *object)
{
}
static void
finalize (GObject *gobject)
{
NMConfigDataPrivate *priv = NM_CONFIG_DATA_GET_PRIVATE (gobject);
g_free (priv->config_main_file);
g_free (priv->config_description);
g_free (priv->connectivity.uri);
g_free (priv->connectivity.response);
g_slist_free_full (priv->no_auto_default.specs, g_free);
g_slist_free_full (priv->no_auto_default.specs_config, g_free);
g_strfreev (priv->no_auto_default.arr);
g_free (priv->dns_mode);
g_free (priv->rc_manager);
g_slist_free_full (priv->ignore_carrier, g_free);
g_slist_free_full (priv->assume_ipv6ll_only, g_free);
nm_global_dns_config_free (priv->global_dns);
_match_section_infos_free (priv->connection_infos);
_match_section_infos_free (priv->device_infos);
g_key_file_unref (priv->keyfile);
if (priv->keyfile_user)
g_key_file_unref (priv->keyfile_user);
if (priv->keyfile_intern)
g_key_file_unref (priv->keyfile_intern);
G_OBJECT_CLASS (nm_config_data_parent_class)->finalize (gobject);
g_free (priv->value_cached);
}
/*****************************************************************************/
static void
nm_config_data_init (NMConfigData *self)
@ -1513,7 +1482,7 @@ nm_config_data_new (const char *config_main_file,
NMConfigData *
nm_config_data_new_update_keyfile_intern (const NMConfigData *base, GKeyFile *keyfile_intern)
{
NMConfigDataPrivate *priv = NM_CONFIG_DATA_GET_PRIVATE (base);
const NMConfigDataPrivate *priv = NM_CONFIG_DATA_GET_PRIVATE (base);
return g_object_new (NM_TYPE_CONFIG_DATA,
NM_CONFIG_DATA_CONFIG_MAIN_FILE, priv->config_main_file,
@ -1528,7 +1497,7 @@ NMConfigData *
nm_config_data_new_update_no_auto_default (const NMConfigData *base,
const char *const*no_auto_default)
{
NMConfigDataPrivate *priv = NM_CONFIG_DATA_GET_PRIVATE (base);
const NMConfigDataPrivate *priv = NM_CONFIG_DATA_GET_PRIVATE (base);
return g_object_new (NM_TYPE_CONFIG_DATA,
NM_CONFIG_DATA_CONFIG_MAIN_FILE, priv->config_main_file,
@ -1539,79 +1508,105 @@ nm_config_data_new_update_no_auto_default (const NMConfigData *base,
NULL);
}
static void
finalize (GObject *gobject)
{
NMConfigDataPrivate *priv = NM_CONFIG_DATA_GET_PRIVATE ((NMConfigData *) gobject);
g_free (priv->config_main_file);
g_free (priv->config_description);
g_free (priv->connectivity.uri);
g_free (priv->connectivity.response);
g_slist_free_full (priv->no_auto_default.specs, g_free);
g_slist_free_full (priv->no_auto_default.specs_config, g_free);
g_strfreev (priv->no_auto_default.arr);
g_free (priv->dns_mode);
g_free (priv->rc_manager);
g_slist_free_full (priv->ignore_carrier, g_free);
g_slist_free_full (priv->assume_ipv6ll_only, g_free);
nm_global_dns_config_free (priv->global_dns);
_match_section_infos_free (priv->connection_infos);
_match_section_infos_free (priv->device_infos);
g_key_file_unref (priv->keyfile);
if (priv->keyfile_user)
g_key_file_unref (priv->keyfile_user);
if (priv->keyfile_intern)
g_key_file_unref (priv->keyfile_intern);
G_OBJECT_CLASS (nm_config_data_parent_class)->finalize (gobject);
g_free (priv->value_cached);
}
static void
nm_config_data_class_init (NMConfigDataClass *config_class)
{
GObjectClass *object_class = G_OBJECT_CLASS (config_class);
g_type_class_add_private (config_class, sizeof (NMConfigDataPrivate));
object_class->constructed = constructed;
object_class->dispose = dispose;
object_class->finalize = finalize;
object_class->get_property = get_property;
object_class->set_property = set_property;
g_object_class_install_property
(object_class, PROP_CONFIG_MAIN_FILE,
obj_properties[PROP_CONFIG_MAIN_FILE] =
g_param_spec_string (NM_CONFIG_DATA_CONFIG_MAIN_FILE, "", "",
NULL,
G_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS));
G_PARAM_STATIC_STRINGS);
g_object_class_install_property
(object_class, PROP_CONFIG_DESCRIPTION,
obj_properties[PROP_CONFIG_DESCRIPTION] =
g_param_spec_string (NM_CONFIG_DATA_CONFIG_DESCRIPTION, "", "",
NULL,
G_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS));
G_PARAM_STATIC_STRINGS);
g_object_class_install_property
(object_class, PROP_KEYFILE_USER,
g_param_spec_boxed (NM_CONFIG_DATA_KEYFILE_USER, "", "",
G_TYPE_KEY_FILE,
G_PARAM_WRITABLE |
G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS));
obj_properties[PROP_KEYFILE_USER] =
g_param_spec_boxed (NM_CONFIG_DATA_KEYFILE_USER, "", "",
G_TYPE_KEY_FILE,
G_PARAM_WRITABLE |
G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS);
g_object_class_install_property
(object_class, PROP_KEYFILE_INTERN,
g_param_spec_boxed (NM_CONFIG_DATA_KEYFILE_INTERN, "", "",
G_TYPE_KEY_FILE,
G_PARAM_WRITABLE |
G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS));
obj_properties[PROP_KEYFILE_INTERN] =
g_param_spec_boxed (NM_CONFIG_DATA_KEYFILE_INTERN, "", "",
G_TYPE_KEY_FILE,
G_PARAM_WRITABLE |
G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS);
g_object_class_install_property
(object_class, PROP_CONNECTIVITY_URI,
obj_properties[PROP_CONNECTIVITY_URI] =
g_param_spec_string (NM_CONFIG_DATA_CONNECTIVITY_URI, "", "",
NULL,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS));
G_PARAM_STATIC_STRINGS);
g_object_class_install_property
(object_class, PROP_CONNECTIVITY_INTERVAL,
obj_properties[PROP_CONNECTIVITY_INTERVAL] =
g_param_spec_uint (NM_CONFIG_DATA_CONNECTIVITY_INTERVAL, "", "",
0, G_MAXUINT, 0,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS));
G_PARAM_STATIC_STRINGS);
g_object_class_install_property
(object_class, PROP_CONNECTIVITY_RESPONSE,
obj_properties[PROP_CONNECTIVITY_RESPONSE] =
g_param_spec_string (NM_CONFIG_DATA_CONNECTIVITY_RESPONSE, "", "",
NULL,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS));
G_PARAM_STATIC_STRINGS);
g_object_class_install_property
(object_class, PROP_NO_AUTO_DEFAULT,
obj_properties[PROP_NO_AUTO_DEFAULT] =
g_param_spec_boxed (NM_CONFIG_DATA_NO_AUTO_DEFAULT, "", "",
G_TYPE_STRV,
G_PARAM_WRITABLE |
G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS));
G_PARAM_STATIC_STRINGS);
g_object_class_install_properties (object_class, _PROPERTY_ENUMS_LAST, obj_properties);
}

View file

@ -28,7 +28,6 @@
#define NM_IS_CONFIG_DATA_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_CONFIG_DATA))
#define NM_CONFIG_DATA_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_CONFIG_DATA, NMConfigDataClass))
#define NM_CONFIG_DATA_CONFIG_MAIN_FILE "config-main-file"
#define NM_CONFIG_DATA_CONFIG_DESCRIPTION "config-description"
#define NM_CONFIG_DATA_KEYFILE_USER "keyfile-user"
@ -128,13 +127,7 @@ typedef enum { /*< flags >*/
} NMConfigChangeFlags;
struct _NMConfigData {
GObject parent;
};
typedef struct {
GObjectClass parent;
} NMConfigDataClass;
typedef struct _NMConfigDataClass NMConfigDataClass;
typedef struct _NMGlobalDnsConfig NMGlobalDnsConfig;
typedef struct _NMGlobalDnsDomain NMGlobalDnsDomain;

View file

@ -43,17 +43,6 @@
/*****************************************************************************/
#define _NMLOG_PREFIX_NAME "config"
#define _NMLOG_DOMAIN LOGD_CORE
#define _NMLOG(level, ...) \
nm_log (level, _NMLOG_DOMAIN, \
"%s: " _NM_UTILS_MACRO_FIRST(__VA_ARGS__), \
_NMLOG_PREFIX_NAME \
_NM_UTILS_MACRO_REST(__VA_ARGS__))
/*****************************************************************************/
struct NMConfigCmdLineOptions {
char *config_main_file;
char *intern_config_file;
@ -77,6 +66,20 @@ typedef struct {
NMConfigState p;
} State;
/*****************************************************************************/
NM_GOBJECT_PROPERTIES_DEFINE_BASE (
PROP_CMD_LINE_OPTIONS,
PROP_ATOMIC_SECTION_PREFIXES,
);
enum {
SIGNAL_CONFIG_CHANGED,
LAST_SIGNAL,
};
static guint signals[LAST_SIGNAL] = { 0 };
typedef struct {
NMConfigCmdLineOptions cli;
@ -116,29 +119,33 @@ typedef struct {
State *state;
} NMConfigPrivate;
enum {
PROP_0,
PROP_CMD_LINE_OPTIONS,
PROP_ATOMIC_SECTION_PREFIXES,
LAST_PROP,
struct _NMConfig {
GObject parent;
NMConfigPrivate _priv;
};
enum {
SIGNAL_CONFIG_CHANGED,
LAST_SIGNAL
struct _NMConfigClass {
GObjectClass parent;
};
static guint signals[LAST_SIGNAL] = { 0 };
static void nm_config_initable_iface_init (GInitableIface *iface);
G_DEFINE_TYPE_WITH_CODE (NMConfig, nm_config, G_TYPE_OBJECT,
G_IMPLEMENT_INTERFACE (G_TYPE_INITABLE, nm_config_initable_iface_init);
)
#define NM_CONFIG_GET_PRIVATE(self) _NM_GET_PRIVATE (self, NMConfig, NM_IS_CONFIG)
#define NM_CONFIG_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_CONFIG, NMConfigPrivate))
/*****************************************************************************/
#define _NMLOG_PREFIX_NAME "config"
#define _NMLOG_DOMAIN LOGD_CORE
#define _NMLOG(level, ...) \
nm_log (level, _NMLOG_DOMAIN, \
"%s: " _NM_UTILS_MACRO_FIRST(__VA_ARGS__), \
_NMLOG_PREFIX_NAME \
_NM_UTILS_MACRO_REST(__VA_ARGS__))
/*****************************************************************************/
@ -162,7 +169,7 @@ nm_config_parse_boolean (const char *str,
}
gint
nm_config_keyfile_get_boolean (GKeyFile *keyfile,
nm_config_keyfile_get_boolean (const GKeyFile *keyfile,
const char *section,
const char *key,
gint default_value)
@ -173,12 +180,12 @@ nm_config_keyfile_get_boolean (GKeyFile *keyfile,
g_return_val_if_fail (section != NULL, default_value);
g_return_val_if_fail (key != NULL, default_value);
str = g_key_file_get_value (keyfile, section, key, NULL);
str = g_key_file_get_value ((GKeyFile *) keyfile, section, key, NULL);
return nm_config_parse_boolean (str, default_value);
}
char *
nm_config_keyfile_get_value (GKeyFile *keyfile,
nm_config_keyfile_get_value (const GKeyFile *keyfile,
const char *section,
const char *key,
NMConfigGetValueFlags flags)
@ -186,9 +193,9 @@ nm_config_keyfile_get_value (GKeyFile *keyfile,
char *value;
if (NM_FLAGS_HAS (flags, NM_CONFIG_GET_VALUE_RAW))
value = g_key_file_get_value (keyfile, section, key, NULL);
value = g_key_file_get_value ((GKeyFile *) keyfile, section, key, NULL);
else
value = g_key_file_get_string (keyfile, section, key, NULL);
value = g_key_file_get_string ((GKeyFile *) keyfile, section, key, NULL);
if (!value)
return NULL;
@ -2208,6 +2215,37 @@ nm_config_setup (const NMConfigCmdLineOptions *cli, char **atomic_section_prefix
return singleton_instance;
}
/*****************************************************************************/
static void
set_property (GObject *object, guint prop_id,
const GValue *value, GParamSpec *pspec)
{
NMConfig *self = NM_CONFIG (object);
NMConfigPrivate *priv = NM_CONFIG_GET_PRIVATE (self);
NMConfigCmdLineOptions *cli;
switch (prop_id) {
case PROP_CMD_LINE_OPTIONS:
/* construct only */
cli = g_value_get_pointer (value);
if (!cli)
_nm_config_cmd_line_options_clear (&priv->cli);
else
_nm_config_cmd_line_options_copy (cli, &priv->cli);
break;
case PROP_ATOMIC_SECTION_PREFIXES:
/* construct only */
priv->atomic_section_prefixes = g_strdupv (g_value_get_boxed (value));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
/*****************************************************************************/
static gboolean
init_sync (GInitable *initable, GCancellable *cancellable, GError **error)
{
@ -2306,6 +2344,16 @@ init_sync (GInitable *initable, GCancellable *cancellable, GError **error)
return TRUE;
}
/*****************************************************************************/
static void
nm_config_init (NMConfig *config)
{
NMConfigPrivate *priv = NM_CONFIG_GET_PRIVATE (config);
priv->auth_polkit = NM_CONFIG_DEFAULT_AUTH_POLKIT;
}
NMConfig *
nm_config_new (const NMConfigCmdLineOptions *cli, char **atomic_section_prefixes, GError **error)
{
@ -2317,18 +2365,10 @@ nm_config_new (const NMConfigCmdLineOptions *cli, char **atomic_section_prefixes
NULL));
}
static void
nm_config_init (NMConfig *config)
{
NMConfigPrivate *priv = NM_CONFIG_GET_PRIVATE (config);
priv->auth_polkit = NM_CONFIG_DEFAULT_AUTH_POLKIT;
}
static void
finalize (GObject *gobject)
{
NMConfigPrivate *priv = NM_CONFIG_GET_PRIVATE (gobject);
NMConfigPrivate *priv = NM_CONFIG_GET_PRIVATE ((NMConfig *) gobject);
state_free (priv->state);
@ -2351,56 +2391,28 @@ finalize (GObject *gobject)
G_OBJECT_CLASS (nm_config_parent_class)->finalize (gobject);
}
static void
set_property (GObject *object, guint prop_id,
const GValue *value, GParamSpec *pspec)
{
NMConfig *self = NM_CONFIG (object);
NMConfigPrivate *priv = NM_CONFIG_GET_PRIVATE (self);
NMConfigCmdLineOptions *cli;
switch (prop_id) {
case PROP_CMD_LINE_OPTIONS:
/* construct only */
cli = g_value_get_pointer (value);
if (!cli)
_nm_config_cmd_line_options_clear (&priv->cli);
else
_nm_config_cmd_line_options_copy (cli, &priv->cli);
break;
case PROP_ATOMIC_SECTION_PREFIXES:
/* construct only */
priv->atomic_section_prefixes = g_strdupv (g_value_get_boxed (value));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
static void
nm_config_class_init (NMConfigClass *config_class)
{
GObjectClass *object_class = G_OBJECT_CLASS (config_class);
g_type_class_add_private (config_class, sizeof (NMConfigPrivate));
object_class->finalize = finalize;
object_class->set_property = set_property;
g_object_class_install_property
(object_class, PROP_CMD_LINE_OPTIONS,
obj_properties[PROP_CMD_LINE_OPTIONS] =
g_param_spec_pointer (NM_CONFIG_CMD_LINE_OPTIONS, "", "",
G_PARAM_WRITABLE |
G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS));
G_PARAM_STATIC_STRINGS);
g_object_class_install_property
(object_class, PROP_ATOMIC_SECTION_PREFIXES,
obj_properties[PROP_ATOMIC_SECTION_PREFIXES] =
g_param_spec_boxed (NM_CONFIG_ATOMIC_SECTION_PREFIXES, "", "",
G_TYPE_STRV,
G_PARAM_WRITABLE |
G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS));
G_PARAM_STATIC_STRINGS);
g_object_class_install_properties (object_class, _PROPERTY_ENUMS_LAST, obj_properties);
signals[SIGNAL_CONFIG_CHANGED] =
g_signal_new (NM_CONFIG_SIGNAL_CONFIG_CHANGED,
@ -2426,4 +2438,3 @@ nm_config_initable_iface_init (GInitableIface *iface)
{
iface->init = init_sync;
}

View file

@ -100,13 +100,7 @@ typedef struct {
bool dirty;
} NMConfigState;
struct _NMConfig {
GObject parent;
};
typedef struct {
GObjectClass parent;
} NMConfigClass;
typedef struct _NMConfigClass NMConfigClass;
GType nm_config_get_type (void);
@ -160,11 +154,11 @@ void _nm_config_state_set (NMConfig *config,
gint nm_config_parse_boolean (const char *str, gint default_value);
GKeyFile *nm_config_create_keyfile (void);
gint nm_config_keyfile_get_boolean (GKeyFile *keyfile,
gint nm_config_keyfile_get_boolean (const GKeyFile *keyfile,
const char *section,
const char *key,
gint default_value);
char *nm_config_keyfile_get_value (GKeyFile *keyfile,
char *nm_config_keyfile_get_value (const GKeyFile *keyfile,
const char *section,
const char *key,
NMConfigGetValueFlags flags);
@ -215,4 +209,3 @@ void nm_config_device_state_prune_unseen (NMConfig *self, GHashTable *seen_ifind
/*****************************************************************************/
#endif /* __NETWORKMANAGER_CONFIG_H__ */

View file

@ -21,28 +21,25 @@
#include "nm-default.h"
#include "nm-connectivity.h"
#include <string.h>
#if WITH_CONCHECK
#include <libsoup/soup.h>
#endif
#include "nm-connectivity.h"
#include "nm-config.h"
#include "nm-dispatcher.h"
#include "NetworkManagerUtils.h"
G_DEFINE_TYPE (NMConnectivity, nm_connectivity, G_TYPE_OBJECT)
/*****************************************************************************/
#define NM_CONNECTIVITY_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_CONNECTIVITY, NMConnectivityPrivate))
#define _NMLOG_DOMAIN LOGD_CONCHECK
#define _NMLOG(level, ...) \
G_STMT_START { \
nm_log ((level), (_NMLOG_DOMAIN), \
"%s" _NM_UTILS_MACRO_FIRST(__VA_ARGS__), \
"connectivity: " \
_NM_UTILS_MACRO_REST(__VA_ARGS__)); \
} G_STMT_END
NM_GOBJECT_PROPERTIES_DEFINE (NMConnectivity,
PROP_URI,
PROP_INTERVAL,
PROP_RESPONSE,
PROP_STATE,
);
typedef struct {
char *uri;
@ -59,15 +56,31 @@ typedef struct {
NMConnectivityState state;
} NMConnectivityPrivate;
enum {
PROP_0,
PROP_URI,
PROP_INTERVAL,
PROP_RESPONSE,
PROP_STATE,
LAST_PROP
struct _NMConnectivity {
GObject parent;
NMConnectivityPrivate _priv;
};
struct _NMConnectivityClass {
GObjectClass parent;
};
G_DEFINE_TYPE (NMConnectivity, nm_connectivity, G_TYPE_OBJECT)
#define NM_CONNECTIVITY_GET_PRIVATE(self) _NM_GET_PRIVATE (self, NMConnectivity, NM_IS_CONNECTIVITY)
/*****************************************************************************/
#define _NMLOG_DOMAIN LOGD_CONCHECK
#define _NMLOG(level, ...) \
G_STMT_START { \
nm_log ((level), (_NMLOG_DOMAIN), \
"%s" _NM_UTILS_MACRO_FIRST(__VA_ARGS__), \
"connectivity: " \
_NM_UTILS_MACRO_REST(__VA_ARGS__)); \
} G_STMT_END
/*****************************************************************************/
NMConnectivityState
nm_connectivity_get_state (NMConnectivity *connectivity)
@ -96,7 +109,7 @@ update_state (NMConnectivity *self, NMConnectivityState state)
nm_connectivity_state_to_string (priv->state),
nm_connectivity_state_to_string (state));
priv->state = state;
g_object_notify (G_OBJECT (self), NM_CONNECTIVITY_STATE);
_notify (self, PROP_STATE);
/* Notify dispatcher scripts of a connectivity state change */
nm_dispatcher_call_connectivity (DISPATCHER_ACTION_CONNECTIVITY_CHANGE, state);
@ -331,16 +344,33 @@ nm_connectivity_check_finish (NMConnectivity *self,
/*****************************************************************************/
NMConnectivity *
nm_connectivity_new (const char *uri,
guint interval,
const char *response)
static void
get_property (GObject *object, guint property_id,
GValue *value, GParamSpec *pspec)
{
return g_object_new (NM_TYPE_CONNECTIVITY,
NM_CONNECTIVITY_URI, uri,
NM_CONNECTIVITY_INTERVAL, interval,
NM_CONNECTIVITY_RESPONSE, response,
NULL);
NMConnectivity *self = NM_CONNECTIVITY (object);
NMConnectivityPrivate *priv = NM_CONNECTIVITY_GET_PRIVATE (self);
switch (property_id) {
case PROP_URI:
g_value_set_string (value, priv->uri);
break;
case PROP_INTERVAL:
g_value_set_uint (value, priv->interval);
break;
case PROP_RESPONSE:
if (priv->response)
g_value_set_string (value, priv->response);
else
g_value_set_static_string (value, NM_CONFIG_DEFAULT_CONNECTIVITY_RESPONSE);
break;
case PROP_STATE:
g_value_set_uint (value, priv->state);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
break;
}
}
static void
@ -403,35 +433,7 @@ set_property (GObject *object, guint property_id,
}
}
static void
get_property (GObject *object, guint property_id,
GValue *value, GParamSpec *pspec)
{
NMConnectivity *self = NM_CONNECTIVITY (object);
NMConnectivityPrivate *priv = NM_CONNECTIVITY_GET_PRIVATE (self);
switch (property_id) {
case PROP_URI:
g_value_set_string (value, priv->uri);
break;
case PROP_INTERVAL:
g_value_set_uint (value, priv->interval);
break;
case PROP_RESPONSE:
if (priv->response)
g_value_set_string (value, priv->response);
else
g_value_set_static_string (value, NM_CONFIG_DEFAULT_CONNECTIVITY_RESPONSE);
break;
case PROP_STATE:
g_value_set_uint (value, priv->state);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
break;
}
}
/*****************************************************************************/
static void
nm_connectivity_init (NMConnectivity *self)
@ -444,6 +446,17 @@ nm_connectivity_init (NMConnectivity *self)
priv->state = NM_CONNECTIVITY_NONE;
}
NMConnectivity *
nm_connectivity_new (const char *uri,
guint interval,
const char *response)
{
return g_object_new (NM_TYPE_CONNECTIVITY,
NM_CONNECTIVITY_URI, uri,
NM_CONNECTIVITY_INTERVAL, interval,
NM_CONNECTIVITY_RESPONSE, response,
NULL);
}
static void
dispose (GObject *object)
@ -466,48 +479,42 @@ dispose (GObject *object)
G_OBJECT_CLASS (nm_connectivity_parent_class)->dispose (object);
}
static void
nm_connectivity_class_init (NMConnectivityClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
g_type_class_add_private (klass, sizeof (NMConnectivityPrivate));
/* virtual methods */
object_class->set_property = set_property;
object_class->get_property = get_property;
object_class->dispose = dispose;
/* properties */
g_object_class_install_property
(object_class, PROP_URI,
obj_properties[PROP_URI] =
g_param_spec_string (NM_CONNECTIVITY_URI, "", "",
NULL,
G_PARAM_READWRITE |
G_PARAM_CONSTRUCT |
G_PARAM_STATIC_STRINGS));
G_PARAM_STATIC_STRINGS);
g_object_class_install_property
(object_class, PROP_INTERVAL,
obj_properties[PROP_INTERVAL] =
g_param_spec_uint (NM_CONNECTIVITY_INTERVAL, "", "",
0, G_MAXUINT, NM_CONFIG_DEFAULT_CONNECTIVITY_INTERVAL,
G_PARAM_READWRITE |
G_PARAM_CONSTRUCT |
G_PARAM_STATIC_STRINGS));
G_PARAM_STATIC_STRINGS);
g_object_class_install_property
(object_class, PROP_RESPONSE,
obj_properties[PROP_RESPONSE] =
g_param_spec_string (NM_CONNECTIVITY_RESPONSE, "", "",
NM_CONFIG_DEFAULT_CONNECTIVITY_RESPONSE,
G_PARAM_READWRITE |
G_PARAM_CONSTRUCT |
G_PARAM_STATIC_STRINGS));
G_PARAM_STATIC_STRINGS);
g_object_class_install_property
(object_class, PROP_STATE,
obj_properties[PROP_STATE] =
g_param_spec_uint (NM_CONNECTIVITY_STATE, "", "",
NM_CONNECTIVITY_UNKNOWN, NM_CONNECTIVITY_FULL, NM_CONNECTIVITY_UNKNOWN,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS));
G_PARAM_STATIC_STRINGS);
g_object_class_install_properties (object_class, _PROPERTY_ENUMS_LAST, obj_properties);
}

View file

@ -30,19 +30,12 @@
#define NM_IS_CONNECTIVITY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_CONNECTIVITY))
#define NM_CONNECTIVITY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_CONNECTIVITY, NMConnectivityClass))
/* Properties */
#define NM_CONNECTIVITY_URI "uri"
#define NM_CONNECTIVITY_INTERVAL "interval"
#define NM_CONNECTIVITY_RESPONSE "response"
#define NM_CONNECTIVITY_STATE "state"
struct _NMConnectivity {
GObject parent;
};
typedef struct {
GObjectClass parent;
} NMConnectivityClass;
typedef struct _NMConnectivityClass NMConnectivityClass;
GType nm_connectivity_get_type (void);

View file

@ -21,9 +21,10 @@
#include "nm-default.h"
#include "nm-default-route-manager.h"
#include <string.h>
#include "nm-default-route-manager.h"
#include "nm-device.h"
#include "nm-vpn-connection.h"
#include "nm-platform.h"
@ -32,6 +33,12 @@
#include "nm-ip6-config.h"
#include "nm-act-request.h"
/*****************************************************************************/
NM_GOBJECT_PROPERTIES_DEFINE_BASE (
PROP_PLATFORM,
);
typedef struct {
GPtrArray *entries_ip4;
GPtrArray *entries_ip6;
@ -54,16 +61,23 @@ typedef struct {
NMPlatform *platform;
} NMDefaultRouteManagerPrivate;
#define NM_DEFAULT_ROUTE_MANAGER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DEFAULT_ROUTE_MANAGER, NMDefaultRouteManagerPrivate))
struct _NMDefaultRouteManager {
GObject parent;
NMDefaultRouteManagerPrivate _priv;
};
struct _NMDefaultRouteManagerClass {
GObjectClass parent;
};
G_DEFINE_TYPE (NMDefaultRouteManager, nm_default_route_manager, G_TYPE_OBJECT)
NM_GOBJECT_PROPERTIES_DEFINE_BASE (
PROP_PLATFORM,
);
#define NM_DEFAULT_ROUTE_MANAGER_GET_PRIVATE(self) _NM_GET_PRIVATE (self, NMDefaultRouteManager, NM_IS_DEFAULT_ROUTE_MANAGER)
NM_DEFINE_SINGLETON_GETTER (NMDefaultRouteManager, nm_default_route_manager_get, NM_TYPE_DEFAULT_ROUTE_MANAGER);
/*****************************************************************************/
#define _NMLOG_PREFIX_NAME "default-route"
#undef _NMLOG_ENABLED
#define _NMLOG_ENABLED(level, addr_family) \
@ -1397,6 +1411,8 @@ set_property (GObject *object, guint prop_id,
}
}
/*****************************************************************************/
static void
nm_default_route_manager_init (NMDefaultRouteManager *self)
{
@ -1464,9 +1480,6 @@ nm_default_route_manager_class_init (NMDefaultRouteManagerClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
g_type_class_add_private (klass, sizeof (NMDefaultRouteManagerPrivate));
/* virtual methods */
object_class->constructed = constructed;
object_class->dispose = dispose;
object_class->set_property = set_property;
@ -1477,7 +1490,6 @@ nm_default_route_manager_class_init (NMDefaultRouteManagerClass *klass)
G_PARAM_WRITABLE |
G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS);
g_object_class_install_properties (object_class, _PROPERTY_ENUMS_LAST, obj_properties);
}

View file

@ -32,13 +32,7 @@
#define NM_DEFAULT_ROUTE_MANAGER_PLATFORM "platform"
struct _NMDefaultRouteManager {
GObject parent;
};
typedef struct {
GObjectClass parent;
} NMDefaultRouteManagerClass;
typedef struct _NMDefaultRouteManagerClass NMDefaultRouteManagerClass;
GType nm_default_route_manager_get_type (void);
@ -68,4 +62,3 @@ NMIP6Config *nm_default_route_manager_ip6_get_best_config (NMDefaultRouteManager
NMVpnConnection **out_vpn);
#endif /* NM_DEFAULT_ROUTE_MANAGER_H */

View file

@ -20,36 +20,40 @@
#include "nm-default.h"
#include "nm-dhcp4-config.h"
#include <string.h>
#include "nm-dbus-interface.h"
#include "nm-dhcp4-config.h"
#include "nm-utils.h"
#include "nm-exported-object.h"
#include "nmdbus-dhcp4-config.h"
G_DEFINE_TYPE (NMDhcp4Config, nm_dhcp4_config, NM_TYPE_EXPORTED_OBJECT)
/*****************************************************************************/
#define NM_DHCP4_CONFIG_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DHCP4_CONFIG, NMDhcp4ConfigPrivate))
NM_GOBJECT_PROPERTIES_DEFINE (NMDhcp4Config,
PROP_OPTIONS,
);
typedef struct {
GVariant *options;
} NMDhcp4ConfigPrivate;
enum {
PROP_0,
PROP_OPTIONS,
LAST_PROP
struct _NMDhcp4Config {
NMExportedObject parent;
NMDhcp4ConfigPrivate _priv;
};
struct _NMDhcp4ConfigClass {
NMExportedObjectClass parent;
};
NMDhcp4Config *
nm_dhcp4_config_new (void)
{
return NM_DHCP4_CONFIG (g_object_new (NM_TYPE_DHCP4_CONFIG, NULL));
}
G_DEFINE_TYPE (NMDhcp4Config, nm_dhcp4_config, NM_TYPE_EXPORTED_OBJECT)
#define NM_DHCP4_CONFIG_GET_PRIVATE(self) _NM_GET_PRIVATE (self, NMDhcp4Config, NM_IS_DHCP4_CONFIG)
/*****************************************************************************/
void
nm_dhcp4_config_set_options (NMDhcp4Config *self,
@ -72,7 +76,7 @@ nm_dhcp4_config_set_options (NMDhcp4Config *self,
priv->options = g_variant_builder_end (&builder);
g_variant_ref_sink (priv->options);
g_object_notify (G_OBJECT (self), NM_DHCP4_CONFIG_OPTIONS);
_notify (self, PROP_OPTIONS);
}
const char *
@ -98,30 +102,13 @@ nm_dhcp4_config_get_options (NMDhcp4Config *self)
return g_variant_ref (NM_DHCP4_CONFIG_GET_PRIVATE (self)->options);
}
static void
nm_dhcp4_config_init (NMDhcp4Config *self)
{
NMDhcp4ConfigPrivate *priv = NM_DHCP4_CONFIG_GET_PRIVATE (self);
priv->options = g_variant_new_array (G_VARIANT_TYPE ("{sv}"), NULL, 0);
g_variant_ref_sink (priv->options);
}
static void
finalize (GObject *object)
{
NMDhcp4ConfigPrivate *priv = NM_DHCP4_CONFIG_GET_PRIVATE (object);
g_variant_unref (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)
GValue *value, GParamSpec *pspec)
{
NMDhcp4ConfigPrivate *priv = NM_DHCP4_CONFIG_GET_PRIVATE (object);
NMDhcp4ConfigPrivate *priv = NM_DHCP4_CONFIG_GET_PRIVATE ((NMDhcp4Config *) object);
switch (prop_id) {
case PROP_OPTIONS:
@ -133,29 +120,53 @@ get_property (GObject *object, guint prop_id,
}
}
/*****************************************************************************/
static void
nm_dhcp4_config_init (NMDhcp4Config *self)
{
NMDhcp4ConfigPrivate *priv = NM_DHCP4_CONFIG_GET_PRIVATE (self);
priv->options = g_variant_new_array (G_VARIANT_TYPE ("{sv}"), NULL, 0);
g_variant_ref_sink (priv->options);
}
NMDhcp4Config *
nm_dhcp4_config_new (void)
{
return NM_DHCP4_CONFIG (g_object_new (NM_TYPE_DHCP4_CONFIG, NULL));
}
static void
finalize (GObject *object)
{
NMDhcp4ConfigPrivate *priv = NM_DHCP4_CONFIG_GET_PRIVATE ((NMDhcp4Config *) object);
g_variant_unref (priv->options);
G_OBJECT_CLASS (nm_dhcp4_config_parent_class)->finalize (object);
}
static void
nm_dhcp4_config_class_init (NMDhcp4ConfigClass *config_class)
{
GObjectClass *object_class = G_OBJECT_CLASS (config_class);
NMExportedObjectClass *exported_object_class = NM_EXPORTED_OBJECT_CLASS (config_class);
g_type_class_add_private (config_class, sizeof (NMDhcp4ConfigPrivate));
object_class->get_property = get_property;
object_class->finalize = finalize;
exported_object_class->export_path = NM_DBUS_PATH "/DHCP4Config/%u";
exported_object_class->export_on_construction = TRUE;
/* virtual methods */
object_class->get_property = get_property;
object_class->finalize = finalize;
obj_properties[PROP_OPTIONS] =
g_param_spec_variant (NM_DHCP4_CONFIG_OPTIONS, "", "",
G_VARIANT_TYPE ("a{sv}"),
NULL,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS);
/* properties */
g_object_class_install_property
(object_class, PROP_OPTIONS,
g_param_spec_variant (NM_DHCP4_CONFIG_OPTIONS, "", "",
G_VARIANT_TYPE ("a{sv}"),
NULL,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS));
g_object_class_install_properties (object_class, _PROPERTY_ENUMS_LAST, obj_properties);
nm_exported_object_class_add_interface (NM_EXPORTED_OBJECT_CLASS (config_class),
NMDBUS_TYPE_DHCP4_CONFIG_SKELETON,

View file

@ -21,8 +21,6 @@
#ifndef __NETWORKMANAGER_DHCP4_CONFIG_H__
#define __NETWORKMANAGER_DHCP4_CONFIG_H__
#include "nm-exported-object.h"
#define NM_TYPE_DHCP4_CONFIG (nm_dhcp4_config_get_type ())
#define NM_DHCP4_CONFIG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_DHCP4_CONFIG, NMDhcp4Config))
#define NM_DHCP4_CONFIG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_DHCP4_CONFIG, NMDhcp4ConfigClass))
@ -30,17 +28,10 @@
#define NM_IS_DHCP4_CONFIG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_DHCP4_CONFIG))
#define NM_DHCP4_CONFIG_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_DHCP4_CONFIG, NMDhcp4ConfigClass))
struct _NMDhcp4Config {
NMExportedObject parent;
};
typedef struct {
NMExportedObjectClass parent;
} NMDhcp4ConfigClass;
#define NM_DHCP4_CONFIG_OPTIONS "options"
typedef struct _NMDhcp4ConfigClass NMDhcp4ConfigClass;
GType nm_dhcp4_config_get_type (void);
NMDhcp4Config *nm_dhcp4_config_new (void);

View file

@ -20,36 +20,40 @@
#include "nm-default.h"
#include "nm-dhcp6-config.h"
#include <string.h>
#include "nm-dbus-interface.h"
#include "nm-dhcp6-config.h"
#include "nm-utils.h"
#include "nm-exported-object.h"
#include "nmdbus-dhcp6-config.h"
G_DEFINE_TYPE (NMDhcp6Config, nm_dhcp6_config, NM_TYPE_EXPORTED_OBJECT)
/*****************************************************************************/
#define NM_DHCP6_CONFIG_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DHCP6_CONFIG, NMDhcp6ConfigPrivate))
NM_GOBJECT_PROPERTIES_DEFINE (NMDhcp6Config,
PROP_OPTIONS,
);
typedef struct {
GVariant *options;
} NMDhcp6ConfigPrivate;
enum {
PROP_0,
PROP_OPTIONS,
LAST_PROP
struct _NMDhcp6Config {
NMExportedObject parent;
NMDhcp6ConfigPrivate _priv;
};
struct _NMDhcp6ConfigClass {
NMExportedObjectClass parent;
};
NMDhcp6Config *
nm_dhcp6_config_new (void)
{
return NM_DHCP6_CONFIG (g_object_new (NM_TYPE_DHCP6_CONFIG, NULL));
}
G_DEFINE_TYPE (NMDhcp6Config, nm_dhcp6_config, NM_TYPE_EXPORTED_OBJECT)
#define NM_DHCP6_CONFIG_GET_PRIVATE(self) _NM_GET_PRIVATE (self, NMDhcp6Config, NM_IS_DHCP6_CONFIG)
/*****************************************************************************/
void
nm_dhcp6_config_set_options (NMDhcp6Config *self,
@ -72,7 +76,7 @@ nm_dhcp6_config_set_options (NMDhcp6Config *self,
priv->options = g_variant_builder_end (&builder);
g_variant_ref_sink (priv->options);
g_object_notify (G_OBJECT (self), NM_DHCP6_CONFIG_OPTIONS);
_notify (self, PROP_OPTIONS);
}
const char *
@ -98,30 +102,13 @@ nm_dhcp6_config_get_options (NMDhcp6Config *self)
return g_variant_ref (NM_DHCP6_CONFIG_GET_PRIVATE (self)->options);
}
static void
nm_dhcp6_config_init (NMDhcp6Config *self)
{
NMDhcp6ConfigPrivate *priv = NM_DHCP6_CONFIG_GET_PRIVATE (self);
priv->options = g_variant_new_array (G_VARIANT_TYPE ("{sv}"), NULL, 0);
g_variant_ref_sink (priv->options);
}
static void
finalize (GObject *object)
{
NMDhcp6ConfigPrivate *priv = NM_DHCP6_CONFIG_GET_PRIVATE (object);
g_variant_unref (priv->options);
G_OBJECT_CLASS (nm_dhcp6_config_parent_class)->finalize (object);
}
/*****************************************************************************/
static void
get_property (GObject *object, guint prop_id,
GValue *value, GParamSpec *pspec)
GValue *value, GParamSpec *pspec)
{
NMDhcp6ConfigPrivate *priv = NM_DHCP6_CONFIG_GET_PRIVATE (object);
NMDhcp6ConfigPrivate *priv = NM_DHCP6_CONFIG_GET_PRIVATE ((NMDhcp6Config *) object);
switch (prop_id) {
case PROP_OPTIONS:
@ -133,29 +120,51 @@ get_property (GObject *object, guint prop_id,
}
}
static void
nm_dhcp6_config_init (NMDhcp6Config *self)
{
NMDhcp6ConfigPrivate *priv = NM_DHCP6_CONFIG_GET_PRIVATE (self);
priv->options = g_variant_new_array (G_VARIANT_TYPE ("{sv}"), NULL, 0);
g_variant_ref_sink (priv->options);
}
NMDhcp6Config *
nm_dhcp6_config_new (void)
{
return NM_DHCP6_CONFIG (g_object_new (NM_TYPE_DHCP6_CONFIG, NULL));
}
static void
finalize (GObject *object)
{
NMDhcp6ConfigPrivate *priv = NM_DHCP6_CONFIG_GET_PRIVATE ((NMDhcp6Config *) object);
g_variant_unref (priv->options);
G_OBJECT_CLASS (nm_dhcp6_config_parent_class)->finalize (object);
}
static void
nm_dhcp6_config_class_init (NMDhcp6ConfigClass *config_class)
{
GObjectClass *object_class = G_OBJECT_CLASS (config_class);
NMExportedObjectClass *exported_object_class = NM_EXPORTED_OBJECT_CLASS (config_class);
g_type_class_add_private (config_class, sizeof (NMDhcp6ConfigPrivate));
object_class->get_property = get_property;
object_class->finalize = finalize;
exported_object_class->export_path = NM_DBUS_PATH "/DHCP6Config/%u";
exported_object_class->export_on_construction = TRUE;
/* virtual methods */
object_class->get_property = get_property;
object_class->finalize = finalize;
obj_properties[PROP_OPTIONS] =
g_param_spec_variant (NM_DHCP6_CONFIG_OPTIONS, "", "",
G_VARIANT_TYPE ("a{sv}"),
NULL,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS);
/* properties */
g_object_class_install_property
(object_class, PROP_OPTIONS,
g_param_spec_variant (NM_DHCP6_CONFIG_OPTIONS, "", "",
G_VARIANT_TYPE ("a{sv}"),
NULL,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS));
g_object_class_install_properties (object_class, _PROPERTY_ENUMS_LAST, obj_properties);
nm_exported_object_class_add_interface (NM_EXPORTED_OBJECT_CLASS (config_class),
NMDBUS_TYPE_DHCP6_CONFIG_SKELETON,

View file

@ -21,8 +21,6 @@
#ifndef __NETWORKMANAGER_DHCP6_CONFIG_H__
#define __NETWORKMANAGER_DHCP6_CONFIG_H__
#include "nm-exported-object.h"
#define NM_TYPE_DHCP6_CONFIG (nm_dhcp6_config_get_type ())
#define NM_DHCP6_CONFIG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_DHCP6_CONFIG, NMDhcp6Config))
#define NM_DHCP6_CONFIG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_DHCP6_CONFIG, NMDhcp6ConfigClass))
@ -30,17 +28,10 @@
#define NM_IS_DHCP6_CONFIG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_DHCP6_CONFIG))
#define NM_DHCP6_CONFIG_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_DHCP6_CONFIG, NMDhcp6ConfigClass))
struct _NMDhcp6Config {
NMExportedObject parent;
};
typedef struct {
NMExportedObjectClass parent;
} NMDhcp6ConfigClass;
#define NM_DHCP6_CONFIG_OPTIONS "options"
typedef struct _NMDhcp6ConfigClass NMDhcp6ConfigClass;
GType nm_dhcp6_config_get_type (void);
NMDhcp6Config *nm_dhcp6_config_new (void);

View file

@ -995,7 +995,7 @@ constructed (GObject *object)
}
static void
nm_exported_object_dispose (GObject *object)
dispose (GObject *object)
{
NMExportedObjectPrivate *priv = NM_EXPORTED_OBJECT_GET_PRIVATE (NM_EXPORTED_OBJECT (object));
@ -1024,7 +1024,5 @@ nm_exported_object_class_init (NMExportedObjectClass *klass)
object_class->constructed = constructed;
object_class->notify = nm_exported_object_notify;
object_class->dispose = nm_exported_object_dispose;
object_class->dispose = dispose;
}

View file

@ -26,19 +26,19 @@
#include "NetworkManagerUtils.h"
#define NM_FIREWALL_MANAGER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), \
NM_TYPE_FIREWALL_MANAGER, \
NMFirewallManagerPrivate))
/*****************************************************************************/
G_DEFINE_TYPE (NMFirewallManager, nm_firewall_manager, G_TYPE_OBJECT)
/* Properties */
enum {
PROP_0 = 0,
NM_GOBJECT_PROPERTIES_DEFINE (NMFirewallManager,
PROP_AVAILABLE,
LAST_PROP
);
enum {
STARTED,
LAST_SIGNAL
};
static guint signals[LAST_SIGNAL] = { 0 };
typedef struct {
GDBusProxy * proxy;
gboolean running;
@ -46,13 +46,20 @@ typedef struct {
GHashTable *pending_calls;
} NMFirewallManagerPrivate;
enum {
STARTED,
LAST_SIGNAL
struct _NMFirewallManager {
GObject parent;
NMFirewallManagerPrivate _priv;
};
static guint signals[LAST_SIGNAL] = { 0 };
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);
@ -406,7 +413,7 @@ set_running (NMFirewallManager *self, gboolean now_running)
priv->running = now_running;
if (old_running != priv->running)
g_object_notify (G_OBJECT (self), NM_FIREWALL_MANAGER_AVAILABLE);
_notify (self, PROP_AVAILABLE);
}
static void
@ -430,6 +437,21 @@ name_owner_changed (GObject *object,
/*****************************************************************************/
static void
get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
{
switch (prop_id) {
case PROP_AVAILABLE:
g_value_set_boolean (value, NM_FIREWALL_MANAGER_GET_PRIVATE ((NMFirewallManager *) object)->running);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
/*****************************************************************************/
static void
nm_firewall_manager_init (NMFirewallManager * self)
{
@ -456,31 +478,17 @@ constructed (GObject *object)
FIREWALL_DBUS_PATH,
FIREWALL_DBUS_INTERFACE_ZONE,
NULL, &error);
if (priv->proxy) {
if (priv->proxy) {
g_signal_connect (priv->proxy, "notify::g-name-owner",
G_CALLBACK (name_owner_changed), self);
G_CALLBACK (name_owner_changed), self);
owner = g_dbus_proxy_get_name_owner (priv->proxy);
priv->running = (owner != NULL);
} else {
_LOGW (NULL, "could not connect to system D-Bus (%s)", error->message);
}
} else
_LOGW (NULL, "could not connect to system D-Bus (%s)", error->message);
_LOGD (NULL, "firewall constructed (%srunning)", priv->running ? "" : "not");
}
static void
get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
{
switch (prop_id) {
case PROP_AVAILABLE:
g_value_set_boolean (value, NM_FIREWALL_MANAGER_GET_PRIVATE (object)->running);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
static void
dispose (GObject *object)
{
@ -497,7 +505,6 @@ dispose (GObject *object)
g_clear_object (&priv->proxy);
/* Chain up to the parent class */
G_OBJECT_CLASS (nm_firewall_manager_parent_class)->dispose (object);
}
@ -506,27 +513,24 @@ nm_firewall_manager_class_init (NMFirewallManagerClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
g_type_class_add_private (object_class, sizeof (NMFirewallManagerPrivate));
object_class->constructed = constructed;
object_class->get_property = get_property;
object_class->dispose = dispose;
g_object_class_install_property
(object_class, PROP_AVAILABLE,
obj_properties[PROP_AVAILABLE] =
g_param_spec_boolean (NM_FIREWALL_MANAGER_AVAILABLE, "", "",
FALSE,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS));
G_PARAM_STATIC_STRINGS);
g_object_class_install_properties (object_class, _PROPERTY_ENUMS_LAST, obj_properties);
signals[STARTED] =
g_signal_new (NM_FIREWALL_MANAGER_STARTED,
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (NMFirewallManagerClass, started),
0,
NULL, NULL,
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE, 0);
}

View file

@ -26,30 +26,21 @@
#define FIREWALL_DBUS_INTERFACE "org.fedoraproject.FirewallD1"
#define FIREWALL_DBUS_INTERFACE_ZONE "org.fedoraproject.FirewallD1.zone"
#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))
#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))
#define NM_FIREWALL_MANAGER_AVAILABLE "available"
#define NM_FIREWALL_MANAGER_STARTED "started"
struct _NMFirewallManagerCallId;
typedef struct _NMFirewallManagerCallId *NMFirewallManagerCallId;
typedef struct {
GObject parent;
} NMFirewallManager;
typedef struct {
GObjectClass parent;
/* Signals */
void (*started) (NMFirewallManager *manager);
} NMFirewallManagerClass;
typedef struct _NMFirewallManager NMFirewallManager;
typedef struct _NMFirewallManagerClass NMFirewallManagerClass;
GType nm_firewall_manager_get_type (void);

Some files were not shown because too many files have changed in this diff Show more