diff --git a/lib/proto/conv.c b/lib/proto/conv.c index bfebd61ba..bf7344a49 100644 --- a/lib/proto/conv.c +++ b/lib/proto/conv.c @@ -69,3 +69,20 @@ int ogs_paa_to_ip(const ogs_paa_t *paa, ogs_ip_t *ip) return OGS_OK; } +int ogs_ip_to_paa(const ogs_ip_t *ip, ogs_paa_t *paa) +{ + if (ip->ipv4 && ip->ipv6) { + paa->session_type = OGS_PDU_SESSION_TYPE_IPV4V6; + paa->both.addr = ip->addr; + memcpy(paa->both.addr6, ip->addr6, OGS_IPV6_LEN); + } else if (ip->ipv6) { + paa->session_type = OGS_PDU_SESSION_TYPE_IPV6; + memcpy(paa->addr6, ip->addr6, OGS_IPV6_LEN); + } else if (ip->ipv4) { + paa->session_type = OGS_PDU_SESSION_TYPE_IPV4; + paa->addr = ip->addr; + } else { + return OGS_ERROR; + } + return OGS_OK; +} diff --git a/lib/proto/conv.h b/lib/proto/conv.h index ec16beace..d3a89a1cb 100644 --- a/lib/proto/conv.h +++ b/lib/proto/conv.h @@ -31,6 +31,7 @@ extern "C" { void ogs_extract_digit_from_string(char *digit, char *string); int ogs_paa_to_ip(const ogs_paa_t *paa, ogs_ip_t *ip); +int ogs_ip_to_paa(const ogs_ip_t *ip, ogs_paa_t *paa); #ifdef __cplusplus }