From 3b8fc0d69421654f75347d4627728aeb95f03a99 Mon Sep 17 00:00:00 2001 From: Neels Hofmeyr Date: Fri, 17 Jun 2022 13:30:12 +0200 Subject: add osmo_pfcp_ie_f_seid_cmp Related: SYS#5599 Change-Id: Iacaeebfad0fe77788da40c3ed7da2ffa3b27043c --- include/osmocom/pfcp/pfcp_ies_custom.h | 1 + src/libosmo-pfcp/pfcp_ies_custom.c | 25 +++++++++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/include/osmocom/pfcp/pfcp_ies_custom.h b/include/osmocom/pfcp/pfcp_ies_custom.h index 08e62d1..f273a87 100644 --- a/include/osmocom/pfcp/pfcp_ies_custom.h +++ b/include/osmocom/pfcp/pfcp_ies_custom.h @@ -87,6 +87,7 @@ struct osmo_pfcp_ie_f_seid { void osmo_pfcp_ie_f_seid_set(struct osmo_pfcp_ie_f_seid *f_seid, uint64_t seid, const struct osmo_sockaddr *remote_addr); +int osmo_pfcp_ie_f_seid_cmp(const struct osmo_pfcp_ie_f_seid *a, const struct osmo_pfcp_ie_f_seid *b); /* 3GPP TS 29.244 8.3.2 */ struct osmo_pfcp_ie_f_teid { diff --git a/src/libosmo-pfcp/pfcp_ies_custom.c b/src/libosmo-pfcp/pfcp_ies_custom.c index 3b3769a..0175c6f 100644 --- a/src/libosmo-pfcp/pfcp_ies_custom.c +++ b/src/libosmo-pfcp/pfcp_ies_custom.c @@ -89,6 +89,31 @@ void osmo_pfcp_ie_f_seid_set(struct osmo_pfcp_ie_f_seid *f_seid, uint64_t seid, osmo_pfcp_ip_addrs_set(&f_seid->ip_addr, remote_addr); } +int osmo_pfcp_ie_f_seid_cmp(const struct osmo_pfcp_ie_f_seid *a, const struct osmo_pfcp_ie_f_seid *b) +{ + int rc; + if (a == b) + return 0; + if (!a) + return -1; + if (!b) + return 1; + /* It suffices if one of the IP addresses match */ + if (a->ip_addr.v4_present && b->ip_addr.v4_present) + rc = osmo_sockaddr_cmp(&a->ip_addr.v4, &b->ip_addr.v4); + else if (a->ip_addr.v6_present && b->ip_addr.v6_present) + rc = osmo_sockaddr_cmp(&a->ip_addr.v6, &b->ip_addr.v6); + else + rc = (a->ip_addr.v4_present ? -1 : 1); + if (rc) + return rc; + if (a->seid < b->seid) + return -1; + if (a->seid > b->seid) + return 1; + return 0; +} + int osmo_pfcp_dec_cause(void *decoded_struct, void *decode_to, const struct osmo_gtlv_load *tlv) { enum osmo_pfcp_cause *cause = decode_to; -- cgit v1.2.3