merge develop
This commit is contained in:
@@ -81,7 +81,12 @@ int as_message_decode(const char* buffer, as_message_t* msg, int length)
|
||||
LOG_FUNC_IN;
|
||||
|
||||
int bytes;
|
||||
Byte_t** data = NULL;
|
||||
/* pointers to msg fields possibly not aligned because msg points to a packed structure
|
||||
* Using these possibly unaligned pointers in a function call may trigger alignment errors at run time and
|
||||
* gcc, from v9, now warns about it. fix these warnings by removing the indirection on data
|
||||
* (in fact i don't understand this code data seems to be useless...)
|
||||
*/
|
||||
Byte_t *data = NULL;
|
||||
|
||||
/* Get the message type */
|
||||
msg->msgID = *(uint16_t*)(buffer);
|
||||
@@ -91,49 +96,49 @@ int as_message_decode(const char* buffer, as_message_t* msg, int length)
|
||||
case AS_NAS_ESTABLISH_REQ:
|
||||
/* NAS signalling connection establish request */
|
||||
bytes += sizeof(nas_establish_req_t) - sizeof(Byte_t*);
|
||||
data = &msg->msg.nas_establish_req.initialNasMsg.data;
|
||||
data = msg->msg.nas_establish_req.initialNasMsg.data;
|
||||
break;
|
||||
|
||||
case AS_NAS_ESTABLISH_IND:
|
||||
/* NAS signalling connection establishment indication */
|
||||
bytes += sizeof(nas_establish_ind_t) - sizeof(Byte_t*);
|
||||
data = &msg->msg.nas_establish_ind.initialNasMsg.data;
|
||||
data = msg->msg.nas_establish_ind.initialNasMsg.data;
|
||||
break;
|
||||
|
||||
case AS_NAS_ESTABLISH_RSP:
|
||||
/* NAS signalling connection establishment response */
|
||||
bytes += sizeof(nas_establish_rsp_t) - sizeof(Byte_t*);
|
||||
data = &msg->msg.nas_establish_rsp.nasMsg.data;
|
||||
data = msg->msg.nas_establish_rsp.nasMsg.data;
|
||||
break;
|
||||
|
||||
case AS_NAS_ESTABLISH_CNF:
|
||||
/* NAS signalling connection establishment confirm */
|
||||
bytes += sizeof(nas_establish_cnf_t) - sizeof(Byte_t*);
|
||||
data = &msg->msg.nas_establish_cnf.nasMsg.data;
|
||||
data = msg->msg.nas_establish_cnf.nasMsg.data;
|
||||
break;
|
||||
|
||||
case AS_UL_INFO_TRANSFER_REQ:
|
||||
/* Uplink L3 data transfer request */
|
||||
bytes += sizeof(ul_info_transfer_req_t) - sizeof(Byte_t*);
|
||||
data = &msg->msg.ul_info_transfer_req.nasMsg.data;
|
||||
data = msg->msg.ul_info_transfer_req.nasMsg.data;
|
||||
break;
|
||||
|
||||
case AS_UL_INFO_TRANSFER_IND:
|
||||
/* Uplink L3 data transfer indication */
|
||||
bytes += sizeof(ul_info_transfer_ind_t) - sizeof(Byte_t*);
|
||||
data = &msg->msg.ul_info_transfer_ind.nasMsg.data;
|
||||
data = msg->msg.ul_info_transfer_ind.nasMsg.data;
|
||||
break;
|
||||
|
||||
case AS_DL_INFO_TRANSFER_REQ:
|
||||
/* Downlink L3 data transfer request */
|
||||
bytes += sizeof(dl_info_transfer_req_t) - sizeof(Byte_t*);
|
||||
data = &msg->msg.dl_info_transfer_req.nasMsg.data;
|
||||
data = msg->msg.dl_info_transfer_req.nasMsg.data;
|
||||
break;
|
||||
|
||||
case AS_DL_INFO_TRANSFER_IND:
|
||||
/* Downlink L3 data transfer indication */
|
||||
bytes += sizeof(dl_info_transfer_ind_t) - sizeof(Byte_t*);
|
||||
data = &msg->msg.dl_info_transfer_ind.nasMsg.data;
|
||||
data = msg->msg.dl_info_transfer_ind.nasMsg.data;
|
||||
break;
|
||||
|
||||
case AS_BROADCAST_INFO_IND:
|
||||
@@ -166,7 +171,8 @@ int as_message_decode(const char* buffer, as_message_t* msg, int length)
|
||||
if (bytes > 0) {
|
||||
if (data) {
|
||||
/* Set the pointer to dedicated NAS information */
|
||||
*data = (Byte_t*)(buffer + bytes);
|
||||
/* wasn't data already computed above for specific cases here we override ?? */
|
||||
data = (Byte_t *)buffer + bytes;
|
||||
}
|
||||
|
||||
/* Decode the message */
|
||||
@@ -201,8 +207,10 @@ int as_message_encode(char* buffer, as_message_t* msg, int length)
|
||||
LOG_FUNC_IN;
|
||||
|
||||
int bytes = sizeof(msg->msgID);
|
||||
as_nas_info_t* nas_msg = NULL;
|
||||
|
||||
as_nas_info_t nas_msg;
|
||||
Byte_t *dataptr=NULL;
|
||||
uint32_t len=0;
|
||||
|
||||
switch (msg->msgID) {
|
||||
case AS_BROADCAST_INFO_IND:
|
||||
/* Broadcast information */
|
||||
@@ -237,25 +245,30 @@ int as_message_encode(char* buffer, as_message_t* msg, int length)
|
||||
case AS_NAS_ESTABLISH_REQ:
|
||||
/* NAS signalling connection establish request */
|
||||
bytes += sizeof(nas_establish_req_t) - sizeof(Byte_t*);
|
||||
nas_msg = &msg->msg.nas_establish_req.initialNasMsg;
|
||||
nas_msg = msg->msg.nas_establish_req.initialNasMsg;
|
||||
break;
|
||||
|
||||
case AS_NAS_ESTABLISH_IND:
|
||||
/* NAS signalling connection establish indication */
|
||||
bytes += sizeof(nas_establish_ind_t) - sizeof(Byte_t*);
|
||||
nas_msg = &msg->msg.nas_establish_ind.initialNasMsg;
|
||||
nas_msg = msg->msg.nas_establish_ind.initialNasMsg;
|
||||
dataptr=(Byte_t *)&(msg->msg.nas_establish_ind.initialNasMsg.data);
|
||||
len=msg->msg.nas_establish_ind.initialNasMsg.length;
|
||||
break;
|
||||
|
||||
case AS_NAS_ESTABLISH_RSP:
|
||||
/* NAS signalling connection establish response */
|
||||
bytes += sizeof(nas_establish_rsp_t) - sizeof(Byte_t*);
|
||||
nas_msg = &msg->msg.nas_establish_rsp.nasMsg;
|
||||
nas_msg = msg->msg.nas_establish_rsp.nasMsg;
|
||||
|
||||
break;
|
||||
|
||||
case AS_NAS_ESTABLISH_CNF:
|
||||
/* NAS signalling connection establish confirm */
|
||||
bytes += sizeof(nas_establish_cnf_t) - sizeof(Byte_t*);
|
||||
nas_msg = &msg->msg.nas_establish_cnf.nasMsg;
|
||||
nas_msg = msg->msg.nas_establish_cnf.nasMsg;
|
||||
dataptr=(Byte_t *)&(msg->msg.nas_establish_cnf.nasMsg.data);
|
||||
len=msg->msg.nas_establish_ind.initialNasMsg.length;
|
||||
break;
|
||||
|
||||
case AS_NAS_RELEASE_REQ:
|
||||
@@ -271,7 +284,7 @@ int as_message_encode(char* buffer, as_message_t* msg, int length)
|
||||
case AS_UL_INFO_TRANSFER_REQ:
|
||||
/* Uplink L3 data transfer request */
|
||||
bytes += sizeof(ul_info_transfer_req_t) - sizeof(Byte_t*);
|
||||
nas_msg = &msg->msg.ul_info_transfer_req.nasMsg;
|
||||
nas_msg = msg->msg.ul_info_transfer_req.nasMsg;
|
||||
break;
|
||||
|
||||
case AS_UL_INFO_TRANSFER_CNF:
|
||||
@@ -282,13 +295,13 @@ int as_message_encode(char* buffer, as_message_t* msg, int length)
|
||||
case AS_UL_INFO_TRANSFER_IND:
|
||||
/* Uplink L3 data transfer indication */
|
||||
bytes += sizeof(ul_info_transfer_ind_t) - sizeof(Byte_t*);
|
||||
nas_msg = &msg->msg.ul_info_transfer_ind.nasMsg;
|
||||
nas_msg = msg->msg.ul_info_transfer_ind.nasMsg;
|
||||
break;
|
||||
|
||||
case AS_DL_INFO_TRANSFER_REQ:
|
||||
/* Downlink L3 data transfer */
|
||||
bytes += sizeof(dl_info_transfer_req_t) - sizeof(Byte_t*);
|
||||
nas_msg = &msg->msg.dl_info_transfer_req.nasMsg;
|
||||
nas_msg = msg->msg.dl_info_transfer_req.nasMsg;
|
||||
break;
|
||||
|
||||
case AS_DL_INFO_TRANSFER_CNF:
|
||||
@@ -299,7 +312,8 @@ int as_message_encode(char* buffer, as_message_t* msg, int length)
|
||||
case AS_DL_INFO_TRANSFER_IND:
|
||||
/* Downlink L3 data transfer indication */
|
||||
bytes += sizeof(dl_info_transfer_ind_t) - sizeof(Byte_t*);
|
||||
nas_msg = &msg->msg.dl_info_transfer_ind.nasMsg;
|
||||
nas_msg = msg->msg.dl_info_transfer_ind.nasMsg;
|
||||
|
||||
break;
|
||||
|
||||
case AS_RAB_ESTABLISH_REQ:
|
||||
@@ -343,14 +357,14 @@ int as_message_encode(char* buffer, as_message_t* msg, int length)
|
||||
/* Encode the AS message */
|
||||
memcpy(buffer, (unsigned char*)msg, bytes);
|
||||
|
||||
if ( nas_msg && (nas_msg->length > 0) ) {
|
||||
if ( (dataptr!=NULL) && (len > 0) ) {
|
||||
/* Copy the NAS message */
|
||||
memcpy(buffer + bytes, nas_msg->data, nas_msg->length);
|
||||
bytes += nas_msg->length;
|
||||
memcpy(buffer + bytes, nas_msg.data, nas_msg.length);
|
||||
bytes += len;
|
||||
/* Release NAS message memory */
|
||||
free(nas_msg->data);
|
||||
nas_msg->length = 0;
|
||||
nas_msg->data = NULL;
|
||||
free(nas_msg.data);
|
||||
len=0;
|
||||
dataptr = NULL;
|
||||
}
|
||||
|
||||
LOG_FUNC_RETURN (bytes);
|
||||
|
||||
@@ -136,17 +136,25 @@ static int _emm_as_encrypt(
|
||||
|
||||
static int _emm_as_send(const nas_user_t *user, const emm_as_t *msg);
|
||||
|
||||
static int _emm_as_security_res(const emm_data_t *emm_data, const emm_as_security_t *,
|
||||
ul_info_transfer_req_t *);
|
||||
static int _emm_as_establish_req(const emm_data_t *emm_data, const emm_as_establish_t *,
|
||||
nas_establish_req_t *);
|
||||
|
||||
|
||||
|
||||
|
||||
static int _emm_as_cell_info_req(const emm_as_cell_info_t *, cell_info_req_t *);
|
||||
|
||||
static int _emm_as_data_req(const emm_data_t *emm_data, const emm_as_data_t *msg, ul_info_transfer_req_t *);
|
||||
static int _emm_as_status_ind(const emm_data_t *emm_data, const emm_as_status_t *, ul_info_transfer_req_t *);
|
||||
static int _emm_as_release_req(const emm_as_release_t *, nas_release_req_t *);
|
||||
/* prototyping of the following function modified: the last parameter turned to a void pointer
|
||||
* instead of a ponter to the union field of the as_msg packed structure. This is to avoid new warnings introduced
|
||||
* from gcc V9 which warns when accessing fields in a packed structure which may result in an alignment problem
|
||||
* at run time. Modifications allow gcc to know at compile time that it cannot assume any alignment for those pointers.
|
||||
* On X86 this is not fatal, as at run time the problem can be fixed (but it's better for perf to avoid). On other
|
||||
* processor as Arm i think it can end in seg fault
|
||||
*/
|
||||
static int _emm_as_security_res(const emm_data_t *emm_data, const emm_as_security_t *,
|
||||
void *ul_info_transfer_req_unaligned);
|
||||
static int _emm_as_establish_req(const emm_data_t *emm_data, const emm_as_establish_t *,
|
||||
void *nas_establish_req_unaligned);
|
||||
static int _emm_as_data_req(const emm_data_t *emm_data, const emm_as_data_t *msg, void *ul_info_transfer_req_unaligned);
|
||||
static int _emm_as_status_ind(const emm_data_t *emm_data, const emm_as_status_t *, void *ul_info_transfer_req_unaligned);
|
||||
static int _emm_as_release_req(const emm_as_release_t *, void *nas_release_req_unaligned);
|
||||
|
||||
/****************************************************************************/
|
||||
/****************** E X P O R T E D F U N C T I O N S ******************/
|
||||
@@ -938,32 +946,32 @@ static int _emm_as_send(const nas_user_t *user, const emm_as_t *msg)
|
||||
case _EMMAS_DATA_REQ:
|
||||
as_msg.msgID = _emm_as_data_req(user->emm_data,
|
||||
&msg->u.data,
|
||||
&as_msg.msg.ul_info_transfer_req);
|
||||
(void *)(&as_msg.msg.ul_info_transfer_req));
|
||||
break;
|
||||
|
||||
case _EMMAS_STATUS_IND:
|
||||
as_msg.msgID = _emm_as_status_ind(user->emm_data,
|
||||
&msg->u.status,
|
||||
&as_msg.msg.ul_info_transfer_req);
|
||||
(void *)(&as_msg.msg.ul_info_transfer_req));
|
||||
break;
|
||||
|
||||
case _EMMAS_RELEASE_REQ:
|
||||
as_msg.msgID = _emm_as_release_req(
|
||||
&msg->u.release,
|
||||
&as_msg.msg.nas_release_req);
|
||||
(void *)(&as_msg.msg.nas_release_req));
|
||||
break;
|
||||
|
||||
|
||||
case _EMMAS_SECURITY_RES:
|
||||
as_msg.msgID = _emm_as_security_res(user->emm_data,
|
||||
&msg->u.security,
|
||||
&as_msg.msg.ul_info_transfer_req);
|
||||
(void *)(&as_msg.msg.ul_info_transfer_req));
|
||||
break;
|
||||
|
||||
case _EMMAS_ESTABLISH_REQ:
|
||||
as_msg.msgID = _emm_as_establish_req(user->emm_data,
|
||||
&msg->u.establish,
|
||||
&as_msg.msg.nas_establish_req);
|
||||
(void *)(&as_msg.msg.nas_establish_req));
|
||||
break;
|
||||
|
||||
|
||||
@@ -1069,10 +1077,10 @@ static int _emm_as_send(const nas_user_t *user, const emm_as_t *msg)
|
||||
** **
|
||||
***************************************************************************/
|
||||
static int _emm_as_data_req(const emm_data_t *emm_data, const emm_as_data_t *msg,
|
||||
ul_info_transfer_req_t *as_msg)
|
||||
void *ul_info_transfer_req_unaligned)
|
||||
{
|
||||
LOG_FUNC_IN;
|
||||
|
||||
ul_info_transfer_req_t *as_msg = (ul_info_transfer_req_t *)ul_info_transfer_req_unaligned;
|
||||
int size = 0;
|
||||
int is_encoded = FALSE;
|
||||
|
||||
@@ -1165,12 +1173,12 @@ static int _emm_as_data_req(const emm_data_t *emm_data, const emm_as_data_t *msg
|
||||
** **
|
||||
***************************************************************************/
|
||||
static int _emm_as_status_ind(const emm_data_t *emm_data, const emm_as_status_t *msg,
|
||||
ul_info_transfer_req_t *as_msg)
|
||||
void *ul_info_transfer_req_unaligned)
|
||||
{
|
||||
LOG_FUNC_IN;
|
||||
|
||||
int size = 0;
|
||||
|
||||
ul_info_transfer_req_t *as_msg = (ul_info_transfer_req_t *)ul_info_transfer_req_unaligned;
|
||||
LOG_TRACE(INFO, "EMMAS-SAP - Send AS status indication (cause=%d)",
|
||||
msg->emm_cause);
|
||||
|
||||
@@ -1239,12 +1247,12 @@ static int _emm_as_status_ind(const emm_data_t *emm_data, const emm_as_status_t
|
||||
** **
|
||||
***************************************************************************/
|
||||
static int _emm_as_release_req(const emm_as_release_t *msg,
|
||||
nas_release_req_t *as_msg)
|
||||
void *nas_release_req_unaligned)
|
||||
{
|
||||
LOG_FUNC_IN;
|
||||
|
||||
LOG_TRACE(INFO, "EMMAS-SAP - Send AS release request");
|
||||
|
||||
nas_release_req_t *as_msg = (nas_release_req_t *)nas_release_req_unaligned;
|
||||
/* Setup the AS message */
|
||||
if (msg->guti) {
|
||||
as_msg->s_tmsi.MMEcode = msg->guti->gummei.MMEcode;
|
||||
@@ -1279,10 +1287,10 @@ static int _emm_as_release_req(const emm_as_release_t *msg,
|
||||
** **
|
||||
***************************************************************************/
|
||||
static int _emm_as_security_res(const emm_data_t *emm_data, const emm_as_security_t *msg,
|
||||
ul_info_transfer_req_t *as_msg)
|
||||
void *ul_info_transfer_req_unaligned)
|
||||
{
|
||||
LOG_FUNC_IN;
|
||||
|
||||
ul_info_transfer_req_t *as_msg=(ul_info_transfer_req_t *)ul_info_transfer_req_unaligned;
|
||||
int size = 0;
|
||||
|
||||
LOG_TRACE(INFO, "EMMAS-SAP - Send AS security response");
|
||||
@@ -1373,12 +1381,12 @@ static int _emm_as_security_res(const emm_data_t *emm_data, const emm_as_securit
|
||||
** **
|
||||
***************************************************************************/
|
||||
static int _emm_as_establish_req(const emm_data_t *emm_data, const emm_as_establish_t *msg,
|
||||
nas_establish_req_t *as_msg)
|
||||
void *nas_establish_req_unaligned)
|
||||
{
|
||||
LOG_FUNC_IN;
|
||||
|
||||
int size = 0;
|
||||
|
||||
nas_establish_req_t *as_msg = (nas_establish_req_t *)nas_establish_req_unaligned;
|
||||
LOG_TRACE(INFO, "EMMAS-SAP - Send AS connection establish request");
|
||||
|
||||
nas_message_t nas_msg;
|
||||
|
||||
@@ -141,11 +141,11 @@ int nas_network_process_data(nas_user_t *user, int msg_id, const void *data)
|
||||
|
||||
case AS_CELL_INFO_CNF: {
|
||||
/* Received cell information confirm */
|
||||
const cell_info_cnf_t *info = &msg->msg.cell_info_cnf;
|
||||
int cell_found = (info->errCode == AS_SUCCESS);
|
||||
rc = nas_proc_cell_info(user, cell_found, info->tac,
|
||||
info->cellID, info->rat,
|
||||
info->rsrp, info->rsrq);
|
||||
/* remove using pointers to fiels of the packed structure msg as it
|
||||
* triggers warnings with gcc version 9 */
|
||||
const cell_info_cnf_t info = msg->msg.cell_info_cnf;
|
||||
int cell_found = (info.errCode == AS_SUCCESS);
|
||||
rc = nas_proc_cell_info(user, cell_found, info.tac, info.cellID, info.rat, info.rsrp, info.rsrq);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -157,12 +157,12 @@ int nas_network_process_data(nas_user_t *user, int msg_id, const void *data)
|
||||
|
||||
case AS_NAS_ESTABLISH_CNF: {
|
||||
/* Received NAS signalling connection establishment confirm */
|
||||
const nas_establish_cnf_t *confirm = &msg->msg.nas_establish_cnf;
|
||||
const nas_establish_cnf_t confirm = msg->msg.nas_establish_cnf;
|
||||
|
||||
if ( (confirm->errCode == AS_SUCCESS) ||
|
||||
(confirm->errCode == AS_TERMINATED_NAS) ) {
|
||||
rc = nas_proc_establish_cnf(user, confirm->nasMsg.data,
|
||||
confirm->nasMsg.length);
|
||||
if ( (confirm.errCode == AS_SUCCESS) ||
|
||||
(confirm.errCode == AS_TERMINATED_NAS) ) {
|
||||
rc = nas_proc_establish_cnf(user, confirm.nasMsg.data,
|
||||
confirm.nasMsg.length);
|
||||
} else {
|
||||
LOG_TRACE(WARNING, "NET-MAIN - "
|
||||
"Initial NAS message not delivered");
|
||||
@@ -191,10 +191,10 @@ int nas_network_process_data(nas_user_t *user, int msg_id, const void *data)
|
||||
break;
|
||||
|
||||
case AS_DL_INFO_TRANSFER_IND: {
|
||||
const dl_info_transfer_ind_t *info = &msg->msg.dl_info_transfer_ind;
|
||||
const dl_info_transfer_ind_t info = msg->msg.dl_info_transfer_ind;
|
||||
/* Received downlink data transfer indication */
|
||||
rc = nas_proc_dl_transfer_ind(user, info->nasMsg.data,
|
||||
info->nasMsg.length);
|
||||
rc = nas_proc_dl_transfer_ind(user, info.nasMsg.data,
|
||||
info.nasMsg.length);
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
@@ -74,6 +74,12 @@ class gtpEndPoint {
|
||||
int ipVersion;
|
||||
map<int,teidData_t> ue2te_mapping;
|
||||
map<int,rntiData_t> te2ue_mapping;
|
||||
// we use the same port number for source and destination address
|
||||
// this allow using non standard gtp port number (different from 2152)
|
||||
// and so, for example tu run 4G and 5G cores on one system
|
||||
tcp_udp_port_t get_dstport() {
|
||||
return (tcp_udp_port_t)atol(addr.destinationService);
|
||||
}
|
||||
};
|
||||
|
||||
class gtpEndPoints {
|
||||
@@ -99,6 +105,8 @@ instance_t legacyInstanceMapping=0;
|
||||
#define compatInst(a) ((a)==0 || (a)==INSTANCE_DEFAULT?legacyInstanceMapping:a)
|
||||
|
||||
#define GTPV1U_HEADER_SIZE (8)
|
||||
|
||||
|
||||
static int gtpv1uCreateAndSendMsg(int h, uint32_t peerIp, uint16_t peerPort, teid_t teid, uint8_t *Msg,int msgLen,
|
||||
bool seqNumFlag, bool npduNumFlag, bool extHdrFlag, int seqNum, int npduNum, int extHdrType) {
|
||||
AssertFatal(extHdrFlag==false,"Not developped");
|
||||
@@ -302,7 +310,6 @@ static int udpServerSocket(openAddr_s addr) {
|
||||
LOG_E(GTPU,"getaddrinfo error: %s\n", gai_strerror(status));
|
||||
return -1;
|
||||
}
|
||||
|
||||
int sockfd=-1;
|
||||
|
||||
// loop through all the results and bind to the first we can
|
||||
@@ -489,17 +496,18 @@ int ocp_gtpv1u_create_s1u_tunnel(instance_t instance,
|
||||
create_tunnel_req->rnti,
|
||||
create_tunnel_req->num_tunnels,
|
||||
create_tunnel_req->sgw_S1u_teid[0]);
|
||||
|
||||
tcp_udp_port_t dstport=globGtp.instances[compatInst(instance)].get_dstport();
|
||||
for (int i = 0; i < create_tunnel_req->num_tunnels; i++) {
|
||||
AssertFatal(create_tunnel_req->eps_bearer_id[i] > 4,
|
||||
"From legacy code not clear, seems impossible (bearer=%d)\n",
|
||||
create_tunnel_req->eps_bearer_id[i]);
|
||||
int incoming_rb_id=create_tunnel_req->eps_bearer_id[i]-4;
|
||||
teid_t teid=newGtpuCreateTunnel(instance, create_tunnel_req->rnti,
|
||||
|
||||
teid_t teid=newGtpuCreateTunnel(compatInst(instance), create_tunnel_req->rnti,
|
||||
incoming_rb_id,
|
||||
create_tunnel_req->eps_bearer_id[i],
|
||||
create_tunnel_req->sgw_S1u_teid[i],
|
||||
create_tunnel_req->sgw_addr[i], 2152,
|
||||
create_tunnel_req->sgw_addr[i], dstport,
|
||||
pdcp_data_req);
|
||||
create_tunnel_resp->status=0;
|
||||
create_tunnel_resp->rnti=create_tunnel_req->rnti;
|
||||
@@ -557,13 +565,14 @@ int gtpv1u_create_ngu_tunnel( const instance_t instance,
|
||||
create_tunnel_req->rnti,
|
||||
create_tunnel_req->num_tunnels,
|
||||
create_tunnel_req->outgoing_teid[0]);
|
||||
|
||||
tcp_udp_port_t dstport=globGtp.instances[compatInst(instance)].get_dstport();
|
||||
for (int i = 0; i < create_tunnel_req->num_tunnels; i++) {
|
||||
teid_t teid=newGtpuCreateTunnel(instance, create_tunnel_req->rnti,
|
||||
create_tunnel_req->incoming_rb_id[i],
|
||||
create_tunnel_req->pdusession_id[i],
|
||||
create_tunnel_req->outgoing_teid[i],
|
||||
create_tunnel_req->dst_addr[i], 2152,
|
||||
create_tunnel_req->dst_addr[i], dstport,
|
||||
|
||||
pdcp_data_req);
|
||||
create_tunnel_resp->status=0;
|
||||
create_tunnel_resp->rnti=create_tunnel_req->rnti;
|
||||
@@ -898,6 +907,7 @@ void *ocp_gtpv1uTask(void *args) {
|
||||
// to be dev: should be removed, to use API
|
||||
strcpy(addr.originHost, GTPV1U_ENB_S1_REQ(message_p).addrStr);
|
||||
strcpy(addr.originService, GTPV1U_ENB_S1_REQ(message_p).portStr);
|
||||
strcpy(addr.destinationService,addr.originService);
|
||||
AssertFatal((legacyInstanceMapping=ocp_gtpv1Init(addr))!=0,"Instance 0 reserved for legacy\n");
|
||||
break;
|
||||
|
||||
@@ -905,6 +915,7 @@ void *ocp_gtpv1uTask(void *args) {
|
||||
// to be dev: should be removed, to use API
|
||||
strcpy(addr.originHost, GTPV1U_GNB_NG_REQ(message_p).addrStr);
|
||||
strcpy(addr.originService, GTPV1U_GNB_NG_REQ(message_p).portStr);
|
||||
strcpy(addr.destinationService,addr.originService);
|
||||
AssertFatal((legacyInstanceMapping=ocp_gtpv1Init(addr))!=0,"Instance 0 reserved for legacy\n");
|
||||
break;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user