nm-setting-bridge: add 'multicast-membership-interval' bridge option

https://bugzilla.redhat.com/show_bug.cgi?id=1755768
This commit is contained in:
Antonio Cardace 2020-04-21 17:35:51 +02:00
parent 1c437090ff
commit c1bc1570f3
No known key found for this signature in database
GPG key ID: 6BF80ABD43E377D3
8 changed files with 71 additions and 0 deletions

View file

@ -4951,6 +4951,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_MEMBERSHIP_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,

View file

@ -122,6 +122,7 @@
#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_MEMBERSHIP_INTERVAL N_("Set delay (in deciseconds) after which the bridge will leave a group, if no membership reports for this group are 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'.")

View file

@ -28,6 +28,7 @@
#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_MEMBERSHIP_INTERVAL_DEFAULT 26000
#define BRIDGE_MULTICAST_HASH_MAX_DEFAULT 4096
#define BRIDGE_MULTICAST_QUERIER_DEFAULT FALSE
#define BRIDGE_MULTICAST_QUERY_USE_IFADDR_DEFAULT FALSE
@ -52,6 +53,7 @@ NM_GOBJECT_PROPERTIES_DEFINE (NMSettingBridge,
PROP_MULTICAST_HASH_MAX,
PROP_MULTICAST_LAST_MEMBER_COUNT,
PROP_MULTICAST_LAST_MEMBER_INTERVAL,
PROP_MULTICAST_MEMBERSHIP_INTERVAL,
PROP_MULTICAST_ROUTER,
PROP_MULTICAST_QUERIER,
PROP_MULTICAST_QUERY_USE_IFADDR,
@ -70,6 +72,7 @@ typedef struct {
char * group_address;
char * vlan_protocol;
guint64 multicast_last_member_interval;
guint64 multicast_membership_interval;
guint32 ageing_time;
guint32 multicast_hash_max;
guint32 multicast_last_member_count;
@ -1067,6 +1070,22 @@ nm_setting_bridge_get_multicast_last_member_interval (const NMSettingBridge *set
return NM_SETTING_BRIDGE_GET_PRIVATE (setting)->multicast_last_member_interval;
}
/**
* nm_setting_bridge_get_multicast_membership_interval:
* @setting: the #NMSettingBridge
*
* Returns: the #NMSettingBridge:multicast-membership-interval property of the setting
*
* Since 1.26
**/
guint64
nm_setting_bridge_get_multicast_membership_interval (const NMSettingBridge *setting)
{
g_return_val_if_fail (NM_IS_SETTING_BRIDGE (setting), 0);
return NM_SETTING_BRIDGE_GET_PRIVATE (setting)->multicast_membership_interval;
}
/*****************************************************************************/
static gboolean
@ -1311,6 +1330,9 @@ get_property (GObject *object, guint prop_id,
case PROP_MULTICAST_LAST_MEMBER_INTERVAL:
g_value_set_uint64 (value, priv->multicast_last_member_interval);
break;
case PROP_MULTICAST_MEMBERSHIP_INTERVAL:
g_value_set_uint64 (value, priv->multicast_membership_interval);
break;
case PROP_MULTICAST_SNOOPING:
g_value_set_boolean (value, priv->multicast_snooping);
break;
@ -1393,6 +1415,9 @@ set_property (GObject *object, guint prop_id,
case PROP_MULTICAST_LAST_MEMBER_INTERVAL:
priv->multicast_last_member_interval = g_value_get_uint64 (value);
break;
case PROP_MULTICAST_MEMBERSHIP_INTERVAL:
priv->multicast_membership_interval = g_value_get_uint64 (value);
break;
case PROP_MULTICAST_SNOOPING:
priv->multicast_snooping = g_value_get_boolean (value);
break;
@ -1446,6 +1471,7 @@ nm_setting_bridge_init (NMSettingBridge *setting)
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_membership_interval = BRIDGE_MULTICAST_MEMBERSHIP_INTERVAL_DEFAULT;
priv->multicast_hash_max = BRIDGE_MULTICAST_HASH_MAX_DEFAULT;
priv->multicast_snooping = BRIDGE_MULTICAST_SNOOPING_DEFAULT;
priv->priority = BRIDGE_PRIORITY_DEFAULT;
@ -1997,6 +2023,29 @@ nm_setting_bridge_class_init (NMSettingBridgeClass *klass)
NM_SETTING_PARAM_INFERRABLE |
G_PARAM_STATIC_STRINGS);
/**
* NMSettingBridge:multicast-membership-interval:
*
* Set delay (in deciseconds) after which the bridge will
* leave a group, if no membership reports for this
* group are received.
**/
/* ---ifcfg-rh---
* property: multicast-membership-interval
* variable: BRIDGING_OPTS: multicast_membership_interval=
* default: 26000
* example: BRIDGING_OPTS="multicast_membership_interval=16000"
* ---end---
*
* Since: 1.26
*/
obj_properties[PROP_MULTICAST_MEMBERSHIP_INTERVAL] =
g_param_spec_uint64 (NM_SETTING_BRIDGE_MULTICAST_MEMBERSHIP_INTERVAL, "", "",
0, G_MAXUINT64, BRIDGE_MULTICAST_MEMBERSHIP_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,

View file

@ -34,6 +34,7 @@ G_BEGIN_DECLS
#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_MEMBERSHIP_INTERVAL "multicast-membership-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"
@ -152,6 +153,9 @@ guint32 nm_setting_bridge_get_multicast_last_member_count (const NMSettingBridge
NM_AVAILABLE_IN_1_26
guint64 nm_setting_bridge_get_multicast_last_member_interval (const NMSettingBridge *setting);
NM_AVAILABLE_IN_1_26
guint64 nm_setting_bridge_get_multicast_membership_interval (const NMSettingBridge *setting);
G_END_DECLS
#endif /* __NM_SETTING_BRIDGE_H__ */

View file

@ -1701,5 +1701,6 @@ 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_bridge_get_multicast_membership_interval;
nm_setting_connection_get_mud_url;
} libnm_1_24_0;

View file

@ -286,6 +286,10 @@ static const Option master_options[] = {
NULL, NULL,
0, G_MAXUINT64, 100,
FALSE, FALSE, FALSE },
{ NM_SETTING_BRIDGE_MULTICAST_MEMBERSHIP_INTERVAL, "multicast_membership_interval",
NULL, NULL,
0, G_MAXUINT64, 26000,
FALSE, FALSE, FALSE },
{ NM_SETTING_BRIDGE_MULTICAST_QUERIER, "multicast_querier",
NULL, NULL,
0, 1, 0,

View file

@ -5164,6 +5164,7 @@ handle_bridge_option (NMSetting *setting,
{ "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_membership_interval", NM_SETTING_BRIDGE_MULTICAST_MEMBERSHIP_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 },

View file

@ -1541,6 +1541,13 @@ write_bridge_setting (NMConnection *connection, shvarFile *ifcfg, gboolean *wire
g_string_append_printf (opts, "multicast_last_member_interval=%"G_GUINT64_FORMAT, u64);
}
u64 = nm_setting_bridge_get_multicast_membership_interval (s_bridge);
if (u64 != get_setting_default_uint64 (NM_SETTING (s_bridge), NM_SETTING_BRIDGE_MULTICAST_MEMBERSHIP_INTERVAL)) {
if (opts->len)
g_string_append_c (opts, ' ');
g_string_append_printf (opts, "multicast_membership_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)