pespin has uploaded this change for review. (
https://gerrit.osmocom.org/c/osmo-hnbgw/+/39984?usp=email )
Change subject: Add function helper hnbgw_decode_ranap_ran_co()
......................................................................
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
https://gerrit.osmocom.org/c/osmo-hnbgw/+/39984?usp=email
To unsubscribe, or for help writing mail filters, visit
https://gerrit.osmocom.org/settings?usp=email
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(a)sysmocom.de>