pespin has uploaded this change for review. (
https://gerrit.osmocom.org/c/upf-benchmark/+/39421?usp=email )
Change subject: osmo-upf-load-gen: Add vty cmd to skip binding local GTPU ports
......................................................................
osmo-upf-load-gen: Add vty cmd to skip binding local GTPU ports
This is useful when osmo-upf-load-gen is used only to generate the PFCP
sessions acting solely as SMF.
Change-Id: Idc6e013d6c7de24889bc500625707c5b5cc1766b
---
M include/osmocom/upfloadgen/pfcp_tool.h
M src/osmo-upf-load-gen/pfcp_tool.c
M src/osmo-upf-load-gen/pfcp_tool_vty.c
3 files changed, 33 insertions(+), 16 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/upf-benchmark refs/changes/21/39421/1
diff --git a/include/osmocom/upfloadgen/pfcp_tool.h
b/include/osmocom/upfloadgen/pfcp_tool.h
index 2c50490..e13c1aa 100644
--- a/include/osmocom/upfloadgen/pfcp_tool.h
+++ b/include/osmocom/upfloadgen/pfcp_tool.h
@@ -136,6 +136,8 @@
/* list of struct udp_port */
struct llist_head gtp_local_addrs;
struct udp_port *gtp_local_addrs_next;
+ /* Whether to create and bind sockets for addresses above: */
+ bool do_local_gtpu_bind;
/* list of struct udp_port */
struct llist_head gtp_core_addrs;
@@ -183,7 +185,7 @@
uint32_t pfcp_tool_new_teid(void);
int pfcp_tool_next_ue_addr(struct osmo_sockaddr *dst);
-struct udp_port *pfcp_tool_have_local_udp_port_by_str(const struct osmo_sockaddr_str
*addr, uint16_t fallback_port);
+struct udp_port *pfcp_tool_have_local_udp_port_by_str(const struct osmo_sockaddr_str
*addr, uint16_t fallback_port, bool do_bind);
struct udp_port *pfcp_tool_have_core_udp_port_by_str(const struct osmo_sockaddr_str
*addr, uint16_t fallback_port);
void pfcp_tool_gtp_flood_start(void);
diff --git a/src/osmo-upf-load-gen/pfcp_tool.c b/src/osmo-upf-load-gen/pfcp_tool.c
index ba4ce6b..b634822 100644
--- a/src/osmo-upf-load-gen/pfcp_tool.c
+++ b/src/osmo-upf-load-gen/pfcp_tool.c
@@ -21,6 +21,7 @@
*
*/
+#include <stdbool.h>
#include <errno.h>
#include <netinet/in.h>
@@ -50,15 +51,18 @@
.local_port = OSMO_PFCP_PORT,
},
.next_teid_state = 23,
- .gtp.flood = {
- .cfg = {
- .num_rx_workers = 1,
- .num_tx_workers = 1,
- .queue_size = 4096,
- .slew_us = 0,
+ .gtp = {
+ .do_local_gtpu_bind = true,
+ .flood = {
+ .cfg = {
+ .num_rx_workers = 1,
+ .num_tx_workers = 1,
+ .queue_size = 4096,
+ .slew_us = 0,
+ },
+ .flows_per_session = 1,
+ .packets_per_flow = 0,
},
- .flows_per_session = 1,
- .packets_per_flow = 0,
},
};
@@ -253,12 +257,12 @@
return pfcp_tool_have_udp_port_by_osa(list, &osa, fallback_port);
}
-struct udp_port *pfcp_tool_have_local_udp_port_by_osa(const struct osmo_sockaddr *osa,
uint16_t fallback_port)
+static struct udp_port *pfcp_tool_have_local_udp_port_by_osa(const struct osmo_sockaddr
*osa, uint16_t fallback_port, bool do_bind)
{
struct udp_port *port =
pfcp_tool_have_udp_port_by_osa(&g_pfcp_tool->gtp.gtp_local_addrs, osa,
fallback_port);
/* already bound? */
- if (port->ofd.fd >= 0)
+ if (!do_bind || port->ofd.fd >= 0)
return port;
/* create and bind socket */
@@ -290,15 +294,15 @@
return port;
}
-struct udp_port *pfcp_tool_have_local_udp_port_by_str(const struct osmo_sockaddr_str
*addr, uint16_t fallback_port)
+struct udp_port *pfcp_tool_have_local_udp_port_by_str(const struct osmo_sockaddr_str
*addr, uint16_t fallback_port, bool do_bind)
{
struct osmo_sockaddr osa;
if (osmo_sockaddr_str_to_osa(addr, &osa))
return NULL;
- return pfcp_tool_have_local_udp_port_by_osa(&osa, fallback_port);
+ return pfcp_tool_have_local_udp_port_by_osa(&osa, fallback_port, do_bind);
}
-struct udp_port *pfcp_tool_have_core_udp_port_by_osa(const struct osmo_sockaddr *osa,
uint16_t fallback_port)
+static struct udp_port *pfcp_tool_have_core_udp_port_by_osa(const struct osmo_sockaddr
*osa, uint16_t fallback_port)
{
return pfcp_tool_have_udp_port_by_osa(&g_pfcp_tool->gtp.gtp_core_addrs, osa,
fallback_port);
}
@@ -336,7 +340,7 @@
* of view: so the GTP port of osmo-upf-load-gen is 'remote'.
* Here we are setting up a port to emit GTP from osmo-upf-load-gen, the same port is
called 'gtp_local'.
*/
- cfg.gtp_local = pfcp_tool_have_local_udp_port_by_str(&tun_access->remote.addr,
2152);
+ cfg.gtp_local = pfcp_tool_have_local_udp_port_by_str(&tun_access->remote.addr,
2152, true);
if (!cfg.gtp_local) {
LOGP(DLGLOBAL, LOGL_ERROR, "Cannot set up GTP flow for session, failed to setup
local GTP port\n");
return false;
diff --git a/src/osmo-upf-load-gen/pfcp_tool_vty.c
b/src/osmo-upf-load-gen/pfcp_tool_vty.c
index 8f488c7..5af9dfe 100644
--- a/src/osmo-upf-load-gen/pfcp_tool_vty.c
+++ b/src/osmo-upf-load-gen/pfcp_tool_vty.c
@@ -186,6 +186,16 @@
#define GTP_IP_STR "Add a GTP IP address\n"
#define IP_ADDR_STR "IP address, 1.2.3.4 or 1:2:3:4::1\n"
+DEFUN(c_no_gtp_local_bind, no_gtp_local_bind_cmd,
+ "no gtp local bind",
+ NO_STR GTP_STR
+ "Add a local GTP port, to emit GTP1U traffic from\n"
+ "Create and bind sockets with desigend IP address\n")
+{
+ g_pfcp_tool->gtp.do_local_gtpu_bind = false;
+ return CMD_SUCCESS;
+}
+
DEFUN(c_gtp_local, c_gtp_local_cmd,
"gtp local IP_ADDR [<1-65535>]",
GTP_STR
@@ -206,7 +216,7 @@
if (osmo_sockaddr_str_from_str(&addr_str, ip_str, port_nr))
goto invalid_ip;
vty_out(vty, "local GTP port: " OSMO_SOCKADDR_STR_FMT "%s",
OSMO_SOCKADDR_STR_FMT_ARGS_NOT_NULL(&addr_str), VTY_NEWLINE);
- p = pfcp_tool_have_local_udp_port_by_str(&addr_str, port_nr);
+ p = pfcp_tool_have_local_udp_port_by_str(&addr_str, port_nr,
g_pfcp_tool->gtp.do_local_gtpu_bind);
if (!p)
goto invalid_ip;
return CMD_SUCCESS;
@@ -1481,6 +1491,7 @@
install_element(SESSION_NODE, &s_f_teid_cmd);
install_element(SESSION_NODE, &s_f_teid_choose_cmd);
+ install_ve_and_config(&no_gtp_local_bind_cmd);
install_ve_and_config(&c_gtp_local_cmd);
install_ve_and_config(&c_gtp_core_cmd);
install_ve_and_config(&c_ue_ip_range_cmd);
--
To view, visit
https://gerrit.osmocom.org/c/upf-benchmark/+/39421?usp=email
To unsubscribe, or for help writing mail filters, visit
https://gerrit.osmocom.org/settings?usp=email
Gerrit-MessageType: newchange
Gerrit-Project: upf-benchmark
Gerrit-Branch: master
Gerrit-Change-Id: Idc6e013d6c7de24889bc500625707c5b5cc1766b
Gerrit-Change-Number: 39421
Gerrit-PatchSet: 1
Gerrit-Owner: pespin <pespin(a)sysmocom.de>