From ec64559caab3057d32a38e1ec7ed813764be10b4 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Wed, 27 Jul 2022 13:50:43 +0200 Subject: [PATCH] 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. --- src/libnm-platform/nm-platform.c | 22 ++++++++++++++++++++++ src/libnm-platform/nm-platform.h | 3 +++ 2 files changed, 25 insertions(+) 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);