mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-02-03 12:30:32 +01:00
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:
parent
92e9822e1b
commit
4d37f7a1e9
145 changed files with 4637 additions and 4706 deletions
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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__ */
|
||||
|
||||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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 \
|
||||
|
|
|
|||
|
|
@ -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 */
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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__ */
|
||||
|
||||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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__ */
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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__ */
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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__ */
|
||||
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
)
|
||||
|
||||
);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
)
|
||||
|
||||
);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@ typedef struct {
|
|||
} NMDeviceEthernet;
|
||||
|
||||
typedef struct {
|
||||
NMDeviceClass parent_class;
|
||||
NMDeviceClass parent;
|
||||
} NMDeviceEthernetClass;
|
||||
|
||||
GType nm_device_ethernet_get_type (void);
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
)
|
||||
|
||||
)
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
)
|
||||
);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
)
|
||||
|
||||
);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
)
|
||||
);
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -51,7 +51,7 @@ struct _NMDeviceVeth {
|
|||
};
|
||||
|
||||
struct _NMDeviceVethClass {
|
||||
NMDeviceEthernetClass parent_class;
|
||||
NMDeviceEthernetClass parent;
|
||||
};
|
||||
|
||||
NM_GOBJECT_PROPERTIES_DEFINE (NMDeviceVeth,
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
)
|
||||
|
||||
);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
)
|
||||
);
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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),
|
||||
|
|
|
|||
|
|
@ -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 \
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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__ */
|
||||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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__ */
|
||||
|
|
@ -52,7 +52,7 @@ struct _NMDhcpListener {
|
|||
};
|
||||
|
||||
struct _NMDhcpListenerClass {
|
||||
GObjectClass parent_class;
|
||||
GObjectClass parent;
|
||||
};
|
||||
|
||||
enum {
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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__ */
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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__ */
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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__ */
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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),
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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 */
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -302,4 +302,3 @@ nm_checkpoint_manager_unref (NMCheckpointManager *self)
|
|||
|
||||
g_slice_free (NMCheckpointManager, self);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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__ */
|
||||
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
155
src/nm-config.c
155
src/nm-config.c
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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__ */
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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 */
|
||||
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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
Loading…
Add table
Reference in a new issue