add sock type in enb context

This commit is contained in:
Sukchan Lee 2017-11-24 10:03:48 +00:00
parent 6412231f29
commit 7025491846
5 changed files with 25 additions and 16 deletions

View File

@ -1009,6 +1009,7 @@ mme_enb_t* mme_enb_add(sock_id sock, c_sockaddr_t *addr)
enb->sock = sock;
enb->addr = addr;
enb->sock_type = mme_enb_sock_type(enb->sock);
list_init(&enb->enb_ue_list);
@ -1040,7 +1041,7 @@ status_t mme_enb_remove(mme_enb_t *enb)
enb_ue_remove_in_enb(enb);
if (mme_enb_sock_is_stream(enb->sock))
if (enb->sock_type == SOCK_STREAM)
s1ap_sctp_delete(enb->sock);
core_free(enb->addr);
@ -1120,10 +1121,17 @@ mme_enb_t *mme_enb_this(hash_index_t *hi)
return hash_this_val(hi);
}
int mme_enb_sock_is_stream(sock_id sock)
int mme_enb_sock_type(sock_id sock)
{
d_assert(sock, return 0,);
return (mme_self()->s1ap_sock != sock);
if (mme_self()->s1ap_sock == sock)
{
return SOCK_SEQPACKET;
}
else
{
return SOCK_STREAM;
}
}

View File

@ -113,6 +113,7 @@ typedef struct _mme_enb_t {
fsm_t sm; /* A state machine */
c_uint32_t enb_id; /* eNB_ID received from eNB */
int sock_type; /* SOCK_STREAM or SOCK_SEQPACKET */
sock_id sock; /* eNB S1AP Socket */
c_sockaddr_t *addr; /* eNB S1AP Address */
@ -454,7 +455,7 @@ CORE_DECLARE(status_t) mme_enb_set_enb_id(
CORE_DECLARE(hash_index_t *) mme_enb_first();
CORE_DECLARE(hash_index_t *) mme_enb_next(hash_index_t *hi);
CORE_DECLARE(mme_enb_t *) mme_enb_this(hash_index_t *hi);
CORE_DECLARE(int) mme_enb_sock_is_stream(sock_id sock);
CORE_DECLARE(int) mme_enb_sock_type(sock_id sock);
CORE_DECLARE(mme_ue_t*) mme_ue_add(enb_ue_t *enb_ue);
CORE_DECLARE(status_t) mme_ue_remove(mme_ue_t *mme_ue);

View File

@ -89,11 +89,7 @@ void mme_state_operational(fsm_t *s, event_t *e)
d_trace(1, "eNB-S1 accepted[%s] in master_sm module\n",
CORE_NTOP(addr, buf));
if (mme_enb_sock_is_stream(sock))
enb = mme_enb_find_by_sock(sock);
else
enb = mme_enb_find_by_addr(addr);
enb = mme_enb_find_by_addr(addr);
if (!enb)
{
#if USE_USRSCTP != 1
@ -125,7 +121,13 @@ void mme_state_operational(fsm_t *s, event_t *e)
addr = (c_sockaddr_t *)event_get_param2(e);
d_assert(addr, break, "Null param");
if (mme_enb_sock_is_stream(sock))
/*
* <Connection Refused>
* if socket type is SOCK_STREAM,
* I'm not sure whether address is available or not.
* So, I'll use 'sock_id' at this point.
*/
if (mme_enb_sock_type(sock) == SOCK_STREAM)
enb = mme_enb_find_by_sock(sock);
else
enb = mme_enb_find_by_addr(addr);
@ -161,10 +163,7 @@ void mme_state_operational(fsm_t *s, event_t *e)
pkbuf = (pkbuf_t *)event_get_param3(e);
d_assert(pkbuf, break, "Null param");
if (mme_enb_sock_is_stream(sock))
enb = mme_enb_find_by_sock(sock);
else
enb = mme_enb_find_by_addr(addr);
enb = mme_enb_find_by_addr(addr);
core_free(addr);
d_assert(enb, break, "No eNB context");

View File

@ -19,7 +19,8 @@ status_t s1ap_send_to_enb(mme_enb_t *enb, pkbuf_t *pkbuf)
d_assert(pkbuf,,);
d_assert(enb->sock,,);
rv = s1ap_send(enb->sock, pkbuf, enb->addr);
rv = s1ap_send(enb->sock, pkbuf,
enb->sock_type == SOCK_STREAM ? NULL : enb->addr);
if (rv != CORE_OK)
{
d_error("s1_send error");

View File

@ -203,7 +203,7 @@ status_t s1ap_send(sock_id sock, pkbuf_t *pkbuf, c_sockaddr_t *addr)
d_assert(pkbuf, return CORE_ERROR,);
sent = core_sctp_sendmsg(sock, pkbuf->payload, pkbuf->len,
NULL, SCTP_S1AP_PPID, 0);
addr, SCTP_S1AP_PPID, 0);
d_trace(10,"Sent %d->%d bytes\n", pkbuf->len, sent);
d_trace_hex(10, pkbuf->payload, pkbuf->len);
if (sent < 0 || sent != pkbuf->len)