mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-01-04 14:30:18 +01:00
nm-setting-bridge: add 'multicast-last-member-interval' bridge option
https://bugzilla.redhat.com/show_bug.cgi?id=1755768
This commit is contained in:
parent
c49f20887a
commit
1c437090ff
8 changed files with 225 additions and 110 deletions
|
|
@ -4947,6 +4947,10 @@ static const NMMetaPropertyInfo *const property_infos_BRIDGE[] = {
|
|||
.property_type = &_pt_gobject_int,
|
||||
.hide_if_default = TRUE,
|
||||
),
|
||||
PROPERTY_INFO_WITH_DESC (NM_SETTING_BRIDGE_MULTICAST_LAST_MEMBER_INTERVAL,
|
||||
.property_type = &_pt_gobject_int,
|
||||
.hide_if_default = TRUE,
|
||||
),
|
||||
PROPERTY_INFO_WITH_DESC (NM_SETTING_BRIDGE_MULTICAST_QUERIER,
|
||||
.property_type = &_pt_gobject_bool,
|
||||
.hide_if_default = TRUE,
|
||||
|
|
|
|||
|
|
@ -121,6 +121,7 @@
|
|||
#define DESCRIBE_DOC_NM_SETTING_BRIDGE_MAX_AGE N_("The Spanning Tree Protocol (STP) maximum message age, in seconds.")
|
||||
#define DESCRIBE_DOC_NM_SETTING_BRIDGE_MULTICAST_HASH_MAX N_("Set maximum size of multicast hash table (value must be a power of 2).")
|
||||
#define DESCRIBE_DOC_NM_SETTING_BRIDGE_MULTICAST_LAST_MEMBER_COUNT N_("Set the number of queries the bridge will send before stopping forwarding a multicast group after a \"leave\" message has been received.")
|
||||
#define DESCRIBE_DOC_NM_SETTING_BRIDGE_MULTICAST_LAST_MEMBER_INTERVAL N_("Set interval (in deciseconds) between queries to find remaining members of a group, after a \"leave\" message is received.")
|
||||
#define DESCRIBE_DOC_NM_SETTING_BRIDGE_MULTICAST_QUERIER N_("Enable or disable sending of multicast queries by the bridge. If not specified the option is disabled.")
|
||||
#define DESCRIBE_DOC_NM_SETTING_BRIDGE_MULTICAST_QUERY_USE_IFADDR N_("If enabled the bridge's own IP address is used as the source address for IGMP queries otherwise the default of 0.0.0.0 is used.")
|
||||
#define DESCRIBE_DOC_NM_SETTING_BRIDGE_MULTICAST_ROUTER N_("Sets bridge's multicast router. multicast-snooping must be enabled for this option to work. Supported values are: 'auto', 'disabled', 'enabled'. If not specified the default value is 'auto'.")
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@
|
|||
#define BRIDGE_HELLO_TIME_DEFAULT 2
|
||||
#define BRIDGE_MAX_AGE_DEFAULT 20
|
||||
#define BRIDGE_MULTICAST_LAST_MEMBER_COUNT_DEFAULT 2
|
||||
#define BRIDGE_MULTICAST_LAST_MEMBER_INTERVAL_DEFAULT 100
|
||||
#define BRIDGE_MULTICAST_HASH_MAX_DEFAULT 4096
|
||||
#define BRIDGE_MULTICAST_QUERIER_DEFAULT FALSE
|
||||
#define BRIDGE_MULTICAST_QUERY_USE_IFADDR_DEFAULT FALSE
|
||||
|
|
@ -50,6 +51,7 @@ NM_GOBJECT_PROPERTIES_DEFINE (NMSettingBridge,
|
|||
PROP_GROUP_FORWARD_MASK,
|
||||
PROP_MULTICAST_HASH_MAX,
|
||||
PROP_MULTICAST_LAST_MEMBER_COUNT,
|
||||
PROP_MULTICAST_LAST_MEMBER_INTERVAL,
|
||||
PROP_MULTICAST_ROUTER,
|
||||
PROP_MULTICAST_QUERIER,
|
||||
PROP_MULTICAST_QUERY_USE_IFADDR,
|
||||
|
|
@ -67,6 +69,7 @@ typedef struct {
|
|||
char * multicast_router;
|
||||
char * group_address;
|
||||
char * vlan_protocol;
|
||||
guint64 multicast_last_member_interval;
|
||||
guint32 ageing_time;
|
||||
guint32 multicast_hash_max;
|
||||
guint32 multicast_last_member_count;
|
||||
|
|
@ -1048,6 +1051,22 @@ nm_setting_bridge_get_multicast_last_member_count (const NMSettingBridge *settin
|
|||
return NM_SETTING_BRIDGE_GET_PRIVATE (setting)->multicast_last_member_count;
|
||||
}
|
||||
|
||||
/**
|
||||
* nm_setting_bridge_get_multicast_last_member_interval:
|
||||
* @setting: the #NMSettingBridge
|
||||
*
|
||||
* Returns: the #NMSettingBridge:multicast-last-member-interval property of the setting
|
||||
*
|
||||
* Since 1.26
|
||||
**/
|
||||
guint64
|
||||
nm_setting_bridge_get_multicast_last_member_interval (const NMSettingBridge *setting)
|
||||
{
|
||||
g_return_val_if_fail (NM_IS_SETTING_BRIDGE (setting), 0);
|
||||
|
||||
return NM_SETTING_BRIDGE_GET_PRIVATE (setting)->multicast_last_member_interval;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
static gboolean
|
||||
|
|
@ -1289,6 +1308,9 @@ get_property (GObject *object, guint prop_id,
|
|||
case PROP_MULTICAST_LAST_MEMBER_COUNT:
|
||||
g_value_set_uint (value, priv->multicast_last_member_count);
|
||||
break;
|
||||
case PROP_MULTICAST_LAST_MEMBER_INTERVAL:
|
||||
g_value_set_uint64 (value, priv->multicast_last_member_interval);
|
||||
break;
|
||||
case PROP_MULTICAST_SNOOPING:
|
||||
g_value_set_boolean (value, priv->multicast_snooping);
|
||||
break;
|
||||
|
|
@ -1368,6 +1390,9 @@ set_property (GObject *object, guint prop_id,
|
|||
case PROP_MULTICAST_LAST_MEMBER_COUNT:
|
||||
priv->multicast_last_member_count = g_value_get_uint (value);
|
||||
break;
|
||||
case PROP_MULTICAST_LAST_MEMBER_INTERVAL:
|
||||
priv->multicast_last_member_interval = g_value_get_uint64 (value);
|
||||
break;
|
||||
case PROP_MULTICAST_SNOOPING:
|
||||
priv->multicast_snooping = g_value_get_boolean (value);
|
||||
break;
|
||||
|
|
@ -1415,19 +1440,20 @@ nm_setting_bridge_init (NMSettingBridge *setting)
|
|||
|
||||
priv->vlans = g_ptr_array_new_with_free_func ((GDestroyNotify) nm_bridge_vlan_unref);
|
||||
|
||||
priv->ageing_time = BRIDGE_AGEING_TIME_DEFAULT;
|
||||
priv->forward_delay = BRIDGE_FORWARD_DELAY_DEFAULT;
|
||||
priv->hello_time = BRIDGE_HELLO_TIME_DEFAULT;
|
||||
priv->max_age = BRIDGE_MAX_AGE_DEFAULT;
|
||||
priv->multicast_last_member_count = BRIDGE_MULTICAST_LAST_MEMBER_COUNT_DEFAULT;
|
||||
priv->multicast_hash_max = BRIDGE_MULTICAST_HASH_MAX_DEFAULT;
|
||||
priv->multicast_snooping = BRIDGE_MULTICAST_SNOOPING_DEFAULT;
|
||||
priv->priority = BRIDGE_PRIORITY_DEFAULT;
|
||||
priv->stp = BRIDGE_STP_DEFAULT;
|
||||
priv->vlan_default_pvid = BRIDGE_VLAN_DEFAULT_PVID_DEFAULT;
|
||||
priv->vlan_stats_enabled = BRIDGE_VLAN_STATS_ENABLED_DEFAULT;
|
||||
priv->multicast_query_use_ifaddr = BRIDGE_MULTICAST_QUERY_USE_IFADDR_DEFAULT;
|
||||
priv->multicast_querier = BRIDGE_MULTICAST_QUERIER_DEFAULT;
|
||||
priv->ageing_time = BRIDGE_AGEING_TIME_DEFAULT;
|
||||
priv->forward_delay = BRIDGE_FORWARD_DELAY_DEFAULT;
|
||||
priv->hello_time = BRIDGE_HELLO_TIME_DEFAULT;
|
||||
priv->max_age = BRIDGE_MAX_AGE_DEFAULT;
|
||||
priv->multicast_last_member_count = BRIDGE_MULTICAST_LAST_MEMBER_COUNT_DEFAULT;
|
||||
priv->multicast_last_member_interval = BRIDGE_MULTICAST_LAST_MEMBER_INTERVAL_DEFAULT;
|
||||
priv->multicast_hash_max = BRIDGE_MULTICAST_HASH_MAX_DEFAULT;
|
||||
priv->multicast_snooping = BRIDGE_MULTICAST_SNOOPING_DEFAULT;
|
||||
priv->priority = BRIDGE_PRIORITY_DEFAULT;
|
||||
priv->stp = BRIDGE_STP_DEFAULT;
|
||||
priv->vlan_default_pvid = BRIDGE_VLAN_DEFAULT_PVID_DEFAULT;
|
||||
priv->vlan_stats_enabled = BRIDGE_VLAN_STATS_ENABLED_DEFAULT;
|
||||
priv->multicast_query_use_ifaddr = BRIDGE_MULTICAST_QUERY_USE_IFADDR_DEFAULT;
|
||||
priv->multicast_querier = BRIDGE_MULTICAST_QUERIER_DEFAULT;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -1949,6 +1975,28 @@ nm_setting_bridge_class_init (NMSettingBridgeClass *klass)
|
|||
NM_SETTING_PARAM_INFERRABLE |
|
||||
G_PARAM_STATIC_STRINGS);
|
||||
|
||||
/**
|
||||
* NMSettingBridge:multicast-last-member-interval:
|
||||
*
|
||||
* Set interval (in deciseconds) between queries to find remaining
|
||||
* members of a group, after a "leave" message is received.
|
||||
**/
|
||||
/* ---ifcfg-rh---
|
||||
* property: multicast-last-member-interval
|
||||
* variable: BRIDGING_OPTS: multicast_last_member_interval=
|
||||
* default: 100
|
||||
* example: BRIDGING_OPTS="multicast_last_member_interval=200"
|
||||
* ---end---
|
||||
*
|
||||
* Since: 1.26
|
||||
*/
|
||||
obj_properties[PROP_MULTICAST_LAST_MEMBER_INTERVAL] =
|
||||
g_param_spec_uint64 (NM_SETTING_BRIDGE_MULTICAST_LAST_MEMBER_INTERVAL, "", "",
|
||||
0, G_MAXUINT64, BRIDGE_MULTICAST_LAST_MEMBER_INTERVAL_DEFAULT,
|
||||
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_full (setting_class, NM_META_SETTING_TYPE_BRIDGE,
|
||||
|
|
|
|||
|
|
@ -33,6 +33,7 @@ G_BEGIN_DECLS
|
|||
#define NM_SETTING_BRIDGE_GROUP_FORWARD_MASK "group-forward-mask"
|
||||
#define NM_SETTING_BRIDGE_MULTICAST_HASH_MAX "multicast-hash-max"
|
||||
#define NM_SETTING_BRIDGE_MULTICAST_LAST_MEMBER_COUNT "multicast-last-member-count"
|
||||
#define NM_SETTING_BRIDGE_MULTICAST_LAST_MEMBER_INTERVAL "multicast-last-member-interval"
|
||||
#define NM_SETTING_BRIDGE_MULTICAST_SNOOPING "multicast-snooping"
|
||||
#define NM_SETTING_BRIDGE_MULTICAST_ROUTER "multicast-router"
|
||||
#define NM_SETTING_BRIDGE_MULTICAST_QUERIER "multicast-querier"
|
||||
|
|
@ -148,6 +149,9 @@ guint32 nm_setting_bridge_get_multicast_hash_max (const NMSettingBridge *setting
|
|||
NM_AVAILABLE_IN_1_26
|
||||
guint32 nm_setting_bridge_get_multicast_last_member_count (const NMSettingBridge *setting);
|
||||
|
||||
NM_AVAILABLE_IN_1_26
|
||||
guint64 nm_setting_bridge_get_multicast_last_member_interval (const NMSettingBridge *setting);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __NM_SETTING_BRIDGE_H__ */
|
||||
|
|
|
|||
|
|
@ -1700,5 +1700,6 @@ libnm_1_26_0 {
|
|||
global:
|
||||
nm_setting_bridge_get_multicast_hash_max;
|
||||
nm_setting_bridge_get_multicast_last_member_count;
|
||||
nm_setting_bridge_get_multicast_last_member_interval;
|
||||
nm_setting_connection_get_mud_url;
|
||||
} libnm_1_24_0;
|
||||
|
|
|
|||
|
|
@ -237,79 +237,83 @@ typedef struct {
|
|||
const char *sysname;
|
||||
const char *(*to_sysfs) (GValue *value);
|
||||
void (*from_sysfs) (const char *value, GValue *out);
|
||||
uint nm_min;
|
||||
uint nm_max;
|
||||
uint nm_default;
|
||||
guint64 nm_min;
|
||||
guint64 nm_max;
|
||||
guint64 nm_default;
|
||||
bool default_if_zero;
|
||||
bool user_hz_compensate;
|
||||
bool only_with_stp;
|
||||
} Option;
|
||||
|
||||
static const Option master_options[] = {
|
||||
{ NM_SETTING_BRIDGE_STP, "stp_state", /* this must stay as the first item */
|
||||
NULL, NULL,
|
||||
0, 1, 1,
|
||||
FALSE, FALSE, FALSE },
|
||||
{ NM_SETTING_BRIDGE_PRIORITY, "priority",
|
||||
NULL, NULL,
|
||||
0, G_MAXUINT16, 0x8000,
|
||||
TRUE, FALSE, TRUE },
|
||||
{ NM_SETTING_BRIDGE_FORWARD_DELAY, "forward_delay",
|
||||
NULL, NULL,
|
||||
0, NM_BR_MAX_FORWARD_DELAY, 15,
|
||||
TRUE, TRUE, TRUE},
|
||||
{ NM_SETTING_BRIDGE_HELLO_TIME, "hello_time",
|
||||
NULL, NULL,
|
||||
0, NM_BR_MAX_HELLO_TIME, 2,
|
||||
TRUE, TRUE, TRUE },
|
||||
{ NM_SETTING_BRIDGE_MAX_AGE, "max_age",
|
||||
NULL, NULL,
|
||||
0, NM_BR_MAX_MAX_AGE, 20,
|
||||
TRUE, TRUE, TRUE },
|
||||
{ NM_SETTING_BRIDGE_AGEING_TIME, "ageing_time",
|
||||
NULL, NULL,
|
||||
NM_BR_MIN_AGEING_TIME, NM_BR_MAX_AGEING_TIME, 300,
|
||||
TRUE, TRUE, FALSE },
|
||||
{ NM_SETTING_BRIDGE_GROUP_FORWARD_MASK, "group_fwd_mask",
|
||||
NULL, NULL,
|
||||
0, 0xFFFF, 0,
|
||||
TRUE, FALSE, FALSE },
|
||||
{ NM_SETTING_BRIDGE_MULTICAST_HASH_MAX, "hash_max",
|
||||
NULL, NULL,
|
||||
NM_BR_MIN_MULTICAST_HASH_MAX, NM_BR_MAX_MULTICAST_HASH_MAX, 4096,
|
||||
FALSE, FALSE, FALSE },
|
||||
{ NM_SETTING_BRIDGE_MULTICAST_LAST_MEMBER_COUNT, "multicast_last_member_count",
|
||||
NULL, NULL,
|
||||
0, G_MAXUINT32, 2,
|
||||
FALSE, FALSE, FALSE },
|
||||
{ NM_SETTING_BRIDGE_MULTICAST_QUERIER, "multicast_querier",
|
||||
NULL, NULL,
|
||||
0, 1, 0,
|
||||
FALSE, FALSE, FALSE },
|
||||
{ NM_SETTING_BRIDGE_MULTICAST_QUERY_USE_IFADDR, "multicast_query_use_ifaddr",
|
||||
NULL, NULL,
|
||||
0, 1, 0,
|
||||
FALSE, FALSE, FALSE },
|
||||
{ NM_SETTING_BRIDGE_MULTICAST_SNOOPING, "multicast_snooping",
|
||||
NULL, NULL,
|
||||
0, 1, 1,
|
||||
FALSE, FALSE, FALSE },
|
||||
{ NM_SETTING_BRIDGE_MULTICAST_ROUTER, "multicast_router",
|
||||
to_sysfs_multicast_router, from_sysfs_multicast_router,
|
||||
0, 0, 0,
|
||||
FALSE, FALSE, FALSE },
|
||||
{ NM_SETTING_BRIDGE_GROUP_ADDRESS, "group_addr",
|
||||
to_sysfs_group_address, from_sysfs_group_address,
|
||||
0, 0, 0,
|
||||
FALSE, FALSE, FALSE },
|
||||
{ NM_SETTING_BRIDGE_VLAN_PROTOCOL, "vlan_protocol",
|
||||
to_sysfs_vlan_protocol, from_sysfs_vlan_protocol,
|
||||
0, 0, 0,
|
||||
FALSE, FALSE, FALSE },
|
||||
{ NM_SETTING_BRIDGE_VLAN_STATS_ENABLED, "vlan_stats_enabled",
|
||||
NULL, NULL,
|
||||
0, 1, 0,
|
||||
FALSE, FALSE, FALSE },
|
||||
{ NM_SETTING_BRIDGE_STP, "stp_state", /* this must stay as the first item */
|
||||
NULL, NULL,
|
||||
0, 1, 1,
|
||||
FALSE, FALSE, FALSE },
|
||||
{ NM_SETTING_BRIDGE_PRIORITY, "priority",
|
||||
NULL, NULL,
|
||||
0, G_MAXUINT16, 0x8000,
|
||||
TRUE, FALSE, TRUE },
|
||||
{ NM_SETTING_BRIDGE_FORWARD_DELAY, "forward_delay",
|
||||
NULL, NULL,
|
||||
0, NM_BR_MAX_FORWARD_DELAY, 15,
|
||||
TRUE, TRUE, TRUE},
|
||||
{ NM_SETTING_BRIDGE_HELLO_TIME, "hello_time",
|
||||
NULL, NULL,
|
||||
0, NM_BR_MAX_HELLO_TIME, 2,
|
||||
TRUE, TRUE, TRUE },
|
||||
{ NM_SETTING_BRIDGE_MAX_AGE, "max_age",
|
||||
NULL, NULL,
|
||||
0, NM_BR_MAX_MAX_AGE, 20,
|
||||
TRUE, TRUE, TRUE },
|
||||
{ NM_SETTING_BRIDGE_AGEING_TIME, "ageing_time",
|
||||
NULL, NULL,
|
||||
NM_BR_MIN_AGEING_TIME, NM_BR_MAX_AGEING_TIME, 300,
|
||||
TRUE, TRUE, FALSE },
|
||||
{ NM_SETTING_BRIDGE_GROUP_FORWARD_MASK, "group_fwd_mask",
|
||||
NULL, NULL,
|
||||
0, 0xFFFF, 0,
|
||||
TRUE, FALSE, FALSE },
|
||||
{ NM_SETTING_BRIDGE_MULTICAST_HASH_MAX, "hash_max",
|
||||
NULL, NULL,
|
||||
NM_BR_MIN_MULTICAST_HASH_MAX, NM_BR_MAX_MULTICAST_HASH_MAX, 4096,
|
||||
FALSE, FALSE, FALSE },
|
||||
{ NM_SETTING_BRIDGE_MULTICAST_LAST_MEMBER_COUNT, "multicast_last_member_count",
|
||||
NULL, NULL,
|
||||
0, G_MAXUINT32, 2,
|
||||
FALSE, FALSE, FALSE },
|
||||
{ NM_SETTING_BRIDGE_MULTICAST_LAST_MEMBER_INTERVAL, "multicast_last_member_interval",
|
||||
NULL, NULL,
|
||||
0, G_MAXUINT64, 100,
|
||||
FALSE, FALSE, FALSE },
|
||||
{ NM_SETTING_BRIDGE_MULTICAST_QUERIER, "multicast_querier",
|
||||
NULL, NULL,
|
||||
0, 1, 0,
|
||||
FALSE, FALSE, FALSE },
|
||||
{ NM_SETTING_BRIDGE_MULTICAST_QUERY_USE_IFADDR, "multicast_query_use_ifaddr",
|
||||
NULL, NULL,
|
||||
0, 1, 0,
|
||||
FALSE, FALSE, FALSE },
|
||||
{ NM_SETTING_BRIDGE_MULTICAST_SNOOPING, "multicast_snooping",
|
||||
NULL, NULL,
|
||||
0, 1, 1,
|
||||
FALSE, FALSE, FALSE },
|
||||
{ NM_SETTING_BRIDGE_MULTICAST_ROUTER, "multicast_router",
|
||||
to_sysfs_multicast_router, from_sysfs_multicast_router,
|
||||
0, 0, 0,
|
||||
FALSE, FALSE, FALSE },
|
||||
{ NM_SETTING_BRIDGE_GROUP_ADDRESS, "group_addr",
|
||||
to_sysfs_group_address, from_sysfs_group_address,
|
||||
0, 0, 0,
|
||||
FALSE, FALSE, FALSE },
|
||||
{ NM_SETTING_BRIDGE_VLAN_PROTOCOL, "vlan_protocol",
|
||||
to_sysfs_vlan_protocol, from_sysfs_vlan_protocol,
|
||||
0, 0, 0,
|
||||
FALSE, FALSE, FALSE },
|
||||
{ NM_SETTING_BRIDGE_VLAN_STATS_ENABLED, "vlan_stats_enabled",
|
||||
NULL, NULL,
|
||||
0, 1, 0,
|
||||
FALSE, FALSE, FALSE },
|
||||
{ NULL, NULL }
|
||||
};
|
||||
|
||||
|
|
@ -357,11 +361,15 @@ commit_option (NMDevice *device, NMSetting *setting, const Option *option, gbool
|
|||
case G_TYPE_BOOLEAN:
|
||||
value = g_value_get_boolean (&val) ? "1" : "0";
|
||||
break;
|
||||
case G_TYPE_UINT64:
|
||||
case G_TYPE_UINT: {
|
||||
char value_buf[100];
|
||||
guint uval;
|
||||
guint64 uval;
|
||||
|
||||
uval = g_value_get_uint (&val);
|
||||
if (pspec->value_type == G_TYPE_UINT64)
|
||||
uval = g_value_get_uint64 (&val);
|
||||
else
|
||||
uval = (guint) g_value_get_uint (&val);
|
||||
|
||||
/* zero means "unspecified" for some NM properties but isn't in the
|
||||
* allowed kernel range, so reset the property to the default value.
|
||||
|
|
@ -370,7 +378,11 @@ commit_option (NMDevice *device, NMSetting *setting, const Option *option, gbool
|
|||
g_value_unset (&val);
|
||||
g_value_init (&val, G_PARAM_SPEC_VALUE_TYPE (pspec));
|
||||
g_param_value_set_default (pspec, &val);
|
||||
uval = g_value_get_uint (&val);
|
||||
|
||||
if (pspec->value_type == G_TYPE_UINT64)
|
||||
uval = g_value_get_uint64 (&val);
|
||||
else
|
||||
uval = (guint) g_value_get_uint (&val);
|
||||
}
|
||||
|
||||
/* Linux kernel bridge interfaces use 'centiseconds' for time-based values.
|
||||
|
|
@ -381,7 +393,11 @@ commit_option (NMDevice *device, NMSetting *setting, const Option *option, gbool
|
|||
if (option->user_hz_compensate)
|
||||
uval *= 100;
|
||||
|
||||
nm_sprintf_buf (value_buf, "%u", uval);
|
||||
if (pspec->value_type == G_TYPE_UINT64)
|
||||
nm_sprintf_buf (value_buf, "%"G_GUINT64_FORMAT, uval);
|
||||
else
|
||||
nm_sprintf_buf (value_buf, "%u", (guint) uval);
|
||||
|
||||
value = value_buf;
|
||||
}
|
||||
break;
|
||||
|
|
@ -507,8 +523,9 @@ update_connection (NMDevice *device, NMConnection *connection)
|
|||
}
|
||||
|
||||
switch (pspec->value_type) {
|
||||
case G_TYPE_UINT64:
|
||||
case G_TYPE_UINT: {
|
||||
guint uvalue;
|
||||
guint64 uvalue;
|
||||
|
||||
/* See comments in set_sysfs_uint() about centiseconds. */
|
||||
if (option->user_hz_compensate) {
|
||||
|
|
@ -518,12 +535,16 @@ update_connection (NMDevice *device, NMConnection *connection)
|
|||
option->nm_default * 100);
|
||||
uvalue /= 100;
|
||||
} else {
|
||||
uvalue = _nm_utils_ascii_str_to_int64 (str, 10,
|
||||
option->nm_min,
|
||||
option->nm_max,
|
||||
option->nm_default);
|
||||
uvalue = _nm_utils_ascii_str_to_uint64 (str, 10,
|
||||
option->nm_min,
|
||||
option->nm_max,
|
||||
option->nm_default);
|
||||
}
|
||||
g_value_set_uint (&value, uvalue);
|
||||
|
||||
if (pspec->value_type == G_TYPE_UINT64)
|
||||
g_value_set_uint64(&value, uvalue);
|
||||
else
|
||||
g_value_set_uint (&value, (guint) uvalue);
|
||||
}
|
||||
break;
|
||||
case G_TYPE_BOOLEAN: {
|
||||
|
|
|
|||
|
|
@ -5157,26 +5157,27 @@ handle_bridge_option (NMSetting *setting,
|
|||
gboolean only_with_stp;
|
||||
gboolean extended_bool;
|
||||
} m/*etadata*/[] = {
|
||||
{ "DELAY", NM_SETTING_BRIDGE_FORWARD_DELAY, BRIDGE_OPT_TYPE_MAIN, .only_with_stp = TRUE },
|
||||
{ "priority", NM_SETTING_BRIDGE_PRIORITY, BRIDGE_OPT_TYPE_OPTION, .only_with_stp = TRUE },
|
||||
{ "hello_time", NM_SETTING_BRIDGE_HELLO_TIME, BRIDGE_OPT_TYPE_OPTION, .only_with_stp = TRUE },
|
||||
{ "max_age", NM_SETTING_BRIDGE_MAX_AGE, BRIDGE_OPT_TYPE_OPTION, .only_with_stp = TRUE },
|
||||
{ "ageing_time", NM_SETTING_BRIDGE_AGEING_TIME, BRIDGE_OPT_TYPE_OPTION },
|
||||
{ "multicast_last_member_count", NM_SETTING_BRIDGE_MULTICAST_LAST_MEMBER_COUNT, BRIDGE_OPT_TYPE_OPTION },
|
||||
{ "multicast_hash_max", NM_SETTING_BRIDGE_MULTICAST_HASH_MAX, BRIDGE_OPT_TYPE_OPTION },
|
||||
{ "multicast_querier", NM_SETTING_BRIDGE_MULTICAST_QUERIER, BRIDGE_OPT_TYPE_OPTION },
|
||||
{ "multicast_query_use_ifaddr", NM_SETTING_BRIDGE_MULTICAST_QUERY_USE_IFADDR, BRIDGE_OPT_TYPE_OPTION },
|
||||
{ "multicast_snooping", NM_SETTING_BRIDGE_MULTICAST_SNOOPING, BRIDGE_OPT_TYPE_OPTION },
|
||||
{ "multicast_router", NM_SETTING_BRIDGE_MULTICAST_ROUTER, BRIDGE_OPT_TYPE_OPTION },
|
||||
{ "vlan_filtering", NM_SETTING_BRIDGE_VLAN_FILTERING, BRIDGE_OPT_TYPE_OPTION },
|
||||
{ "default_pvid", NM_SETTING_BRIDGE_VLAN_DEFAULT_PVID, BRIDGE_OPT_TYPE_OPTION },
|
||||
{ "group_address", NM_SETTING_BRIDGE_GROUP_ADDRESS, BRIDGE_OPT_TYPE_OPTION },
|
||||
{ "group_fwd_mask", NM_SETTING_BRIDGE_GROUP_FORWARD_MASK, BRIDGE_OPT_TYPE_OPTION },
|
||||
{ "vlan_protocol", NM_SETTING_BRIDGE_VLAN_PROTOCOL, BRIDGE_OPT_TYPE_OPTION },
|
||||
{ "vlan_stats_enabled", NM_SETTING_BRIDGE_VLAN_STATS_ENABLED, BRIDGE_OPT_TYPE_OPTION },
|
||||
{ "priority", NM_SETTING_BRIDGE_PORT_PRIORITY, BRIDGE_OPT_TYPE_PORT_OPTION },
|
||||
{ "path_cost", NM_SETTING_BRIDGE_PORT_PATH_COST, BRIDGE_OPT_TYPE_PORT_OPTION },
|
||||
{ "hairpin_mode", NM_SETTING_BRIDGE_PORT_HAIRPIN_MODE, BRIDGE_OPT_TYPE_PORT_OPTION, .extended_bool = TRUE, },
|
||||
{ "DELAY", NM_SETTING_BRIDGE_FORWARD_DELAY, BRIDGE_OPT_TYPE_MAIN, .only_with_stp = TRUE },
|
||||
{ "priority", NM_SETTING_BRIDGE_PRIORITY, BRIDGE_OPT_TYPE_OPTION, .only_with_stp = TRUE },
|
||||
{ "hello_time", NM_SETTING_BRIDGE_HELLO_TIME, BRIDGE_OPT_TYPE_OPTION, .only_with_stp = TRUE },
|
||||
{ "max_age", NM_SETTING_BRIDGE_MAX_AGE, BRIDGE_OPT_TYPE_OPTION, .only_with_stp = TRUE },
|
||||
{ "ageing_time", NM_SETTING_BRIDGE_AGEING_TIME, BRIDGE_OPT_TYPE_OPTION },
|
||||
{ "multicast_last_member_count", NM_SETTING_BRIDGE_MULTICAST_LAST_MEMBER_COUNT, BRIDGE_OPT_TYPE_OPTION },
|
||||
{ "multicast_last_member_interval", NM_SETTING_BRIDGE_MULTICAST_LAST_MEMBER_INTERVAL, BRIDGE_OPT_TYPE_OPTION },
|
||||
{ "multicast_hash_max", NM_SETTING_BRIDGE_MULTICAST_HASH_MAX, BRIDGE_OPT_TYPE_OPTION },
|
||||
{ "multicast_querier", NM_SETTING_BRIDGE_MULTICAST_QUERIER, BRIDGE_OPT_TYPE_OPTION },
|
||||
{ "multicast_query_use_ifaddr", NM_SETTING_BRIDGE_MULTICAST_QUERY_USE_IFADDR, BRIDGE_OPT_TYPE_OPTION },
|
||||
{ "multicast_snooping", NM_SETTING_BRIDGE_MULTICAST_SNOOPING, BRIDGE_OPT_TYPE_OPTION },
|
||||
{ "multicast_router", NM_SETTING_BRIDGE_MULTICAST_ROUTER, BRIDGE_OPT_TYPE_OPTION },
|
||||
{ "vlan_filtering", NM_SETTING_BRIDGE_VLAN_FILTERING, BRIDGE_OPT_TYPE_OPTION },
|
||||
{ "default_pvid", NM_SETTING_BRIDGE_VLAN_DEFAULT_PVID, BRIDGE_OPT_TYPE_OPTION },
|
||||
{ "group_address", NM_SETTING_BRIDGE_GROUP_ADDRESS, BRIDGE_OPT_TYPE_OPTION },
|
||||
{ "group_fwd_mask", NM_SETTING_BRIDGE_GROUP_FORWARD_MASK, BRIDGE_OPT_TYPE_OPTION },
|
||||
{ "vlan_protocol", NM_SETTING_BRIDGE_VLAN_PROTOCOL, BRIDGE_OPT_TYPE_OPTION },
|
||||
{ "vlan_stats_enabled", NM_SETTING_BRIDGE_VLAN_STATS_ENABLED, BRIDGE_OPT_TYPE_OPTION },
|
||||
{ "priority", NM_SETTING_BRIDGE_PORT_PRIORITY, BRIDGE_OPT_TYPE_PORT_OPTION },
|
||||
{ "path_cost", NM_SETTING_BRIDGE_PORT_PATH_COST, BRIDGE_OPT_TYPE_PORT_OPTION },
|
||||
{ "hairpin_mode", NM_SETTING_BRIDGE_PORT_HAIRPIN_MODE, BRIDGE_OPT_TYPE_PORT_OPTION, .extended_bool = TRUE, },
|
||||
};
|
||||
const char *error_message = NULL;
|
||||
int i;
|
||||
|
|
@ -5229,6 +5230,16 @@ handle_bridge_option (NMSetting *setting,
|
|||
goto warn;
|
||||
}
|
||||
return;
|
||||
case G_TYPE_UINT64: {
|
||||
guint64 vu64;
|
||||
|
||||
vu64 = _nm_utils_ascii_str_to_uint64 (value, 10, 0, G_MAXUINT64, 0);
|
||||
if (!nm_g_object_set_property_uint64 (G_OBJECT (setting), m[i].property_name, vu64, NULL)) {
|
||||
error_message = "number is out of range";
|
||||
goto warn;
|
||||
}
|
||||
}
|
||||
return;
|
||||
case G_TYPE_STRING:
|
||||
nm_g_object_set_property_string (G_OBJECT (setting), m[i].property_name, value, NULL);
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -1379,6 +1379,23 @@ get_setting_default_uint (NMSetting *setting, const char *prop)
|
|||
return ret;
|
||||
}
|
||||
|
||||
static guint64
|
||||
get_setting_default_uint64 (NMSetting *setting, const char *prop)
|
||||
{
|
||||
GParamSpec *pspec;
|
||||
GValue val = G_VALUE_INIT;
|
||||
guint32 ret = 0;
|
||||
|
||||
pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (setting), prop);
|
||||
g_assert (pspec);
|
||||
g_value_init (&val, pspec->value_type);
|
||||
g_param_value_set_default (pspec, &val);
|
||||
g_assert (G_VALUE_HOLDS_UINT64 (&val));
|
||||
ret = g_value_get_uint64 (&val);
|
||||
g_value_unset (&val);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
get_setting_default_boolean (NMSetting *setting, const char *prop)
|
||||
{
|
||||
|
|
@ -1437,6 +1454,7 @@ write_bridge_setting (NMConnection *connection, shvarFile *ifcfg, gboolean *wire
|
|||
{
|
||||
NMSettingBridge *s_bridge;
|
||||
guint32 i;
|
||||
guint64 u64;
|
||||
gboolean b;
|
||||
const char *s;
|
||||
GString *opts;
|
||||
|
|
@ -1516,6 +1534,13 @@ write_bridge_setting (NMConnection *connection, shvarFile *ifcfg, gboolean *wire
|
|||
g_string_append_printf (opts, "multicast_last_member_count=%u", i);
|
||||
}
|
||||
|
||||
u64 = nm_setting_bridge_get_multicast_last_member_interval (s_bridge);
|
||||
if (u64 != get_setting_default_uint64 (NM_SETTING (s_bridge), NM_SETTING_BRIDGE_MULTICAST_LAST_MEMBER_INTERVAL)) {
|
||||
if (opts->len)
|
||||
g_string_append_c (opts, ' ');
|
||||
g_string_append_printf (opts, "multicast_last_member_interval=%"G_GUINT64_FORMAT, u64);
|
||||
}
|
||||
|
||||
b = nm_setting_bridge_get_multicast_querier (s_bridge);
|
||||
if (b != get_setting_default_boolean (NM_SETTING (s_bridge), NM_SETTING_BRIDGE_MULTICAST_QUERIER)) {
|
||||
if (opts->len)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue