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 <[email protected]>

Reply via email to