neels has submitted this change. ( 
https://gerrit.osmocom.org/c/osmo-upf/+/30467 )

Change subject: in GTP actions, also store local GTP addrs
......................................................................

in GTP actions, also store local GTP addrs

At first, this mostly improves logging of GTP actions.

Subsequently, we will use these to:
- for tunend, pick a GTP device based on the local interface.
- for tunmap, change the netfilter rules to match on the *local* GTP
  address instead of the remote one.

Related: SYS#6192
Change-Id: I8488c478c4790d3882b22dcdb1f127838e23dd7b
---
M include/osmocom/upf/upf_gtp.h
M include/osmocom/upf/upf_nft.h
M src/osmo-upf/up_gtp_action.c
M src/osmo-upf/up_session.c
4 files changed, 25 insertions(+), 12 deletions(-)

Approvals:
  laforge: Looks good to me, approved
  arehbein: Looks good to me, but someone else must approve
  Jenkins Builder: Verified



diff --git a/include/osmocom/upf/upf_gtp.h b/include/osmocom/upf/upf_gtp.h
index da04ee6..1a358ba 100644
--- a/include/osmocom/upf/upf_gtp.h
+++ b/include/osmocom/upf/upf_gtp.h
@@ -65,9 +65,10 @@
  * The active state to operate the GTP kernel module accordingly is kept in 
struct upf_gtp_tunend. */
 struct upf_gtp_tunend_desc {
        struct {
+               struct osmo_sockaddr gtp_local_addr;
                uint32_t local_teid;
-               uint32_t remote_teid;
                struct osmo_sockaddr gtp_remote_addr;
+               uint32_t remote_teid;
        } access;
        struct {
                struct osmo_sockaddr ue_local_addr;
diff --git a/include/osmocom/upf/upf_nft.h b/include/osmocom/upf/upf_nft.h
index 113bfd8..9108a4f 100644
--- a/include/osmocom/upf/upf_nft.h
+++ b/include/osmocom/upf/upf_nft.h
@@ -31,13 +31,15 @@

 struct upf_nft_tunmap_desc {
        struct {
-               struct osmo_sockaddr gtp_remote_addr;
+               struct osmo_sockaddr gtp_local_addr;
                uint32_t local_teid;
+               struct osmo_sockaddr gtp_remote_addr;
                uint32_t remote_teid;
        } access;
        struct {
-               struct osmo_sockaddr gtp_remote_addr;
+               struct osmo_sockaddr gtp_local_addr;
                uint32_t local_teid;
+               struct osmo_sockaddr gtp_remote_addr;
                uint32_t remote_teid;
        } core;
        uint32_t id;
diff --git a/src/osmo-upf/up_gtp_action.c b/src/osmo-upf/up_gtp_action.c
index 09abd36..84af8e5 100644
--- a/src/osmo-upf/up_gtp_action.c
+++ b/src/osmo-upf/up_gtp_action.c
@@ -168,18 +168,25 @@
        case UP_GTP_U_TUNEND:
                OSMO_STRBUF_PRINTF(sb, "GTP:tunend GTP-access-r:");
                OSMO_STRBUF_APPEND(sb, osmo_sockaddr_to_str_buf2, 
&a->tunend.access.gtp_remote_addr);
-               OSMO_STRBUF_PRINTF(sb, " TEID-access-r:0x%"PRIx32" 
TEID-access-l:0x%"PRIx32" IP-core-l:",
-                                  a->tunend.access.remote_teid, 
a->tunend.access.local_teid);
+               OSMO_STRBUF_PRINTF(sb, " TEID-access-r:0x%"PRIx32, 
a->tunend.access.remote_teid);
+               OSMO_STRBUF_PRINTF(sb, " GTP-access-l:");
+               OSMO_STRBUF_APPEND(sb, osmo_sockaddr_to_str_buf2, 
&a->tunend.access.gtp_local_addr);
+               OSMO_STRBUF_PRINTF(sb, " TEID-access-l:0x%"PRIx32" IP-core-l:", 
a->tunend.access.local_teid);
                OSMO_STRBUF_APPEND(sb, osmo_sockaddr_to_str_buf2, 
&a->tunend.core.ue_local_addr);
                break;
        case UP_GTP_U_TUNMAP:
                OSMO_STRBUF_PRINTF(sb, "GTP:tunmap GTP-access-r:");
                OSMO_STRBUF_APPEND(sb, osmo_sockaddr_to_str_buf2, 
&a->tunmap.access.gtp_remote_addr);
-               OSMO_STRBUF_PRINTF(sb, " TEID-access-r:0x%"PRIx32" 
TEID-access-l:0x%"PRIx32" GTP-core-r:",
-                                  a->tunmap.access.remote_teid, 
a->tunmap.access.local_teid);
+               OSMO_STRBUF_PRINTF(sb, " TEID-access-r:0x%"PRIx32, 
a->tunmap.access.remote_teid);
+               OSMO_STRBUF_PRINTF(sb, " GTP-access-l:");
+               OSMO_STRBUF_APPEND(sb, osmo_sockaddr_to_str_buf2, 
&a->tunmap.access.gtp_local_addr);
+               OSMO_STRBUF_PRINTF(sb, " TEID-access-l:0x%"PRIx32, 
a->tunmap.access.local_teid);
+               OSMO_STRBUF_PRINTF(sb, " GTP-core-r:");
                OSMO_STRBUF_APPEND(sb, osmo_sockaddr_to_str_buf2, 
&a->tunmap.core.gtp_remote_addr);
-               OSMO_STRBUF_PRINTF(sb, " TEID-core-r:0x%"PRIx32" 
TEID-core-l:0x%"PRIx32,
-                                  a->tunmap.core.remote_teid, 
a->tunmap.core.local_teid);
+               OSMO_STRBUF_PRINTF(sb, " TEID-core-r:0x%"PRIx32, 
a->tunmap.core.remote_teid);
+               OSMO_STRBUF_PRINTF(sb, " GTP-core-l:");
+               OSMO_STRBUF_APPEND(sb, osmo_sockaddr_to_str_buf2, 
&a->tunmap.core.gtp_local_addr);
+               OSMO_STRBUF_PRINTF(sb, " TEID-core-l:0x%"PRIx32, 
a->tunmap.core.local_teid);
                break;
        case UP_GTP_DROP:
                OSMO_STRBUF_PRINTF(sb, "GTP:drop");
diff --git a/src/osmo-upf/up_session.c b/src/osmo-upf/up_session.c
index fe3d359..fae4c1e 100644
--- a/src/osmo-upf/up_session.c
+++ b/src/osmo-upf/up_session.c
@@ -1214,9 +1214,10 @@
                .kind = UP_GTP_U_TUNEND,
                .tunend = {
                        .access = {
+                               .gtp_local_addr = 
pdr->local_f_teid->fixed.ip_addr.v4,
                                .local_teid = pdr->local_f_teid->fixed.teid,
-                               .remote_teid = 
rfar_forw->outer_header_creation.teid,
                                .gtp_remote_addr = 
rfar_forw->outer_header_creation.ip_addr.v4,
+                               .remote_teid = 
rfar_forw->outer_header_creation.teid,
                        },
                        .core = {
                                .ue_local_addr = 
rpdr->desc.pdi.ue_ip_address.ip_addr.v4,
@@ -1323,14 +1324,16 @@
                .kind = UP_GTP_U_TUNMAP,
                .tunmap = {
                        .access = {
+                               .gtp_local_addr = 
pdr->local_f_teid->fixed.ip_addr.v4,
                                .local_teid = pdr->local_f_teid->fixed.teid,
-                               .remote_teid = 
rfar_forw->outer_header_creation.teid,
                                .gtp_remote_addr = 
rfar_forw->outer_header_creation.ip_addr.v4,
+                               .remote_teid = 
rfar_forw->outer_header_creation.teid,
                        },
                        .core = {
+                               .gtp_local_addr = 
rpdr->local_f_teid->fixed.ip_addr.v4,
                                .local_teid = rpdr->local_f_teid->fixed.teid,
-                               .remote_teid = 
far_forw->outer_header_creation.teid,
                                .gtp_remote_addr = 
far_forw->outer_header_creation.ip_addr.v4,
+                               .remote_teid = 
far_forw->outer_header_creation.teid,
                        },
                },
        };

--
To view, visit https://gerrit.osmocom.org/c/osmo-upf/+/30467
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings

Gerrit-Project: osmo-upf
Gerrit-Branch: master
Gerrit-Change-Id: I8488c478c4790d3882b22dcdb1f127838e23dd7b
Gerrit-Change-Number: 30467
Gerrit-PatchSet: 3
Gerrit-Owner: neels <[email protected]>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: arehbein <[email protected]>
Gerrit-Reviewer: laforge <[email protected]>
Gerrit-Reviewer: neels <[email protected]>
Gerrit-MessageType: merged

Reply via email to