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.
This commit is contained in:
Thomas Haller 2022-07-27 13:50:43 +02:00
parent 3a8864a585
commit ec64559caa
No known key found for this signature in database
GPG key ID: 29C2366E4DFC5728
2 changed files with 25 additions and 0 deletions

View file

@ -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)
{

View file

@ -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);