diff --git a/clients/common/nm-meta-setting-desc.c b/clients/common/nm-meta-setting-desc.c index 2740de9d59..4d4c7bd471 100644 --- a/clients/common/nm-meta-setting-desc.c +++ b/clients/common/nm-meta-setting-desc.c @@ -4963,6 +4963,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_QUERY_INTERVAL, + .property_type = &_pt_gobject_int, + .hide_if_default = TRUE, + ), PROPERTY_INFO_WITH_DESC (NM_SETTING_BRIDGE_MULTICAST_QUERY_USE_IFADDR, .property_type = &_pt_gobject_bool, .hide_if_default = TRUE, diff --git a/clients/common/settings-docs.h.in b/clients/common/settings-docs.h.in index 778b8ef1cf..b8e7e349a1 100644 --- a/clients/common/settings-docs.h.in +++ b/clients/common/settings-docs.h.in @@ -125,6 +125,7 @@ #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_QUERIER_INTERVAL N_("If no queries are seen after this delay (in deciseconds) has passed, the bridge will start to send its own queries.") +#define DESCRIBE_DOC_NM_SETTING_BRIDGE_MULTICAST_QUERY_INTERVAL N_("Interval (in deciseconds) between queries sent by the bridge after the end of the startup phase.") #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'.") #define DESCRIBE_DOC_NM_SETTING_BRIDGE_MULTICAST_SNOOPING N_("Controls whether IGMP snooping is enabled for this bridge. Note that if snooping was automatically disabled due to hash collisions, the system may refuse to enable the feature until the collisions are resolved.") diff --git a/libnm-core/nm-setting-bridge.c b/libnm-core/nm-setting-bridge.c index 30ae2068c5..73b9029272 100644 --- a/libnm-core/nm-setting-bridge.c +++ b/libnm-core/nm-setting-bridge.c @@ -32,6 +32,7 @@ #define BRIDGE_MULTICAST_QUERIER_INTERVAL_DEFAULT 25500 #define BRIDGE_MULTICAST_HASH_MAX_DEFAULT 4096 #define BRIDGE_MULTICAST_QUERIER_DEFAULT FALSE +#define BRIDGE_MULTICAST_QUERY_INTERVAL_DEFAULT 12500 #define BRIDGE_MULTICAST_QUERY_USE_IFADDR_DEFAULT FALSE #define BRIDGE_MULTICAST_SNOOPING_DEFAULT TRUE #define BRIDGE_PRIORITY_DEFAULT 0x8000 @@ -58,6 +59,7 @@ NM_GOBJECT_PROPERTIES_DEFINE (NMSettingBridge, PROP_MULTICAST_ROUTER, PROP_MULTICAST_QUERIER, PROP_MULTICAST_QUERIER_INTERVAL, + PROP_MULTICAST_QUERY_INTERVAL, PROP_MULTICAST_QUERY_USE_IFADDR, PROP_MULTICAST_SNOOPING, PROP_VLAN_FILTERING, @@ -76,6 +78,7 @@ typedef struct { guint64 multicast_last_member_interval; guint64 multicast_membership_interval; guint64 multicast_querier_interval; + guint64 multicast_query_interval; guint32 ageing_time; guint32 multicast_hash_max; guint32 multicast_last_member_count; @@ -1105,6 +1108,22 @@ nm_setting_bridge_get_multicast_querier_interval (const NMSettingBridge *setting return NM_SETTING_BRIDGE_GET_PRIVATE (setting)->multicast_querier_interval; } +/** + * nm_setting_bridge_get_multicast_query_interval: + * @setting: the #NMSettingBridge + * + * Returns: the #NMSettingBridge:multicast-query-interval property of the setting + * + * Since 1.26 + **/ +guint64 +nm_setting_bridge_get_multicast_query_interval (const NMSettingBridge *setting) +{ + g_return_val_if_fail (NM_IS_SETTING_BRIDGE (setting), 0); + + return NM_SETTING_BRIDGE_GET_PRIVATE (setting)->multicast_query_interval; +} + /*****************************************************************************/ static gboolean @@ -1364,6 +1383,9 @@ get_property (GObject *object, guint prop_id, case PROP_MULTICAST_QUERIER_INTERVAL: g_value_set_uint64 (value, priv->multicast_querier_interval); break; + case PROP_MULTICAST_QUERY_INTERVAL: + g_value_set_uint64 (value, priv->multicast_query_interval); + break; case PROP_MULTICAST_QUERY_USE_IFADDR: g_value_set_boolean (value, priv->multicast_query_use_ifaddr); break; @@ -1453,6 +1475,9 @@ set_property (GObject *object, guint prop_id, case PROP_MULTICAST_QUERIER_INTERVAL: priv->multicast_querier_interval = g_value_get_uint64 (value); break; + case PROP_MULTICAST_QUERY_INTERVAL: + priv->multicast_query_interval = g_value_get_uint64 (value); + break; case PROP_MULTICAST_QUERY_USE_IFADDR: priv->multicast_query_use_ifaddr = g_value_get_boolean (value); break; @@ -1503,6 +1528,7 @@ nm_setting_bridge_init (NMSettingBridge *setting) 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_interval = BRIDGE_MULTICAST_QUERY_INTERVAL_DEFAULT; priv->multicast_query_use_ifaddr = BRIDGE_MULTICAST_QUERY_USE_IFADDR_DEFAULT; priv->multicast_querier = BRIDGE_MULTICAST_QUERIER_DEFAULT; priv->multicast_querier_interval = BRIDGE_MULTICAST_QUERIER_INTERVAL_DEFAULT; @@ -2094,6 +2120,28 @@ nm_setting_bridge_class_init (NMSettingBridgeClass *klass) NM_SETTING_PARAM_INFERRABLE | G_PARAM_STATIC_STRINGS); + /** + * NMSettingBridge:multicast-query-interval: + * + * Interval (in deciseconds) between queries sent + * by the bridge after the end of the startup phase. + **/ + /* ---ifcfg-rh--- + * property: multicast-query-interval + * variable: BRIDGING_OPTS: multicast_query_interval= + * default: 12500 + * example: BRIDGING_OPTS="multicast_query_interval=22500" + * ---end--- + * + * Since: 1.26 + */ + obj_properties[PROP_MULTICAST_QUERY_INTERVAL] = + g_param_spec_uint64 (NM_SETTING_BRIDGE_MULTICAST_QUERY_INTERVAL, "", "", + 0, G_MAXUINT64, BRIDGE_MULTICAST_QUERY_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, diff --git a/libnm-core/nm-setting-bridge.h b/libnm-core/nm-setting-bridge.h index 26e6188ec3..ff66d73641 100644 --- a/libnm-core/nm-setting-bridge.h +++ b/libnm-core/nm-setting-bridge.h @@ -39,6 +39,7 @@ G_BEGIN_DECLS #define NM_SETTING_BRIDGE_MULTICAST_ROUTER "multicast-router" #define NM_SETTING_BRIDGE_MULTICAST_QUERIER "multicast-querier" #define NM_SETTING_BRIDGE_MULTICAST_QUERIER_INTERVAL "multicast-querier-interval" +#define NM_SETTING_BRIDGE_MULTICAST_QUERY_INTERVAL "multicast-query-interval" #define NM_SETTING_BRIDGE_MULTICAST_QUERY_USE_IFADDR "multicast-query-use-ifaddr" #define NM_SETTING_BRIDGE_VLAN_FILTERING "vlan-filtering" #define NM_SETTING_BRIDGE_VLAN_DEFAULT_PVID "vlan-default-pvid" @@ -160,6 +161,9 @@ guint64 nm_setting_bridge_get_multicast_membership_interval (const NMSettingBrid NM_AVAILABLE_IN_1_26 guint64 nm_setting_bridge_get_multicast_querier_interval (const NMSettingBridge *setting); +NM_AVAILABLE_IN_1_26 +guint64 nm_setting_bridge_get_multicast_query_interval (const NMSettingBridge *setting); + G_END_DECLS #endif /* __NM_SETTING_BRIDGE_H__ */ diff --git a/libnm/libnm.ver b/libnm/libnm.ver index 8cfc021986..a80fae90e4 100644 --- a/libnm/libnm.ver +++ b/libnm/libnm.ver @@ -1703,5 +1703,6 @@ global: nm_setting_bridge_get_multicast_last_member_interval; nm_setting_bridge_get_multicast_membership_interval; nm_setting_bridge_get_multicast_querier_interval; + nm_setting_bridge_get_multicast_query_interval; nm_setting_connection_get_mud_url; } libnm_1_24_0; diff --git a/src/devices/nm-device-bridge.c b/src/devices/nm-device-bridge.c index cab1706112..2faf4ec8ef 100644 --- a/src/devices/nm-device-bridge.c +++ b/src/devices/nm-device-bridge.c @@ -298,6 +298,10 @@ static const Option master_options[] = { NULL, NULL, 0, G_MAXUINT64, 25500, FALSE, FALSE, FALSE }, + { NM_SETTING_BRIDGE_MULTICAST_QUERY_INTERVAL, "multicast_query_interval", + NULL, NULL, + 0, G_MAXUINT64, 12500, + FALSE, FALSE, FALSE }, { NM_SETTING_BRIDGE_MULTICAST_QUERY_USE_IFADDR, "multicast_query_use_ifaddr", NULL, NULL, 0, 1, 0, diff --git a/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c b/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c index 8ebfb0f544..e063a44313 100644 --- a/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c +++ b/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c @@ -5168,6 +5168,7 @@ handle_bridge_option (NMSetting *setting, { "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_querier_interval", NM_SETTING_BRIDGE_MULTICAST_QUERIER_INTERVAL, BRIDGE_OPT_TYPE_OPTION }, + { "multicast_query_interval", NM_SETTING_BRIDGE_MULTICAST_QUERY_INTERVAL, 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 }, diff --git a/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c b/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c index 0b5936e7e0..fb19ae1ac1 100644 --- a/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c +++ b/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c @@ -1562,6 +1562,13 @@ write_bridge_setting (NMConnection *connection, shvarFile *ifcfg, gboolean *wire g_string_append_printf (opts, "multicast_querier_interval=%"G_GUINT64_FORMAT, u64); } + u64 = nm_setting_bridge_get_multicast_query_interval (s_bridge); + if (u64 != get_setting_default_uint64 (NM_SETTING (s_bridge), NM_SETTING_BRIDGE_MULTICAST_QUERY_INTERVAL)) { + if (opts->len) + g_string_append_c (opts, ' '); + g_string_append_printf (opts, "multicast_query_interval=%"G_GUINT64_FORMAT, u64); + } + b = nm_setting_bridge_get_multicast_query_use_ifaddr (s_bridge); if (b != get_setting_default_boolean (NM_SETTING (s_bridge), NM_SETTING_BRIDGE_MULTICAST_QUERY_USE_IFADDR)) { if (opts->len)