neels has uploaded this change for review.

View Change

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(-)

git pull ssh://gerrit.osmocom.org:29418/osmo-upf refs/changes/67/30467/1
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 change 30467. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-Project: osmo-upf
Gerrit-Branch: master
Gerrit-Change-Id: I8488c478c4790d3882b22dcdb1f127838e23dd7b
Gerrit-Change-Number: 30467
Gerrit-PatchSet: 1
Gerrit-Owner: neels <nhofmeyr@sysmocom.de>
Gerrit-MessageType: newchange