Thomas Haller 2020-06-30 16:31:47 +02:00
commit f1af22452d
No known key found for this signature in database
GPG key ID: 29C2366E4DFC5728
3 changed files with 72 additions and 87 deletions

View file

@ -128,7 +128,7 @@
#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_RESPONSE_INTERVAL N_("Set the Max Response Time/Max Response Delay (in deciseconds) for IGMP/MLD queries sent by the bridge.")
#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_ROUTER N_("Sets bridge's multicast router. Multicast-snooping must be enabled for this option to work. Supported values are: 'auto', 'disabled', 'enabled' to which kernel assigns the numbers 1, 0, and 2, respectively. If not specified the default value is 'auto' (1).")
#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.")
#define DESCRIBE_DOC_NM_SETTING_BRIDGE_MULTICAST_STARTUP_QUERY_COUNT N_("Set the number of IGMP queries to send during startup phase.")
#define DESCRIBE_DOC_NM_SETTING_BRIDGE_MULTICAST_STARTUP_QUERY_INTERVAL N_("Sets the time (in deciseconds) between queries sent out at startup to determine membership information.")

View file

@ -1973,8 +1973,9 @@ nm_setting_bridge_class_init (NMSettingBridgeClass *klass)
* 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'.
* Supported values are: 'auto', 'disabled', 'enabled' to which kernel
* assigns the numbers 1, 0, and 2, respectively.
* If not specified the default value is 'auto' (1).
**/
/* ---ifcfg-rh---
* property: multicast-router

View file

@ -1421,23 +1421,29 @@ write_team_setting (NMConnection *connection, shvarFile *ifcfg, gboolean *wired,
return TRUE;
}
static gboolean
get_setting_default_boolean (gpointer setting, const char *prop)
{
return NM_G_PARAM_SPEC_GET_DEFAULT_BOOLEAN (g_object_class_find_property (G_OBJECT_GET_CLASS (setting), prop));
}
#define get_setting_default_checked_boolean(dflt, setting, prop) \
({ \
const gboolean _dflt = (dflt); \
\
nm_assert (NM_G_PARAM_SPEC_GET_DEFAULT_BOOLEAN (g_object_class_find_property (G_OBJECT_GET_CLASS (setting), prop)) == _dflt); \
_dflt; \
})
static guint
get_setting_default_uint (gpointer setting, const char *prop)
{
return NM_G_PARAM_SPEC_GET_DEFAULT_UINT (g_object_class_find_property (G_OBJECT_GET_CLASS (setting), prop));
}
#define get_setting_default_checked_uint(dflt, setting, prop) \
({ \
const guint _dflt = (dflt); \
\
nm_assert (NM_G_PARAM_SPEC_GET_DEFAULT_UINT (g_object_class_find_property (G_OBJECT_GET_CLASS (setting), prop)) == _dflt); \
_dflt; \
})
static guint64
get_setting_default_uint64 (gpointer setting, const char *prop)
{
return NM_G_PARAM_SPEC_GET_DEFAULT_UINT64 (g_object_class_find_property (G_OBJECT_GET_CLASS (setting), prop));
}
#define get_setting_default_checked_uint64(dflt, setting, prop) \
({ \
const guint64 _dflt = (dflt); \
\
nm_assert (NM_G_PARAM_SPEC_GET_DEFAULT_UINT64 (g_object_class_find_property (G_OBJECT_GET_CLASS (setting), prop)) == _dflt); \
_dflt; \
})
static gboolean
write_bridge_vlans (NMSetting *setting,
@ -1481,6 +1487,7 @@ write_bridge_setting (NMConnection *connection, shvarFile *ifcfg, gboolean *wire
NMSettingBridge *s_bridge;
guint32 u32;
guint64 u64;
guint u;
gboolean b;
const char *s;
GString *opts;
@ -1504,164 +1511,141 @@ write_bridge_setting (NMConnection *connection, shvarFile *ifcfg, gboolean *wire
svSetValueStr (ifcfg, "STP", "yes");
u32 = nm_setting_bridge_get_forward_delay (s_bridge);
if (u32 != get_setting_default_uint (s_bridge, NM_SETTING_BRIDGE_FORWARD_DELAY))
if (u32 != get_setting_default_checked_uint (NM_BRIDGE_FORWARD_DELAY_DEF, s_bridge, NM_SETTING_BRIDGE_FORWARD_DELAY))
svSetValueInt64 (ifcfg, "DELAY", u32);
g_string_append_printf (opts, "priority=%u", nm_setting_bridge_get_priority (s_bridge));
u32 = nm_setting_bridge_get_hello_time (s_bridge);
if (u32 != get_setting_default_uint (s_bridge, NM_SETTING_BRIDGE_HELLO_TIME)) {
if (opts->len)
g_string_append_c (opts, ' ');
if (u32 != get_setting_default_checked_uint (NM_BRIDGE_HELLO_TIME_DEF, s_bridge, NM_SETTING_BRIDGE_HELLO_TIME)) {
nm_gstring_add_space_delimiter (opts);
g_string_append_printf (opts, "hello_time=%u", u32);
}
u32 = nm_setting_bridge_get_max_age (s_bridge);
if (u32 != get_setting_default_uint (s_bridge, NM_SETTING_BRIDGE_MAX_AGE)) {
if (opts->len)
g_string_append_c (opts, ' ');
if (u32 != get_setting_default_checked_uint (NM_BRIDGE_MAX_AGE_DEF, s_bridge, NM_SETTING_BRIDGE_MAX_AGE)) {
nm_gstring_add_space_delimiter (opts);
g_string_append_printf (opts, "max_age=%u", u32);
}
}
u32 = nm_setting_bridge_get_ageing_time (s_bridge);
if (u32 != get_setting_default_uint (s_bridge, NM_SETTING_BRIDGE_AGEING_TIME)) {
if (opts->len)
g_string_append_c (opts, ' ');
g_string_append_printf (opts, "ageing_time=%u", u32);
u = nm_setting_bridge_get_ageing_time (s_bridge);
if (u != get_setting_default_checked_uint (NM_BRIDGE_AGEING_TIME_DEF, s_bridge, NM_SETTING_BRIDGE_AGEING_TIME)) {
nm_gstring_add_space_delimiter (opts);
g_string_append_printf (opts, "ageing_time=%u", u);
}
s = nm_setting_bridge_get_group_address (s_bridge);
if (s) {
if (opts->len)
g_string_append_c (opts, ' ');
nm_gstring_add_space_delimiter (opts);
g_string_append_printf (opts, "group_address=%s", s);
}
u32 = nm_setting_bridge_get_group_forward_mask (s_bridge);
if (u32 != get_setting_default_uint (s_bridge, NM_SETTING_BRIDGE_GROUP_FORWARD_MASK)) {
if (opts->len)
g_string_append_c (opts, ' ');
if (u32 != get_setting_default_checked_uint (0, s_bridge, NM_SETTING_BRIDGE_GROUP_FORWARD_MASK)) {
nm_gstring_add_space_delimiter (opts);
g_string_append_printf (opts, "group_fwd_mask=%u", u32);
}
u32 = nm_setting_bridge_get_multicast_hash_max (s_bridge);
if (u32 != get_setting_default_uint (s_bridge, NM_SETTING_BRIDGE_MULTICAST_HASH_MAX)) {
if (opts->len)
g_string_append_c (opts, ' ');
if (u32 != get_setting_default_checked_uint (NM_BRIDGE_MULTICAST_HASH_MAX_DEF, s_bridge, NM_SETTING_BRIDGE_MULTICAST_HASH_MAX)) {
nm_gstring_add_space_delimiter (opts);
g_string_append_printf (opts, "multicast_hash_max=%u", u32);
}
u32 = nm_setting_bridge_get_multicast_last_member_count (s_bridge);
if (u32 != get_setting_default_uint (s_bridge, NM_SETTING_BRIDGE_MULTICAST_LAST_MEMBER_COUNT)) {
if (opts->len)
g_string_append_c (opts, ' ');
if (u32 != get_setting_default_checked_uint (NM_BRIDGE_MULTICAST_LAST_MEMBER_COUNT_DEF, s_bridge, NM_SETTING_BRIDGE_MULTICAST_LAST_MEMBER_COUNT)) {
nm_gstring_add_space_delimiter (opts);
g_string_append_printf (opts, "multicast_last_member_count=%u", u32);
}
u64 = nm_setting_bridge_get_multicast_last_member_interval (s_bridge);
if (u64 != get_setting_default_uint64 (s_bridge, NM_SETTING_BRIDGE_MULTICAST_LAST_MEMBER_INTERVAL)) {
if (opts->len)
g_string_append_c (opts, ' ');
if (u64 != get_setting_default_checked_uint64 (NM_BRIDGE_MULTICAST_LAST_MEMBER_INTERVAL_DEF, s_bridge, NM_SETTING_BRIDGE_MULTICAST_LAST_MEMBER_INTERVAL)) {
nm_gstring_add_space_delimiter (opts);
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 (s_bridge, NM_SETTING_BRIDGE_MULTICAST_MEMBERSHIP_INTERVAL)) {
if (opts->len)
g_string_append_c (opts, ' ');
if (u64 != get_setting_default_checked_uint64 (NM_BRIDGE_MULTICAST_MEMBERSHIP_INTERVAL_DEF, s_bridge, NM_SETTING_BRIDGE_MULTICAST_MEMBERSHIP_INTERVAL)) {
nm_gstring_add_space_delimiter (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 (s_bridge, NM_SETTING_BRIDGE_MULTICAST_QUERIER)) {
if (opts->len)
g_string_append_c (opts, ' ');
if (b != get_setting_default_checked_boolean (NM_BRIDGE_MULTICAST_QUERIER_DEF, s_bridge, NM_SETTING_BRIDGE_MULTICAST_QUERIER)) {
nm_gstring_add_space_delimiter (opts);
g_string_append_printf (opts, "multicast_querier=%u", (guint) b);
}
u64 = nm_setting_bridge_get_multicast_querier_interval (s_bridge);
if (u64 != get_setting_default_uint64 (s_bridge, NM_SETTING_BRIDGE_MULTICAST_QUERIER_INTERVAL)) {
if (opts->len)
g_string_append_c (opts, ' ');
if (u64 != get_setting_default_checked_uint64 (NM_BRIDGE_MULTICAST_QUERIER_INTERVAL_DEF, s_bridge, NM_SETTING_BRIDGE_MULTICAST_QUERIER_INTERVAL)) {
nm_gstring_add_space_delimiter (opts);
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 (s_bridge, NM_SETTING_BRIDGE_MULTICAST_QUERY_INTERVAL)) {
if (opts->len)
g_string_append_c (opts, ' ');
if (u64 != get_setting_default_checked_uint64 (NM_BRIDGE_MULTICAST_QUERY_INTERVAL_DEF, s_bridge, NM_SETTING_BRIDGE_MULTICAST_QUERY_INTERVAL)) {
nm_gstring_add_space_delimiter (opts);
g_string_append_printf (opts, "multicast_query_interval=%"G_GUINT64_FORMAT, u64);
}
u64 = nm_setting_bridge_get_multicast_query_response_interval (s_bridge);
if (u64 != get_setting_default_uint64 (s_bridge, NM_SETTING_BRIDGE_MULTICAST_QUERY_RESPONSE_INTERVAL)) {
if (opts->len)
g_string_append_c (opts, ' ');
if (u64 != get_setting_default_checked_uint64 (NM_BRIDGE_MULTICAST_QUERY_RESPONSE_INTERVAL_DEF, s_bridge, NM_SETTING_BRIDGE_MULTICAST_QUERY_RESPONSE_INTERVAL)) {
nm_gstring_add_space_delimiter (opts);
g_string_append_printf (opts, "multicast_query_response_interval=%"G_GUINT64_FORMAT, u64);
}
b = nm_setting_bridge_get_multicast_query_use_ifaddr (s_bridge);
if (b != get_setting_default_boolean (s_bridge, NM_SETTING_BRIDGE_MULTICAST_QUERY_USE_IFADDR)) {
if (opts->len)
g_string_append_c (opts, ' ');
if (b != get_setting_default_checked_boolean (NM_BRIDGE_MULTICAST_QUERY_USE_IFADDR_DEF, s_bridge, NM_SETTING_BRIDGE_MULTICAST_QUERY_USE_IFADDR)) {
nm_gstring_add_space_delimiter (opts);
g_string_append_printf (opts, "multicast_query_use_ifaddr=%u", (guint) b);
}
b = nm_setting_bridge_get_multicast_snooping (s_bridge);
if (b != get_setting_default_boolean (s_bridge, NM_SETTING_BRIDGE_MULTICAST_SNOOPING)) {
if (opts->len)
g_string_append_c (opts, ' ');
if (b != get_setting_default_checked_boolean (NM_BRIDGE_MULTICAST_SNOOPING_DEF, s_bridge, NM_SETTING_BRIDGE_MULTICAST_SNOOPING)) {
nm_gstring_add_space_delimiter (opts);
g_string_append_printf (opts, "multicast_snooping=%u", (guint32) b);
}
u32 = nm_setting_bridge_get_multicast_startup_query_count (s_bridge);
if (u32 != get_setting_default_uint (s_bridge, NM_SETTING_BRIDGE_MULTICAST_STARTUP_QUERY_COUNT)) {
if (opts->len)
g_string_append_c (opts, ' ');
if (u32 != get_setting_default_checked_uint (NM_BRIDGE_MULTICAST_STARTUP_QUERY_COUNT_DEF, s_bridge, NM_SETTING_BRIDGE_MULTICAST_STARTUP_QUERY_COUNT)) {
nm_gstring_add_space_delimiter (opts);
g_string_append_printf (opts, "multicast_startup_query_count=%u", u32);
}
u64 = nm_setting_bridge_get_multicast_startup_query_interval (s_bridge);
if (u64 != get_setting_default_uint64 (s_bridge, NM_SETTING_BRIDGE_MULTICAST_STARTUP_QUERY_INTERVAL)) {
if (opts->len)
g_string_append_c (opts, ' ');
if (u64 != get_setting_default_checked_uint64 (NM_BRIDGE_MULTICAST_STARTUP_QUERY_INTERVAL_DEF, s_bridge, NM_SETTING_BRIDGE_MULTICAST_STARTUP_QUERY_INTERVAL)) {
nm_gstring_add_space_delimiter (opts);
g_string_append_printf (opts, "multicast_startup_query_interval=%"G_GUINT64_FORMAT, u64);
}
s = nm_setting_bridge_get_multicast_router (s_bridge);
if (s) {
if (opts->len)
g_string_append_c (opts, ' ');
nm_gstring_add_space_delimiter (opts);
g_string_append_printf (opts, "multicast_router=%s", s);
}
b = nm_setting_bridge_get_vlan_filtering (s_bridge);
if (b != get_setting_default_boolean (s_bridge, NM_SETTING_BRIDGE_VLAN_FILTERING)) {
if (opts->len)
g_string_append_c (opts, ' ');
if (b != get_setting_default_checked_boolean (FALSE, s_bridge, NM_SETTING_BRIDGE_VLAN_FILTERING)) {
nm_gstring_add_space_delimiter (opts);
g_string_append_printf (opts, "vlan_filtering=%u", (guint32) b);
}
u32 = nm_setting_bridge_get_vlan_default_pvid (s_bridge);
if (u32 != get_setting_default_uint (s_bridge, NM_SETTING_BRIDGE_VLAN_DEFAULT_PVID)) {
if (opts->len)
g_string_append_c (opts, ' ');
if (u32 != get_setting_default_checked_uint (NM_BRIDGE_VLAN_DEFAULT_PVID_DEF, s_bridge, NM_SETTING_BRIDGE_VLAN_DEFAULT_PVID)) {
nm_gstring_add_space_delimiter (opts);
g_string_append_printf (opts, "default_pvid=%u", u32);
}
s = nm_setting_bridge_get_vlan_protocol (s_bridge);
if (s) {
if (opts->len)
g_string_append_c (opts, ' ');
nm_gstring_add_space_delimiter (opts);
g_string_append_printf (opts, "vlan_protocol=%s", s);
}
b = nm_setting_bridge_get_vlan_stats_enabled (s_bridge);
if (b != get_setting_default_boolean (s_bridge, NM_SETTING_BRIDGE_VLAN_STATS_ENABLED)) {
if (opts->len)
g_string_append_c (opts, ' ');
if (b != get_setting_default_checked_boolean (NM_BRIDGE_VLAN_STATS_ENABLED_DEF, s_bridge, NM_SETTING_BRIDGE_VLAN_STATS_ENABLED)) {
nm_gstring_add_space_delimiter (opts);
g_string_append_printf (opts, "vlan_stats_enabled=%u", (guint) b);
}
@ -1698,11 +1682,11 @@ write_bridge_port_setting (NMConnection *connection, shvarFile *ifcfg, GError **
string = g_string_sized_new (32);
u32 = nm_setting_bridge_port_get_priority (s_port);
if (u32 != get_setting_default_uint (NM_SETTING (s_port), NM_SETTING_BRIDGE_PORT_PRIORITY))
if (u32 != get_setting_default_checked_uint (NM_BRIDGE_PORT_PRIORITY_DEF, s_port, NM_SETTING_BRIDGE_PORT_PRIORITY))
g_string_append_printf (string, "priority=%u", u32);
u32 = nm_setting_bridge_port_get_path_cost (s_port);
if (u32 != get_setting_default_uint (NM_SETTING (s_port), NM_SETTING_BRIDGE_PORT_PATH_COST)) {
if (u32 != get_setting_default_checked_uint (NM_BRIDGE_PORT_PATH_COST_DEF, s_port, NM_SETTING_BRIDGE_PORT_PATH_COST)) {
if (string->len)
g_string_append_c (string, ' ');
g_string_append_printf (string, "path_cost=%u", u32);