From 928a80ef266f5aeb53a373cffb86f62e85813e9f Mon Sep 17 00:00:00 2001 From: mitmitmitm Date: Tue, 23 May 2023 11:18:04 +0200 Subject: [PATCH] [PFCP] Support PFCP advertise address in F-SEID --- lib/pfcp/conv.c | 8 +++++--- lib/pfcp/conv.h | 4 +--- src/sgwc/sxa-build.c | 4 +--- src/sgwu/sxa-build.c | 4 +--- src/smf/n4-build.c | 4 +--- src/upf/n4-build.c | 4 +--- 6 files changed, 10 insertions(+), 18 deletions(-) diff --git a/lib/pfcp/conv.c b/lib/pfcp/conv.c index 222b36ee2..54563c725 100644 --- a/lib/pfcp/conv.c +++ b/lib/pfcp/conv.c @@ -152,11 +152,13 @@ int ogs_pfcp_f_seid_to_sockaddr( return OGS_OK; } -int ogs_pfcp_sockaddr_to_f_seid( - ogs_sockaddr_t *addr, ogs_sockaddr_t *addr6, - ogs_pfcp_f_seid_t *f_seid, int *len) +int ogs_pfcp_sockaddr_to_f_seid(ogs_pfcp_f_seid_t *f_seid, int *len) { const int hdr_len = 9; + ogs_sockaddr_t *advertise = ogs_pfcp_self()->pfcp_advertise; + ogs_sockaddr_t *advertise6 = ogs_pfcp_self()->pfcp_advertise6; + ogs_sockaddr_t *addr = advertise ? advertise : ogs_pfcp_self()->pfcp_addr; + ogs_sockaddr_t *addr6 = advertise6 ? advertise6 : ogs_pfcp_self()->pfcp_addr6; ogs_assert(f_seid); diff --git a/lib/pfcp/conv.h b/lib/pfcp/conv.h index af29dffa8..e34860b2c 100644 --- a/lib/pfcp/conv.h +++ b/lib/pfcp/conv.h @@ -32,9 +32,7 @@ int ogs_pfcp_sockaddr_to_node_id(ogs_pfcp_node_id_t *node_id, int *len); int ogs_pfcp_f_seid_to_sockaddr( ogs_pfcp_f_seid_t *f_seid, uint16_t port, ogs_sockaddr_t **list); -int ogs_pfcp_sockaddr_to_f_seid( - ogs_sockaddr_t *addr, ogs_sockaddr_t *addr6, - ogs_pfcp_f_seid_t *f_seid, int *len); +int ogs_pfcp_sockaddr_to_f_seid(ogs_pfcp_f_seid_t *f_seid, int *len); int ogs_pfcp_f_seid_to_ip(ogs_pfcp_f_seid_t *f_seid, ogs_ip_t *ip); int ogs_pfcp_sockaddr_to_f_teid( diff --git a/src/sgwc/sxa-build.c b/src/sgwc/sxa-build.c index 795e9661b..41675e3e3 100644 --- a/src/sgwc/sxa-build.c +++ b/src/sgwc/sxa-build.c @@ -59,9 +59,7 @@ ogs_pkbuf_t *sgwc_sxa_build_session_establishment_request( req->node_id.len = len; /* F-SEID */ - rv = ogs_pfcp_sockaddr_to_f_seid( - ogs_pfcp_self()->pfcp_addr, ogs_pfcp_self()->pfcp_addr6, - &f_seid, &len); + rv = ogs_pfcp_sockaddr_to_f_seid(&f_seid, &len); if (rv != OGS_OK) { ogs_error("ogs_pfcp_sockaddr_to_f_seid() failed"); ogs_free(pfcp_message); diff --git a/src/sgwu/sxa-build.c b/src/sgwu/sxa-build.c index ef585f979..d61fa8d1f 100644 --- a/src/sgwu/sxa-build.c +++ b/src/sgwu/sxa-build.c @@ -58,9 +58,7 @@ ogs_pkbuf_t *sgwu_sxa_build_session_establishment_response(uint8_t type, rsp->cause.u8 = OGS_PFCP_CAUSE_REQUEST_ACCEPTED; /* F-SEID */ - rv = ogs_pfcp_sockaddr_to_f_seid( - ogs_pfcp_self()->pfcp_addr, ogs_pfcp_self()->pfcp_addr6, - &f_seid, &len); + rv = ogs_pfcp_sockaddr_to_f_seid(&f_seid, &len); if (rv != OGS_OK) { ogs_error("ogs_pfcp_sockaddr_to_f_seid() failed"); ogs_free(pfcp_message); diff --git a/src/smf/n4-build.c b/src/smf/n4-build.c index b37003d4e..675d9cdfc 100644 --- a/src/smf/n4-build.c +++ b/src/smf/n4-build.c @@ -68,9 +68,7 @@ ogs_pkbuf_t *smf_n4_build_session_establishment_request( req->node_id.len = len; /* F-SEID */ - rv = ogs_pfcp_sockaddr_to_f_seid( - ogs_pfcp_self()->pfcp_addr, ogs_pfcp_self()->pfcp_addr6, - &f_seid, &len); + rv = ogs_pfcp_sockaddr_to_f_seid(&f_seid, &len); if (rv != OGS_OK) { ogs_error("ogs_pfcp_sockaddr_to_f_seid() failed"); ogs_free(pfcp_message); diff --git a/src/upf/n4-build.c b/src/upf/n4-build.c index 005e4a9d3..bc1be77ab 100644 --- a/src/upf/n4-build.c +++ b/src/upf/n4-build.c @@ -54,9 +54,7 @@ ogs_pkbuf_t *upf_n4_build_session_establishment_response(uint8_t type, rsp->cause.u8 = OGS_PFCP_CAUSE_REQUEST_ACCEPTED; /* F-SEID */ - ogs_pfcp_sockaddr_to_f_seid( - ogs_pfcp_self()->pfcp_addr, ogs_pfcp_self()->pfcp_addr6, - &f_seid, &len); + ogs_pfcp_sockaddr_to_f_seid(&f_seid, &len); f_seid.seid = htobe64(sess->upf_n4_seid); rsp->up_f_seid.presence = 1; rsp->up_f_seid.data = &f_seid;