mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2025-12-28 06:20:10 +01:00
core: make NMDeviceTun 'mode' immutable and set at construct time
The 'mode' must be known from the beginning and changing it later on would not be supported/meaningful. So, enforce this by setting the property at construct time only. https://bugzilla.redhat.com/show_bug.cgi?id=1034737 Signed-off-by: Thomas Haller <thaller@redhat.com>
This commit is contained in:
parent
4b2533fc00
commit
ffc3d9ced6
1 changed files with 40 additions and 4 deletions
|
|
@ -37,6 +37,7 @@ G_DEFINE_TYPE (NMDeviceTun, nm_device_tun, NM_TYPE_DEVICE_GENERIC)
|
|||
|
||||
typedef struct {
|
||||
NMPlatformTunProperties props;
|
||||
const char *mode;
|
||||
guint delay_tun_get_properties_id;
|
||||
} NMDeviceTunPrivate;
|
||||
|
||||
|
|
@ -72,8 +73,6 @@ reload_tun_properties (NMDeviceTun *device)
|
|||
g_object_notify (object, NM_DEVICE_TUN_OWNER);
|
||||
if (priv->props.group != props.group)
|
||||
g_object_notify (object, NM_DEVICE_TUN_GROUP);
|
||||
if (g_strcmp0 (priv->props.mode, props.mode) != 0)
|
||||
g_object_notify (object, NM_DEVICE_TUN_MODE);
|
||||
if (priv->props.no_pi != props.no_pi)
|
||||
g_object_notify (object, NM_DEVICE_TUN_NO_PI);
|
||||
if (priv->props.vnet_hdr != props.vnet_hdr)
|
||||
|
|
@ -112,12 +111,21 @@ delay_tun_get_properties_cb (gpointer user_data)
|
|||
NMDevice *
|
||||
nm_device_tun_new (NMPlatformLink *platform_device)
|
||||
{
|
||||
const char *mode = NULL;
|
||||
|
||||
g_return_val_if_fail (platform_device != NULL, NULL);
|
||||
|
||||
if (platform_device->type == NM_LINK_TYPE_TUN)
|
||||
mode = "tun";
|
||||
else if (platform_device->type == NM_LINK_TYPE_TAP)
|
||||
mode = "tap";
|
||||
g_return_val_if_fail (mode != NULL, NULL);
|
||||
|
||||
return (NMDevice *) g_object_new (NM_TYPE_DEVICE_TUN,
|
||||
NM_DEVICE_PLATFORM_DEVICE, platform_device,
|
||||
NM_DEVICE_TYPE_DESC, "Tun",
|
||||
NM_DEVICE_DEVICE_TYPE, NM_DEVICE_TYPE_GENERIC,
|
||||
NM_DEVICE_TUN_MODE, mode,
|
||||
NULL);
|
||||
}
|
||||
|
||||
|
|
@ -172,7 +180,7 @@ get_property (GObject *object, guint prop_id,
|
|||
g_value_set_uint (value, priv->props.group);
|
||||
break;
|
||||
case PROP_MODE:
|
||||
g_value_set_string (value, priv->props.mode);
|
||||
g_value_set_string (value, priv->mode);
|
||||
break;
|
||||
case PROP_NO_PI:
|
||||
g_value_set_boolean (value, priv->props.no_pi);
|
||||
|
|
@ -189,6 +197,33 @@ get_property (GObject *object, guint prop_id,
|
|||
}
|
||||
}
|
||||
|
||||
static void
|
||||
set_property (GObject *object, guint prop_id,
|
||||
const GValue *value, GParamSpec *pspec)
|
||||
{
|
||||
NMDeviceTun *self = NM_DEVICE_TUN (object);
|
||||
NMDeviceTunPrivate *priv = NM_DEVICE_TUN_GET_PRIVATE (self);
|
||||
const char *str;
|
||||
|
||||
switch (prop_id) {
|
||||
case PROP_MODE:
|
||||
/* construct-only */
|
||||
str = g_value_get_string (value);
|
||||
|
||||
/* mode is G_PARAM_STATIC_STRINGS */
|
||||
if (g_strcmp0 (str, "tun") == 0)
|
||||
priv->mode = "tun";
|
||||
else if (g_strcmp0 (str, "tap") == 0)
|
||||
priv->mode = "tap";
|
||||
else
|
||||
g_return_if_fail (FALSE);
|
||||
break;
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
nm_device_tun_class_init (NMDeviceTunClass *klass)
|
||||
{
|
||||
|
|
@ -199,6 +234,7 @@ nm_device_tun_class_init (NMDeviceTunClass *klass)
|
|||
|
||||
object_class->constructed = constructed;
|
||||
object_class->get_property = get_property;
|
||||
object_class->set_property = set_property;
|
||||
object_class->dispose = dispose;
|
||||
|
||||
device_class->link_changed = link_changed;
|
||||
|
|
@ -226,7 +262,7 @@ nm_device_tun_class_init (NMDeviceTunClass *klass)
|
|||
"Mode",
|
||||
"Mode",
|
||||
"tun",
|
||||
G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
|
||||
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS));
|
||||
|
||||
g_object_class_install_property
|
||||
(object_class, PROP_NO_PI,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue