diff options
| author | Sebastien Bacher <seb128@ubuntu.com> | 2021-01-11 18:07:03 +0100 |
|---|---|---|
| committer | Sebastien Bacher <seb128@ubuntu.com> | 2021-01-11 18:15:57 +0100 |
| commit | 2567f558da3eb9911678227d4aeb15162e707d89 (patch) | |
| tree | 13c80b0e091c8ba585b14b966cda998f95f1936d /libnm-core/nm-setting-macvlan.c | |
| parent | 02d99ffd62ede29cffcb45fcbe33d044b7406d3a (diff) | |
| parent | f54032b30e1ddd84f10a339e0caf493772e049a7 (diff) | |
Merge branch 'debian/master' into ubuntu/master
Diffstat (limited to 'libnm-core/nm-setting-macvlan.c')
| -rw-r--r-- | libnm-core/nm-setting-macvlan.c | 408 |
1 files changed, 205 insertions, 203 deletions
diff --git a/libnm-core/nm-setting-macvlan.c b/libnm-core/nm-setting-macvlan.c index cbaadd3f..eed137c3 100644 --- a/libnm-core/nm-setting-macvlan.c +++ b/libnm-core/nm-setting-macvlan.c @@ -1,4 +1,4 @@ -// SPDX-License-Identifier: LGPL-2.1+ +/* SPDX-License-Identifier: LGPL-2.1+ */ /* * Copyright (C) 2015 Red Hat, Inc. */ @@ -25,23 +25,19 @@ /*****************************************************************************/ -NM_GOBJECT_PROPERTIES_DEFINE_BASE ( - PROP_PARENT, - PROP_MODE, - PROP_PROMISCUOUS, - PROP_TAP, -); +NM_GOBJECT_PROPERTIES_DEFINE_BASE(PROP_PARENT, PROP_MODE, PROP_PROMISCUOUS, PROP_TAP, ); typedef struct { - char *parent; - NMSettingMacvlanMode mode; - bool promiscuous:1; - bool tap:1; + char * parent; + NMSettingMacvlanMode mode; + bool promiscuous : 1; + bool tap : 1; } NMSettingMacvlanPrivate; -G_DEFINE_TYPE (NMSettingMacvlan, nm_setting_macvlan, NM_TYPE_SETTING) +G_DEFINE_TYPE(NMSettingMacvlan, nm_setting_macvlan, NM_TYPE_SETTING) -#define NM_SETTING_MACVLAN_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING_MACVLAN, NMSettingMacvlanPrivate)) +#define NM_SETTING_MACVLAN_GET_PRIVATE(o) \ + (G_TYPE_INSTANCE_GET_PRIVATE((o), NM_TYPE_SETTING_MACVLAN, NMSettingMacvlanPrivate)) /*****************************************************************************/ @@ -54,10 +50,10 @@ G_DEFINE_TYPE (NMSettingMacvlan, nm_setting_macvlan, NM_TYPE_SETTING) * Since: 1.2 **/ const char * -nm_setting_macvlan_get_parent (NMSettingMacvlan *setting) +nm_setting_macvlan_get_parent(NMSettingMacvlan *setting) { - g_return_val_if_fail (NM_IS_SETTING_MACVLAN (setting), NULL); - return NM_SETTING_MACVLAN_GET_PRIVATE (setting)->parent; + g_return_val_if_fail(NM_IS_SETTING_MACVLAN(setting), NULL); + return NM_SETTING_MACVLAN_GET_PRIVATE(setting)->parent; } /** @@ -69,10 +65,10 @@ nm_setting_macvlan_get_parent (NMSettingMacvlan *setting) * Since: 1.2 **/ NMSettingMacvlanMode -nm_setting_macvlan_get_mode (NMSettingMacvlan *setting) +nm_setting_macvlan_get_mode(NMSettingMacvlan *setting) { - g_return_val_if_fail (NM_IS_SETTING_MACVLAN (setting), NM_SETTING_MACVLAN_MODE_UNKNOWN); - return NM_SETTING_MACVLAN_GET_PRIVATE (setting)->mode; + g_return_val_if_fail(NM_IS_SETTING_MACVLAN(setting), NM_SETTING_MACVLAN_MODE_UNKNOWN); + return NM_SETTING_MACVLAN_GET_PRIVATE(setting)->mode; } /** @@ -84,10 +80,10 @@ nm_setting_macvlan_get_mode (NMSettingMacvlan *setting) * Since: 1.2 **/ gboolean -nm_setting_macvlan_get_promiscuous (NMSettingMacvlan *setting) +nm_setting_macvlan_get_promiscuous(NMSettingMacvlan *setting) { - g_return_val_if_fail (NM_IS_SETTING_MACVLAN (setting), FALSE); - return NM_SETTING_MACVLAN_GET_PRIVATE (setting)->promiscuous; + g_return_val_if_fail(NM_IS_SETTING_MACVLAN(setting), FALSE); + return NM_SETTING_MACVLAN_GET_PRIVATE(setting)->promiscuous; } /** @@ -99,129 +95,133 @@ nm_setting_macvlan_get_promiscuous (NMSettingMacvlan *setting) * Since: 1.2 **/ gboolean -nm_setting_macvlan_get_tap (NMSettingMacvlan *setting) +nm_setting_macvlan_get_tap(NMSettingMacvlan *setting) { - g_return_val_if_fail (NM_IS_SETTING_MACVLAN (setting), FALSE); - return NM_SETTING_MACVLAN_GET_PRIVATE (setting)->tap; + g_return_val_if_fail(NM_IS_SETTING_MACVLAN(setting), FALSE); + return NM_SETTING_MACVLAN_GET_PRIVATE(setting)->tap; } /*****************************************************************************/ static gboolean -verify (NMSetting *setting, NMConnection *connection, GError **error) +verify(NMSetting *setting, NMConnection *connection, GError **error) { - NMSettingMacvlanPrivate *priv = NM_SETTING_MACVLAN_GET_PRIVATE (setting); - NMSettingWired *s_wired; - - if (connection) - s_wired = nm_connection_get_setting_wired (connection); - else - s_wired = NULL; - - if (priv->parent) { - if ( !nm_utils_is_uuid (priv->parent) - && !nm_utils_ifname_valid_kernel (priv->parent, NULL)) { - g_set_error (error, - NM_CONNECTION_ERROR, - NM_CONNECTION_ERROR_INVALID_PROPERTY, - _("'%s' is neither an UUID nor an interface name"), - priv->parent); - g_prefix_error (error, "%s.%s: ", NM_SETTING_MACVLAN_SETTING_NAME, NM_SETTING_MACVLAN_PARENT); - return FALSE; - } - } else { - /* If parent is NULL, the parent must be specified via - * NMSettingWired:mac-address. - */ - if ( connection - && (!s_wired || !nm_setting_wired_get_mac_address (s_wired))) { - g_set_error (error, - NM_CONNECTION_ERROR, - NM_CONNECTION_ERROR_MISSING_PROPERTY, - _("property is not specified and neither is '%s:%s'"), - NM_SETTING_WIRED_SETTING_NAME, NM_SETTING_WIRED_MAC_ADDRESS); - g_prefix_error (error, "%s.%s: ", NM_SETTING_MACVLAN_SETTING_NAME, NM_SETTING_MACVLAN_PARENT); - return FALSE; - } - } - - if (!priv->promiscuous && priv->mode != NM_SETTING_MACVLAN_MODE_PASSTHRU) { - g_set_error_literal (error, - NM_CONNECTION_ERROR, - NM_CONNECTION_ERROR_INVALID_PROPERTY, - _("non promiscuous operation is allowed only in passthru mode")); - g_prefix_error (error, "%s.%s: ", - NM_SETTING_MACVLAN_SETTING_NAME, - NM_SETTING_MACVLAN_PROMISCUOUS); - return FALSE; - } - - return TRUE; + NMSettingMacvlanPrivate *priv = NM_SETTING_MACVLAN_GET_PRIVATE(setting); + NMSettingWired * s_wired; + + if (connection) + s_wired = nm_connection_get_setting_wired(connection); + else + s_wired = NULL; + + if (priv->parent) { + if (!nm_utils_is_uuid(priv->parent) && !nm_utils_ifname_valid_kernel(priv->parent, NULL)) { + g_set_error(error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_INVALID_PROPERTY, + _("'%s' is neither an UUID nor an interface name"), + priv->parent); + g_prefix_error(error, + "%s.%s: ", + NM_SETTING_MACVLAN_SETTING_NAME, + NM_SETTING_MACVLAN_PARENT); + return FALSE; + } + } else { + /* If parent is NULL, the parent must be specified via + * NMSettingWired:mac-address. + */ + if (connection && (!s_wired || !nm_setting_wired_get_mac_address(s_wired))) { + g_set_error(error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_MISSING_PROPERTY, + _("property is not specified and neither is '%s:%s'"), + NM_SETTING_WIRED_SETTING_NAME, + NM_SETTING_WIRED_MAC_ADDRESS); + g_prefix_error(error, + "%s.%s: ", + NM_SETTING_MACVLAN_SETTING_NAME, + NM_SETTING_MACVLAN_PARENT); + return FALSE; + } + } + + if (!priv->promiscuous && priv->mode != NM_SETTING_MACVLAN_MODE_PASSTHRU) { + g_set_error_literal(error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_INVALID_PROPERTY, + _("non promiscuous operation is allowed only in passthru mode")); + g_prefix_error(error, + "%s.%s: ", + NM_SETTING_MACVLAN_SETTING_NAME, + NM_SETTING_MACVLAN_PROMISCUOUS); + return FALSE; + } + + return TRUE; } /*****************************************************************************/ static void -get_property (GObject *object, guint prop_id, - GValue *value, GParamSpec *pspec) +get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { - NMSettingMacvlan *setting = NM_SETTING_MACVLAN (object); - NMSettingMacvlanPrivate *priv = NM_SETTING_MACVLAN_GET_PRIVATE (setting); - - switch (prop_id) { - case PROP_PARENT: - g_value_set_string (value, priv->parent); - break; - case PROP_MODE: - g_value_set_uint (value, priv->mode); - break; - case PROP_PROMISCUOUS: - g_value_set_boolean (value, priv->promiscuous); - break; - case PROP_TAP: - g_value_set_boolean (value, priv->tap); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } + NMSettingMacvlan * setting = NM_SETTING_MACVLAN(object); + NMSettingMacvlanPrivate *priv = NM_SETTING_MACVLAN_GET_PRIVATE(setting); + + switch (prop_id) { + case PROP_PARENT: + g_value_set_string(value, priv->parent); + break; + case PROP_MODE: + g_value_set_uint(value, priv->mode); + break; + case PROP_PROMISCUOUS: + g_value_set_boolean(value, priv->promiscuous); + break; + case PROP_TAP: + g_value_set_boolean(value, priv->tap); + 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) +set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { - NMSettingMacvlan *setting = NM_SETTING_MACVLAN (object); - NMSettingMacvlanPrivate *priv = NM_SETTING_MACVLAN_GET_PRIVATE (setting); - - switch (prop_id) { - case PROP_PARENT: - g_free (priv->parent); - priv->parent = g_value_dup_string (value); - break; - case PROP_MODE: - priv->mode = g_value_get_uint (value); - break; - case PROP_PROMISCUOUS: - priv->promiscuous = g_value_get_boolean (value); - break; - case PROP_TAP: - priv->tap = g_value_get_boolean (value); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } + NMSettingMacvlan * setting = NM_SETTING_MACVLAN(object); + NMSettingMacvlanPrivate *priv = NM_SETTING_MACVLAN_GET_PRIVATE(setting); + + switch (prop_id) { + case PROP_PARENT: + g_free(priv->parent); + priv->parent = g_value_dup_string(value); + break; + case PROP_MODE: + priv->mode = g_value_get_uint(value); + break; + case PROP_PROMISCUOUS: + priv->promiscuous = g_value_get_boolean(value); + break; + case PROP_TAP: + priv->tap = g_value_get_boolean(value); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); + break; + } } /*****************************************************************************/ static void -nm_setting_macvlan_init (NMSettingMacvlan *self) +nm_setting_macvlan_init(NMSettingMacvlan *self) { - NMSettingMacvlanPrivate *priv = NM_SETTING_MACVLAN_GET_PRIVATE (self); + NMSettingMacvlanPrivate *priv = NM_SETTING_MACVLAN_GET_PRIVATE(self); - priv->promiscuous = TRUE; + priv->promiscuous = TRUE; } /** @@ -234,97 +234,99 @@ nm_setting_macvlan_init (NMSettingMacvlan *self) * Since: 1.2 **/ NMSetting * -nm_setting_macvlan_new (void) +nm_setting_macvlan_new(void) { - return (NMSetting *) g_object_new (NM_TYPE_SETTING_MACVLAN, NULL); + return (NMSetting *) g_object_new(NM_TYPE_SETTING_MACVLAN, NULL); } static void -finalize (GObject *object) +finalize(GObject *object) { - NMSettingMacvlan *setting = NM_SETTING_MACVLAN (object); - NMSettingMacvlanPrivate *priv = NM_SETTING_MACVLAN_GET_PRIVATE (setting); + NMSettingMacvlan * setting = NM_SETTING_MACVLAN(object); + NMSettingMacvlanPrivate *priv = NM_SETTING_MACVLAN_GET_PRIVATE(setting); - g_free (priv->parent); + g_free(priv->parent); - G_OBJECT_CLASS (nm_setting_macvlan_parent_class)->finalize (object); + G_OBJECT_CLASS(nm_setting_macvlan_parent_class)->finalize(object); } static void -nm_setting_macvlan_class_init (NMSettingMacvlanClass *klass) +nm_setting_macvlan_class_init(NMSettingMacvlanClass *klass) { - GObjectClass *object_class = G_OBJECT_CLASS (klass); - NMSettingClass *setting_class = NM_SETTING_CLASS (klass); - - g_type_class_add_private (klass, sizeof (NMSettingMacvlanPrivate)); - - object_class->get_property = get_property; - object_class->set_property = set_property; - object_class->finalize = finalize; - - setting_class->verify = verify; - - /** - * NMSettingMacvlan:parent: - * - * If given, specifies the parent interface name or parent connection UUID - * from which this MAC-VLAN interface should be created. If this property is - * not specified, the connection must contain an #NMSettingWired setting - * with a #NMSettingWired:mac-address property. - * - * Since: 1.2 - **/ - obj_properties[PROP_PARENT] = - g_param_spec_string (NM_SETTING_MACVLAN_PARENT, "", "", - NULL, - G_PARAM_READWRITE | - NM_SETTING_PARAM_INFERRABLE | - G_PARAM_STATIC_STRINGS); - - /** - * NMSettingMacvlan:mode: - * - * The macvlan mode, which specifies the communication mechanism between multiple - * macvlans on the same lower device. - * - * Since: 1.2 - **/ - obj_properties[PROP_MODE] = - g_param_spec_uint (NM_SETTING_MACVLAN_MODE, "", "", - 0, G_MAXUINT, 0, - G_PARAM_READWRITE | - NM_SETTING_PARAM_INFERRABLE | - G_PARAM_STATIC_STRINGS); - - /** - * NMSettingMacvlan:promiscuous: - * - * Whether the interface should be put in promiscuous mode. - * - * Since: 1.2 - **/ - obj_properties[PROP_PROMISCUOUS] = - g_param_spec_boolean (NM_SETTING_MACVLAN_PROMISCUOUS, "", "", - TRUE, - G_PARAM_READWRITE | - NM_SETTING_PARAM_INFERRABLE | - G_PARAM_STATIC_STRINGS); - - /** - * NMSettingMacvlan:tap: - * - * Whether the interface should be a MACVTAP. - * - * Since: 1.2 - **/ - obj_properties[PROP_TAP] = - g_param_spec_boolean (NM_SETTING_MACVLAN_TAP, "", "", - FALSE, - G_PARAM_READWRITE | - NM_SETTING_PARAM_INFERRABLE | - G_PARAM_STATIC_STRINGS); - - g_object_class_install_properties (object_class, _PROPERTY_ENUMS_LAST, obj_properties); - - _nm_setting_class_commit (setting_class, NM_META_SETTING_TYPE_MACVLAN); + GObjectClass * object_class = G_OBJECT_CLASS(klass); + NMSettingClass *setting_class = NM_SETTING_CLASS(klass); + + g_type_class_add_private(klass, sizeof(NMSettingMacvlanPrivate)); + + object_class->get_property = get_property; + object_class->set_property = set_property; + object_class->finalize = finalize; + + setting_class->verify = verify; + + /** + * NMSettingMacvlan:parent: + * + * If given, specifies the parent interface name or parent connection UUID + * from which this MAC-VLAN interface should be created. If this property is + * not specified, the connection must contain an #NMSettingWired setting + * with a #NMSettingWired:mac-address property. + * + * Since: 1.2 + **/ + obj_properties[PROP_PARENT] = g_param_spec_string( + NM_SETTING_MACVLAN_PARENT, + "", + "", + NULL, + G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE | G_PARAM_STATIC_STRINGS); + + /** + * NMSettingMacvlan:mode: + * + * The macvlan mode, which specifies the communication mechanism between multiple + * macvlans on the same lower device. + * + * Since: 1.2 + **/ + obj_properties[PROP_MODE] = + g_param_spec_uint(NM_SETTING_MACVLAN_MODE, + "", + "", + 0, + G_MAXUINT, + 0, + G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE | G_PARAM_STATIC_STRINGS); + + /** + * NMSettingMacvlan:promiscuous: + * + * Whether the interface should be put in promiscuous mode. + * + * Since: 1.2 + **/ + obj_properties[PROP_PROMISCUOUS] = g_param_spec_boolean( + NM_SETTING_MACVLAN_PROMISCUOUS, + "", + "", + TRUE, + G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE | G_PARAM_STATIC_STRINGS); + + /** + * NMSettingMacvlan:tap: + * + * Whether the interface should be a MACVTAP. + * + * Since: 1.2 + **/ + obj_properties[PROP_TAP] = g_param_spec_boolean(NM_SETTING_MACVLAN_TAP, + "", + "", + FALSE, + G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE + | G_PARAM_STATIC_STRINGS); + + g_object_class_install_properties(object_class, _PROPERTY_ENUMS_LAST, obj_properties); + + _nm_setting_class_commit(setting_class, NM_META_SETTING_TYPE_MACVLAN); } |