diff options
author | Antonio Cardace <acardace@redhat.com> | 2020-04-21 17:35:51 +0200 |
---|---|---|
committer | Antonio Cardace <acardace@redhat.com> | 2020-05-04 17:33:00 +0200 |
commit | c1bc1570f3c0b1e9f436e9f3a25d34501892329a (patch) | |
tree | e5afbbf03836604b575af2f2a63386d1340c61d6 | |
parent | 1c437090ff9f89be0da5abcb5d970a3c0f2b3a5c (diff) | |
download | NetworkManager-c1bc1570f3c0b1e9f436e9f3a25d34501892329a.tar.gz |
nm-setting-bridge: add 'multicast-membership-interval' bridge option
https://bugzilla.redhat.com/show_bug.cgi?id=1755768
-rw-r--r-- | clients/common/nm-meta-setting-desc.c | 4 | ||||
-rw-r--r-- | clients/common/settings-docs.h.in | 1 | ||||
-rw-r--r-- | libnm-core/nm-setting-bridge.c | 49 | ||||
-rw-r--r-- | libnm-core/nm-setting-bridge.h | 4 | ||||
-rw-r--r-- | libnm/libnm.ver | 1 | ||||
-rw-r--r-- | src/devices/nm-device-bridge.c | 4 | ||||
-rw-r--r-- | src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c | 1 | ||||
-rw-r--r-- | src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c | 7 |
8 files changed, 71 insertions, 0 deletions
diff --git a/clients/common/nm-meta-setting-desc.c b/clients/common/nm-meta-setting-desc.c index cad4a80f2b..c0c3b1ffa2 100644 --- a/clients/common/nm-meta-setting-desc.c +++ b/clients/common/nm-meta-setting-desc.c @@ -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, diff --git a/clients/common/settings-docs.h.in b/clients/common/settings-docs.h.in index c00f0f8123..e34eb9b1d6 100644 --- a/clients/common/settings-docs.h.in +++ b/clients/common/settings-docs.h.in @@ -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'.") diff --git a/libnm-core/nm-setting-bridge.c b/libnm-core/nm-setting-bridge.c index 4fd8984354..c6e0c25792 100644 --- a/libnm-core/nm-setting-bridge.c +++ b/libnm-core/nm-setting-bridge.c @@ -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, diff --git a/libnm-core/nm-setting-bridge.h b/libnm-core/nm-setting-bridge.h index ebf250ab20..195adc80c2 100644 --- a/libnm-core/nm-setting-bridge.h +++ b/libnm-core/nm-setting-bridge.h @@ -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__ */ diff --git a/libnm/libnm.ver b/libnm/libnm.ver index 46bcc452bc..668edb35e1 100644 --- a/libnm/libnm.ver +++ b/libnm/libnm.ver @@ -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; diff --git a/src/devices/nm-device-bridge.c b/src/devices/nm-device-bridge.c index 6db8f40928..0b1af30afb 100644 --- a/src/devices/nm-device-bridge.c +++ b/src/devices/nm-device-bridge.c @@ -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, 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 e976f8a352..9cbbc57ca8 100644 --- a/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c +++ b/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c @@ -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 }, 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 66850dfc21..712478d5ef 100644 --- a/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c +++ b/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c @@ -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) |