pespin has uploaded this change for review. (
https://gerrit.osmocom.org/c/osmo-hnbgw/+/40275?usp=email )
Change subject: WIP: Support PS RAB ASS REQ (REL)
......................................................................
WIP: Support PS RAB ASS REQ (REL)
Change-Id: Iea7f2cea4aa1fbab12cb8bf0275cd43d9e0713c2
---
M src/osmo-hnbgw/ps_rab_ass_fsm.c
1 file changed, 48 insertions(+), 16 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-hnbgw refs/changes/75/40275/1
diff --git a/src/osmo-hnbgw/ps_rab_ass_fsm.c b/src/osmo-hnbgw/ps_rab_ass_fsm.c
index 68bf58a..fc3b605 100644
--- a/src/osmo-hnbgw/ps_rab_ass_fsm.c
+++ b/src/osmo-hnbgw/ps_rab_ass_fsm.c
@@ -220,6 +220,7 @@
RANAP_RAB_AssignmentRequestIEs_t *ies = &message->msg.raB_AssignmentRequestIEs;
int i;
struct ps_rab_ass *rab_ass;
+ int rc;
rab_ass = ps_rab_ass_alloc(map);
talloc_steal(rab_ass, message);
@@ -231,26 +232,57 @@
goto no_rab;
}
- /* Make sure we indeed deal with a setup-or-modify list */
- if (!(ies->presenceMask &
RAB_ASSIGNMENTREQUESTIES_RANAP_RAB_SETUPORMODIFYLIST_PRESENT)) {
- LOG_MAP(map, DLPFCP, LOGL_ERROR, "RANAP PS RAB AssignmentRequest lacks
setup-or-modify list\n");
- goto no_rab;
+ /* setup-or-modify list */
+ if (ies->presenceMask &
RAB_ASSIGNMENTREQUESTIES_RANAP_RAB_SETUPORMODIFYLIST_PRESENT) {
+ /* Multiple RABs may be set up, assemble in list map->ps_rab_list. */
+ for (i = 0; i < ies->raB_SetupOrModifyList.list.count; i++) {
+ RANAP_ProtocolIE_ContainerPair_t *protocol_ie_container_pair;
+ RANAP_ProtocolIE_FieldPair_t *protocol_ie_field_pair;
+
+ protocol_ie_container_pair = ies->raB_SetupOrModifyList.list.array[i];
+ protocol_ie_field_pair = protocol_ie_container_pair->list.array[0];
+ if (!protocol_ie_field_pair)
+ goto no_rab;
+ if (protocol_ie_field_pair->id != RANAP_ProtocolIE_ID_id_RAB_SetupOrModifyItem)
+ goto no_rab;
+
+ if (ps_rab_setup_core_remote(rab_ass, protocol_ie_field_pair))
+ goto no_rab;
+ }
}
- /* Multiple RABs may be set up, assemble in list map->ps_rab_list. */
- for (i = 0; i < ies->raB_SetupOrModifyList.list.count; i++) {
- RANAP_ProtocolIE_ContainerPair_t *protocol_ie_container_pair;
- RANAP_ProtocolIE_FieldPair_t *protocol_ie_field_pair;
+ /* release list */
+ if (ies->presenceMask & RAB_ASSIGNMENTREQUESTIES_RANAP_RAB_RELEASELIST_PRESENT)
{
+ /* Multiple RABs may be set up, assemble in list map->ps_rab_list. */
+ for (i = 0; i < ies->raB_ReleaseList.raB_ReleaseList_ies.list.count; i++) {
+ RANAP_IE_t *release_list_ie;
+ RANAP_RAB_ReleaseItemIEs_t *items_ies = NULL;
+ RANAP_RAB_ReleaseItem_t *rab_release_item;
+ uint8_t rab_id_decoded;
+ struct ps_rab *rab;
- protocol_ie_container_pair = ies->raB_SetupOrModifyList.list.array[i];
- protocol_ie_field_pair = protocol_ie_container_pair->list.array[0];
- if (!protocol_ie_field_pair)
- goto no_rab;
- if (protocol_ie_field_pair->id != RANAP_ProtocolIE_ID_id_RAB_SetupOrModifyItem)
- goto no_rab;
+ release_list_ie = ies->raB_ReleaseList.raB_ReleaseList_ies.list.array[i];
+ if (!release_list_ie)
+ goto no_rab;
+ if (release_list_ie->id != RANAP_ProtocolIE_ID_id_RAB_ReleaseItem)
+ goto no_rab;
- if (ps_rab_setup_core_remote(rab_ass, protocol_ie_field_pair))
- goto no_rab;
+ rc = ranap_decode_rab_releaseitemies_fromlist(items_ies,
&release_list_ie->value);
+ if (rc < 0)
+ return -EINVAL;
+
+ rab_release_item = &items_ies->raB_ReleaseItem;
+ /* The RAB-ID is defined as a bitstring with a size of 8 (1 byte),
+ * See also RANAP-IEs.asn, RAB-ID ::= BIT STRING (SIZE (8)) */
+ rab_id_decoded = rab_release_item->rAB_ID.buf[0];
+ ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_RANAP_RAB_ReleaseItem, items_ies);
+
+ rab = ps_rab_get(map, rab_id_decoded);
+ if (rab)
+ ps_rab_release(rab);
+ else
+ LOG_MAP(map, DLPFCP, LOGL_NOTICE, "Rx RAB ASS REQ (REL) for unknwon rab_id
%u\n", rab_id_decoded);
+ }
}
/* Got all RABs' state and their Core side GTP info in map->ps_rab_list. For
each, a ps_rab_fsm has been started and
--
To view, visit
https://gerrit.osmocom.org/c/osmo-hnbgw/+/40275?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: Iea7f2cea4aa1fbab12cb8bf0275cd43d9e0713c2
Gerrit-Change-Number: 40275
Gerrit-PatchSet: 1
Gerrit-Owner: pespin <pespin(a)sysmocom.de>