pespin has submitted this change. ( https://gerrit.osmocom.org/c/osmo-sgsn/+/37596?usp=email )
Change subject: gtp: Set Direct Tunnel Flags DTI during UpdatePDPCtx ......................................................................
gtp: Set Direct Tunnel Flags DTI during UpdatePDPCtx
This is required as per TS 28.060 to tell the GGSN that the remote Address/TEID it is receiving it's the one of the RNC. Upon receiving a GTPU Error Indication, the GGSN knowing it's using DirectTunnel, can then update the SGSN with UpdatePDPContextReq with Direct Tunnel Flags DTI=1 EI=1 and then the SGSN can decide whether reconfigure the Direct Tunnel or switch to 2-leg tunnel until the connection with RNC/UE can be reestablished.
Depends: osmo-ggsn.git Change-Id Ia3e360a35d30858eab1e438dc2508fd756c2e22e Related: SYS#5435 Change-Id: Iefe73eeea41df0c55db673194c9e9547504cbf0d --- M TODO-RELEASE M src/sgsn/gprs_mm_state_iu_fsm.c M src/sgsn/gprs_ranap.c 3 files changed, 25 insertions(+), 0 deletions(-)
Approvals: Jenkins Builder: Verified laforge: Looks good to me, but someone else must approve pespin: Looks good to me, approved
diff --git a/TODO-RELEASE b/TODO-RELEASE index 0ed7189..79f557b 100644 --- a/TODO-RELEASE +++ b/TODO-RELEASE @@ -7,3 +7,4 @@ # If any interfaces have been added since the last public release: c:r:a + 1. # If any interfaces have been removed or changed since the last public release: c:r:0. #library what description / commit summary line +libgtp >1.12.0 new field dir_tun_flags in struct pdp_t diff --git a/src/sgsn/gprs_mm_state_iu_fsm.c b/src/sgsn/gprs_mm_state_iu_fsm.c index c2e9c44..2bf3568 100644 --- a/src/sgsn/gprs_mm_state_iu_fsm.c +++ b/src/sgsn/gprs_mm_state_iu_fsm.c @@ -52,6 +52,9 @@ LOGMMCTXP(LOGL_INFO, mm_ctx, "Changing GTP-U endpoints %s -> %s\n", sgsn_gtp_ntoa(&pdp->lib->gsnlu), inet_ntop(AF_INET, &sgsn->cfg.gtp_listenaddr.sin_addr, buf, sizeof(buf))); + /* Disable Direct Tunnel Flags DTI. Other flags make no sense here, so also set to 0. */ + pdp->lib->dir_tun_flags.l = 1; + pdp->lib->dir_tun_flags.v[0] = 0x00; sgsn_pdp_upd_gtp_u(pdp, &sgsn->cfg.gtp_listenaddr.sin_addr, sizeof(sgsn->cfg.gtp_listenaddr.sin_addr)); diff --git a/src/sgsn/gprs_ranap.c b/src/sgsn/gprs_ranap.c index 5e0d8ed..51954ce 100644 --- a/src/sgsn/gprs_ranap.c +++ b/src/sgsn/gprs_ranap.c @@ -103,6 +103,8 @@ LOGP(DRANAP, LOGL_DEBUG, "Updating TEID on RNC side from 0x%08x to 0x%08x\n", pdp->lib->teid_own, tei); pdp->lib->teid_own = tei; + pdp->lib->dir_tun_flags.l = 1; + pdp->lib->dir_tun_flags.v[0] = 0x01; /* Set DTI flag in Direct Tunnel Flags */ require_pdp_update = true; }