mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager
synced 2024-07-21 10:14:41 +00:00
platform: use netlink for configuring bridge settings
NMDeviceBridge is currently using sysfs. The plan is to use netlink in in the future
This commit is contained in:
parent
f5db085cd3
commit
58847f85a4
|
@ -113,6 +113,9 @@
|
||||||
|
|
||||||
#define NM_BRIDGE_STP_DEF TRUE
|
#define NM_BRIDGE_STP_DEF TRUE
|
||||||
|
|
||||||
|
#define NM_BRIDGE_GROUP_ADDRESS_DEF_BIN 0x01, 0x80, 0xC2, 0x00, 0x00, 0x00
|
||||||
|
#define NM_BRIDGE_GROUP_ADDRESS_DEF_STR "01:80:C2:00:00:00"
|
||||||
|
|
||||||
#define NM_BRIDGE_PRIORITY_MIN 0u
|
#define NM_BRIDGE_PRIORITY_MIN 0u
|
||||||
#define NM_BRIDGE_PRIORITY_DEF 0x8000u
|
#define NM_BRIDGE_PRIORITY_DEF 0x8000u
|
||||||
#define NM_BRIDGE_PRIORITY_MAX ((guint) G_MAXUINT16)
|
#define NM_BRIDGE_PRIORITY_MAX ((guint) G_MAXUINT16)
|
||||||
|
|
|
@ -158,6 +158,17 @@ complete_connection (NMDevice *device,
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
to_sysfs_group_address_sys (const char *group_address, NMEtherAddr *out_addr)
|
||||||
|
{
|
||||||
|
if ( group_address == NULL){
|
||||||
|
*out_addr = (NMEtherAddr) NM_ETHER_ADDR_INIT (NM_BRIDGE_GROUP_ADDRESS_DEF_BIN);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!nm_utils_hwaddr_aton (group_address, out_addr, ETH_ALEN))
|
||||||
|
nm_assert_not_reached();
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
from_sysfs_group_address (const char *value, GValue *out)
|
from_sysfs_group_address (const char *value, GValue *out)
|
||||||
{
|
{
|
||||||
|
@ -171,6 +182,15 @@ to_sysfs_group_address (GValue *value)
|
||||||
return g_value_get_string (value) ?: "01:80:C2:00:00:00";
|
return g_value_get_string (value) ?: "01:80:C2:00:00:00";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
to_sysfs_vlan_protocol_sys (const char *value)
|
||||||
|
{
|
||||||
|
if (nm_streq0 (value, "802.1ad"))
|
||||||
|
return ETH_P_8021AD;
|
||||||
|
|
||||||
|
return 0x8100;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
from_sysfs_vlan_protocol (const char *value, GValue *out)
|
from_sysfs_vlan_protocol (const char *value, GValue *out)
|
||||||
{
|
{
|
||||||
|
@ -198,6 +218,19 @@ to_sysfs_vlan_protocol (GValue *value)
|
||||||
return "0x8100";
|
return "0x8100";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
to_sysfs_multicast_router_sys (const char *value)
|
||||||
|
{
|
||||||
|
if (nm_streq0 (value, "disabled"))
|
||||||
|
return 0;
|
||||||
|
if (nm_streq0 (value, "auto"))
|
||||||
|
return 1;
|
||||||
|
if (nm_streq0 (value, "enabled"))
|
||||||
|
return 2;
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
static const char *
|
static const char *
|
||||||
to_sysfs_multicast_router (GValue *value)
|
to_sysfs_multicast_router (GValue *value)
|
||||||
{
|
{
|
||||||
|
@ -231,7 +264,6 @@ from_sysfs_multicast_router (const char *value, GValue *out)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
#define _DEFAULT_IF_ZERO(val, def_val) \
|
#define _DEFAULT_IF_ZERO(val, def_val) \
|
||||||
({ \
|
({ \
|
||||||
typeof (val) _val = (val); \
|
typeof (val) _val = (val); \
|
||||||
|
@ -1027,23 +1059,31 @@ create_and_realize (NMDevice *device,
|
||||||
}
|
}
|
||||||
|
|
||||||
props = (NMPlatformLnkBridge) {
|
props = (NMPlatformLnkBridge) {
|
||||||
.stp_state = nm_setting_bridge_get_stp (s_bridge),
|
|
||||||
.forward_delay = _DEFAULT_IF_ZERO (nm_setting_bridge_get_forward_delay (s_bridge) * 100u, NM_BRIDGE_FORWARD_DELAY_DEF_SYS),
|
.forward_delay = _DEFAULT_IF_ZERO (nm_setting_bridge_get_forward_delay (s_bridge) * 100u, NM_BRIDGE_FORWARD_DELAY_DEF_SYS),
|
||||||
.hello_time = _DEFAULT_IF_ZERO (nm_setting_bridge_get_hello_time (s_bridge) * 100u, NM_BRIDGE_HELLO_TIME_DEF_SYS),
|
.hello_time = _DEFAULT_IF_ZERO (nm_setting_bridge_get_hello_time (s_bridge) * 100u, NM_BRIDGE_HELLO_TIME_DEF_SYS),
|
||||||
.max_age = _DEFAULT_IF_ZERO (nm_setting_bridge_get_max_age (s_bridge) * 100u, NM_BRIDGE_MAX_AGE_DEF_SYS),
|
.max_age = _DEFAULT_IF_ZERO (nm_setting_bridge_get_max_age (s_bridge) * 100u, NM_BRIDGE_MAX_AGE_DEF_SYS),
|
||||||
.ageing_time = _DEFAULT_IF_ZERO (nm_setting_bridge_get_ageing_time (s_bridge) * 100u, NM_BRIDGE_AGEING_TIME_DEF_SYS),
|
.ageing_time = _DEFAULT_IF_ZERO (nm_setting_bridge_get_ageing_time (s_bridge) * 100u, NM_BRIDGE_AGEING_TIME_DEF_SYS),
|
||||||
|
.stp_state = nm_setting_bridge_get_stp (s_bridge),
|
||||||
.priority = nm_setting_bridge_get_priority (s_bridge),
|
.priority = nm_setting_bridge_get_priority (s_bridge),
|
||||||
|
.vlan_protocol = to_sysfs_vlan_protocol_sys (nm_setting_bridge_get_vlan_protocol (s_bridge)),
|
||||||
|
.vlan_stats_enabled = nm_setting_bridge_get_vlan_stats_enabled (s_bridge),
|
||||||
.group_fwd_mask = nm_setting_bridge_get_group_forward_mask (s_bridge),
|
.group_fwd_mask = nm_setting_bridge_get_group_forward_mask (s_bridge),
|
||||||
|
.mcast_snooping = nm_setting_bridge_get_multicast_snooping (s_bridge),
|
||||||
|
.mcast_router = to_sysfs_multicast_router_sys (nm_setting_bridge_get_multicast_router (s_bridge)),
|
||||||
|
.mcast_query_use_ifaddr = nm_setting_bridge_get_multicast_query_use_ifaddr (s_bridge),
|
||||||
|
.mcast_querier = nm_setting_bridge_get_multicast_querier (s_bridge),
|
||||||
.mcast_last_member_count = nm_setting_bridge_get_multicast_last_member_count (s_bridge),
|
.mcast_last_member_count = nm_setting_bridge_get_multicast_last_member_count (s_bridge),
|
||||||
|
.mcast_startup_query_count = nm_setting_bridge_get_multicast_startup_query_count (s_bridge),
|
||||||
.mcast_last_member_interval = nm_setting_bridge_get_multicast_last_member_interval (s_bridge),
|
.mcast_last_member_interval = nm_setting_bridge_get_multicast_last_member_interval (s_bridge),
|
||||||
.mcast_membership_interval = nm_setting_bridge_get_multicast_membership_interval (s_bridge),
|
.mcast_membership_interval = nm_setting_bridge_get_multicast_membership_interval (s_bridge),
|
||||||
.mcast_querier_interval = nm_setting_bridge_get_multicast_querier_interval (s_bridge),
|
.mcast_querier_interval = nm_setting_bridge_get_multicast_querier_interval (s_bridge),
|
||||||
.mcast_query_interval = nm_setting_bridge_get_multicast_query_interval (s_bridge),
|
.mcast_query_interval = nm_setting_bridge_get_multicast_query_interval (s_bridge),
|
||||||
.mcast_query_response_interval = nm_setting_bridge_get_multicast_query_response_interval (s_bridge),
|
.mcast_query_response_interval = nm_setting_bridge_get_multicast_query_response_interval (s_bridge),
|
||||||
.mcast_startup_query_count = nm_setting_bridge_get_multicast_startup_query_count (s_bridge),
|
|
||||||
.mcast_startup_query_interval = nm_setting_bridge_get_multicast_startup_query_interval (s_bridge),
|
.mcast_startup_query_interval = nm_setting_bridge_get_multicast_startup_query_interval (s_bridge),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
to_sysfs_group_address_sys (nm_setting_bridge_get_group_address (s_bridge), &props.group_addr);
|
||||||
|
|
||||||
r = nm_platform_link_bridge_add (nm_device_get_platform (device),
|
r = nm_platform_link_bridge_add (nm_device_get_platform (device),
|
||||||
iface,
|
iface,
|
||||||
hwaddr ? mac_address : NULL,
|
hwaddr ? mac_address : NULL,
|
||||||
|
|
|
@ -1301,20 +1301,27 @@ static NMPObject *
|
||||||
_parse_lnk_bridge (const char *kind, struct nlattr *info_data)
|
_parse_lnk_bridge (const char *kind, struct nlattr *info_data)
|
||||||
{
|
{
|
||||||
static const struct nla_policy policy[] = {
|
static const struct nla_policy policy[] = {
|
||||||
[IFLA_BR_STP_STATE] = { .type = NLA_U32 },
|
|
||||||
[IFLA_BR_FORWARD_DELAY] = { .type = NLA_U32 },
|
[IFLA_BR_FORWARD_DELAY] = { .type = NLA_U32 },
|
||||||
[IFLA_BR_HELLO_TIME] = { .type = NLA_U32 },
|
[IFLA_BR_HELLO_TIME] = { .type = NLA_U32 },
|
||||||
[IFLA_BR_MAX_AGE] = { .type = NLA_U32 },
|
[IFLA_BR_MAX_AGE] = { .type = NLA_U32 },
|
||||||
[IFLA_BR_AGEING_TIME] = { .type = NLA_U32 },
|
[IFLA_BR_AGEING_TIME] = { .type = NLA_U32 },
|
||||||
|
[IFLA_BR_STP_STATE] = { .type = NLA_U32 },
|
||||||
[IFLA_BR_PRIORITY] = { .type = NLA_U16 },
|
[IFLA_BR_PRIORITY] = { .type = NLA_U16 },
|
||||||
|
[IFLA_BR_VLAN_PROTOCOL] = { .type = NLA_U16 },
|
||||||
|
[IFLA_BR_VLAN_STATS_ENABLED] = { .type = NLA_U8 },
|
||||||
[IFLA_BR_GROUP_FWD_MASK] = { .type = NLA_U16 },
|
[IFLA_BR_GROUP_FWD_MASK] = { .type = NLA_U16 },
|
||||||
|
[IFLA_BR_GROUP_ADDR] = { .minlen = sizeof (NMEtherAddr) },
|
||||||
|
[IFLA_BR_MCAST_SNOOPING] = { .type = NLA_U8 },
|
||||||
|
[IFLA_BR_MCAST_ROUTER] = { .type = NLA_U8 },
|
||||||
|
[IFLA_BR_MCAST_QUERY_USE_IFADDR] = { .type = NLA_U8 },
|
||||||
|
[IFLA_BR_MCAST_QUERIER] = { .type = NLA_U8 },
|
||||||
[IFLA_BR_MCAST_LAST_MEMBER_CNT] = { .type = NLA_U32 },
|
[IFLA_BR_MCAST_LAST_MEMBER_CNT] = { .type = NLA_U32 },
|
||||||
|
[IFLA_BR_MCAST_STARTUP_QUERY_CNT] = { .type = NLA_U32 },
|
||||||
[IFLA_BR_MCAST_LAST_MEMBER_INTVL] = { .type = NLA_U64 },
|
[IFLA_BR_MCAST_LAST_MEMBER_INTVL] = { .type = NLA_U64 },
|
||||||
[IFLA_BR_MCAST_MEMBERSHIP_INTVL] = { .type = NLA_U64 },
|
[IFLA_BR_MCAST_MEMBERSHIP_INTVL] = { .type = NLA_U64 },
|
||||||
[IFLA_BR_MCAST_QUERIER_INTVL] = { .type = NLA_U64 },
|
[IFLA_BR_MCAST_QUERIER_INTVL] = { .type = NLA_U64 },
|
||||||
[IFLA_BR_MCAST_QUERY_INTVL] = { .type = NLA_U64 },
|
[IFLA_BR_MCAST_QUERY_INTVL] = { .type = NLA_U64 },
|
||||||
[IFLA_BR_MCAST_QUERY_RESPONSE_INTVL] = { .type = NLA_U64 },
|
[IFLA_BR_MCAST_QUERY_RESPONSE_INTVL] = { .type = NLA_U64 },
|
||||||
[IFLA_BR_MCAST_STARTUP_QUERY_CNT] = { .type = NLA_U32 },
|
|
||||||
[IFLA_BR_MCAST_STARTUP_QUERY_INTVL] = { .type = NLA_U64 },
|
[IFLA_BR_MCAST_STARTUP_QUERY_INTVL] = { .type = NLA_U64 },
|
||||||
};
|
};
|
||||||
NMPlatformLnkBridge *props;
|
NMPlatformLnkBridge *props;
|
||||||
|
@ -1331,9 +1338,8 @@ _parse_lnk_bridge (const char *kind, struct nlattr *info_data)
|
||||||
obj = nmp_object_new (NMP_OBJECT_TYPE_LNK_BRIDGE, NULL);
|
obj = nmp_object_new (NMP_OBJECT_TYPE_LNK_BRIDGE, NULL);
|
||||||
|
|
||||||
props = &obj->lnk_bridge;
|
props = &obj->lnk_bridge;
|
||||||
|
*props = nm_platform_lnk_bridge_default;
|
||||||
|
|
||||||
if (tb[IFLA_BR_STP_STATE])
|
|
||||||
props->stp_state = !!nla_get_u32 (tb[IFLA_BR_STP_STATE]);
|
|
||||||
if (tb[IFLA_BR_FORWARD_DELAY])
|
if (tb[IFLA_BR_FORWARD_DELAY])
|
||||||
props->forward_delay = nla_get_u32 (tb[IFLA_BR_FORWARD_DELAY]);
|
props->forward_delay = nla_get_u32 (tb[IFLA_BR_FORWARD_DELAY]);
|
||||||
if (tb[IFLA_BR_HELLO_TIME])
|
if (tb[IFLA_BR_HELLO_TIME])
|
||||||
|
@ -1342,44 +1348,42 @@ _parse_lnk_bridge (const char *kind, struct nlattr *info_data)
|
||||||
props->max_age = nla_get_u32 (tb[IFLA_BR_MAX_AGE]);
|
props->max_age = nla_get_u32 (tb[IFLA_BR_MAX_AGE]);
|
||||||
if (tb[IFLA_BR_AGEING_TIME])
|
if (tb[IFLA_BR_AGEING_TIME])
|
||||||
props->ageing_time = nla_get_u32 (tb[IFLA_BR_AGEING_TIME]);
|
props->ageing_time = nla_get_u32 (tb[IFLA_BR_AGEING_TIME]);
|
||||||
|
if (tb[IFLA_BR_STP_STATE])
|
||||||
|
props->stp_state = !!nla_get_u32 (tb[IFLA_BR_STP_STATE]);
|
||||||
if (tb[IFLA_BR_PRIORITY])
|
if (tb[IFLA_BR_PRIORITY])
|
||||||
props->priority = nla_get_u16 (tb[IFLA_BR_PRIORITY]);
|
props->priority = nla_get_u16 (tb[IFLA_BR_PRIORITY]);
|
||||||
|
if (tb[IFLA_BR_VLAN_PROTOCOL])
|
||||||
|
props->vlan_protocol = ntohs (nla_get_u16 (tb[IFLA_BR_VLAN_PROTOCOL]));
|
||||||
|
if (tb[IFLA_BR_VLAN_STATS_ENABLED])
|
||||||
|
props->vlan_stats_enabled = nla_get_u8 (tb[IFLA_BR_VLAN_STATS_ENABLED]);
|
||||||
if (tb[IFLA_BR_GROUP_FWD_MASK])
|
if (tb[IFLA_BR_GROUP_FWD_MASK])
|
||||||
props->group_fwd_mask = nla_get_u16 (tb[IFLA_BR_GROUP_FWD_MASK]);
|
props->group_fwd_mask = nla_get_u16 (tb[IFLA_BR_GROUP_FWD_MASK]);
|
||||||
else
|
if (tb[IFLA_BR_GROUP_ADDR])
|
||||||
props->group_fwd_mask = 0;
|
props->group_addr = *nla_data_as (NMEtherAddr, tb[IFLA_BR_GROUP_ADDR]);
|
||||||
|
if (tb[IFLA_BR_MCAST_SNOOPING])
|
||||||
|
props->mcast_snooping = !!nla_get_u8 (tb[IFLA_BR_MCAST_SNOOPING]);
|
||||||
|
if (tb[IFLA_BR_MCAST_ROUTER])
|
||||||
|
props->mcast_router = nla_get_u8 (tb[IFLA_BR_MCAST_ROUTER]);
|
||||||
|
if (tb[IFLA_BR_MCAST_QUERY_USE_IFADDR])
|
||||||
|
props->mcast_query_use_ifaddr = !!nla_get_u8 (tb[IFLA_BR_MCAST_QUERY_USE_IFADDR]);
|
||||||
|
if (tb[IFLA_BR_MCAST_QUERIER])
|
||||||
|
props->mcast_querier = nla_get_u8 (tb[IFLA_BR_MCAST_QUERIER]);
|
||||||
if (tb[IFLA_BR_MCAST_LAST_MEMBER_CNT])
|
if (tb[IFLA_BR_MCAST_LAST_MEMBER_CNT])
|
||||||
props->mcast_last_member_count = nla_get_u32 (tb[IFLA_BR_MCAST_LAST_MEMBER_CNT]);
|
props->mcast_last_member_count = nla_get_u32 (tb[IFLA_BR_MCAST_LAST_MEMBER_CNT]);
|
||||||
else
|
|
||||||
props->mcast_last_member_count = NM_BRIDGE_MULTICAST_LAST_MEMBER_COUNT_DEF;
|
|
||||||
if (tb[IFLA_BR_MCAST_LAST_MEMBER_INTVL])
|
|
||||||
props->mcast_last_member_interval = nla_get_u64 (tb[IFLA_BR_MCAST_LAST_MEMBER_INTVL]);
|
|
||||||
else
|
|
||||||
props->mcast_last_member_interval = NM_BRIDGE_MULTICAST_LAST_MEMBER_INTERVAL_DEF;
|
|
||||||
if (tb[IFLA_BR_MCAST_MEMBERSHIP_INTVL])
|
|
||||||
props->mcast_membership_interval = nla_get_u64 (tb[IFLA_BR_MCAST_MEMBERSHIP_INTVL]);
|
|
||||||
else
|
|
||||||
props->mcast_membership_interval = NM_BRIDGE_MULTICAST_MEMBERSHIP_INTERVAL_DEF;
|
|
||||||
if (tb[IFLA_BR_MCAST_QUERIER_INTVL])
|
|
||||||
props->mcast_querier_interval = nla_get_u64 (tb[IFLA_BR_MCAST_QUERIER_INTVL]);
|
|
||||||
else
|
|
||||||
props->mcast_querier_interval = NM_BRIDGE_MULTICAST_QUERIER_INTERVAL_DEF;
|
|
||||||
if (tb[IFLA_BR_MCAST_QUERY_INTVL])
|
|
||||||
props->mcast_query_interval = nla_get_u64 (tb[IFLA_BR_MCAST_QUERY_INTVL]);
|
|
||||||
else
|
|
||||||
props->mcast_query_interval = NM_BRIDGE_MULTICAST_QUERY_INTERVAL_DEF;
|
|
||||||
if (tb[IFLA_BR_MCAST_QUERY_RESPONSE_INTVL])
|
|
||||||
props->mcast_query_response_interval = nla_get_u64 (tb[IFLA_BR_MCAST_QUERY_RESPONSE_INTVL]);
|
|
||||||
else
|
|
||||||
props->mcast_query_response_interval = NM_BRIDGE_MULTICAST_QUERY_RESPONSE_INTERVAL_DEF;
|
|
||||||
if (tb[IFLA_BR_MCAST_STARTUP_QUERY_CNT])
|
if (tb[IFLA_BR_MCAST_STARTUP_QUERY_CNT])
|
||||||
props->mcast_startup_query_count = nla_get_u32 (tb[IFLA_BR_MCAST_STARTUP_QUERY_CNT]);
|
props->mcast_startup_query_count = nla_get_u32 (tb[IFLA_BR_MCAST_STARTUP_QUERY_CNT]);
|
||||||
else
|
if (tb[IFLA_BR_MCAST_LAST_MEMBER_INTVL])
|
||||||
props->mcast_startup_query_count = NM_BRIDGE_MULTICAST_STARTUP_QUERY_COUNT_DEF;
|
props->mcast_last_member_interval = nla_get_u64 (tb[IFLA_BR_MCAST_LAST_MEMBER_INTVL]);
|
||||||
|
if (tb[IFLA_BR_MCAST_MEMBERSHIP_INTVL])
|
||||||
|
props->mcast_membership_interval = nla_get_u64 (tb[IFLA_BR_MCAST_MEMBERSHIP_INTVL]);
|
||||||
|
if (tb[IFLA_BR_MCAST_QUERIER_INTVL])
|
||||||
|
props->mcast_querier_interval = nla_get_u64 (tb[IFLA_BR_MCAST_QUERIER_INTVL]);
|
||||||
|
if (tb[IFLA_BR_MCAST_QUERY_INTVL])
|
||||||
|
props->mcast_query_interval = nla_get_u64 (tb[IFLA_BR_MCAST_QUERY_INTVL]);
|
||||||
|
if (tb[IFLA_BR_MCAST_QUERY_RESPONSE_INTVL])
|
||||||
|
props->mcast_query_response_interval = nla_get_u64 (tb[IFLA_BR_MCAST_QUERY_RESPONSE_INTVL]);
|
||||||
if (tb[IFLA_BR_MCAST_STARTUP_QUERY_INTVL])
|
if (tb[IFLA_BR_MCAST_STARTUP_QUERY_INTVL])
|
||||||
props->mcast_startup_query_interval = nla_get_u64 (tb[IFLA_BR_MCAST_STARTUP_QUERY_INTVL]);
|
props->mcast_startup_query_interval = nla_get_u64 (tb[IFLA_BR_MCAST_STARTUP_QUERY_INTVL]);
|
||||||
else
|
|
||||||
props->mcast_startup_query_interval = NM_BRIDGE_MULTICAST_STARTUP_QUERY_INTERVAL_DEF;
|
|
||||||
|
|
||||||
return obj;
|
return obj;
|
||||||
}
|
}
|
||||||
|
@ -4054,20 +4058,27 @@ _nl_msg_new_link_set_linkinfo (struct nl_msg *msg,
|
||||||
if (!(data = nla_nest_start (msg, IFLA_INFO_DATA)))
|
if (!(data = nla_nest_start (msg, IFLA_INFO_DATA)))
|
||||||
goto nla_put_failure;
|
goto nla_put_failure;
|
||||||
|
|
||||||
NLA_PUT_U32 (msg, IFLA_BR_STP_STATE, !!props->stp_state);
|
|
||||||
NLA_PUT_U32 (msg, IFLA_BR_FORWARD_DELAY, props->forward_delay);
|
NLA_PUT_U32 (msg, IFLA_BR_FORWARD_DELAY, props->forward_delay);
|
||||||
NLA_PUT_U32 (msg, IFLA_BR_HELLO_TIME, props->hello_time);
|
NLA_PUT_U32 (msg, IFLA_BR_HELLO_TIME, props->hello_time);
|
||||||
NLA_PUT_U32 (msg, IFLA_BR_MAX_AGE, props->max_age);
|
NLA_PUT_U32 (msg, IFLA_BR_MAX_AGE, props->max_age);
|
||||||
NLA_PUT_U32 (msg, IFLA_BR_AGEING_TIME, props->ageing_time);
|
NLA_PUT_U32 (msg, IFLA_BR_AGEING_TIME, props->ageing_time);
|
||||||
|
NLA_PUT_U32 (msg, IFLA_BR_STP_STATE, !!props->stp_state);
|
||||||
NLA_PUT_U16 (msg, IFLA_BR_PRIORITY, props->priority);
|
NLA_PUT_U16 (msg, IFLA_BR_PRIORITY, props->priority);
|
||||||
|
NLA_PUT_U16 (msg, IFLA_BR_VLAN_PROTOCOL, htons (props->vlan_protocol));
|
||||||
|
NLA_PUT_U8 (msg, IFLA_BR_VLAN_STATS_ENABLED, !!props->vlan_stats_enabled);
|
||||||
NLA_PUT_U16 (msg, IFLA_BR_GROUP_FWD_MASK, props->group_fwd_mask);
|
NLA_PUT_U16 (msg, IFLA_BR_GROUP_FWD_MASK, props->group_fwd_mask);
|
||||||
|
NLA_PUT (msg, IFLA_BR_GROUP_ADDR, sizeof (props->group_addr), &props->group_addr);
|
||||||
|
NLA_PUT_U8 (msg, IFLA_BR_MCAST_SNOOPING, !!props->mcast_snooping);
|
||||||
|
NLA_PUT_U8 (msg, IFLA_BR_MCAST_ROUTER, props->mcast_router);
|
||||||
|
NLA_PUT_U8 (msg, IFLA_BR_MCAST_QUERY_USE_IFADDR, !!props->mcast_query_use_ifaddr);
|
||||||
|
NLA_PUT_U8 (msg, IFLA_BR_MCAST_QUERIER, !!props->mcast_querier);
|
||||||
NLA_PUT_U32 (msg, IFLA_BR_MCAST_LAST_MEMBER_CNT, props->mcast_last_member_count);
|
NLA_PUT_U32 (msg, IFLA_BR_MCAST_LAST_MEMBER_CNT, props->mcast_last_member_count);
|
||||||
|
NLA_PUT_U32 (msg, IFLA_BR_MCAST_STARTUP_QUERY_CNT, props->mcast_startup_query_count);
|
||||||
NLA_PUT_U64 (msg, IFLA_BR_MCAST_LAST_MEMBER_INTVL, props->mcast_last_member_interval);
|
NLA_PUT_U64 (msg, IFLA_BR_MCAST_LAST_MEMBER_INTVL, props->mcast_last_member_interval);
|
||||||
NLA_PUT_U64 (msg, IFLA_BR_MCAST_MEMBERSHIP_INTVL, props->mcast_membership_interval);
|
NLA_PUT_U64 (msg, IFLA_BR_MCAST_MEMBERSHIP_INTVL, props->mcast_membership_interval);
|
||||||
NLA_PUT_U64 (msg, IFLA_BR_MCAST_QUERIER_INTVL, props->mcast_querier_interval);
|
NLA_PUT_U64 (msg, IFLA_BR_MCAST_QUERIER_INTVL, props->mcast_querier_interval);
|
||||||
NLA_PUT_U64 (msg, IFLA_BR_MCAST_QUERY_INTVL, props->mcast_query_interval);
|
NLA_PUT_U64 (msg, IFLA_BR_MCAST_QUERY_INTVL, props->mcast_query_interval);
|
||||||
NLA_PUT_U64 (msg, IFLA_BR_MCAST_QUERY_RESPONSE_INTVL, props->mcast_query_response_interval);
|
NLA_PUT_U64 (msg, IFLA_BR_MCAST_QUERY_RESPONSE_INTVL, props->mcast_query_response_interval);
|
||||||
NLA_PUT_U32 (msg, IFLA_BR_MCAST_STARTUP_QUERY_CNT, props->mcast_startup_query_count);
|
|
||||||
NLA_PUT_U64 (msg, IFLA_BR_MCAST_STARTUP_QUERY_INTVL, props->mcast_startup_query_interval);
|
NLA_PUT_U64 (msg, IFLA_BR_MCAST_STARTUP_QUERY_INTVL, props->mcast_startup_query_interval);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -5383,20 +5383,27 @@ nm_platform_link_to_string (const NMPlatformLink *link, char *buf, gsize len)
|
||||||
}
|
}
|
||||||
|
|
||||||
const NMPlatformLnkBridge nm_platform_lnk_bridge_default = {
|
const NMPlatformLnkBridge nm_platform_lnk_bridge_default = {
|
||||||
.stp_state = FALSE,
|
|
||||||
.forward_delay = NM_BRIDGE_FORWARD_DELAY_DEF_SYS,
|
.forward_delay = NM_BRIDGE_FORWARD_DELAY_DEF_SYS,
|
||||||
.hello_time = NM_BRIDGE_HELLO_TIME_DEF_SYS,
|
.hello_time = NM_BRIDGE_HELLO_TIME_DEF_SYS,
|
||||||
.max_age = NM_BRIDGE_MAX_AGE_DEF_SYS,
|
.max_age = NM_BRIDGE_MAX_AGE_DEF_SYS,
|
||||||
.ageing_time = NM_BRIDGE_AGEING_TIME_DEF_SYS,
|
.ageing_time = NM_BRIDGE_AGEING_TIME_DEF_SYS,
|
||||||
|
.stp_state = FALSE,
|
||||||
.priority = NM_BRIDGE_PRIORITY_DEF,
|
.priority = NM_BRIDGE_PRIORITY_DEF,
|
||||||
|
.vlan_protocol = 0x8100,
|
||||||
|
.vlan_stats_enabled = FALSE,
|
||||||
.group_fwd_mask = 0,
|
.group_fwd_mask = 0,
|
||||||
|
.group_addr = NM_ETHER_ADDR_INIT (NM_BRIDGE_GROUP_ADDRESS_DEF_BIN),
|
||||||
|
.mcast_snooping = FALSE,
|
||||||
|
.mcast_router = 1,
|
||||||
|
.mcast_query_use_ifaddr = FALSE,
|
||||||
|
.mcast_querier = FALSE,
|
||||||
.mcast_last_member_count = NM_BRIDGE_MULTICAST_LAST_MEMBER_COUNT_DEF,
|
.mcast_last_member_count = NM_BRIDGE_MULTICAST_LAST_MEMBER_COUNT_DEF,
|
||||||
|
.mcast_startup_query_count = NM_BRIDGE_MULTICAST_STARTUP_QUERY_COUNT_DEF,
|
||||||
.mcast_last_member_interval = NM_BRIDGE_MULTICAST_LAST_MEMBER_INTERVAL_DEF,
|
.mcast_last_member_interval = NM_BRIDGE_MULTICAST_LAST_MEMBER_INTERVAL_DEF,
|
||||||
.mcast_membership_interval = NM_BRIDGE_MULTICAST_MEMBERSHIP_INTERVAL_DEF,
|
.mcast_membership_interval = NM_BRIDGE_MULTICAST_MEMBERSHIP_INTERVAL_DEF,
|
||||||
.mcast_querier_interval = NM_BRIDGE_MULTICAST_QUERIER_INTERVAL_DEF,
|
.mcast_querier_interval = NM_BRIDGE_MULTICAST_QUERIER_INTERVAL_DEF,
|
||||||
.mcast_query_interval = NM_BRIDGE_MULTICAST_QUERY_INTERVAL_DEF,
|
.mcast_query_interval = NM_BRIDGE_MULTICAST_QUERY_INTERVAL_DEF,
|
||||||
.mcast_query_response_interval = NM_BRIDGE_MULTICAST_QUERY_RESPONSE_INTERVAL_DEF,
|
.mcast_query_response_interval = NM_BRIDGE_MULTICAST_QUERY_RESPONSE_INTERVAL_DEF,
|
||||||
.mcast_startup_query_count = NM_BRIDGE_MULTICAST_STARTUP_QUERY_COUNT_DEF,
|
|
||||||
.mcast_startup_query_interval = NM_BRIDGE_MULTICAST_STARTUP_QUERY_INTERVAL_DEF,
|
.mcast_startup_query_interval = NM_BRIDGE_MULTICAST_STARTUP_QUERY_INTERVAL_DEF,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -5413,15 +5420,22 @@ nm_platform_lnk_bridge_to_string (const NMPlatformLnkBridge *lnk, char *buf, gsi
|
||||||
" ageing_time %u"
|
" ageing_time %u"
|
||||||
" stp_state %d"
|
" stp_state %d"
|
||||||
" priority %u"
|
" priority %u"
|
||||||
|
" vlan_protocol %u"
|
||||||
|
" vlan_stats_enabled %d"
|
||||||
" group_fwd_mask %#x"
|
" group_fwd_mask %#x"
|
||||||
|
" group_address "NM_ETHER_ADDR_FORMAT_STR
|
||||||
|
" mcast_snooping %d"
|
||||||
|
" mcast_router %u"
|
||||||
|
" mcast_query_use_ifaddr %d"
|
||||||
|
" mcast_querier %d"
|
||||||
" mcast_last_member_count %u"
|
" mcast_last_member_count %u"
|
||||||
" mcast_startup_query_count %u"
|
" mcast_startup_query_count %u"
|
||||||
" mcast_last_member_interval %"G_GUINT64_FORMAT""
|
" mcast_last_member_interval %"G_GUINT64_FORMAT
|
||||||
" mcast_membership_interval %"G_GUINT64_FORMAT""
|
" mcast_membership_interval %"G_GUINT64_FORMAT
|
||||||
" mcast_querier_interval %"G_GUINT64_FORMAT""
|
" mcast_querier_interval %"G_GUINT64_FORMAT
|
||||||
" mcast_query_interval %"G_GUINT64_FORMAT""
|
" mcast_query_interval %"G_GUINT64_FORMAT
|
||||||
" mcast_query_response_interval %"G_GUINT64_FORMAT""
|
" mcast_query_response_interval %"G_GUINT64_FORMAT
|
||||||
" mcast_startup_query_interval %"G_GUINT64_FORMAT""
|
" mcast_startup_query_interval %"G_GUINT64_FORMAT
|
||||||
"",
|
"",
|
||||||
lnk->forward_delay,
|
lnk->forward_delay,
|
||||||
lnk->hello_time,
|
lnk->hello_time,
|
||||||
|
@ -5429,7 +5443,14 @@ nm_platform_lnk_bridge_to_string (const NMPlatformLnkBridge *lnk, char *buf, gsi
|
||||||
lnk->ageing_time,
|
lnk->ageing_time,
|
||||||
(int) lnk->stp_state,
|
(int) lnk->stp_state,
|
||||||
lnk->priority,
|
lnk->priority,
|
||||||
|
lnk->vlan_protocol,
|
||||||
|
(int) lnk->vlan_stats_enabled,
|
||||||
lnk->group_fwd_mask,
|
lnk->group_fwd_mask,
|
||||||
|
NM_ETHER_ADDR_FORMAT_VAL (lnk->group_addr),
|
||||||
|
(int) lnk->mcast_snooping,
|
||||||
|
lnk->mcast_router,
|
||||||
|
(int) lnk->mcast_query_use_ifaddr,
|
||||||
|
(int) lnk->mcast_querier,
|
||||||
lnk->mcast_last_member_count,
|
lnk->mcast_last_member_count,
|
||||||
lnk->mcast_startup_query_count,
|
lnk->mcast_startup_query_count,
|
||||||
lnk->mcast_last_member_interval,
|
lnk->mcast_last_member_interval,
|
||||||
|
@ -6934,41 +6955,56 @@ void
|
||||||
nm_platform_lnk_bridge_hash_update (const NMPlatformLnkBridge *obj, NMHashState *h)
|
nm_platform_lnk_bridge_hash_update (const NMPlatformLnkBridge *obj, NMHashState *h)
|
||||||
{
|
{
|
||||||
nm_hash_update_vals (h,
|
nm_hash_update_vals (h,
|
||||||
(bool) obj->stp_state,
|
|
||||||
obj->forward_delay,
|
obj->forward_delay,
|
||||||
obj->hello_time,
|
obj->hello_time,
|
||||||
obj->max_age,
|
obj->max_age,
|
||||||
obj->ageing_time,
|
obj->ageing_time,
|
||||||
obj->priority,
|
obj->priority,
|
||||||
|
obj->vlan_protocol,
|
||||||
obj->group_fwd_mask,
|
obj->group_fwd_mask,
|
||||||
|
obj->group_addr,
|
||||||
obj->mcast_last_member_count,
|
obj->mcast_last_member_count,
|
||||||
|
obj->mcast_startup_query_count,
|
||||||
obj->mcast_last_member_interval,
|
obj->mcast_last_member_interval,
|
||||||
obj->mcast_membership_interval,
|
obj->mcast_membership_interval,
|
||||||
obj->mcast_querier_interval,
|
obj->mcast_querier_interval,
|
||||||
obj->mcast_query_interval,
|
obj->mcast_query_interval,
|
||||||
|
obj->mcast_router,
|
||||||
obj->mcast_query_response_interval,
|
obj->mcast_query_response_interval,
|
||||||
obj->mcast_startup_query_count,
|
obj->mcast_startup_query_interval,
|
||||||
obj->mcast_startup_query_interval);
|
NM_HASH_COMBINE_BOOLS (guint8,
|
||||||
|
obj->stp_state,
|
||||||
|
obj->mcast_querier,
|
||||||
|
obj->mcast_query_use_ifaddr,
|
||||||
|
obj->mcast_snooping,
|
||||||
|
obj->vlan_stats_enabled));
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
nm_platform_lnk_bridge_cmp (const NMPlatformLnkBridge *a, const NMPlatformLnkBridge *b)
|
nm_platform_lnk_bridge_cmp (const NMPlatformLnkBridge *a, const NMPlatformLnkBridge *b)
|
||||||
{
|
{
|
||||||
NM_CMP_SELF (a, b);
|
NM_CMP_SELF (a, b);
|
||||||
NM_CMP_FIELD_BOOL (a, b, stp_state);
|
|
||||||
NM_CMP_FIELD (a, b, forward_delay);
|
NM_CMP_FIELD (a, b, forward_delay);
|
||||||
NM_CMP_FIELD (a, b, hello_time);
|
NM_CMP_FIELD (a, b, hello_time);
|
||||||
NM_CMP_FIELD (a, b, max_age);
|
NM_CMP_FIELD (a, b, max_age);
|
||||||
NM_CMP_FIELD (a, b, ageing_time);
|
NM_CMP_FIELD (a, b, ageing_time);
|
||||||
|
NM_CMP_FIELD_BOOL (a, b, stp_state);
|
||||||
NM_CMP_FIELD (a, b, priority);
|
NM_CMP_FIELD (a, b, priority);
|
||||||
|
NM_CMP_FIELD (a, b, vlan_protocol);
|
||||||
|
NM_CMP_FIELD_BOOL (a, b, vlan_stats_enabled);
|
||||||
NM_CMP_FIELD (a, b, group_fwd_mask);
|
NM_CMP_FIELD (a, b, group_fwd_mask);
|
||||||
|
NM_CMP_FIELD_MEMCMP (a, b, group_addr);
|
||||||
|
NM_CMP_FIELD_BOOL (a, b, mcast_snooping);
|
||||||
|
NM_CMP_FIELD (a, b, mcast_router);
|
||||||
|
NM_CMP_FIELD_BOOL (a, b, mcast_query_use_ifaddr);
|
||||||
|
NM_CMP_FIELD_BOOL (a, b, mcast_querier);
|
||||||
NM_CMP_FIELD (a, b, mcast_last_member_count);
|
NM_CMP_FIELD (a, b, mcast_last_member_count);
|
||||||
|
NM_CMP_FIELD (a, b, mcast_startup_query_count);
|
||||||
NM_CMP_FIELD (a, b, mcast_last_member_interval);
|
NM_CMP_FIELD (a, b, mcast_last_member_interval);
|
||||||
NM_CMP_FIELD (a, b, mcast_membership_interval);
|
NM_CMP_FIELD (a, b, mcast_membership_interval);
|
||||||
NM_CMP_FIELD (a, b, mcast_querier_interval);
|
NM_CMP_FIELD (a, b, mcast_querier_interval);
|
||||||
NM_CMP_FIELD (a, b, mcast_query_interval);
|
NM_CMP_FIELD (a, b, mcast_query_interval);
|
||||||
NM_CMP_FIELD (a, b, mcast_query_response_interval);
|
NM_CMP_FIELD (a, b, mcast_query_response_interval);
|
||||||
NM_CMP_FIELD (a, b, mcast_startup_query_count);
|
|
||||||
NM_CMP_FIELD (a, b, mcast_startup_query_interval);
|
NM_CMP_FIELD (a, b, mcast_startup_query_interval);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -763,21 +763,28 @@ typedef struct {
|
||||||
} NMPlatformBridgeVlan;
|
} NMPlatformBridgeVlan;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
NMEtherAddr group_addr;
|
||||||
|
bool mcast_querier:1;
|
||||||
|
bool mcast_query_use_ifaddr:1;
|
||||||
|
bool mcast_snooping:1;
|
||||||
bool stp_state:1;
|
bool stp_state:1;
|
||||||
|
bool vlan_stats_enabled:1;
|
||||||
|
guint16 group_fwd_mask;
|
||||||
|
guint16 priority;
|
||||||
|
guint16 vlan_protocol;
|
||||||
|
guint32 ageing_time;
|
||||||
guint32 forward_delay;
|
guint32 forward_delay;
|
||||||
guint32 hello_time;
|
guint32 hello_time;
|
||||||
guint32 max_age;
|
guint32 max_age;
|
||||||
guint32 ageing_time;
|
|
||||||
guint16 priority;
|
|
||||||
guint16 group_fwd_mask;
|
|
||||||
guint32 mcast_last_member_count;
|
guint32 mcast_last_member_count;
|
||||||
|
guint32 mcast_startup_query_count;
|
||||||
guint64 mcast_last_member_interval;
|
guint64 mcast_last_member_interval;
|
||||||
guint64 mcast_membership_interval;
|
guint64 mcast_membership_interval;
|
||||||
guint64 mcast_querier_interval;
|
guint64 mcast_querier_interval;
|
||||||
guint64 mcast_query_interval;
|
guint64 mcast_query_interval;
|
||||||
guint64 mcast_query_response_interval;
|
guint64 mcast_query_response_interval;
|
||||||
guint32 mcast_startup_query_count;
|
|
||||||
guint64 mcast_startup_query_interval;
|
guint64 mcast_startup_query_interval;
|
||||||
|
guint8 mcast_router;
|
||||||
} NMPlatformLnkBridge;
|
} NMPlatformLnkBridge;
|
||||||
|
|
||||||
extern const NMPlatformLnkBridge nm_platform_lnk_bridge_default;
|
extern const NMPlatformLnkBridge nm_platform_lnk_bridge_default;
|
||||||
|
|
|
@ -1208,7 +1208,14 @@ nmtstp_link_bridge_add (NMPlatform *platform,
|
||||||
"ageing_time %u "
|
"ageing_time %u "
|
||||||
"stp_state %d "
|
"stp_state %d "
|
||||||
"priority %u "
|
"priority %u "
|
||||||
|
"vlan_protocol %u "
|
||||||
|
"vlan_stats_enabled %d "
|
||||||
"%s" /* group_fwd_mask */
|
"%s" /* group_fwd_mask */
|
||||||
|
"group_address "NM_ETHER_ADDR_FORMAT_STR" "
|
||||||
|
"mcast_snooping %d "
|
||||||
|
"mcast_router %u "
|
||||||
|
"mcast_query_use_ifaddr %d "
|
||||||
|
"mcast_querier %d "
|
||||||
"%s" /* mcast_last_member_count */
|
"%s" /* mcast_last_member_count */
|
||||||
"%s" /* mcast_startup_query_count */
|
"%s" /* mcast_startup_query_count */
|
||||||
"%s" /* mcast_last_member_interval */
|
"%s" /* mcast_last_member_interval */
|
||||||
|
@ -1225,9 +1232,16 @@ nmtstp_link_bridge_add (NMPlatform *platform,
|
||||||
lnk->ageing_time,
|
lnk->ageing_time,
|
||||||
(int) lnk->stp_state,
|
(int) lnk->stp_state,
|
||||||
lnk->priority,
|
lnk->priority,
|
||||||
|
lnk->vlan_protocol,
|
||||||
|
(int) lnk->vlan_stats_enabled,
|
||||||
lnk->group_fwd_mask != 0
|
lnk->group_fwd_mask != 0
|
||||||
? nm_sprintf_buf (sbuf_gfw, "group_fwd_mask %#x ", lnk->group_fwd_mask)
|
? nm_sprintf_buf (sbuf_gfw, "group_fwd_mask %#x ", lnk->group_fwd_mask)
|
||||||
: "",
|
: "",
|
||||||
|
NM_ETHER_ADDR_FORMAT_VAL (lnk->group_addr),
|
||||||
|
(int) lnk->mcast_snooping,
|
||||||
|
lnk->mcast_router,
|
||||||
|
(int) lnk->mcast_query_use_ifaddr,
|
||||||
|
(int) lnk->mcast_querier,
|
||||||
lnk->mcast_last_member_count != NM_BRIDGE_MULTICAST_LAST_MEMBER_COUNT_DEF
|
lnk->mcast_last_member_count != NM_BRIDGE_MULTICAST_LAST_MEMBER_COUNT_DEF
|
||||||
? nm_sprintf_buf (sbuf_mlmc, "mcast_last_member_count %u ",lnk->mcast_last_member_count)
|
? nm_sprintf_buf (sbuf_mlmc, "mcast_last_member_count %u ",lnk->mcast_last_member_count)
|
||||||
: "",
|
: "",
|
||||||
|
@ -1266,20 +1280,25 @@ nmtstp_link_bridge_add (NMPlatform *platform,
|
||||||
|
|
||||||
ll = NMP_OBJECT_CAST_LNK_BRIDGE (NMP_OBJECT_UP_CAST (pllink)->_link.netlink.lnk);
|
ll = NMP_OBJECT_CAST_LNK_BRIDGE (NMP_OBJECT_UP_CAST (pllink)->_link.netlink.lnk);
|
||||||
|
|
||||||
g_assert_cmpint (lnk->stp_state, ==, ll->stp_state);
|
|
||||||
g_assert_cmpint (lnk->forward_delay, ==, ll->forward_delay);
|
g_assert_cmpint (lnk->forward_delay, ==, ll->forward_delay);
|
||||||
g_assert_cmpint (lnk->hello_time, ==, ll->hello_time);
|
g_assert_cmpint (lnk->hello_time, ==, ll->hello_time);
|
||||||
g_assert_cmpint (lnk->max_age, ==, ll->max_age);
|
g_assert_cmpint (lnk->max_age, ==, ll->max_age);
|
||||||
g_assert_cmpint (lnk->ageing_time, ==, ll->ageing_time);
|
g_assert_cmpint (lnk->ageing_time, ==, ll->ageing_time);
|
||||||
|
g_assert_cmpint (lnk->stp_state, ==, ll->stp_state);
|
||||||
g_assert_cmpint (lnk->priority, ==, ll->priority);
|
g_assert_cmpint (lnk->priority, ==, ll->priority);
|
||||||
|
g_assert_cmpint (lnk->vlan_stats_enabled, ==, ll->vlan_stats_enabled);
|
||||||
g_assert_cmpint (lnk->group_fwd_mask, ==, ll->group_fwd_mask);
|
g_assert_cmpint (lnk->group_fwd_mask, ==, ll->group_fwd_mask);
|
||||||
|
g_assert_cmpint (lnk->mcast_snooping, ==, ll->mcast_snooping);
|
||||||
|
g_assert_cmpint (lnk->mcast_router, ==, ll->mcast_router);
|
||||||
|
g_assert_cmpint (lnk->mcast_query_use_ifaddr, ==, ll->mcast_query_use_ifaddr);
|
||||||
|
g_assert_cmpint (lnk->mcast_querier, ==, ll->mcast_querier);
|
||||||
g_assert_cmpint (lnk->mcast_last_member_count, ==, ll->mcast_last_member_count);
|
g_assert_cmpint (lnk->mcast_last_member_count, ==, ll->mcast_last_member_count);
|
||||||
|
g_assert_cmpint (lnk->mcast_startup_query_count, ==, ll->mcast_startup_query_count);
|
||||||
g_assert_cmpint (lnk->mcast_last_member_interval, ==, ll->mcast_last_member_interval);
|
g_assert_cmpint (lnk->mcast_last_member_interval, ==, ll->mcast_last_member_interval);
|
||||||
g_assert_cmpint (lnk->mcast_membership_interval, ==, ll->mcast_membership_interval);
|
g_assert_cmpint (lnk->mcast_membership_interval, ==, ll->mcast_membership_interval);
|
||||||
g_assert_cmpint (lnk->mcast_querier_interval, ==, ll->mcast_querier_interval);
|
g_assert_cmpint (lnk->mcast_querier_interval, ==, ll->mcast_querier_interval);
|
||||||
g_assert_cmpint (lnk->mcast_query_interval, ==, ll->mcast_query_interval);
|
g_assert_cmpint (lnk->mcast_query_interval, ==, ll->mcast_query_interval);
|
||||||
g_assert_cmpint (lnk->mcast_query_response_interval, ==, ll->mcast_query_response_interval);
|
g_assert_cmpint (lnk->mcast_query_response_interval, ==, ll->mcast_query_response_interval);
|
||||||
g_assert_cmpint (lnk->mcast_startup_query_count, ==, ll->mcast_startup_query_count);
|
|
||||||
g_assert_cmpint (lnk->mcast_startup_query_interval, ==, ll->mcast_startup_query_interval);
|
g_assert_cmpint (lnk->mcast_startup_query_interval, ==, ll->mcast_startup_query_interval);
|
||||||
|
|
||||||
return pllink;
|
return pllink;
|
||||||
|
|
|
@ -953,6 +953,7 @@ test_software_detect (gconstpointer user_data)
|
||||||
int r;
|
int r;
|
||||||
guint i_step;
|
guint i_step;
|
||||||
const gboolean ext = test_data->external_command;
|
const gboolean ext = test_data->external_command;
|
||||||
|
NMPlatformLnkBridge lnk_bridge = { };
|
||||||
NMPlatformLnkTun lnk_tun;
|
NMPlatformLnkTun lnk_tun;
|
||||||
NMPlatformLnkGre lnk_gre = { };
|
NMPlatformLnkGre lnk_gre = { };
|
||||||
nm_auto_close int tun_fd = -1;
|
nm_auto_close int tun_fd = -1;
|
||||||
|
@ -962,23 +963,29 @@ test_software_detect (gconstpointer user_data)
|
||||||
|
|
||||||
switch (test_data->link_type) {
|
switch (test_data->link_type) {
|
||||||
case NM_LINK_TYPE_BRIDGE: {
|
case NM_LINK_TYPE_BRIDGE: {
|
||||||
NMPlatformLnkBridge lnk_bridge = { };
|
|
||||||
gboolean not_supported;
|
gboolean not_supported;
|
||||||
|
|
||||||
lnk_bridge.stp_state = TRUE;
|
|
||||||
lnk_bridge.forward_delay = 1560;
|
lnk_bridge.forward_delay = 1560;
|
||||||
lnk_bridge.hello_time = 150;
|
lnk_bridge.hello_time = 150;
|
||||||
lnk_bridge.max_age = 2100;
|
lnk_bridge.max_age = 2100;
|
||||||
lnk_bridge.ageing_time = 2200;
|
lnk_bridge.ageing_time = 2200;
|
||||||
|
lnk_bridge.stp_state = TRUE;
|
||||||
lnk_bridge.priority = 22;
|
lnk_bridge.priority = 22;
|
||||||
|
lnk_bridge.vlan_protocol = 0x8100;
|
||||||
|
lnk_bridge.vlan_stats_enabled = TRUE;
|
||||||
lnk_bridge.group_fwd_mask = 8;
|
lnk_bridge.group_fwd_mask = 8;
|
||||||
|
lnk_bridge.group_addr = (NMEtherAddr) { { 0x01, 0x80, 0xC2, 0x00, 0x00, 0x08 } };
|
||||||
|
lnk_bridge.mcast_snooping = TRUE;
|
||||||
|
lnk_bridge.mcast_router = 1;
|
||||||
|
lnk_bridge.mcast_query_use_ifaddr = TRUE;
|
||||||
|
lnk_bridge.mcast_querier = TRUE;
|
||||||
lnk_bridge.mcast_last_member_count = 2;
|
lnk_bridge.mcast_last_member_count = 2;
|
||||||
|
lnk_bridge.mcast_startup_query_count = 3;
|
||||||
lnk_bridge.mcast_last_member_interval = 5000;
|
lnk_bridge.mcast_last_member_interval = 5000;
|
||||||
lnk_bridge.mcast_membership_interval = 25000;
|
lnk_bridge.mcast_membership_interval = 25000;
|
||||||
lnk_bridge.mcast_querier_interval = 26000;
|
lnk_bridge.mcast_querier_interval = 26000;
|
||||||
lnk_bridge.mcast_query_interval = 12000;
|
lnk_bridge.mcast_query_interval = 12000;
|
||||||
lnk_bridge.mcast_query_response_interval = 5200;
|
lnk_bridge.mcast_query_response_interval = 5200;
|
||||||
lnk_bridge.mcast_startup_query_count = 3;
|
|
||||||
lnk_bridge.mcast_startup_query_interval = 3000;
|
lnk_bridge.mcast_startup_query_interval = 3000;
|
||||||
|
|
||||||
if (!nmtstp_link_bridge_add (NULL, ext, DEVICE_NAME, &lnk_bridge, ¬_supported)) {
|
if (!nmtstp_link_bridge_add (NULL, ext, DEVICE_NAME, &lnk_bridge, ¬_supported)) {
|
||||||
|
@ -1359,20 +1366,27 @@ test_software_detect (gconstpointer user_data)
|
||||||
const NMPlatformLnkBridge *plnk = &lnk->lnk_bridge;
|
const NMPlatformLnkBridge *plnk = &lnk->lnk_bridge;
|
||||||
|
|
||||||
g_assert (plnk == nm_platform_link_get_lnk_bridge (NM_PLATFORM_GET, ifindex, NULL));
|
g_assert (plnk == nm_platform_link_get_lnk_bridge (NM_PLATFORM_GET, ifindex, NULL));
|
||||||
g_assert_cmpint (plnk->stp_state , ==, TRUE);
|
g_assert_cmpint (nm_platform_lnk_bridge_cmp (&lnk_bridge, plnk), ==, 0);
|
||||||
g_assert_cmpint (plnk->forward_delay , ==, 1560);
|
g_assert_cmpint (plnk->forward_delay , ==, 1560);
|
||||||
g_assert_cmpint (plnk->hello_time , ==, 150);
|
g_assert_cmpint (plnk->hello_time , ==, 150);
|
||||||
g_assert_cmpint (plnk->max_age , ==, 2100);
|
g_assert_cmpint (plnk->max_age , ==, 2100);
|
||||||
g_assert_cmpint (plnk->ageing_time , ==, 2200);
|
g_assert_cmpint (plnk->ageing_time , ==, 2200);
|
||||||
|
g_assert_cmpint (plnk->stp_state , ==, TRUE);
|
||||||
g_assert_cmpint (plnk->priority , ==, 22);
|
g_assert_cmpint (plnk->priority , ==, 22);
|
||||||
|
g_assert_cmpint (plnk->vlan_protocol , ==, 0x8100);
|
||||||
|
g_assert_cmpint (plnk->vlan_stats_enabled , ==, TRUE);
|
||||||
g_assert_cmpint (plnk->group_fwd_mask , ==, 8);
|
g_assert_cmpint (plnk->group_fwd_mask , ==, 8);
|
||||||
|
g_assert_cmpint (plnk->mcast_snooping , ==, TRUE);
|
||||||
|
g_assert_cmpint (plnk->mcast_router , ==, 1);
|
||||||
|
g_assert_cmpint (plnk->mcast_query_use_ifaddr , ==, TRUE);
|
||||||
|
g_assert_cmpint (plnk->mcast_querier , ==, TRUE);
|
||||||
g_assert_cmpint (plnk->mcast_last_member_count , ==, 2);
|
g_assert_cmpint (plnk->mcast_last_member_count , ==, 2);
|
||||||
|
g_assert_cmpint (plnk->mcast_startup_query_count , ==, 3);
|
||||||
g_assert_cmpint (plnk->mcast_last_member_interval , ==, 5000);
|
g_assert_cmpint (plnk->mcast_last_member_interval , ==, 5000);
|
||||||
g_assert_cmpint (plnk->mcast_membership_interval , ==, 25000);
|
g_assert_cmpint (plnk->mcast_membership_interval , ==, 25000);
|
||||||
g_assert_cmpint (plnk->mcast_querier_interval , ==, 26000);
|
g_assert_cmpint (plnk->mcast_querier_interval , ==, 26000);
|
||||||
g_assert_cmpint (plnk->mcast_query_interval , ==, 12000);
|
g_assert_cmpint (plnk->mcast_query_interval , ==, 12000);
|
||||||
g_assert_cmpint (plnk->mcast_query_response_interval , ==, 5200);
|
g_assert_cmpint (plnk->mcast_query_response_interval , ==, 5200);
|
||||||
g_assert_cmpint (plnk->mcast_startup_query_count , ==, 3);
|
|
||||||
g_assert_cmpint (plnk->mcast_startup_query_interval , ==, 3000);
|
g_assert_cmpint (plnk->mcast_startup_query_interval , ==, 3000);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in a new issue