apply refactoring of osmo_pfcp_endpoint API

libosmo-pfcp If80c35c6a942bf9593781b5a6bc28ba37323ce5e changes the
osmo_pfcp_endpoint API, apply the necessary changes here.

Related: SYS#5599
Depends: If80c35c6a942bf9593781b5a6bc28ba37323ce5e (libosmo-pfcp)
Change-Id: I01deb3f347435c9fa1c49e9a0c5ef70742444ad4
This commit is contained in:
Neels Hofmeyr
2022-07-23 13:47:58 +02:00
parent 665e8874f4
commit 506b763094
5 changed files with 44 additions and 35 deletions

View File

@@ -344,8 +344,7 @@ int main(int argc, char **argv)
do {
if (pfcp_tool_mainloop())
break;
} while (!llist_empty(&g_pfcp_tool->ep->sent_requests)
|| !llist_empty(&g_pfcp_tool->ep->sent_responses));
} while (osmo_pfcp_endpoint_retrans_queue_is_busy(g_pfcp_tool->ep));
printf("Done\n");
} else {
printf("Listening for commands on VTY...\n");

View File

@@ -48,7 +48,7 @@ DEFUN(c_local_addr, c_local_addr_cmd,
{
if (g_pfcp_tool->ep != NULL) {
vty_out(vty, "Already listening on %s%s",
osmo_sockaddr_to_str_c(OTC_SELECT, &g_pfcp_tool->ep->cfg.local_addr),
osmo_sockaddr_to_str_c(OTC_SELECT, osmo_pfcp_endpoint_get_local_addr(g_pfcp_tool->ep)),
VTY_NEWLINE);
return CMD_WARNING;
}
@@ -63,38 +63,43 @@ DEFUN(c_listen, c_listen_cmd,
"Bind local PFCP port and listen; see also 'local-addr'\n")
{
struct osmo_sockaddr_str local_addr;
struct osmo_pfcp_endpoint_cfg cfg;
int rc;
OSMO_ASSERT(g_pfcp_tool);
if (g_pfcp_tool->ep != NULL) {
vty_out(vty, "Already listening on %s%s",
osmo_sockaddr_to_str_c(OTC_SELECT, &g_pfcp_tool->ep->cfg.local_addr),
osmo_sockaddr_to_str_c(OTC_SELECT, osmo_pfcp_endpoint_get_local_addr(g_pfcp_tool->ep)),
VTY_NEWLINE);
return CMD_WARNING;
}
g_pfcp_tool->ep = osmo_pfcp_endpoint_create(g_pfcp_tool, g_pfcp_tool);
if (!g_pfcp_tool->ep) {
vty_out(vty, "Failed to allocate PFCP endpoint.%s", VTY_NEWLINE);
return CMD_WARNING;
}
g_pfcp_tool->ep->rx_msg = pfcp_tool_rx_msg;
g_pfcp_tool->ep->seq_nr_state = rand();
cfg = (struct osmo_pfcp_endpoint_cfg){
.rx_msg_cb = pfcp_tool_rx_msg,
};
/* Translate address string from VTY config to osmo_sockaddr: first read into osmo_sockaddr_str, then write to
* osmo_sockaddr. */
osmo_sockaddr_str_from_str(&local_addr, g_pfcp_tool->vty_cfg.local_ip,
g_pfcp_tool->vty_cfg.local_port);
osmo_sockaddr_str_to_sockaddr(&local_addr, &g_pfcp_tool->ep->cfg.local_addr.u.sas);
osmo_sockaddr_str_to_sockaddr(&local_addr, &cfg.local_addr.u.sas);
/* Store this address as the local PFCP Node Id */
osmo_pfcp_ie_node_id_from_osmo_sockaddr(&g_pfcp_tool->ep->cfg.local_node_id, &g_pfcp_tool->ep->cfg.local_addr);
/* Also use this address as the local PFCP Node Id */
osmo_pfcp_ie_node_id_from_osmo_sockaddr(&cfg.local_node_id, &cfg.local_addr);
g_pfcp_tool->ep = osmo_pfcp_endpoint_create(g_pfcp_tool, &cfg);
if (!g_pfcp_tool->ep) {
vty_out(vty, "Failed to allocate PFCP endpoint.%s", VTY_NEWLINE);
return CMD_WARNING;
}
osmo_pfcp_endpoint_set_seq_nr_state(g_pfcp_tool->ep, rand());
rc = osmo_pfcp_endpoint_bind(g_pfcp_tool->ep);
if (rc) {
vty_out(vty, "Failed to bind PFCP endpoint on %s: %s%s\n",
osmo_sockaddr_to_str_c(OTC_SELECT, &g_pfcp_tool->ep->cfg.local_addr), strerror(rc),
VTY_NEWLINE);
osmo_sockaddr_to_str_c(OTC_SELECT, osmo_pfcp_endpoint_get_local_addr(g_pfcp_tool->ep)),
strerror(rc), VTY_NEWLINE);
return CMD_WARNING;
}
return CMD_SUCCESS;
@@ -194,7 +199,7 @@ DEFUN(peer_tx_assoc_setup_req, peer_tx_assoc_setup_req_cmd,
}
m = osmo_pfcp_msg_alloc_tx_req(OTC_SELECT, &peer->remote_addr, OSMO_PFCP_MSGT_ASSOC_SETUP_REQ);
m->ies.assoc_setup_req.recovery_time_stamp = g_pfcp_tool->ep->recovery_time_stamp;
m->ies.assoc_setup_req.recovery_time_stamp = osmo_pfcp_endpoint_get_recovery_timestamp(g_pfcp_tool->ep);
m->ies.assoc_setup_req.cp_function_features_present = true;
osmo_pfcp_bits_set(m->ies.assoc_setup_req.cp_function_features.bits, OSMO_PFCP_CP_FEAT_BUNDL, true);
@@ -367,7 +372,7 @@ int session_endecaps_tx_est_req(struct vty *vty, const char **argv, int argc)
.teid = session->access.teid.local,
.ip_addr = {
.v4_present = true,
.v4 = g_pfcp_tool->ep->cfg.local_addr,
.v4 = osmo_pfcp_endpoint_get_cfg(g_pfcp_tool->ep)->local_addr,
},
},
};
@@ -391,7 +396,7 @@ int session_endecaps_tx_est_req(struct vty *vty, const char **argv, int argc)
cp_f_seid = (struct osmo_pfcp_ie_f_seid){
.seid = session->cp_seid,
};
osmo_pfcp_ip_addrs_set(&cp_f_seid.ip_addr, &g_pfcp_tool->ep->cfg.local_addr);
osmo_pfcp_ip_addrs_set(&cp_f_seid.ip_addr, osmo_pfcp_endpoint_get_local_addr(g_pfcp_tool->ep));
m = osmo_pfcp_msg_alloc_tx_req(OTC_SELECT, &peer->remote_addr, OSMO_PFCP_MSGT_SESSION_EST_REQ);
m->h.seid_present = true;
@@ -508,7 +513,7 @@ int session_tunmap_tx_est_req(struct vty *vty, const char **argv, int argc)
.teid = session->access.teid.local,
.ip_addr = {
.v4_present = true,
.v4 = g_pfcp_tool->ep->cfg.local_addr,
.v4 = osmo_pfcp_endpoint_get_cfg(g_pfcp_tool->ep)->local_addr,
},
},
};
@@ -542,7 +547,7 @@ int session_tunmap_tx_est_req(struct vty *vty, const char **argv, int argc)
.teid = session->core.teid.local,
.ip_addr = {
.v4_present = true,
.v4 = g_pfcp_tool->ep->cfg.local_addr,
.v4 = osmo_pfcp_endpoint_get_cfg(g_pfcp_tool->ep)->local_addr,
},
},
};
@@ -565,7 +570,7 @@ int session_tunmap_tx_est_req(struct vty *vty, const char **argv, int argc)
cp_f_seid = (struct osmo_pfcp_ie_f_seid){
.seid = session->cp_seid,
};
osmo_pfcp_ip_addrs_set(&cp_f_seid.ip_addr, &g_pfcp_tool->ep->cfg.local_addr);
osmo_pfcp_ip_addrs_set(&cp_f_seid.ip_addr, osmo_pfcp_endpoint_get_local_addr(g_pfcp_tool->ep));
m = osmo_pfcp_msg_alloc_tx_req(OTC_SELECT, &peer->remote_addr, OSMO_PFCP_MSGT_SESSION_EST_REQ);
m->h.seid_present = true;
@@ -685,7 +690,7 @@ DEFUN(session_tx_mod_req, session_tx_mod_req_cmd,
cp_f_seid = (struct osmo_pfcp_ie_f_seid){
.seid = session->cp_seid,
};
osmo_pfcp_ip_addrs_set(&cp_f_seid.ip_addr, &g_pfcp_tool->ep->cfg.local_addr);
osmo_pfcp_ip_addrs_set(&cp_f_seid.ip_addr, osmo_pfcp_endpoint_get_local_addr(g_pfcp_tool->ep));
m = osmo_pfcp_msg_alloc_tx_req(OTC_SELECT, &peer->remote_addr, OSMO_PFCP_MSGT_SESSION_MOD_REQ);
m->h.seid_present = true;

View File

@@ -30,7 +30,7 @@
static void up_endpoint_set_msg_ctx(struct osmo_pfcp_endpoint *ep, struct osmo_pfcp_msg *m, struct osmo_pfcp_msg *req)
{
struct up_endpoint *up_ep = ep->priv;
struct up_endpoint *up_ep = osmo_pfcp_endpoint_get_cfg(ep)->priv;
struct up_peer *peer;
/* If this is a response to an earlier request, just take the msg context from the request message. */
@@ -188,7 +188,7 @@ static void up_ep_rx_session_rep_req(struct up_endpoint *up_ep, const struct osm
static void up_endpoint_rx_cb(struct osmo_pfcp_endpoint *ep, struct osmo_pfcp_msg *m, struct osmo_pfcp_msg *req)
{
struct up_endpoint *up_ep = ep->priv;
struct up_endpoint *up_ep = osmo_pfcp_endpoint_get_priv(ep);
switch (m->h.message_type) {
case OSMO_PFCP_MSGT_PFD_MGMT_REQ:
@@ -230,17 +230,21 @@ static void up_endpoint_rx_cb(struct osmo_pfcp_endpoint *ep, struct osmo_pfcp_ms
struct up_endpoint *up_endpoint_init(void *ctx, const struct osmo_sockaddr *local_addr)
{
int rc;
struct osmo_pfcp_endpoint_cfg cfg;
struct up_endpoint *up_ep;
up_ep = talloc_zero(ctx, struct up_endpoint);
INIT_LLIST_HEAD(&up_ep->peers);
up_ep->pfcp_ep = osmo_pfcp_endpoint_create(up_ep, up_ep);
up_ep->pfcp_ep->cfg.local_addr = *local_addr;
cfg = (struct osmo_pfcp_endpoint_cfg){
.local_addr = *local_addr,
.set_msg_ctx_cb = up_endpoint_set_msg_ctx,
.rx_msg_cb = up_endpoint_rx_cb,
.priv = up_ep,
};
osmo_pfcp_ie_node_id_from_osmo_sockaddr(&cfg.local_node_id, local_addr);
up_ep->pfcp_ep->set_msg_ctx = up_endpoint_set_msg_ctx;
up_ep->pfcp_ep->rx_msg = up_endpoint_rx_cb;
osmo_pfcp_ie_node_id_from_osmo_sockaddr(&up_ep->pfcp_ep->cfg.local_node_id, local_addr);
up_ep->pfcp_ep = osmo_pfcp_endpoint_create(up_ep, &cfg);
OSMO_ASSERT(up_ep->pfcp_ep);
rc = osmo_pfcp_endpoint_bind(up_ep->pfcp_ep);
if (rc) {

View File

@@ -211,11 +211,10 @@ static int up_peer_tx_assoc_setup_resp(struct up_peer *peer, struct osmo_pfcp_ms
resp->ies.assoc_setup_resp = (struct osmo_pfcp_msg_assoc_setup_resp) {
.cause = cause,
.recovery_time_stamp = g_upf->pfcp.ep->pfcp_ep->recovery_time_stamp,
.recovery_time_stamp = osmo_pfcp_endpoint_get_recovery_timestamp(g_upf->pfcp.ep->pfcp_ep),
.up_function_features_present = true,
.up_function_features = peer->local_up_features,
};
resp->ies.assoc_setup_resp.recovery_time_stamp = g_upf->pfcp.ep->pfcp_ep->recovery_time_stamp;
if (osmo_pfcp_endpoint_tx(peer->up_endpoint->pfcp_ep, resp)) {
OSMO_LOG_PFCP_MSG(resp, LOGL_ERROR, "Error sending response, cannot associate with peer\n");

View File

@@ -141,7 +141,8 @@ static enum osmo_pfcp_cause up_session_choose_f_teid(struct up_session *session,
}
LOGPFSML(session->fi, LOGL_INFO, "Allocated new local TEID 0x%x\n", dst->fixed.teid);
if (osmo_pfcp_ip_addrs_set(&dst->fixed.ip_addr, &up_ep->pfcp_ep->cfg.local_addr)) {
if (osmo_pfcp_ip_addrs_set(&dst->fixed.ip_addr,
osmo_pfcp_endpoint_get_local_addr(up_ep->pfcp_ep))) {
LOGPFSML(session->fi, LOGL_ERROR, "Invalid local address in pfcp_endpoint cfg\n");
return OSMO_PFCP_CAUSE_PFCP_ENTITY_IN_CONGESTION;
}
@@ -550,7 +551,8 @@ static void up_session_est(struct up_session *session, struct osmo_pfcp_msg *m)
goto nack_response;
/* Success, send ACK */
osmo_pfcp_ie_f_seid_set(&resp->up_f_seid, session->up_seid, &peer->up_endpoint->pfcp_ep->cfg.local_addr);
osmo_pfcp_ie_f_seid_set(&resp->up_f_seid, session->up_seid,
osmo_pfcp_endpoint_get_local_addr(peer->up_endpoint->pfcp_ep));
resp->up_f_seid_present = true;
rc = osmo_pfcp_endpoint_tx(peer->up_endpoint->pfcp_ep, tx);