libnm-glib: add support for TUN devices

Since libnm is the preferred way to interact with NM now, we don't
want to add new device types to libnm-glib.

Make libnm-glib recognize TUN devices as generic ones and modify
NMDeviceGeneric to use the correct D-Bus interface based on the actual
device type.
This commit is contained in:
Beniamino Galvani 2015-11-10 22:03:57 +01:00
parent 33e76cf0e0
commit 8ca6e412c1
4 changed files with 37 additions and 2 deletions

View file

@ -43,6 +43,12 @@
</tp:docstring>
</property>
<property name="HwAddress" type="s" access="read">
<tp:docstring>
Hardware address of the device.
</tp:docstring>
</property>
<signal name="PropertiesChanged">
<arg name="properties" type="a{sv}" tp:type="String_Variant_Map">
<tp:docstring>

View file

@ -184,15 +184,41 @@ register_properties (NMDeviceGeneric *device)
property_info);
}
static const char *
_device_type_to_interface (NMDeviceType type)
{
switch (type) {
case NM_DEVICE_TYPE_GENERIC:
return NM_DBUS_INTERFACE_DEVICE_GENERIC;
case NM_DEVICE_TYPE_TUN:
return NM_DBUS_INTERFACE_DEVICE_TUN;
default:
return NULL;
}
}
static void
constructed (GObject *object)
{
NMDeviceGenericPrivate *priv = NM_DEVICE_GENERIC_GET_PRIVATE (object);
NMDeviceType type;
DBusGConnection *connection;
const char *path, *interface;
G_OBJECT_CLASS (nm_device_generic_parent_class)->constructed (object);
priv->proxy = _nm_object_new_proxy (NM_OBJECT (object), NULL, NM_DBUS_INTERFACE_DEVICE_GENERIC);
register_properties (NM_DEVICE_GENERIC (object));
g_object_get (object,
NM_OBJECT_DBUS_CONNECTION, &connection,
NM_OBJECT_DBUS_PATH, &path,
NULL);
type = _nm_device_type_for_path (connection, path);
interface = _device_type_to_interface (type);
if (interface) {
priv->proxy = _nm_object_new_proxy (NM_OBJECT (object), NULL, interface);
register_properties (NM_DEVICE_GENERIC (object));
}
}
static void

View file

@ -320,6 +320,7 @@ _nm_device_gtype_from_dtype (NMDeviceType dtype)
case NM_DEVICE_TYPE_VLAN:
return NM_TYPE_DEVICE_VLAN;
case NM_DEVICE_TYPE_GENERIC:
case NM_DEVICE_TYPE_TUN:
return NM_TYPE_DEVICE_GENERIC;
default:
g_warning ("Unknown device type %d", dtype);

View file

@ -151,6 +151,7 @@ typedef enum {
* @NM_DEVICE_TYPE_ADSL: ADSL modem
* @NM_DEVICE_TYPE_BRIDGE: a bridge master interface
* @NM_DEVICE_TYPE_TEAM: a team master interface
* @NM_DEVICE_TYPE_TUN: a TUN/TAP interface
*
* #NMDeviceType values indicate the type of hardware represented by
* an #NMDevice.
@ -174,6 +175,7 @@ typedef enum {
NM_DEVICE_TYPE_BRIDGE = 13,
NM_DEVICE_TYPE_GENERIC = 14,
NM_DEVICE_TYPE_TEAM = 15,
NM_DEVICE_TYPE_TUN = 16,
} NMDeviceType;
/**