neels has uploaded this change for review.
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.