diff options
author | Beniamino Galvani <bgalvani@redhat.com> | 2015-11-10 22:03:57 +0100 |
---|---|---|
committer | Beniamino Galvani <bgalvani@redhat.com> | 2015-11-25 11:39:57 +0100 |
commit | 8ca6e412c1c0214603503521b6461e47b13be373 (patch) | |
tree | 796befc3d92afe088f3721926eab579d4ac436fc | |
parent | 33e76cf0e04534e8ebb278f518b2ed2ec69d4d15 (diff) | |
download | NetworkManager-8ca6e412c1c0214603503521b6461e47b13be373.tar.gz |
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.
-rw-r--r-- | introspection/nm-device-tun.xml | 6 | ||||
-rw-r--r-- | libnm-glib/nm-device-generic.c | 30 | ||||
-rw-r--r-- | libnm-glib/nm-device.c | 1 | ||||
-rw-r--r-- | libnm-util/NetworkManager.h | 2 |
4 files changed, 37 insertions, 2 deletions
diff --git a/introspection/nm-device-tun.xml b/introspection/nm-device-tun.xml index 8b0f81fbc6..2b3ae2f521 100644 --- a/introspection/nm-device-tun.xml +++ b/introspection/nm-device-tun.xml @@ -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> diff --git a/libnm-glib/nm-device-generic.c b/libnm-glib/nm-device-generic.c index a17a67355a..a7b2fa04dd 100644 --- a/libnm-glib/nm-device-generic.c +++ b/libnm-glib/nm-device-generic.c @@ -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 diff --git a/libnm-glib/nm-device.c b/libnm-glib/nm-device.c index 7731183e7b..aac94fb1dc 100644 --- a/libnm-glib/nm-device.c +++ b/libnm-glib/nm-device.c @@ -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); diff --git a/libnm-util/NetworkManager.h b/libnm-util/NetworkManager.h index d83e4ab5a5..71862c42eb 100644 --- a/libnm-util/NetworkManager.h +++ b/libnm-util/NetworkManager.h @@ -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; /** |