fix the s1ap encoding bug

This commit is contained in:
Sukchan Lee 2017-09-13 23:27:02 +09:00
parent f53c4c5d7f
commit dadadc5179
10 changed files with 399 additions and 240 deletions

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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>

View File

@ -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))

View File

@ -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; \

View File

@ -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;

View File

@ -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);

View File

@ -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);