pespin has uploaded this change for review.

View Change

Add function helper hnbgw_decode_ranap_ran_co()

Similar to already existing counterpart hnbgw_decode_ranap_cn_co().
This helps simplifying logic into smaller chunks, and will make both UL
and DL look more similar.

Change-Id: Ifbb058d5340a6cb3a1703415e49c0de04fa6aec1
---
M src/osmo-hnbgw/context_map_sccp.c
1 file changed, 22 insertions(+), 5 deletions(-)

git pull ssh://gerrit.osmocom.org:29418/osmo-hnbgw refs/changes/84/39984/1
diff --git a/src/osmo-hnbgw/context_map_sccp.c b/src/osmo-hnbgw/context_map_sccp.c
index c933e8d..fc82426 100644
--- a/src/osmo-hnbgw/context_map_sccp.c
+++ b/src/osmo-hnbgw/context_map_sccp.c
@@ -193,10 +193,29 @@
return 0;
}

+/* Decode DL RANAP message with convenient memory freeing: just talloc_free() the returned pointer..
+ * Allocate a ranap_message from OTC_SELECT, decode RANAP msgb into it, attach a talloc destructor that calls
+ * ranap_cn_rx_co_free() upon talloc_free(), and return the decoded ranap_message. */
+static ranap_message *hnbgw_decode_ranap_ran_co(struct msgb *ranap_msg)
+{
+ int rc;
+ ranap_message *message;
+
+ if (!msg_has_l2_data(ranap_msg))
+ return NULL;
+ message = talloc_zero(OTC_SELECT, ranap_message);
+ rc = ranap_ran_rx_co_decode(NULL, message, msgb_l2(ranap_msg), msgb_l2len(ranap_msg));
+ if (rc != 0) {
+ talloc_free(message);
+ return NULL;
+ }
+ talloc_set_destructor(message, destruct_ranap_ran_rx_co_ies);
+ return message;
+}
+
static int handle_rx_sccp(struct osmo_fsm_inst *fi, struct msgb *ranap_msg)
{
struct hnbgw_context_map *map = fi->priv;
- int rc;

/* If the FSM instance has already terminated, don't dispatch anything. */
if (fi->proc.terminating)
@@ -208,10 +227,8 @@

/* See if it is a RAB Assignment Request message from SCCP to RUA, where we need to change the user plane
* information, for RTP mapping via MGW, or GTP mapping via UPF. */
- ranap_message *message;
- message = talloc_zero(OTC_SELECT, ranap_message);
- rc = ranap_ran_rx_co_decode(message, message, msgb_l2(ranap_msg), msgb_l2len(ranap_msg));
- if (rc == 0) {
+ ranap_message *message = hnbgw_decode_ranap_ran_co(ranap_msg);
+ if (message) {
talloc_set_destructor(message, destruct_ranap_ran_rx_co_ies);

LOGPFSML(fi, LOGL_DEBUG, "rx from SCCP: RANAP %s\n",

To view, visit change 39984. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-MessageType: newchange
Gerrit-Project: osmo-hnbgw
Gerrit-Branch: master
Gerrit-Change-Id: Ifbb058d5340a6cb3a1703415e49c0de04fa6aec1
Gerrit-Change-Number: 39984
Gerrit-PatchSet: 1
Gerrit-Owner: pespin <pespin@sysmocom.de>