s1ap structure changes from net_sock_t to sock_id
This commit is contained in:
parent
38a5ad3c68
commit
e44e613ff2
|
@ -53,15 +53,14 @@ status_t gtp_close(net_sock_t *sock)
|
|||
return CORE_OK;
|
||||
}
|
||||
|
||||
pkbuf_t *gtp_read(net_sock_t *sock)
|
||||
status_t gtp_recv(net_sock_t *sock, pkbuf_t **pkbuf)
|
||||
{
|
||||
pkbuf_t *pkb;
|
||||
int r;
|
||||
|
||||
d_assert(sock, return NULL, "Null param");
|
||||
d_assert(sock, return CORE_ERROR, "Null param");
|
||||
|
||||
pkb = pkbuf_alloc(0, MAX_SDU_LEN);
|
||||
if (pkb == NULL)
|
||||
*pkbuf = pkbuf_alloc(0, MAX_SDU_LEN);
|
||||
if ((*pkbuf) == NULL)
|
||||
{
|
||||
char tmp_buf[MAX_SDU_LEN];
|
||||
|
||||
|
@ -70,13 +69,13 @@ pkbuf_t *gtp_read(net_sock_t *sock)
|
|||
/* Read data from socket to exit from select */
|
||||
net_read(sock, tmp_buf, MAX_SDU_LEN, 0);
|
||||
|
||||
return NULL;
|
||||
return CORE_ERROR;
|
||||
}
|
||||
|
||||
r = net_read(sock, pkb->payload, pkb->len, 0);
|
||||
r = net_read(sock, (*pkbuf)->payload, (*pkbuf)->len, 0);
|
||||
if (r <= 0)
|
||||
{
|
||||
pkbuf_free(pkb);
|
||||
pkbuf_free((*pkbuf));
|
||||
|
||||
if (sock->sndrcv_errno != EAGAIN)
|
||||
{
|
||||
|
@ -84,13 +83,53 @@ pkbuf_t *gtp_read(net_sock_t *sock)
|
|||
sock->sndrcv_errno, strerror(sock->sndrcv_errno));
|
||||
}
|
||||
|
||||
return NULL;
|
||||
return CORE_ERROR;
|
||||
}
|
||||
else
|
||||
{
|
||||
pkb->len = r;
|
||||
(*pkbuf)->len = r;
|
||||
|
||||
return pkb;
|
||||
return CORE_OK;;
|
||||
}
|
||||
}
|
||||
|
||||
status_t gtp_recvfrom(net_sock_t *sock, pkbuf_t **pkbuf, c_sockaddr_t *from)
|
||||
{
|
||||
int r;
|
||||
|
||||
d_assert(sock, return CORE_ERROR, "Null param");
|
||||
|
||||
*pkbuf = pkbuf_alloc(0, MAX_SDU_LEN);
|
||||
if ((*pkbuf) == NULL)
|
||||
{
|
||||
char tmp_buf[MAX_SDU_LEN];
|
||||
|
||||
d_fatal("Can't allocate pkbuf");
|
||||
|
||||
/* Read data from socket to exit from select */
|
||||
net_read(sock, tmp_buf, MAX_SDU_LEN, 0);
|
||||
|
||||
return CORE_ERROR;
|
||||
}
|
||||
|
||||
r = net_read(sock, (*pkbuf)->payload, (*pkbuf)->len, 0);
|
||||
if (r <= 0)
|
||||
{
|
||||
pkbuf_free((*pkbuf));
|
||||
|
||||
if (sock->sndrcv_errno != EAGAIN)
|
||||
{
|
||||
d_warn("net_read failed(%d:%s)",
|
||||
sock->sndrcv_errno, strerror(sock->sndrcv_errno));
|
||||
}
|
||||
|
||||
return CORE_ERROR;
|
||||
}
|
||||
else
|
||||
{
|
||||
(*pkbuf)->len = r;
|
||||
|
||||
return CORE_OK;;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -30,7 +30,9 @@ CORE_DECLARE(status_t) gtp_listen(net_sock_t **sock,
|
|||
net_sock_handler handler, c_uint32_t addr, c_uint16_t port, void *data);
|
||||
CORE_DECLARE(status_t) gtp_close(net_sock_t *sock);
|
||||
|
||||
CORE_DECLARE(pkbuf_t *) gtp_read(net_sock_t *sock);
|
||||
CORE_DECLARE(status_t) gtp_recv(net_sock_t *sock, pkbuf_t **pkbuf);
|
||||
CORE_DECLARE(status_t) gtp_recvfrom(net_sock_t *sock,
|
||||
pkbuf_t **pkbuf, c_sockaddr_t *from);
|
||||
CORE_DECLARE(status_t) gtp_send(gtp_node_t *gnode, pkbuf_t *pkbuf);
|
||||
|
||||
CORE_DECLARE(pkbuf_t*) gtp_handle_echo_req(pkbuf_t *pkt);
|
||||
|
|
|
@ -993,7 +993,7 @@ mme_sgw_t* mme_sgw_next(mme_sgw_t *sgw)
|
|||
return list_next(sgw);
|
||||
}
|
||||
|
||||
mme_enb_t* mme_enb_add(net_sock_t *sock)
|
||||
mme_enb_t* mme_enb_add(sock_id sock)
|
||||
{
|
||||
mme_enb_t *enb = NULL;
|
||||
event_t e;
|
||||
|
@ -1059,7 +1059,7 @@ mme_enb_t* mme_enb_find(index_t index)
|
|||
return index_find(&mme_enb_pool, index);
|
||||
}
|
||||
|
||||
mme_enb_t* mme_enb_find_by_sock(net_sock_t *sock)
|
||||
mme_enb_t* mme_enb_find_by_sock(sock_id sock)
|
||||
{
|
||||
d_assert(sock, return NULL,"Invalid param");
|
||||
return (mme_enb_t *)hash_get(self.s1ap_sock_hash, &sock, sizeof(sock));
|
||||
|
|
|
@ -53,7 +53,7 @@ typedef struct _mme_context_t {
|
|||
|
||||
c_uint32_t s1ap_addr; /* MME S1AP local address */
|
||||
c_uint16_t s1ap_port; /* MME S1AP local port */
|
||||
net_sock_t *s1ap_sock; /* MME S1AP local listen socket */
|
||||
sock_id s1ap_sock; /* MME S1AP local listen socket */
|
||||
|
||||
c_uint32_t gtpc_addr; /* MME GTPC local address */
|
||||
c_uint16_t gtpc_port; /* MME GTPC local port */
|
||||
|
@ -115,7 +115,7 @@ typedef struct _mme_enb_t {
|
|||
c_uint32_t enb_id; /* eNB_ID received from eNB */
|
||||
c_uint32_t s1ap_addr; /* eNB S1AP IP address */
|
||||
c_uint16_t s1ap_port; /* eNB S1AP Port */
|
||||
net_sock_t *s1ap_sock; /* eNB S1AP Socket */
|
||||
sock_id s1ap_sock; /* eNB S1AP Socket */
|
||||
|
||||
c_uint8_t num_of_tai;
|
||||
tai_t tai[MAX_NUM_OF_TAC * MAX_NUM_OF_BPLMN];
|
||||
|
@ -443,11 +443,11 @@ CORE_DECLARE(status_t) mme_sgw_remove_all(void);
|
|||
CORE_DECLARE(mme_sgw_t*) mme_sgw_first(void);
|
||||
CORE_DECLARE(mme_sgw_t*) mme_sgw_next(mme_sgw_t *sgw);
|
||||
|
||||
CORE_DECLARE(mme_enb_t*) mme_enb_add(net_sock_t *sock);
|
||||
CORE_DECLARE(mme_enb_t*) mme_enb_add(sock_id sock);
|
||||
CORE_DECLARE(status_t) mme_enb_remove(mme_enb_t *enb);
|
||||
CORE_DECLARE(status_t) mme_enb_remove_all(void);
|
||||
CORE_DECLARE(mme_enb_t*) mme_enb_find(index_t index);
|
||||
CORE_DECLARE(mme_enb_t*) mme_enb_find_by_sock(net_sock_t *sock);
|
||||
CORE_DECLARE(mme_enb_t*) mme_enb_find_by_sock(sock_id sock);
|
||||
CORE_DECLARE(mme_enb_t*) mme_enb_find_by_enb_id(c_uint32_t enb_id);
|
||||
CORE_DECLARE(status_t) mme_enb_set_enb_id(
|
||||
mme_enb_t *enb, c_uint32_t enb_id);
|
||||
|
|
|
@ -9,29 +9,22 @@
|
|||
|
||||
static int _gtpv2_c_recv_cb(net_sock_t *sock, void *data)
|
||||
{
|
||||
char buf[INET_ADDRSTRLEN];
|
||||
status_t rv;
|
||||
event_t e;
|
||||
pkbuf_t *pkbuf = NULL;
|
||||
c_uint32_t addr;
|
||||
c_uint16_t port;
|
||||
|
||||
d_assert(sock, return -1, "Null param");
|
||||
|
||||
pkbuf = gtp_read(sock);
|
||||
if (pkbuf == NULL)
|
||||
rv = gtp_recv(sock, &pkbuf);
|
||||
if (rv != CORE_OK)
|
||||
{
|
||||
if (sock->sndrcv_errno == EAGAIN)
|
||||
if (errno == EAGAIN)
|
||||
return 0;
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
addr = sock->remote.sin_addr.s_addr;
|
||||
port = ntohs(sock->remote.sin_port);
|
||||
|
||||
d_trace(10, "S11_PDU is received from SGW[%s:%d]\n",
|
||||
INET_NTOP(&addr, buf), port);
|
||||
d_trace(10, "S11_PDU is received from SGW\n");
|
||||
d_trace_hex(10, pkbuf->payload, pkbuf->len);
|
||||
|
||||
event_set(&e, MME_EVT_S11_MESSAGE);
|
||||
|
|
|
@ -74,13 +74,13 @@ void mme_state_operational(fsm_t *s, event_t *e)
|
|||
{
|
||||
d_error("Can't close S1AP path");
|
||||
}
|
||||
mme_self()->s1ap_sock = NULL;
|
||||
mme_self()->s1ap_sock = 0;
|
||||
|
||||
break;
|
||||
}
|
||||
case MME_EVT_S1AP_LO_ACCEPT:
|
||||
{
|
||||
net_sock_t *sock = (net_sock_t *)event_get_param1(e);
|
||||
sock_id sock = (sock_id)event_get_param1(e);
|
||||
d_assert(sock, break, "Null param");
|
||||
c_uint32_t addr = (c_uint32_t)event_get_param2(e);
|
||||
c_uint16_t port = (c_uint16_t)event_get_param3(e);
|
||||
|
@ -116,9 +116,9 @@ void mme_state_operational(fsm_t *s, event_t *e)
|
|||
case MME_EVT_S1AP_LO_CONNREFUSED:
|
||||
{
|
||||
mme_enb_t *enb = NULL;
|
||||
net_sock_t *sock = NULL;
|
||||
sock_id sock = 0;
|
||||
|
||||
sock = (net_sock_t *)event_get_param1(e);
|
||||
sock = (sock_id)event_get_param1(e);
|
||||
d_assert(sock, break, "Null param");
|
||||
|
||||
enb = mme_enb_find_by_sock(sock);
|
||||
|
@ -139,10 +139,10 @@ void mme_state_operational(fsm_t *s, event_t *e)
|
|||
{
|
||||
s1ap_message_t message;
|
||||
mme_enb_t *enb = NULL;
|
||||
net_sock_t *sock = NULL;
|
||||
sock_id sock = 0;
|
||||
pkbuf_t *pkbuf = NULL;
|
||||
|
||||
sock = (net_sock_t *)event_get_param1(e);
|
||||
sock = (sock_id)event_get_param1(e);
|
||||
d_assert(sock, break, "Null param");
|
||||
|
||||
pkbuf = (pkbuf_t *)event_get_param2(e);
|
||||
|
|
|
@ -2,7 +2,6 @@
|
|||
#define __S1AP_PATH_H__
|
||||
|
||||
#include "core_pkbuf.h"
|
||||
#include "core_net.h"
|
||||
|
||||
#include "mme_context.h"
|
||||
#include "s1ap_message.h"
|
||||
|
@ -14,14 +13,11 @@ extern "C" {
|
|||
CORE_DECLARE(status_t) s1ap_open();
|
||||
CORE_DECLARE(status_t) s1ap_close();
|
||||
|
||||
CORE_DECLARE(status_t) s1ap_sctp_close(net_sock_t *sock);
|
||||
CORE_DECLARE(status_t) s1ap_sctp_close(sock_id sock);
|
||||
|
||||
CORE_DECLARE(status_t) s1ap_final();
|
||||
|
||||
#if 0 /* depreciated */
|
||||
CORE_DECLARE(status_t) s1ap_send(net_sock_t *s, pkbuf_t *pkb);
|
||||
#endif
|
||||
CORE_DECLARE(status_t) s1ap_sendto(net_sock_t *s, pkbuf_t *pkb,
|
||||
CORE_DECLARE(status_t) s1ap_sendto(sock_id sock, pkbuf_t *pkb,
|
||||
c_uint32_t addr, c_uint16_t port);
|
||||
CORE_DECLARE(status_t) s1ap_send_to_enb(mme_enb_t *enb, pkbuf_t *pkb);
|
||||
CORE_DECLARE(status_t) s1ap_delayed_send_to_enb(mme_enb_t *enb,
|
||||
|
@ -51,7 +47,7 @@ CORE_DECLARE(status_t) s1ap_send_handover_cancel_ack(enb_ue_t *source_ue);
|
|||
CORE_DECLARE(status_t) s1ap_send_mme_status_transfer(
|
||||
enb_ue_t *target_ue, S1ap_ENBStatusTransferIEs_t *ies);
|
||||
|
||||
int s1ap_recv_cb(net_sock_t *net_sock, void *data);
|
||||
int s1ap_recv_cb(sock_id sock, void *data);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
@ -29,14 +29,14 @@ void s1ap_state_final(fsm_t *s, event_t *e)
|
|||
void s1ap_state_operational(fsm_t *s, event_t *e)
|
||||
{
|
||||
mme_enb_t *enb = NULL;
|
||||
net_sock_t *sock = NULL;
|
||||
sock_id sock = 0;
|
||||
|
||||
d_assert(s, return, "Null param");
|
||||
d_assert(e, return, "Null param");
|
||||
|
||||
mme_sm_trace(3, e);
|
||||
|
||||
sock = (net_sock_t *)event_get_param1(e);
|
||||
sock = (sock_id)event_get_param1(e);
|
||||
d_assert(sock, return, "Null param");
|
||||
enb = mme_enb_find_by_sock(sock);
|
||||
d_assert(enb, return, "Null param");
|
||||
|
|
|
@ -64,7 +64,7 @@ status_t s1ap_open(void)
|
|||
return CORE_ERROR;
|
||||
}
|
||||
|
||||
mme_self()->s1ap_sock = (net_sock_t *)psock;
|
||||
mme_self()->s1ap_sock = (sock_id)psock;
|
||||
|
||||
if (usrsctp_setsockopt(psock, IPPROTO_SCTP, SCTP_RECVRCVINFO,
|
||||
&on, sizeof(int)) < 0)
|
||||
|
@ -131,7 +131,7 @@ status_t s1ap_close()
|
|||
struct socket *psock = NULL;
|
||||
|
||||
d_assert(mme_self(), return CORE_ERROR, "Null param");
|
||||
d_assert(mme_self()->s1ap_sock != NULL, return CORE_ERROR,
|
||||
d_assert(mme_self()->s1ap_sock, return CORE_ERROR,
|
||||
"S1-ENB path already opened");
|
||||
|
||||
accept_thread_should_stop = 1;
|
||||
|
@ -147,21 +147,21 @@ status_t s1ap_close()
|
|||
return CORE_OK;
|
||||
}
|
||||
|
||||
status_t s1ap_sctp_close(net_sock_t *sock)
|
||||
status_t s1ap_sctp_close(sock_id sock)
|
||||
{
|
||||
usrsctp_close((struct socket *)sock);
|
||||
return CORE_OK;
|
||||
}
|
||||
|
||||
status_t s1ap_sendto(net_sock_t *s, pkbuf_t *pkbuf,
|
||||
status_t s1ap_sendto(sock_id sock, pkbuf_t *pkbuf,
|
||||
c_uint32_t addr, c_uint16_t port)
|
||||
{
|
||||
char buf[INET_ADDRSTRLEN];
|
||||
ssize_t sent;
|
||||
struct socket *psock = (struct socket *)s;
|
||||
struct socket *psock = (struct socket *)sock;
|
||||
struct sctp_sndinfo sndinfo;
|
||||
|
||||
d_assert(s, return CORE_ERROR, "Null param");
|
||||
d_assert(sock, return CORE_ERROR, "Null param");
|
||||
d_assert(pkbuf, return CORE_ERROR, "Null param");
|
||||
|
||||
memset((void *)&sndinfo, 0, sizeof(struct sctp_sndinfo));
|
||||
|
|
|
@ -89,10 +89,10 @@ static int _gtpv2_c_recv_cb(net_sock_t *sock, void *data)
|
|||
|
||||
d_assert(sock, return -1, "Null param");
|
||||
|
||||
pkbuf = gtp_read(sock);
|
||||
if (pkbuf == NULL)
|
||||
rv = gtp_recv(sock, &pkbuf);
|
||||
if (rv != CORE_OK)
|
||||
{
|
||||
if (sock->sndrcv_errno == EAGAIN)
|
||||
if (errno == EAGAIN)
|
||||
return 0;
|
||||
|
||||
return -1;
|
||||
|
@ -116,15 +116,16 @@ static int _gtpv2_c_recv_cb(net_sock_t *sock, void *data)
|
|||
|
||||
static int _gtpv1_u_recv_cb(net_sock_t *sock, void *data)
|
||||
{
|
||||
status_t rv;
|
||||
pkbuf_t *pkbuf = NULL;
|
||||
c_uint32_t size = GTPV1U_HEADER_LEN;
|
||||
|
||||
d_assert(sock, return -1, "Null param");
|
||||
|
||||
pkbuf = gtp_read(sock);
|
||||
if (pkbuf == NULL)
|
||||
rv = gtp_recv(sock, &pkbuf);
|
||||
if (rv != CORE_OK)
|
||||
{
|
||||
if (sock->sndrcv_errno == EAGAIN)
|
||||
if (errno == EAGAIN)
|
||||
return 0;
|
||||
|
||||
return -1;
|
||||
|
|
|
@ -21,10 +21,10 @@ static int _gtpv2_c_recv_cb(net_sock_t *sock, void *data)
|
|||
|
||||
d_assert(sock, return -1, "Null param");
|
||||
|
||||
pkbuf = gtp_read(sock);
|
||||
if (pkbuf == NULL)
|
||||
rv = gtp_recv(sock, &pkbuf);
|
||||
if (rv != CORE_OK)
|
||||
{
|
||||
if (sock->sndrcv_errno == EAGAIN)
|
||||
if (errno == EAGAIN)
|
||||
return 0;
|
||||
|
||||
return -1;
|
||||
|
@ -62,7 +62,9 @@ static int _gtpv2_c_recv_cb(net_sock_t *sock, void *data)
|
|||
|
||||
static int _gtpv1_u_recv_cb(net_sock_t *sock, void *data)
|
||||
{
|
||||
status_t rv;
|
||||
pkbuf_t *pkbuf = NULL;
|
||||
c_sockaddr_t from;
|
||||
gtp_node_t gnode;
|
||||
gtp_header_t *gtp_h = NULL;
|
||||
sgw_bearer_t *bearer = NULL;
|
||||
|
@ -72,10 +74,10 @@ static int _gtpv1_u_recv_cb(net_sock_t *sock, void *data)
|
|||
|
||||
d_assert(sock, return -1, "Null param");
|
||||
|
||||
pkbuf = gtp_read(sock);
|
||||
if (pkbuf == NULL)
|
||||
rv = gtp_recvfrom(sock, &pkbuf, &from);
|
||||
if (rv != CORE_OK)
|
||||
{
|
||||
if (sock->sndrcv_errno == EAGAIN)
|
||||
if (errno == EAGAIN)
|
||||
return 0;
|
||||
|
||||
return -1;
|
||||
|
|
|
@ -70,7 +70,7 @@ status_t tests1ap_enb_close(sock_id id)
|
|||
|
||||
status_t tests1ap_enb_send(sock_id id, pkbuf_t *sendbuf)
|
||||
{
|
||||
return s1ap_sendto((net_sock_t *)id, sendbuf, mme_self()->s1ap_addr,
|
||||
return s1ap_sendto(id, sendbuf, mme_self()->s1ap_addr,
|
||||
mme_self()->s1ap_port);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue