pespin has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-ggsn/+/37597?usp=email )
Change subject: WIP: gtp: Allow setting callback to receive update_context_ind ...................................................................... WIP: gtp: Allow setting callback to receive update_context_ind This will be used: SGSN: Get to know that RNC has gonne down according to GGSN (re-attempt Direct Tunnel or go back to tun SGSN<->GGSN). GGSN: Maybe find out that Direct Flags are used (should be handled internally directly in the rx path probably) Change-Id: Ic80a9a928c55b6ff85be96014920bb42793cb943 --- M gtp/gsn.c M gtp/gtp.c M include/osmocom/gtp/gsn.h 3 files changed, 37 insertions(+), 2 deletions(-) git pull ssh://gerrit.osmocom.org:29418/osmo-ggsn refs/changes/97/37597/1 diff --git a/gtp/gsn.c b/gtp/gsn.c index c23fb2a..612baf2 100644 --- a/gtp/gsn.c +++ b/gtp/gsn.c @@ -497,6 +497,7 @@ /* Initialise call back functions */ (*gsn)->cb_create_context_ind = 0; + (*gsn)->cb_update_context_ind = 0; (*gsn)->cb_delete_context = 0; (*gsn)->cb_unsup_ind = 0; (*gsn)->cb_conf = 0; @@ -563,6 +564,13 @@ return 0; } +int gtp_set_cb_update_context_ind(struct gsn_t *gsn, + int (*cb_update_context_ind)(struct pdp_t *pdp)) +{ + gsn->cb_update_context_ind = cb_update_context_ind; + return 0; +} + int gtp_retrans(struct gsn_t *gsn) { /* dummy API, deprecated. */ diff --git a/gtp/gtp.c b/gtp/gtp.c index 8736cad..662eea9 100644 --- a/gtp/gtp.c +++ b/gtp/gtp.c @@ -1772,6 +1772,7 @@ struct pdp_t pdp_backup; union gtpie_member *ie[GTPIE_SIZE]; uint8_t recovery; + int rc; uint16_t seq = get_seq(pack); int hlen = get_hlen(pack); @@ -1991,9 +1992,17 @@ } } + /* Callback function to validate login */ + if (gsn->cb_update_context_ind != 0) + rc = gsn->cb_update_context_ind(pdp); + else { + /* Confirm to peer that things were "successful" */ + rc = gtp_update_pdp_resp(gsn, version, peer, fd, pack, len, pdp, + GTPCAUSE_ACC_REQ); + } + /* Confirm to peer that things were "successful" */ - return gtp_update_pdp_resp(gsn, version, peer, fd, pack, len, pdp, - GTPCAUSE_ACC_REQ); + return rc; } /* Handle Update PDP Context Response */ diff --git a/include/osmocom/gtp/gsn.h b/include/osmocom/gtp/gsn.h index 936db9b..006fdfd 100644 --- a/include/osmocom/gtp/gsn.h +++ b/include/osmocom/gtp/gsn.h @@ -99,6 +99,7 @@ /* Call back functions */ int (*cb_delete_context) (struct pdp_t *); int (*cb_create_context_ind) (struct pdp_t *); + int (*cb_update_context_ind)(struct pdp_t *pdp); int (*cb_unsup_ind) (struct sockaddr_in * peer); int (*cb_extheader_ind) (struct sockaddr_in * peer); int (*cb_ran_info_relay_ind) (struct sockaddr_in *peer, union gtpie_member **ie); @@ -134,6 +135,8 @@ int (*cb_create_context_ind) (struct pdp_t * pdp)); +extern int gtp_set_cb_update_context_ind(struct gsn_t *gsn, + int (*cb_update_context_ind)(struct pdp_t *pdp)); extern int gtp_set_cb_data_ind(struct gsn_t *gsn, int (*cb_data_ind) (struct pdp_t * pdp, void *pack, unsigned len)); -- To view, visit https://gerrit.osmocom.org/c/osmo-ggsn/+/37597?usp=email To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings Gerrit-Project: osmo-ggsn Gerrit-Branch: master Gerrit-Change-Id: Ic80a9a928c55b6ff85be96014920bb42793cb943 Gerrit-Change-Number: 37597 Gerrit-PatchSet: 1 Gerrit-Owner: pespin <pes...@sysmocom.de> Gerrit-MessageType: newchange