summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSayed Shah <sayshah@redhat.com>2020-08-20 09:40:17 -0400
committerBeniamino Galvani <bgalvani@redhat.com>2020-09-15 13:41:29 +0200
commit518187e8db005334b6a650491142188d37bf97f6 (patch)
tree79026fe25172fcb3dac100ad0159dff2562f3c9d
parent88425e569f42043e079c596de029fcd3981ccde6 (diff)
downloadNetworkManager-518187e8db005334b6a650491142188d37bf97f6.tar.gz
platform: add support for mcast_hash_max netlink attribute for bridges
Adding the mcast_hash_max property. The value must be the power of 2. https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/624
-rw-r--r--src/devices/nm-device-bridge.c1
-rw-r--r--src/platform/nm-linux-platform.c4
-rw-r--r--src/platform/nm-platform.c5
-rw-r--r--src/platform/nm-platform.h1
-rw-r--r--src/platform/tests/test-common.c6
-rw-r--r--src/platform/tests/test-link.c4
6 files changed, 21 insertions, 0 deletions
diff --git a/src/devices/nm-device-bridge.c b/src/devices/nm-device-bridge.c
index 3fc60879f7..4f9cb799ba 100644
--- a/src/devices/nm-device-bridge.c
+++ b/src/devices/nm-device-bridge.c
@@ -1072,6 +1072,7 @@ create_and_realize (NMDevice *device,
.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_hash_max = nm_setting_bridge_get_multicast_hash_max (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),
diff --git a/src/platform/nm-linux-platform.c b/src/platform/nm-linux-platform.c
index 3e773775c6..cca44ff5eb 100644
--- a/src/platform/nm-linux-platform.c
+++ b/src/platform/nm-linux-platform.c
@@ -1317,6 +1317,7 @@ _parse_lnk_bridge (const char *kind, struct nlattr *info_data)
[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_HASH_MAX] = { .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 },
@@ -1377,6 +1378,8 @@ _parse_lnk_bridge (const char *kind, struct nlattr *info_data)
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_HASH_MAX])
+ props->mcast_hash_max = nla_get_u32 (tb[IFLA_BR_MCAST_HASH_MAX]);
if (tb[IFLA_BR_MCAST_LAST_MEMBER_CNT])
props->mcast_last_member_count = nla_get_u32 (tb[IFLA_BR_MCAST_LAST_MEMBER_CNT]);
if (tb[IFLA_BR_MCAST_STARTUP_QUERY_CNT])
@@ -4082,6 +4085,7 @@ _nl_msg_new_link_set_linkinfo (struct nl_msg *msg,
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_HASH_MAX, props->mcast_hash_max);
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);
diff --git a/src/platform/nm-platform.c b/src/platform/nm-platform.c
index c75fb1a947..83e9c1021d 100644
--- a/src/platform/nm-platform.c
+++ b/src/platform/nm-platform.c
@@ -5434,6 +5434,7 @@ const NMPlatformLnkBridge nm_platform_lnk_bridge_default = {
.mcast_router = 1,
.mcast_query_use_ifaddr = NM_BRIDGE_MULTICAST_QUERY_USE_IFADDR_DEF,
.mcast_querier = NM_BRIDGE_MULTICAST_QUERIER_DEF,
+ .mcast_hash_max = NM_BRIDGE_MULTICAST_HASH_MAX_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,
@@ -5465,6 +5466,7 @@ nm_platform_lnk_bridge_to_string (const NMPlatformLnkBridge *lnk, char *buf, gsi
" mcast_router %u"
" mcast_query_use_ifaddr %d"
" mcast_querier %d"
+ " mcast_hash_max %u"
" mcast_last_member_count %u"
" mcast_startup_query_count %u"
" mcast_last_member_interval %"G_GUINT64_FORMAT
@@ -5488,6 +5490,7 @@ nm_platform_lnk_bridge_to_string (const NMPlatformLnkBridge *lnk, char *buf, gsi
lnk->mcast_router,
(int) lnk->mcast_query_use_ifaddr,
(int) lnk->mcast_querier,
+ lnk->mcast_hash_max,
lnk->mcast_last_member_count,
lnk->mcast_startup_query_count,
lnk->mcast_last_member_interval,
@@ -7000,6 +7003,7 @@ nm_platform_lnk_bridge_hash_update (const NMPlatformLnkBridge *obj, NMHashState
obj->vlan_protocol,
obj->group_fwd_mask,
obj->group_addr,
+ obj->mcast_hash_max,
obj->mcast_last_member_count,
obj->mcast_startup_query_count,
obj->mcast_last_member_interval,
@@ -7035,6 +7039,7 @@ nm_platform_lnk_bridge_cmp (const NMPlatformLnkBridge *a, const NMPlatformLnkBri
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_hash_max);
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);
diff --git a/src/platform/nm-platform.h b/src/platform/nm-platform.h
index 41b950ea02..d0e9123619 100644
--- a/src/platform/nm-platform.h
+++ b/src/platform/nm-platform.h
@@ -780,6 +780,7 @@ typedef struct {
guint32 max_age;
guint32 mcast_last_member_count;
guint32 mcast_startup_query_count;
+ guint32 mcast_hash_max;
guint64 mcast_last_member_interval;
guint64 mcast_membership_interval;
guint64 mcast_querier_interval;
diff --git a/src/platform/tests/test-common.c b/src/platform/tests/test-common.c
index c6b0744aed..6452e9bd6e 100644
--- a/src/platform/tests/test-common.c
+++ b/src/platform/tests/test-common.c
@@ -1190,6 +1190,7 @@ nmtstp_link_bridge_add (NMPlatform *platform,
if (external_command) {
char sbuf_gfw[100];
+ char sbuf_mhm[100];
char sbuf_mlmc[100];
char sbuf_mlmi[100];
char sbuf_mmi[100];
@@ -1214,6 +1215,7 @@ nmtstp_link_bridge_add (NMPlatform *platform,
"mcast_router %u "
"mcast_query_use_ifaddr %d "
"mcast_querier %d "
+ "%s" /* mcast_hash_max */
"%s" /* mcast_last_member_count */
"%s" /* mcast_startup_query_count */
"%s" /* mcast_last_member_interval */
@@ -1240,6 +1242,9 @@ nmtstp_link_bridge_add (NMPlatform *platform,
lnk->mcast_router,
(int) lnk->mcast_query_use_ifaddr,
(int) lnk->mcast_querier,
+ lnk->mcast_hash_max != NM_BRIDGE_MULTICAST_HASH_MAX_DEF
+ ? nm_sprintf_buf (sbuf_mhm, "mcast_hash_max %u ",lnk->mcast_hash_max)
+ : "",
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)
: "",
@@ -1290,6 +1295,7 @@ nmtstp_link_bridge_add (NMPlatform *platform,
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_hash_max, ==, ll->mcast_hash_max);
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);
diff --git a/src/platform/tests/test-link.c b/src/platform/tests/test-link.c
index b1a343dfab..519f43ca9d 100644
--- a/src/platform/tests/test-link.c
+++ b/src/platform/tests/test-link.c
@@ -964,6 +964,7 @@ test_software_detect (gconstpointer user_data)
switch (test_data->link_type) {
case NM_LINK_TYPE_BRIDGE:
+
lnk_bridge.forward_delay = 1560;
lnk_bridge.hello_time = 150;
lnk_bridge.max_age = 2100;
@@ -980,6 +981,7 @@ test_software_detect (gconstpointer user_data)
lnk_bridge.mcast_router = 1;
lnk_bridge.mcast_query_use_ifaddr = TRUE;
lnk_bridge.mcast_querier = TRUE;
+ lnk_bridge.mcast_hash_max = 1024;
lnk_bridge.mcast_last_member_count = 2;
lnk_bridge.mcast_startup_query_count = 3;
lnk_bridge.mcast_last_member_interval = 5000;
@@ -1362,6 +1364,7 @@ test_software_detect (gconstpointer user_data)
const NMPlatformLnkBridge *plnk = &lnk->lnk_bridge;
g_assert (plnk == nm_platform_link_get_lnk_bridge (NM_PLATFORM_GET, ifindex, NULL));
+ g_assert_cmpint (nm_platform_lnk_bridge_cmp (&lnk_bridge, plnk), ==, 0);
g_assert_cmpint (plnk->forward_delay , ==, 1560);
g_assert_cmpint (plnk->hello_time , ==, 150);
g_assert_cmpint (plnk->max_age , ==, 2100);
@@ -1375,6 +1378,7 @@ test_software_detect (gconstpointer user_data)
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_hash_max , ==, 1024);
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);