fix the s1ap encoding bug
This commit is contained in:
parent
f53c4c5d7f
commit
dadadc5179
|
@ -30,7 +30,7 @@
|
|||
/*******************************************************************************
|
||||
* This file had been created by asn1tostruct.py script v1.0.2
|
||||
* Please do not modify this file but regenerate it via script.
|
||||
* Created on: 2017-08-01 09:50:55.515948 by acetcom
|
||||
* Created on: 2017-09-13 23:14:37.559559 by acetcom
|
||||
* from ['S1AP-PDU.asn']
|
||||
******************************************************************************/
|
||||
#define TRACE_MODULE _s1ap_ies_decoder
|
||||
|
|
|
@ -30,7 +30,7 @@
|
|||
/*******************************************************************************
|
||||
* This file had been created by asn1tostruct.py script v1.0.2
|
||||
* Please do not modify this file but regenerate it via script.
|
||||
* Created on: 2017-08-01 09:50:55.492556 by acetcom
|
||||
* Created on: 2017-09-13 23:14:37.540116 by acetcom
|
||||
* from ['S1AP-PDU.asn']
|
||||
******************************************************************************/
|
||||
#include "s1ap_asn1c.h"
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -30,7 +30,7 @@
|
|||
/*******************************************************************************
|
||||
* This file had been created by asn1tostruct.py script v1.0.2
|
||||
* Please do not modify this file but regenerate it via script.
|
||||
* Created on: 2017-08-01 09:50:55.566652 by acetcom
|
||||
* Created on: 2017-09-13 23:14:37.604451 by acetcom
|
||||
* from ['S1AP-PDU.asn']
|
||||
******************************************************************************/
|
||||
#define TRACE_MODULE _s1ap_ies_free
|
||||
|
|
|
@ -30,7 +30,7 @@
|
|||
/*******************************************************************************
|
||||
* This file had been created by asn1tostruct.py script v1.0.2
|
||||
* Please do not modify this file but regenerate it via script.
|
||||
* Created on: 2017-08-01 09:50:55.579726 by acetcom
|
||||
* Created on: 2017-09-13 23:14:37.616329 by acetcom
|
||||
* from ['S1AP-PDU.asn']
|
||||
******************************************************************************/
|
||||
#include <stdlib.h>
|
||||
|
|
|
@ -557,14 +557,24 @@ for key in iesDefs:
|
|||
elif ie[3] == "conditional":
|
||||
f.write(" /* Conditional field */\n")
|
||||
f.write(" if (%s->presenceMask & %s_%s_PRESENT) {\n" % (lowerFirstCamelWord(re.sub('-', '_', key)), keyupperunderscore, ieupperunderscore))
|
||||
#f.write(" == %s_%s_PRESENT) {\n" % (keyupperunderscore, ieupperunderscore))
|
||||
if ie[2] in ieofielist.keys():
|
||||
f.write(" %s_t %s;\n\n" % (ietypeunderscore, ienamefirstwordlower))
|
||||
f.write(" memset(&%s, 0, sizeof(%s_t));\n" % (ienamefirstwordlower, ietypeunderscore))
|
||||
f.write("\n")
|
||||
f.write(" if (%s_encode_%s(&%s, &%s->%s) < 0) return -1;\n" % (fileprefix, ietypeunderscore.lower(), ienamefirstwordlower, lowerFirstCamelWord(re.sub('-', '_', key)), ienamefirstwordlower))
|
||||
f.write(" if ((ie = %s_new_ie(%s_ProtocolIE_ID_%s,\n" % (fileprefix, fileprefix_first_upper, re.sub('-', '_', ie[0])))
|
||||
f.write(" %s_Criticality_%s,\n" % (fileprefix_first_upper, ie[1]))
|
||||
f.write(" &asn_DEF_%s,\n" % (ietypeunderscore))
|
||||
f.write(" &%s->%s)) == NULL) {\n" % (lowerFirstCamelWord(re.sub('-', '_', key)), ienamefirstwordlower))
|
||||
if ie[2] in ieofielist.keys():
|
||||
f.write(" &%s)) == NULL) {\n" % (ienamefirstwordlower))
|
||||
else:
|
||||
f.write(" &%s->%s)) == NULL) {\n" % (lowerFirstCamelWord(re.sub('-', '_', key)), ienamefirstwordlower))
|
||||
f.write(" return -1;\n")
|
||||
f.write(" }\n")
|
||||
f.write(" ASN_SEQUENCE_ADD(&%s->%slist, ie);\n" % (firstwordlower, iesaccess))
|
||||
if ie[2] in ieofielist.keys():
|
||||
f.write(" /* Free any dynamic allocation that is no more used */\n")
|
||||
f.write(" ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_%s, &%s);\n\n" % (ietypeunderscore, ienamefirstwordlower))
|
||||
f.write(" }\n\n")
|
||||
else:
|
||||
if ie[2] in ieofielist.keys():
|
||||
|
@ -576,9 +586,9 @@ for key in iesDefs:
|
|||
f.write(" %s_Criticality_%s,\n" % (fileprefix_first_upper, ie[1]))
|
||||
f.write(" &asn_DEF_%s,\n" % (ietypeunderscore))
|
||||
if ie[2] in ieofielist.keys():
|
||||
f.write(" &%s)) == NULL) {\n" % (ienamefirstwordlower))
|
||||
f.write(" &%s)) == NULL) {\n" % (ienamefirstwordlower))
|
||||
else:
|
||||
f.write(" &%s->%s)) == NULL) {\n" % (lowerFirstCamelWord(re.sub('-', '_', key)), ienamefirstwordlower))
|
||||
f.write(" &%s->%s)) == NULL) {\n" % (lowerFirstCamelWord(re.sub('-', '_', key)), ienamefirstwordlower))
|
||||
f.write(" return -1;\n")
|
||||
f.write(" }\n")
|
||||
f.write(" ASN_SEQUENCE_ADD(&%s->%slist, ie);\n\n" % (firstwordlower, iesaccess))
|
||||
|
|
|
@ -360,10 +360,14 @@ typedef struct _mme_sess_t {
|
|||
#define MME_HAVE_ENB_S1U_PATH(__bEARER) \
|
||||
((__bEARER) && ((__bEARER)->enb_s1u_teid) && ((__bEARER)->enb_s1u_addr))
|
||||
|
||||
#define MME_HAVE_DL_INDIRECT_TUNNEL(__bEARER) \
|
||||
#define MME_HAVE_ENB_DL_INDIRECT_TUNNEL(__bEARER) \
|
||||
((__bEARER) && ((__bEARER)->enb_dl_teid) && ((__bEARER)->enb_dl_addr))
|
||||
#define MME_HAVE_UL_INDIRECT_TUNNEL(__bEARER) \
|
||||
#define MME_HAVE_ENB_UL_INDIRECT_TUNNEL(__bEARER) \
|
||||
((__bEARER) && ((__bEARER)->enb_ul_teid) && ((__bEARER)->enb_ul_addr))
|
||||
#define MME_HAVE_SGW_DL_INDIRECT_TUNNEL(__bEARER) \
|
||||
((__bEARER) && ((__bEARER)->sgw_dl_teid) && ((__bEARER)->sgw_dl_addr))
|
||||
#define MME_HAVE_SGW_UL_INDIRECT_TUNNEL(__bEARER) \
|
||||
((__bEARER) && ((__bEARER)->sgw_ul_teid) && ((__bEARER)->sgw_ul_addr))
|
||||
#define CLEAR_INDIRECT_TUNNEL(__mME) \
|
||||
do { \
|
||||
mme_sess_t *sess = NULL; \
|
||||
|
|
|
@ -424,7 +424,7 @@ status_t mme_s11_build_create_indirect_data_forwarding_tunnel_request(
|
|||
bearer = mme_bearer_first(sess);
|
||||
while(bearer != NULL)
|
||||
{
|
||||
if (MME_HAVE_DL_INDIRECT_TUNNEL(bearer))
|
||||
if (MME_HAVE_ENB_DL_INDIRECT_TUNNEL(bearer))
|
||||
{
|
||||
bearers[i]->presence = 1;
|
||||
bearers[i]->eps_bearer_id.presence = 1;
|
||||
|
@ -443,7 +443,7 @@ status_t mme_s11_build_create_indirect_data_forwarding_tunnel_request(
|
|||
i++;
|
||||
}
|
||||
|
||||
if (MME_HAVE_UL_INDIRECT_TUNNEL(bearer))
|
||||
if (MME_HAVE_ENB_UL_INDIRECT_TUNNEL(bearer))
|
||||
{
|
||||
bearers[i]->presence = 1;
|
||||
bearers[i]->eps_bearer_id.presence = 1;
|
||||
|
|
|
@ -839,41 +839,74 @@ status_t s1ap_build_handover_command(pkbuf_t **s1apbuf, enb_ue_t *enb_ue)
|
|||
ies->eNB_UE_S1AP_ID = enb_ue->enb_ue_s1ap_id;
|
||||
ies->handoverType = enb_ue->handover_type;
|
||||
|
||||
ies->presenceMask |=
|
||||
S1AP_HANDOVERCOMMANDIES_E_RABDATAFORWARDINGLIST_PRESENT;
|
||||
sess = mme_sess_first(mme_ue);
|
||||
while(sess)
|
||||
{
|
||||
bearer = mme_bearer_first(sess);
|
||||
while(bearer)
|
||||
{
|
||||
e_rab = (S1ap_E_RABDataForwardingItem_t *)
|
||||
core_calloc(1, sizeof(S1ap_E_RABDataForwardingItem_t));
|
||||
e_rab->e_RAB_ID = bearer->ebi;
|
||||
if (MME_HAVE_SGW_DL_INDIRECT_TUNNEL(bearer) ||
|
||||
MME_HAVE_SGW_UL_INDIRECT_TUNNEL(bearer))
|
||||
{
|
||||
e_rab = (S1ap_E_RABDataForwardingItem_t *)
|
||||
core_calloc(1, sizeof(S1ap_E_RABDataForwardingItem_t));
|
||||
e_rab->e_RAB_ID = bearer->ebi;
|
||||
}
|
||||
|
||||
/*
|
||||
e_rab->dL_transportLayerAddress = (S1ap_TransportLayerAddress_t *)
|
||||
core_calloc(1, sizeof(S1ap_TransportLayerAddress_t));
|
||||
e_rab->dL_transportLayerAddress->size = 4;
|
||||
e_rab->dL_transportLayerAddress->buf = core_calloc(
|
||||
e_rab->dL_transportLayerAddress->size, sizeof(c_uint8_t));
|
||||
memcpy(e_rab->dL_transportLayerAddress->buf,
|
||||
&bearer->sgw_dl_addr,
|
||||
e_rab->dL_transportLayerAddress->size);
|
||||
if (MME_HAVE_SGW_DL_INDIRECT_TUNNEL(bearer))
|
||||
{
|
||||
e_rab->dL_transportLayerAddress =
|
||||
(S1ap_TransportLayerAddress_t *)
|
||||
core_calloc(1, sizeof(S1ap_TransportLayerAddress_t));
|
||||
e_rab->dL_transportLayerAddress->size = 4;
|
||||
e_rab->dL_transportLayerAddress->buf = core_calloc(
|
||||
e_rab->dL_transportLayerAddress->size, sizeof(c_uint8_t));
|
||||
memcpy(e_rab->dL_transportLayerAddress->buf,
|
||||
&bearer->sgw_dl_addr,
|
||||
e_rab->dL_transportLayerAddress->size);
|
||||
|
||||
e_rab->dL_gTP_TEID = (S1ap_GTP_TEID_t *)
|
||||
core_calloc(1, sizeof(S1ap_GTP_TEID_t));
|
||||
s1ap_uint32_to_OCTET_STRING(
|
||||
bearer->sgw_dl_teid, e_rab->dL_gTP_TEID);
|
||||
*/
|
||||
e_rab->dL_gTP_TEID = (S1ap_GTP_TEID_t *)
|
||||
core_calloc(1, sizeof(S1ap_GTP_TEID_t));
|
||||
s1ap_uint32_to_OCTET_STRING(
|
||||
bearer->sgw_dl_teid, e_rab->dL_gTP_TEID);
|
||||
}
|
||||
|
||||
ASN_SEQUENCE_ADD(&ies->e_RABDataForwardingList, e_rab);
|
||||
if (MME_HAVE_SGW_UL_INDIRECT_TUNNEL(bearer))
|
||||
{
|
||||
e_rab->uL_S1ap_TransportLayerAddress =
|
||||
(S1ap_TransportLayerAddress_t *)
|
||||
core_calloc(1, sizeof(S1ap_TransportLayerAddress_t));
|
||||
e_rab->uL_S1ap_TransportLayerAddress->size = 4;
|
||||
e_rab->uL_S1ap_TransportLayerAddress->buf = core_calloc(
|
||||
e_rab->uL_S1ap_TransportLayerAddress->size,
|
||||
sizeof(c_uint8_t));
|
||||
memcpy(e_rab->uL_S1ap_TransportLayerAddress->buf,
|
||||
&bearer->sgw_ul_addr,
|
||||
e_rab->uL_S1ap_TransportLayerAddress->size);
|
||||
|
||||
e_rab->uL_S1ap_GTP_TEID = (S1ap_GTP_TEID_t *)
|
||||
core_calloc(1, sizeof(S1ap_GTP_TEID_t));
|
||||
s1ap_uint32_to_OCTET_STRING(
|
||||
bearer->sgw_ul_teid, e_rab->uL_S1ap_GTP_TEID);
|
||||
}
|
||||
|
||||
if (MME_HAVE_SGW_DL_INDIRECT_TUNNEL(bearer) ||
|
||||
MME_HAVE_SGW_UL_INDIRECT_TUNNEL(bearer))
|
||||
{
|
||||
ASN_SEQUENCE_ADD(&ies->e_RABDataForwardingList, e_rab);
|
||||
}
|
||||
|
||||
bearer = mme_bearer_next(bearer);
|
||||
}
|
||||
sess = mme_sess_next(sess);
|
||||
}
|
||||
|
||||
if (ies->e_RABDataForwardingList.s1ap_E_RABDataForwardingItem.count)
|
||||
{
|
||||
ies->presenceMask |=
|
||||
S1AP_HANDOVERCOMMANDIES_E_RABDATAFORWARDINGLIST_PRESENT;
|
||||
}
|
||||
|
||||
s1ap_buffer_to_OCTET_STRING(mme_ue->container.buf, mme_ue->container.size,
|
||||
&ies->target_ToSource_TransparentContainer);
|
||||
S1AP_CLEAR_DATA(&mme_ue->container);
|
||||
|
|
|
@ -605,7 +605,7 @@ abts_suite *test_handover(abts_suite *suite)
|
|||
{
|
||||
suite = ADD_SUITE(suite)
|
||||
|
||||
#if 1
|
||||
#if 0
|
||||
abts_run_test(suite, handover_test1, NULL);
|
||||
#else
|
||||
abts_run_test(suite, handover_test2, NULL);
|
||||
|
|
Loading…
Reference in New Issue