bridge: merge branch 'ac/bridge_options_2'

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/473
This commit is contained in:
Antonio Cardace 2020-05-04 17:33:26 +02:00
commit 4a293844b8
No known key found for this signature in database
GPG key ID: 6BF80ABD43E377D3
10 changed files with 833 additions and 127 deletions

View file

@ -4939,10 +4939,38 @@ static const NMMetaPropertyInfo *const property_infos_BRIDGE[] = {
.prompt = N_("Group forward mask [0]"),
.property_type = &_pt_gobject_int,
),
PROPERTY_INFO_WITH_DESC (NM_SETTING_BRIDGE_MULTICAST_HASH_MAX,
.property_type = &_pt_gobject_int,
.hide_if_default = TRUE,
),
PROPERTY_INFO_WITH_DESC (NM_SETTING_BRIDGE_MULTICAST_LAST_MEMBER_COUNT,
.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_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,
),
PROPERTY_INFO_WITH_DESC (NM_SETTING_BRIDGE_MULTICAST_QUERIER_INTERVAL,
.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_RESPONSE_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,
@ -4953,6 +4981,14 @@ static const NMMetaPropertyInfo *const property_infos_BRIDGE[] = {
.prompt = N_("Enable IGMP snooping [no]"),
.property_type = &_pt_gobject_bool,
),
PROPERTY_INFO_WITH_DESC (NM_SETTING_BRIDGE_MULTICAST_STARTUP_QUERY_COUNT,
.property_type = &_pt_gobject_int,
.hide_if_default = TRUE,
),
PROPERTY_INFO_WITH_DESC (NM_SETTING_BRIDGE_MULTICAST_STARTUP_QUERY_INTERVAL,
.property_type = &_pt_gobject_int,
.hide_if_default = TRUE,
),
PROPERTY_INFO_WITH_DESC (NM_SETTING_BRIDGE_MULTICAST_ROUTER,
.property_type = &_pt_gobject_string,
.hide_if_default = TRUE,

View file

@ -119,10 +119,19 @@
#define DESCRIBE_DOC_NM_SETTING_BRIDGE_HELLO_TIME N_("The Spanning Tree Protocol (STP) hello time, in seconds.")
#define DESCRIBE_DOC_NM_SETTING_BRIDGE_MAC_ADDRESS N_("If specified, the MAC address of bridge. When creating a new bridge, this MAC address will be set. If this field is left unspecified, the \"ethernet.cloned-mac-address\" is referred instead to generate the initial MAC address. Note that setting \"ethernet.cloned-mac-address\" anyway overwrites the MAC address of the bridge later while activating the bridge. Hence, this property is deprecated. Deprecated: 1")
#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_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_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_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.")
#define DESCRIBE_DOC_NM_SETTING_BRIDGE_PRIORITY N_("Sets the Spanning Tree Protocol (STP) priority for this bridge. Lower values are \"better\"; the lowest priority bridge will be elected the root bridge.")
#define DESCRIBE_DOC_NM_SETTING_BRIDGE_STP N_("Controls whether Spanning Tree Protocol (STP) is enabled for this bridge.")
#define DESCRIBE_DOC_NM_SETTING_BRIDGE_VLAN_DEFAULT_PVID N_("The default PVID for the ports of the bridge, that is the VLAN id assigned to incoming untagged frames.")

View file

@ -97,6 +97,9 @@
#define NM_BR_PORT_MAX_PATH_COST 65535
#define NM_BR_PORT_DEF_PATH_COST 100
#define NM_BR_MIN_MULTICAST_HASH_MAX 1
#define NM_BR_MAX_MULTICAST_HASH_MAX G_MAXUINT32
/* NM_SETTING_COMPARE_FLAG_INFERRABLE: check whether a device-generated
* connection can be replaced by a already-defined connection. This flag only
* takes into account properties marked with the %NM_SETTING_PARAM_INFERRABLE

View file

@ -22,17 +22,26 @@
* necessary for bridging connections.
**/
#define BRIDGE_AGEING_TIME_DEFAULT 300
#define BRIDGE_FORWARD_DELAY_DEFAULT 15
#define BRIDGE_HELLO_TIME_DEFAULT 2
#define BRIDGE_MAX_AGE_DEFAULT 20
#define BRIDGE_MULTICAST_QUERIER_DEFAULT FALSE
#define BRIDGE_MULTICAST_QUERY_USE_IFADDR_DEFAULT FALSE
#define BRIDGE_MULTICAST_SNOOPING_DEFAULT TRUE
#define BRIDGE_PRIORITY_DEFAULT 0x8000
#define BRIDGE_STP_DEFAULT TRUE
#define BRIDGE_VLAN_DEFAULT_PVID_DEFAULT 1
#define BRIDGE_VLAN_STATS_ENABLED_DEFAULT FALSE
#define BRIDGE_AGEING_TIME_DEFAULT 300
#define BRIDGE_FORWARD_DELAY_DEFAULT 15
#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_MEMBERSHIP_INTERVAL_DEFAULT 26000
#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_RESPONSE_INTERVAL_DEFAULT 1000
#define BRIDGE_MULTICAST_QUERY_USE_IFADDR_DEFAULT FALSE
#define BRIDGE_MULTICAST_SNOOPING_DEFAULT TRUE
#define BRIDGE_MULTICAST_STARTUP_QUERY_COUNT_DEFAULT 2
#define BRIDGE_MULTICAST_STARTUP_QUERY_INTERVAL_DEFAULT 3125
#define BRIDGE_PRIORITY_DEFAULT 0x8000
#define BRIDGE_STP_DEFAULT TRUE
#define BRIDGE_VLAN_DEFAULT_PVID_DEFAULT 1
#define BRIDGE_VLAN_STATS_ENABLED_DEFAULT FALSE
/*****************************************************************************/
@ -46,10 +55,19 @@ NM_GOBJECT_PROPERTIES_DEFINE (NMSettingBridge,
PROP_AGEING_TIME,
PROP_GROUP_ADDRESS,
PROP_GROUP_FORWARD_MASK,
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_QUERIER_INTERVAL,
PROP_MULTICAST_QUERY_INTERVAL,
PROP_MULTICAST_QUERY_RESPONSE_INTERVAL,
PROP_MULTICAST_QUERY_USE_IFADDR,
PROP_MULTICAST_SNOOPING,
PROP_MULTICAST_STARTUP_QUERY_COUNT,
PROP_MULTICAST_STARTUP_QUERY_INTERVAL,
PROP_VLAN_FILTERING,
PROP_VLAN_DEFAULT_PVID,
PROP_VLAN_PROTOCOL,
@ -63,7 +81,16 @@ typedef struct {
char * multicast_router;
char * group_address;
char * vlan_protocol;
guint64 multicast_last_member_interval;
guint64 multicast_membership_interval;
guint64 multicast_querier_interval;
guint64 multicast_query_interval;
guint64 multicast_query_response_interval;
guint64 multicast_startup_query_interval;
guint32 ageing_time;
guint32 multicast_hash_max;
guint32 multicast_last_member_count;
guint32 multicast_startup_query_count;
guint16 priority;
guint16 forward_delay;
guint16 hello_time;
@ -1010,6 +1037,150 @@ nm_setting_bridge_get_multicast_querier (const NMSettingBridge *setting)
return NM_SETTING_BRIDGE_GET_PRIVATE (setting)->multicast_querier;
}
/**
* nm_setting_bridge_get_multicast_hash_max:
* @setting: the #NMSettingBridge
*
* Returns: the #NMSettingBridge:multicast-hash-max property of the setting
*
* Since 1.26
**/
guint32
nm_setting_bridge_get_multicast_hash_max (const NMSettingBridge *setting)
{
g_return_val_if_fail (NM_IS_SETTING_BRIDGE (setting), 0);
return NM_SETTING_BRIDGE_GET_PRIVATE (setting)->multicast_hash_max;
}
/**
* nm_setting_bridge_get_multicast_last_member_count:
* @setting: the #NMSettingBridge
*
* Returns: the #NMSettingBridge:multicast-last-member-count property of the setting
*
* Since 1.26
**/
guint32
nm_setting_bridge_get_multicast_last_member_count (const NMSettingBridge *setting)
{
g_return_val_if_fail (NM_IS_SETTING_BRIDGE (setting), 0);
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;
}
/**
* 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;
}
/**
* nm_setting_bridge_get_multicast_querier_interval:
* @setting: the #NMSettingBridge
*
* Returns: the #NMSettingBridge:multicast-querier-interval property of the setting
*
* Since 1.26
**/
guint64
nm_setting_bridge_get_multicast_querier_interval (const NMSettingBridge *setting)
{
g_return_val_if_fail (NM_IS_SETTING_BRIDGE (setting), 0);
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;
}
/**
* nm_setting_bridge_get_multicast_query_response_interval:
* @setting: the #NMSettingBridge
*
* Returns: the #NMSettingBridge:multicast-query-response-interval property of the setting
*
* Since 1.26
**/
guint64
nm_setting_bridge_get_multicast_query_response_interval (const NMSettingBridge *setting)
{
g_return_val_if_fail (NM_IS_SETTING_BRIDGE (setting), 0);
return NM_SETTING_BRIDGE_GET_PRIVATE (setting)->multicast_query_response_interval;
}
/**
* nm_setting_bridge_get_multicast_startup_query_count:
* @setting: the #NMSettingBridge
*
* Returns: the #NMSettingBridge:multicast-query-response-interval property of the setting
*
* Since 1.26
**/
guint32
nm_setting_bridge_get_multicast_startup_query_count (const NMSettingBridge *setting)
{
g_return_val_if_fail (NM_IS_SETTING_BRIDGE (setting), 0);
return NM_SETTING_BRIDGE_GET_PRIVATE (setting)->multicast_startup_query_count;
}
/**
* nm_setting_bridge_get_multicast_startup_query_interval:
* @setting: the #NMSettingBridge
*
* Returns: the #NMSettingBridge:multicast-startup-query-interval property of the setting
*
* Since 1.26
**/
guint64
nm_setting_bridge_get_multicast_startup_query_interval (const NMSettingBridge *setting)
{
g_return_val_if_fail (NM_IS_SETTING_BRIDGE (setting), 0);
return NM_SETTING_BRIDGE_GET_PRIVATE (setting)->multicast_startup_query_interval;
}
/*****************************************************************************/
static gboolean
@ -1149,6 +1320,16 @@ verify (NMSetting *setting, NMConnection *connection, GError **error)
}
}
if (!nm_utils_is_power_of_two (priv->multicast_hash_max)) {
g_set_error (error,
NM_CONNECTION_ERROR,
NM_CONNECTION_ERROR_INVALID_PROPERTY,
_("'%s' option must be a power of 2"),
NM_SETTING_BRIDGE_MULTICAST_HASH_MAX);
g_prefix_error (error, "%s.%s: ", NM_SETTING_BRIDGE_SETTING_NAME, NM_SETTING_BRIDGE_MULTICAST_HASH_MAX);
return FALSE;
}
/* Failures from here on are NORMALIZABLE... */
if (!_nm_utils_bridge_vlan_verify_list (priv->vlans,
@ -1235,6 +1416,18 @@ get_property (GObject *object, guint prop_id,
case PROP_GROUP_FORWARD_MASK:
g_value_set_uint (value, priv->group_forward_mask);
break;
case PROP_MULTICAST_HASH_MAX:
g_value_set_uint (value, priv->multicast_hash_max);
break;
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_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;
@ -1244,9 +1437,24 @@ get_property (GObject *object, guint prop_id,
case PROP_MULTICAST_QUERIER:
g_value_set_boolean (value, priv->multicast_querier);
break;
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_RESPONSE_INTERVAL:
g_value_set_uint64 (value, priv->multicast_query_response_interval);
break;
case PROP_MULTICAST_QUERY_USE_IFADDR:
g_value_set_boolean (value, priv->multicast_query_use_ifaddr);
break;
case PROP_MULTICAST_STARTUP_QUERY_COUNT:
g_value_set_uint (value, priv->multicast_startup_query_count);
break;
case PROP_MULTICAST_STARTUP_QUERY_INTERVAL:
g_value_set_uint64 (value, priv->multicast_startup_query_interval);
break;
case PROP_VLAN_FILTERING:
g_value_set_boolean (value, priv->vlan_filtering);
break;
@ -1308,6 +1516,18 @@ set_property (GObject *object, guint prop_id,
case PROP_GROUP_FORWARD_MASK:
priv->group_forward_mask = (guint16) g_value_get_uint (value);
break;
case PROP_MULTICAST_HASH_MAX:
priv->multicast_hash_max = g_value_get_uint (value);
break;
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_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;
@ -1318,9 +1538,24 @@ set_property (GObject *object, guint prop_id,
case PROP_MULTICAST_QUERIER:
priv->multicast_querier = g_value_get_boolean (value);
break;
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_RESPONSE_INTERVAL:
priv->multicast_query_response_interval = g_value_get_uint64 (value);
break;
case PROP_MULTICAST_QUERY_USE_IFADDR:
priv->multicast_query_use_ifaddr = g_value_get_boolean (value);
break;
case PROP_MULTICAST_STARTUP_QUERY_COUNT:
priv->multicast_startup_query_count = g_value_get_uint (value);
break;
case PROP_MULTICAST_STARTUP_QUERY_INTERVAL:
priv->multicast_startup_query_interval = g_value_get_uint64 (value);
break;
case PROP_VLAN_FILTERING:
priv->vlan_filtering = g_value_get_boolean (value);
break;
@ -1355,17 +1590,26 @@ 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_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_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;
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_response_interval = BRIDGE_MULTICAST_QUERY_RESPONSE_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;
priv->multicast_startup_query_count = BRIDGE_MULTICAST_STARTUP_QUERY_COUNT_DEFAULT;
priv->multicast_startup_query_interval = BRIDGE_MULTICAST_STARTUP_QUERY_INTERVAL_DEFAULT;
}
/**
@ -1741,6 +1985,8 @@ nm_setting_bridge_class_init (NMSettingBridgeClass *klass)
* description: VLAN filtering protocol.
* example: BRIDGING_OPTS="vlan_protocol=802.1Q"
* ---end---
*
* Since: 1.24
*/
obj_properties[PROP_VLAN_PROTOCOL] =
g_param_spec_string (NM_SETTING_BRIDGE_VLAN_PROTOCOL, "", "",
@ -1760,6 +2006,8 @@ nm_setting_bridge_class_init (NMSettingBridgeClass *klass)
* default: 0
* example: BRIDGING_OPTS="vlan_stats_enabled=1"
* ---end---
*
* Since: 1.24
*/
obj_properties[PROP_VLAN_STATS_ENABLED] =
g_param_spec_boolean (NM_SETTING_BRIDGE_VLAN_STATS_ENABLED, "", "",
@ -1784,6 +2032,8 @@ nm_setting_bridge_class_init (NMSettingBridgeClass *klass)
* default: auto
* example: BRIDGING_OPTS="multicast_router=enabled"
* ---end---
*
* Since: 1.24
*/
obj_properties[PROP_MULTICAST_ROUTER] =
g_param_spec_string (NM_SETTING_BRIDGE_MULTICAST_ROUTER, "", "",
@ -1805,6 +2055,8 @@ nm_setting_bridge_class_init (NMSettingBridgeClass *klass)
* default: 0
* example: BRIDGING_OPTS="multicast_query-use_ifaddr=1"
* ---end---
*
* Since: 1.24
*/
obj_properties[PROP_MULTICAST_QUERY_USE_IFADDR] =
g_param_spec_boolean (NM_SETTING_BRIDGE_MULTICAST_QUERY_USE_IFADDR, "", "",
@ -1825,6 +2077,8 @@ nm_setting_bridge_class_init (NMSettingBridgeClass *klass)
* default: 0
* example: BRIDGING_OPTS="multicast_querier=1"
* ---end---
*
* Since: 1.24
*/
obj_properties[PROP_MULTICAST_QUERIER] =
g_param_spec_boolean (NM_SETTING_BRIDGE_MULTICAST_QUERIER, "", "",
@ -1833,6 +2087,204 @@ nm_setting_bridge_class_init (NMSettingBridgeClass *klass)
NM_SETTING_PARAM_INFERRABLE |
G_PARAM_STATIC_STRINGS);
/**
* NMSettingBridge:multicast-hash-max:
*
* Set maximum size of multicast hash table (value must be a power of 2).
**/
/* ---ifcfg-rh---
* property: multicast-hash-max
* variable: BRIDGING_OPTS: multicast_hash_max=
* default: 4096
* example: BRIDGING_OPTS="multicast_hash_max=8192"
* ---end---
*
* Since: 1.26
*/
obj_properties[PROP_MULTICAST_HASH_MAX] =
g_param_spec_uint (NM_SETTING_BRIDGE_MULTICAST_HASH_MAX, "", "",
NM_BR_MIN_MULTICAST_HASH_MAX, NM_BR_MAX_MULTICAST_HASH_MAX, BRIDGE_MULTICAST_HASH_MAX_DEFAULT,
G_PARAM_READWRITE |
NM_SETTING_PARAM_INFERRABLE |
G_PARAM_STATIC_STRINGS);
/**
* NMSettingBridge:multicast-last-member-count:
*
* Set the number of queries the bridge will send before
* stopping forwarding a multicast group after a "leave"
* message has been received.
**/
/* ---ifcfg-rh---
* property: multicast-last-member-count
* variable: BRIDGING_OPTS: multicast_last_member_count=
* default: 2
* example: BRIDGING_OPTS="multicast_last_member_count=4"
* ---end---
*
* Since: 1.26
*/
obj_properties[PROP_MULTICAST_LAST_MEMBER_COUNT] =
g_param_spec_uint (NM_SETTING_BRIDGE_MULTICAST_LAST_MEMBER_COUNT, "", "",
0, G_MAXUINT32, BRIDGE_MULTICAST_LAST_MEMBER_COUNT_DEFAULT,
G_PARAM_READWRITE |
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);
/**
* 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);
/**
* NMSettingBridge:multicast-querier-interval:
*
* If no queries are seen after this delay (in deciseconds) has passed,
* the bridge will start to send its own queries.
**/
/* ---ifcfg-rh---
* property: multicast-querier-interval
* variable: BRIDGING_OPTS: multicast_querier_interval=
* default: 25500
* example: BRIDGING_OPTS="multicast_querier_interval=20000"
* ---end---
*
* Since: 1.26
*/
obj_properties[PROP_MULTICAST_QUERIER_INTERVAL] =
g_param_spec_uint64 (NM_SETTING_BRIDGE_MULTICAST_QUERIER_INTERVAL, "", "",
0, G_MAXUINT64, BRIDGE_MULTICAST_QUERIER_INTERVAL_DEFAULT,
G_PARAM_READWRITE |
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);
/**
* NMSettingBridge:multicast-query-response-interval:
*
* Set the Max Response Time/Max Response Delay
* (in deciseconds) for IGMP/MLD queries sent by the bridge.
**/
/* ---ifcfg-rh---
* property: multicast-query-response-interval
* variable: BRIDGING_OPTS: multicast_query_response_interval=
* default: 1000
* example: BRIDGING_OPTS="multicast_query_response_interval=2000"
* ---end---
*
* Since: 1.26
*/
obj_properties[PROP_MULTICAST_QUERY_RESPONSE_INTERVAL] =
g_param_spec_uint64 (NM_SETTING_BRIDGE_MULTICAST_QUERY_RESPONSE_INTERVAL, "", "",
0, G_MAXUINT64, BRIDGE_MULTICAST_QUERY_RESPONSE_INTERVAL_DEFAULT,
G_PARAM_READWRITE |
NM_SETTING_PARAM_INFERRABLE |
G_PARAM_STATIC_STRINGS);
/**
* NMSettingBridge:multicast-startup-query-count:
*
* Set the number of IGMP queries to send during startup phase.
**/
/* ---ifcfg-rh---
* property: multicast-startup-query-count
* variable: BRIDGING_OPTS: multicast_startup_query_count=
* default: 2
* example: BRIDGING_OPTS="multicast_startup_query_count=4"
* ---end---
*
* Since: 1.26
*/
obj_properties[PROP_MULTICAST_STARTUP_QUERY_COUNT] =
g_param_spec_uint (NM_SETTING_BRIDGE_MULTICAST_STARTUP_QUERY_COUNT, "", "",
0, G_MAXUINT32, BRIDGE_MULTICAST_STARTUP_QUERY_COUNT_DEFAULT,
G_PARAM_READWRITE |
NM_SETTING_PARAM_INFERRABLE |
G_PARAM_STATIC_STRINGS);
/**
* NMSettingBridge:multicast-startup-query-interval:
*
* Sets the time (in deciseconds) between queries sent out
* at startup to determine membership information.
**/
/* ---ifcfg-rh---
* property: multicast-startup-query-interval
* variable: BRIDGING_OPTS: multicast_startup_query_interval=
* default: 3125
* example: BRIDGING_OPTS="multicast_startup_query_interval=4000"
* ---end---
*
* Since: 1.26
*/
obj_properties[PROP_MULTICAST_STARTUP_QUERY_INTERVAL] =
g_param_spec_uint64 (NM_SETTING_BRIDGE_MULTICAST_STARTUP_QUERY_INTERVAL, "", "",
0, G_MAXUINT64, BRIDGE_MULTICAST_STARTUP_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,

View file

@ -23,24 +23,33 @@ G_BEGIN_DECLS
#define NM_SETTING_BRIDGE_SETTING_NAME "bridge"
#define NM_SETTING_BRIDGE_MAC_ADDRESS "mac-address"
#define NM_SETTING_BRIDGE_STP "stp"
#define NM_SETTING_BRIDGE_PRIORITY "priority"
#define NM_SETTING_BRIDGE_FORWARD_DELAY "forward-delay"
#define NM_SETTING_BRIDGE_HELLO_TIME "hello-time"
#define NM_SETTING_BRIDGE_MAX_AGE "max-age"
#define NM_SETTING_BRIDGE_AGEING_TIME "ageing-time"
#define NM_SETTING_BRIDGE_GROUP_FORWARD_MASK "group-forward-mask"
#define NM_SETTING_BRIDGE_MULTICAST_SNOOPING "multicast-snooping"
#define NM_SETTING_BRIDGE_MULTICAST_ROUTER "multicast-router"
#define NM_SETTING_BRIDGE_MULTICAST_QUERIER "multicast-querier"
#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"
#define NM_SETTING_BRIDGE_VLANS "vlans"
#define NM_SETTING_BRIDGE_GROUP_ADDRESS "group-address"
#define NM_SETTING_BRIDGE_VLAN_PROTOCOL "vlan-protocol"
#define NM_SETTING_BRIDGE_VLAN_STATS_ENABLED "vlan-stats-enabled"
#define NM_SETTING_BRIDGE_MAC_ADDRESS "mac-address"
#define NM_SETTING_BRIDGE_STP "stp"
#define NM_SETTING_BRIDGE_PRIORITY "priority"
#define NM_SETTING_BRIDGE_FORWARD_DELAY "forward-delay"
#define NM_SETTING_BRIDGE_HELLO_TIME "hello-time"
#define NM_SETTING_BRIDGE_MAX_AGE "max-age"
#define NM_SETTING_BRIDGE_AGEING_TIME "ageing-time"
#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_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"
#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_RESPONSE_INTERVAL "multicast-query-response-interval"
#define NM_SETTING_BRIDGE_MULTICAST_QUERY_USE_IFADDR "multicast-query-use-ifaddr"
#define NM_SETTING_BRIDGE_MULTICAST_STARTUP_QUERY_COUNT "multicast-startup-query-count"
#define NM_SETTING_BRIDGE_MULTICAST_STARTUP_QUERY_INTERVAL "multicast-startup-query-interval"
#define NM_SETTING_BRIDGE_VLAN_FILTERING "vlan-filtering"
#define NM_SETTING_BRIDGE_VLAN_DEFAULT_PVID "vlan-default-pvid"
#define NM_SETTING_BRIDGE_VLANS "vlans"
#define NM_SETTING_BRIDGE_GROUP_ADDRESS "group-address"
#define NM_SETTING_BRIDGE_VLAN_PROTOCOL "vlan-protocol"
#define NM_SETTING_BRIDGE_VLAN_STATS_ENABLED "vlan-stats-enabled"
#define NM_BRIDGE_VLAN_VID_MIN 1
#define NM_BRIDGE_VLAN_VID_MAX 4094
@ -140,6 +149,33 @@ gboolean nm_setting_bridge_get_multicast_query_use_ifaddr (const NMSettingBridge
NM_AVAILABLE_IN_1_24
gboolean nm_setting_bridge_get_multicast_querier (const NMSettingBridge *setting);
NM_AVAILABLE_IN_1_26
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);
NM_AVAILABLE_IN_1_26
guint64 nm_setting_bridge_get_multicast_membership_interval (const NMSettingBridge *setting);
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);
NM_AVAILABLE_IN_1_26
guint64 nm_setting_bridge_get_multicast_query_response_interval (const NMSettingBridge *setting);
NM_AVAILABLE_IN_1_26
guint32 nm_setting_bridge_get_multicast_startup_query_count (const NMSettingBridge *setting);
NM_AVAILABLE_IN_1_26
guint64 nm_setting_bridge_get_multicast_startup_query_interval (const NMSettingBridge *setting);
G_END_DECLS
#endif /* __NM_SETTING_BRIDGE_H__ */

View file

@ -1998,6 +1998,13 @@ test_bridge_verify (void)
test_verify_options_bridge (TRUE,
"multicast-snooping", "yes",
"multicast-router", "disabled");
/* multicast-hash-max */
test_verify_options_bridge (TRUE,
"multicast-hash-max", "1024");
test_verify_options_bridge (TRUE,
"multicast-hash-max", "8192");
test_verify_options_bridge (FALSE,
"multicast-hash-max", "3");
}
/*****************************************************************************/

View file

@ -1698,5 +1698,14 @@ global:
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_bridge_get_multicast_membership_interval;
nm_setting_bridge_get_multicast_querier_interval;
nm_setting_bridge_get_multicast_query_interval;
nm_setting_bridge_get_multicast_query_response_interval;
nm_setting_bridge_get_multicast_startup_query_count;
nm_setting_bridge_get_multicast_startup_query_interval;
nm_setting_connection_get_mud_url;
} libnm_1_24_0;

View file

@ -237,71 +237,107 @@ 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_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_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,
FALSE, FALSE, FALSE },
{ NM_SETTING_BRIDGE_MULTICAST_QUERIER_INTERVAL, "multicast_querier_interval",
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_RESPONSE_INTERVAL, "multicast_query_response_interval",
NULL, NULL,
0, G_MAXUINT64, 1000,
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_MULTICAST_STARTUP_QUERY_COUNT, "multicast_startup_query_count",
NULL, NULL,
0, G_MAXUINT32, 2,
FALSE, FALSE, FALSE },
{ NM_SETTING_BRIDGE_MULTICAST_STARTUP_QUERY_INTERVAL, "multicast_startup_query_interval",
NULL, NULL,
0, G_MAXUINT64, 3125,
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 }
};
@ -349,11 +385,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.
@ -362,7 +402,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.
@ -373,7 +417,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;
@ -499,8 +547,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) {
@ -510,12 +559,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: {

View file

@ -5157,24 +5157,33 @@ 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_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_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_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_response_interval", NM_SETTING_BRIDGE_MULTICAST_QUERY_RESPONSE_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 },
{ "multicast_startup_query_count", NM_SETTING_BRIDGE_MULTICAST_STARTUP_QUERY_COUNT, BRIDGE_OPT_TYPE_OPTION },
{ "multicast_startup_query_interval", NM_SETTING_BRIDGE_MULTICAST_STARTUP_QUERY_INTERVAL, 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;
@ -5227,6 +5236,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;

View file

@ -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;
@ -1501,6 +1519,35 @@ write_bridge_setting (NMConnection *connection, shvarFile *ifcfg, gboolean *wire
g_string_append_printf (opts, "group_fwd_mask=%u", i);
}
i = nm_setting_bridge_get_multicast_hash_max (s_bridge);
if (i != get_setting_default_uint (NM_SETTING (s_bridge), NM_SETTING_BRIDGE_MULTICAST_HASH_MAX)) {
if (opts->len)
g_string_append_c (opts, ' ');
g_string_append_printf (opts, "multicast_hash_max=%u", i);
}
i = nm_setting_bridge_get_multicast_last_member_count (s_bridge);
if (i != get_setting_default_uint (NM_SETTING (s_bridge), NM_SETTING_BRIDGE_MULTICAST_LAST_MEMBER_COUNT)) {
if (opts->len)
g_string_append_c (opts, ' ');
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);
}
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)
@ -1508,6 +1555,27 @@ write_bridge_setting (NMConnection *connection, shvarFile *ifcfg, gboolean *wire
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 (NM_SETTING (s_bridge), NM_SETTING_BRIDGE_MULTICAST_QUERIER_INTERVAL)) {
if (opts->len)
g_string_append_c (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 (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);
}
u64 = nm_setting_bridge_get_multicast_query_response_interval (s_bridge);
if (u64 != get_setting_default_uint64 (NM_SETTING (s_bridge), NM_SETTING_BRIDGE_MULTICAST_QUERY_RESPONSE_INTERVAL)) {
if (opts->len)
g_string_append_c (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 (NM_SETTING (s_bridge), NM_SETTING_BRIDGE_MULTICAST_QUERY_USE_IFADDR)) {
if (opts->len)
@ -1522,6 +1590,20 @@ write_bridge_setting (NMConnection *connection, shvarFile *ifcfg, gboolean *wire
g_string_append_printf (opts, "multicast_snooping=%u", (guint32) b);
}
i = nm_setting_bridge_get_multicast_startup_query_count (s_bridge);
if (i != get_setting_default_uint (NM_SETTING (s_bridge), NM_SETTING_BRIDGE_MULTICAST_STARTUP_QUERY_COUNT)) {
if (opts->len)
g_string_append_c (opts, ' ');
g_string_append_printf (opts, "multicast_startup_query_count=%u", i);
}
u64 = nm_setting_bridge_get_multicast_startup_query_interval (s_bridge);
if (u64 != get_setting_default_uint64 (NM_SETTING (s_bridge), NM_SETTING_BRIDGE_MULTICAST_STARTUP_QUERY_INTERVAL)) {
if (opts->len)
g_string_append_c (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)