diff options
author | Sayed Shah <sayshah@redhat.com> | 2020-08-20 09:40:17 -0400 |
---|---|---|
committer | Beniamino Galvani <bgalvani@redhat.com> | 2020-09-15 13:41:29 +0200 |
commit | 518187e8db005334b6a650491142188d37bf97f6 (patch) | |
tree | 79026fe25172fcb3dac100ad0159dff2562f3c9d | |
parent | 88425e569f42043e079c596de029fcd3981ccde6 (diff) | |
download | NetworkManager-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.c | 1 | ||||
-rw-r--r-- | src/platform/nm-linux-platform.c | 4 | ||||
-rw-r--r-- | src/platform/nm-platform.c | 5 | ||||
-rw-r--r-- | src/platform/nm-platform.h | 1 | ||||
-rw-r--r-- | src/platform/tests/test-common.c | 6 | ||||
-rw-r--r-- | src/platform/tests/test-link.c | 4 |
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); |