diff options
| author | Sebastien Bacher <seb128@ubuntu.com> | 2019-01-25 11:24:41 +0100 |
|---|---|---|
| committer | Sebastien Bacher <seb128@ubuntu.com> | 2019-01-25 11:24:41 +0100 |
| commit | bbae86d3d2997a853ca0365e8eb7a3ca7489ee09 (patch) | |
| tree | 1f7fa49b47ab13aea3effbe839559d221f6323b4 /libnm-core/nm-setting-tc-config.c | |
| parent | 404ebe62622150e77e311777dff8617eb974e834 (diff) | |
New upstream version 1.15.2
Diffstat (limited to 'libnm-core/nm-setting-tc-config.c')
| -rw-r--r-- | libnm-core/nm-setting-tc-config.c | 267 |
1 files changed, 138 insertions, 129 deletions
diff --git a/libnm-core/nm-setting-tc-config.c b/libnm-core/nm-setting-tc-config.c index 43015d37..7425ae73 100644 --- a/libnm-core/nm-setting-tc-config.c +++ b/libnm-core/nm-setting-tc-config.c @@ -19,9 +19,10 @@ #include "nm-default.h" +#include "nm-setting-tc-config.h" + #include <linux/pkt_sched.h> -#include "nm-setting-tc-config.h" #include "nm-setting-private.h" /** @@ -809,13 +810,10 @@ nm_tc_tfilter_set_action (NMTCTfilter *tfilter, NMTCAction *action) /*****************************************************************************/ -enum { - PROP_0, +NM_GOBJECT_PROPERTIES_DEFINE (NMSettingTCConfig, PROP_QDISCS, PROP_TFILTERS, - - LAST_PROP -}; +); /** * NMSettingTCConfig: @@ -836,20 +834,7 @@ struct _NMSettingTCConfigClass { G_DEFINE_TYPE (NMSettingTCConfig, nm_setting_tc_config, NM_TYPE_SETTING) -/** - * nm_setting_tc_config_new: - * - * Creates a new #NMSettingTCConfig object with default values. - * - * Returns: (transfer full): the new empty #NMSettingTCConfig object - * - * Since: 1.12 - **/ -NMSetting * -nm_setting_tc_config_new (void) -{ - return (NMSetting *) g_object_new (NM_TYPE_SETTING_TC_CONFIG, NULL); -} +/*****************************************************************************/ /** * nm_setting_tc_config_get_num_qdiscs: @@ -914,7 +899,7 @@ nm_setting_tc_config_add_qdisc (NMSettingTCConfig *self, } g_ptr_array_add (self->qdiscs, nm_tc_qdisc_dup (qdisc)); - g_object_notify (G_OBJECT (self), NM_SETTING_TC_CONFIG_QDISCS); + _notify (self, PROP_QDISCS); return TRUE; } @@ -935,7 +920,7 @@ nm_setting_tc_config_remove_qdisc (NMSettingTCConfig *self, guint idx) g_return_if_fail (idx < self->qdiscs->len); g_ptr_array_remove_index (self->qdiscs, idx); - g_object_notify (G_OBJECT (self), NM_SETTING_TC_CONFIG_QDISCS); + _notify (self, PROP_QDISCS); } /** @@ -961,7 +946,7 @@ nm_setting_tc_config_remove_qdisc_by_value (NMSettingTCConfig *self, for (i = 0; i < self->qdiscs->len; i++) { if (nm_tc_qdisc_equal (self->qdiscs->pdata[i], qdisc)) { g_ptr_array_remove_index (self->qdiscs, i); - g_object_notify (G_OBJECT (self), NM_SETTING_TC_CONFIG_QDISCS); + _notify (self, PROP_QDISCS); return TRUE; } } @@ -983,7 +968,7 @@ nm_setting_tc_config_clear_qdiscs (NMSettingTCConfig *self) if (self->qdiscs->len != 0) { g_ptr_array_set_size (self->qdiscs, 0); - g_object_notify (G_OBJECT (self), NM_SETTING_TC_CONFIG_QDISCS); + _notify (self, PROP_QDISCS); } } @@ -1051,7 +1036,7 @@ nm_setting_tc_config_add_tfilter (NMSettingTCConfig *self, } g_ptr_array_add (self->tfilters, nm_tc_tfilter_dup (tfilter)); - g_object_notify (G_OBJECT (self), NM_SETTING_TC_CONFIG_TFILTERS); + _notify (self, PROP_TFILTERS); return TRUE; } @@ -1071,7 +1056,7 @@ nm_setting_tc_config_remove_tfilter (NMSettingTCConfig *self, guint idx) g_return_if_fail (idx < self->tfilters->len); g_ptr_array_remove_index (self->tfilters, idx); - g_object_notify (G_OBJECT (self), NM_SETTING_TC_CONFIG_TFILTERS); + _notify (self, PROP_TFILTERS); } /** @@ -1097,7 +1082,7 @@ nm_setting_tc_config_remove_tfilter_by_value (NMSettingTCConfig *self, for (i = 0; i < self->tfilters->len; i++) { if (nm_tc_tfilter_equal (self->tfilters->pdata[i], tfilter)) { g_ptr_array_remove_index (self->tfilters, i); - g_object_notify (G_OBJECT (self), NM_SETTING_TC_CONFIG_TFILTERS); + _notify (self, PROP_TFILTERS); return TRUE; } } @@ -1119,71 +1104,12 @@ nm_setting_tc_config_clear_tfilters (NMSettingTCConfig *self) if (self->tfilters->len != 0) { g_ptr_array_set_size (self->tfilters, 0); - g_object_notify (G_OBJECT (self), NM_SETTING_TC_CONFIG_TFILTERS); + _notify (self, PROP_TFILTERS); } } /*****************************************************************************/ -static void -set_property (GObject *object, guint prop_id, - const GValue *value, GParamSpec *pspec) -{ - NMSettingTCConfig *self = NM_SETTING_TC_CONFIG (object); - - switch (prop_id) { - case PROP_QDISCS: - g_ptr_array_unref (self->qdiscs); - self->qdiscs = _nm_utils_copy_array (g_value_get_boxed (value), - (NMUtilsCopyFunc) nm_tc_qdisc_dup, - (GDestroyNotify) nm_tc_qdisc_unref); - break; - case PROP_TFILTERS: - g_ptr_array_unref (self->tfilters); - self->tfilters = _nm_utils_copy_array (g_value_get_boxed (value), - (NMUtilsCopyFunc) nm_tc_tfilter_dup, - (GDestroyNotify) nm_tc_tfilter_unref); - 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) -{ - NMSettingTCConfig *self = NM_SETTING_TC_CONFIG (object); - - switch (prop_id) { - case PROP_QDISCS: - g_value_take_boxed (value, _nm_utils_copy_array (self->qdiscs, - (NMUtilsCopyFunc) nm_tc_qdisc_dup, - (GDestroyNotify) nm_tc_qdisc_unref)); - break; - case PROP_TFILTERS: - g_value_take_boxed (value, _nm_utils_copy_array (self->tfilters, - (NMUtilsCopyFunc) nm_tc_tfilter_dup, - (GDestroyNotify) nm_tc_tfilter_unref)); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -finalize (GObject *object) -{ - NMSettingTCConfig *self = NM_SETTING_TC_CONFIG (object); - - g_ptr_array_unref (self->qdiscs); - g_ptr_array_unref (self->tfilters); - - G_OBJECT_CLASS (nm_setting_tc_config_parent_class)->finalize (object); -} - static gboolean verify (NMSetting *setting, NMConnection *connection, GError **error) { @@ -1233,46 +1159,46 @@ verify (NMSetting *setting, NMConnection *connection, GError **error) return TRUE; } -static gboolean -compare_property (NMSetting *setting, +static NMTernary +compare_property (const NMSettInfoSetting *sett_info, + guint property_idx, + NMSetting *setting, NMSetting *other, - const GParamSpec *prop_spec, NMSettingCompareFlags flags) { NMSettingTCConfig *a_tc_config = NM_SETTING_TC_CONFIG (setting); NMSettingTCConfig *b_tc_config = NM_SETTING_TC_CONFIG (other); - NMSettingClass *setting_class; guint i; - if (nm_streq (prop_spec->name, NM_SETTING_TC_CONFIG_QDISCS)) { - if (a_tc_config->qdiscs->len != b_tc_config->qdiscs->len) - return FALSE; - for (i = 0; i < a_tc_config->qdiscs->len; i++) { - if (!nm_tc_qdisc_equal (a_tc_config->qdiscs->pdata[i], b_tc_config->qdiscs->pdata[i])) + if (nm_streq (sett_info->property_infos[property_idx].name, NM_SETTING_TC_CONFIG_QDISCS)) { + if (other) { + if (a_tc_config->qdiscs->len != b_tc_config->qdiscs->len) return FALSE; + for (i = 0; i < a_tc_config->qdiscs->len; i++) { + if (!nm_tc_qdisc_equal (a_tc_config->qdiscs->pdata[i], b_tc_config->qdiscs->pdata[i])) + return FALSE; + } } return TRUE; } - if (nm_streq (prop_spec->name, NM_SETTING_TC_CONFIG_TFILTERS)) { - if (a_tc_config->tfilters->len != b_tc_config->tfilters->len) - return FALSE; - for (i = 0; i < a_tc_config->tfilters->len; i++) { - if (!nm_tc_tfilter_equal (a_tc_config->tfilters->pdata[i], b_tc_config->tfilters->pdata[i])) + if (nm_streq (sett_info->property_infos[property_idx].name, NM_SETTING_TC_CONFIG_TFILTERS)) { + if (other) { + if (a_tc_config->tfilters->len != b_tc_config->tfilters->len) return FALSE; + for (i = 0; i < a_tc_config->tfilters->len; i++) { + if (!nm_tc_tfilter_equal (a_tc_config->tfilters->pdata[i], b_tc_config->tfilters->pdata[i])) + return FALSE; + } } return TRUE; } - setting_class = NM_SETTING_CLASS (nm_setting_tc_config_parent_class); - return setting_class->compare_property (setting, other, prop_spec, flags); -} - -static void -nm_setting_tc_config_init (NMSettingTCConfig *self) -{ - self->qdiscs = g_ptr_array_new_with_free_func ((GDestroyNotify) nm_tc_qdisc_unref); - self->tfilters = g_ptr_array_new_with_free_func ((GDestroyNotify) nm_tc_tfilter_unref); + return NM_SETTING_CLASS (nm_setting_tc_config_parent_class)->compare_property (sett_info, + property_idx, + setting, + other, + flags); } /** @@ -1586,6 +1512,91 @@ tc_tfilters_set (NMSetting *setting, return TRUE; } +/*****************************************************************************/ + +static void +get_property (GObject *object, guint prop_id, + GValue *value, GParamSpec *pspec) +{ + NMSettingTCConfig *self = NM_SETTING_TC_CONFIG (object); + + switch (prop_id) { + case PROP_QDISCS: + g_value_take_boxed (value, _nm_utils_copy_array (self->qdiscs, + (NMUtilsCopyFunc) nm_tc_qdisc_dup, + (GDestroyNotify) nm_tc_qdisc_unref)); + break; + case PROP_TFILTERS: + g_value_take_boxed (value, _nm_utils_copy_array (self->tfilters, + (NMUtilsCopyFunc) nm_tc_tfilter_dup, + (GDestroyNotify) nm_tc_tfilter_unref)); + 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) +{ + NMSettingTCConfig *self = NM_SETTING_TC_CONFIG (object); + + switch (prop_id) { + case PROP_QDISCS: + g_ptr_array_unref (self->qdiscs); + self->qdiscs = _nm_utils_copy_array (g_value_get_boxed (value), + (NMUtilsCopyFunc) nm_tc_qdisc_dup, + (GDestroyNotify) nm_tc_qdisc_unref); + break; + case PROP_TFILTERS: + g_ptr_array_unref (self->tfilters); + self->tfilters = _nm_utils_copy_array (g_value_get_boxed (value), + (NMUtilsCopyFunc) nm_tc_tfilter_dup, + (GDestroyNotify) nm_tc_tfilter_unref); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + +/*****************************************************************************/ + +static void +nm_setting_tc_config_init (NMSettingTCConfig *self) +{ + self->qdiscs = g_ptr_array_new_with_free_func ((GDestroyNotify) nm_tc_qdisc_unref); + self->tfilters = g_ptr_array_new_with_free_func ((GDestroyNotify) nm_tc_tfilter_unref); +} + +/** + * nm_setting_tc_config_new: + * + * Creates a new #NMSettingTCConfig object with default values. + * + * Returns: (transfer full): the new empty #NMSettingTCConfig object + * + * Since: 1.12 + **/ +NMSetting * +nm_setting_tc_config_new (void) +{ + return (NMSetting *) g_object_new (NM_TYPE_SETTING_TC_CONFIG, NULL); +} + +static void +finalize (GObject *object) +{ + NMSettingTCConfig *self = NM_SETTING_TC_CONFIG (object); + + g_ptr_array_unref (self->qdiscs); + g_ptr_array_unref (self->tfilters); + + G_OBJECT_CLASS (nm_setting_tc_config_parent_class)->finalize (object); +} + static void nm_setting_tc_config_class_init (NMSettingTCConfigClass *klass) { @@ -1593,8 +1604,8 @@ nm_setting_tc_config_class_init (NMSettingTCConfigClass *klass) NMSettingClass *setting_class = NM_SETTING_CLASS (klass); GArray *properties_override = _nm_sett_info_property_override_create_array (); - object_class->set_property = set_property; object_class->get_property = get_property; + object_class->set_property = set_property; object_class->finalize = finalize; setting_class->compare_property = compare_property; @@ -1612,17 +1623,15 @@ nm_setting_tc_config_class_init (NMSettingTCConfigClass *klass) * example: QDISC1=ingress, QDISC2="root handle 1234: fq_codel" * ---end--- */ - g_object_class_install_property - (object_class, PROP_QDISCS, - g_param_spec_boxed (NM_SETTING_TC_CONFIG_QDISCS, "", "", - G_TYPE_PTR_ARRAY, - G_PARAM_READWRITE | - NM_SETTING_PARAM_INFERRABLE | - G_PARAM_STATIC_STRINGS)); + obj_properties[PROP_QDISCS] = + g_param_spec_boxed (NM_SETTING_TC_CONFIG_QDISCS, "", "", + G_TYPE_PTR_ARRAY, + G_PARAM_READWRITE | + NM_SETTING_PARAM_INFERRABLE | + G_PARAM_STATIC_STRINGS); _properties_override_add_override (properties_override, - g_object_class_find_property (G_OBJECT_CLASS (setting_class), - NM_SETTING_TC_CONFIG_QDISCS), + obj_properties[PROP_QDISCS], G_VARIANT_TYPE ("aa{sv}"), tc_qdiscs_get, tc_qdiscs_set, @@ -1640,22 +1649,22 @@ nm_setting_tc_config_class_init (NMSettingTCConfigClass *klass) * example: FILTER1="parent ffff: matchall action simple sdata Input", ... * ---end--- */ - g_object_class_install_property - (object_class, PROP_TFILTERS, - g_param_spec_boxed (NM_SETTING_TC_CONFIG_TFILTERS, "", "", - G_TYPE_PTR_ARRAY, - G_PARAM_READWRITE | - NM_SETTING_PARAM_INFERRABLE | - G_PARAM_STATIC_STRINGS)); + obj_properties[PROP_TFILTERS] = + g_param_spec_boxed (NM_SETTING_TC_CONFIG_TFILTERS, "", "", + G_TYPE_PTR_ARRAY, + G_PARAM_READWRITE | + NM_SETTING_PARAM_INFERRABLE | + G_PARAM_STATIC_STRINGS); _properties_override_add_override (properties_override, - g_object_class_find_property (G_OBJECT_CLASS (setting_class), - NM_SETTING_TC_CONFIG_TFILTERS), + obj_properties[PROP_TFILTERS], G_VARIANT_TYPE ("aa{sv}"), tc_tfilters_get, tc_tfilters_set, NULL); + g_object_class_install_properties (object_class, _PROPERTY_ENUMS_LAST, obj_properties); + _nm_setting_class_commit_full (setting_class, NM_META_SETTING_TYPE_TC_CONFIG, NULL, properties_override); } |