summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2022-07-27 13:50:43 +0200
committerThomas Haller <thaller@redhat.com>2022-08-09 08:02:49 +0200
commitec64559caab3057d32a38e1ec7ed813764be10b4 (patch)
treeb3e9622bc423da75a00e7a762e52c5fc3c71070b
parent3a8864a5858df5628b77c4e8900816c741a4d473 (diff)
downloadNetworkManager-ec64559caab3057d32a38e1ec7ed813764be10b4.tar.gz
platform: add hash functions for NMPlatformMptcpAddr instances
We already have two hash functions for MPTCP addresses: nmp_object_id_hash*() which compares the identity of objects and nm_platform_mptcp_addr_hash*(), which compares all fields. There is also a need to hash only the address. Add it. Will be used next.
-rw-r--r--src/libnm-platform/nm-platform.c22
-rw-r--r--src/libnm-platform/nm-platform.h3
2 files changed, 25 insertions, 0 deletions
diff --git a/src/libnm-platform/nm-platform.c b/src/libnm-platform/nm-platform.c
index cceabb7f9b..e6cba638b4 100644
--- a/src/libnm-platform/nm-platform.c
+++ b/src/libnm-platform/nm-platform.c
@@ -7806,6 +7806,28 @@ nm_platform_mptcp_addr_cmp(const NMPlatformMptcpAddr *a, const NMPlatformMptcpAd
return 0;
}
+guint
+nm_platform_mptcp_addr_index_addr_cmp(gconstpointer data)
+{
+ const NMPlatformMptcpAddr *mptcp_addr = data;
+ NMHashState h;
+
+ nm_hash_init(&h, 1408914077u);
+ nm_hash_update_val(&h, mptcp_addr->addr_family);
+ nm_hash_update(&h, &mptcp_addr->addr, nm_utils_addr_family_to_size(mptcp_addr->addr_family));
+ return nm_hash_complete(&h);
+}
+
+gboolean
+nm_platform_mptcp_addr_index_addr_equal(gconstpointer data_a, gconstpointer data_b)
+{
+ const NMPlatformMptcpAddr *mptcp_addr_a = data_a;
+ const NMPlatformMptcpAddr *mptcp_addr_b = data_b;
+
+ return mptcp_addr_a->addr_family == mptcp_addr_b->addr_family
+ && nm_ip_addr_equal(mptcp_addr_a->addr_family, &mptcp_addr_a->addr, &mptcp_addr_b->addr);
+}
+
const char *
nm_platform_vf_to_string(const NMPlatformVF *vf, char *buf, gsize len)
{
diff --git a/src/libnm-platform/nm-platform.h b/src/libnm-platform/nm-platform.h
index 367f4316d1..a4aebee573 100644
--- a/src/libnm-platform/nm-platform.h
+++ b/src/libnm-platform/nm-platform.h
@@ -2589,6 +2589,9 @@ void nm_platform_tfilter_hash_update(const NMPlatformTfilter *obj, NMHashState *
void nm_platform_mptcp_addr_hash_update(const NMPlatformMptcpAddr *obj, NMHashState *h);
+guint nm_platform_mptcp_addr_index_addr_cmp(gconstpointer data);
+gboolean nm_platform_mptcp_addr_index_addr_equal(gconstpointer data_a, gconstpointer data_b);
+
#define NM_PLATFORM_LINK_FLAGS2STR_MAX_LEN ((gsize) 162)
const char *nm_platform_link_flags2str(unsigned flags, char *buf, gsize len);