[SGsAP] continue to work
This commit is contained in:
parent
3b26983db9
commit
6816400247
|
@ -1 +1 @@
|
|||
Subproject commit 1106c4453e686b5f166b596468e218f6fd06c50a
|
||||
Subproject commit 74d0df2b5b6d2502f56ff54deb4941f2fbbd5253
|
|
@ -1556,6 +1556,19 @@ void mme_vlr_remove_all()
|
|||
mme_vlr_remove(vlr);
|
||||
}
|
||||
|
||||
mme_vlr_t *mme_vlr_find_by_addr(ogs_sockaddr_t *addr)
|
||||
{
|
||||
mme_vlr_t *vlr = NULL;
|
||||
ogs_assert(addr);
|
||||
|
||||
ogs_list_for_each(&self.vlr_list, vlr) {
|
||||
if (ogs_sockaddr_is_equal(vlr->node->addr, addr) == true)
|
||||
return vlr;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
mme_vlr_t *mme_vlr_find_by_tai(nas_tai_t *tai)
|
||||
{
|
||||
mme_vlr_t *vlr = NULL;
|
||||
|
|
|
@ -181,7 +181,8 @@ typedef struct mme_vlr_s {
|
|||
|
||||
uint16_t max_num_of_ostreams; /* SCTP Max num of outbound streams */
|
||||
|
||||
ogs_socknode_t *node;
|
||||
ogs_socknode_t *node; /* VLR SGsAP Node */
|
||||
ogs_sockaddr_t *addr; /* VLR SGsAP Address */
|
||||
} mme_vlr_t;
|
||||
|
||||
typedef struct mme_enb_s {
|
||||
|
@ -556,6 +557,7 @@ ogs_sockaddr_t *mme_pgw_addr_find_by_apn(
|
|||
mme_vlr_t *mme_vlr_add(ogs_sockaddr_t *addr);
|
||||
void mme_vlr_remove(mme_vlr_t *vlr);
|
||||
void mme_vlr_remove_all();
|
||||
mme_vlr_t *mme_vlr_find_by_addr(ogs_sockaddr_t *addr);
|
||||
mme_vlr_t *mme_vlr_find_by_tai(nas_tai_t *tai);
|
||||
mme_vlr_t *mme_vlr_find_by_lai(nas_lai_t *lai);
|
||||
|
||||
|
|
|
@ -119,10 +119,10 @@ const char *mme_event_get_name(mme_event_t *e)
|
|||
|
||||
case MME_EVT_SGSAP_MESSAGE:
|
||||
return "MME_EVT_SGSAP_MESSAGE";
|
||||
case MME_EVT_SGSAP_LO_WILL_CONNECT:
|
||||
return "MME_EVT_SGSAP_LO_WILL_CONNECT";
|
||||
case MME_EVT_SGSAP_LO_CONNECTED:
|
||||
return "MME_EVT_SGSAP_LO_CONNECTED";
|
||||
case MME_EVT_SGSAP_LO_SCTP_COMM_UP:
|
||||
return "MME_EVT_SGSAP_LO_SCTP_COMM_UP";
|
||||
case MME_EVT_SGSAP_LO_CONNREFUSED:
|
||||
return "MME_EVT_SGSAP_LO_CONNREFUSED";
|
||||
|
||||
default:
|
||||
break;
|
||||
|
|
|
@ -42,8 +42,8 @@ typedef enum {
|
|||
MME_EVT_S6A_MESSAGE,
|
||||
|
||||
MME_EVT_SGSAP_MESSAGE,
|
||||
MME_EVT_SGSAP_LO_WILL_CONNECT,
|
||||
MME_EVT_SGSAP_LO_CONNECTED,
|
||||
MME_EVT_SGSAP_LO_SCTP_COMM_UP,
|
||||
MME_EVT_SGSAP_LO_CONNREFUSED,
|
||||
|
||||
MME_EVT_TOP,
|
||||
|
||||
|
@ -65,6 +65,8 @@ typedef struct mme_event_s {
|
|||
|
||||
ogs_sock_t *enb_sock;
|
||||
ogs_sockaddr_t *enb_addr;
|
||||
ogs_sock_t *vlr_sock;
|
||||
ogs_sockaddr_t *vlr_addr;
|
||||
uint16_t max_num_of_istreams;
|
||||
uint16_t max_num_of_ostreams;
|
||||
|
||||
|
|
|
@ -82,6 +82,8 @@ void mme_state_operational(ogs_fsm_t *s, mme_event_t *e)
|
|||
gtp_xact_t *xact = NULL;
|
||||
gtp_message_t gtp_message;
|
||||
|
||||
mme_vlr_t *vlr = NULL;
|
||||
|
||||
ogs_assert(e);
|
||||
mme_sm_debug(e);
|
||||
|
||||
|
@ -106,12 +108,14 @@ void mme_state_operational(ogs_fsm_t *s, mme_event_t *e)
|
|||
}
|
||||
|
||||
break;
|
||||
|
||||
case OGS_FSM_EXIT_SIG:
|
||||
mme_gtp_close();
|
||||
sgsap_close();
|
||||
s1ap_close();
|
||||
|
||||
break;
|
||||
|
||||
case MME_EVT_S1AP_LO_ACCEPT:
|
||||
sock = e->enb_sock;
|
||||
ogs_assert(sock);
|
||||
|
@ -133,6 +137,7 @@ void mme_state_operational(ogs_fsm_t *s, mme_event_t *e)
|
|||
}
|
||||
|
||||
break;
|
||||
|
||||
case MME_EVT_S1AP_LO_SCTP_COMM_UP:
|
||||
sock = e->enb_sock;
|
||||
ogs_assert(sock);
|
||||
|
@ -156,6 +161,7 @@ void mme_state_operational(ogs_fsm_t *s, mme_event_t *e)
|
|||
OGS_ADDR(addr, buf), enb->max_num_of_ostreams);
|
||||
|
||||
break;
|
||||
|
||||
case MME_EVT_S1AP_LO_CONNREFUSED:
|
||||
sock = e->enb_sock;
|
||||
ogs_assert(sock);
|
||||
|
@ -170,7 +176,7 @@ void mme_state_operational(ogs_fsm_t *s, mme_event_t *e)
|
|||
OGS_ADDR(addr, buf));
|
||||
mme_enb_remove(enb);
|
||||
} else {
|
||||
ogs_warn("Socket[%s] connection refused, Already Removed!",
|
||||
ogs_warn("eNB-S1[%s] connection refused, Already Removed!",
|
||||
OGS_ADDR(addr, buf));
|
||||
}
|
||||
|
||||
|
@ -201,6 +207,7 @@ void mme_state_operational(ogs_fsm_t *s, mme_event_t *e)
|
|||
s1ap_free_pdu(&s1ap_message);
|
||||
ogs_pkbuf_free(pkbuf);
|
||||
break;
|
||||
|
||||
case MME_EVT_EMM_MESSAGE:
|
||||
enb_ue = e->enb_ue;
|
||||
ogs_assert(enb_ue);
|
||||
|
@ -261,6 +268,7 @@ void mme_state_operational(ogs_fsm_t *s, mme_event_t *e)
|
|||
|
||||
ogs_pkbuf_free(pkbuf);
|
||||
break;
|
||||
|
||||
case MME_EVT_ESM_MESSAGE:
|
||||
mme_ue = e->mme_ue;
|
||||
ogs_assert(mme_ue);
|
||||
|
@ -307,6 +315,7 @@ void mme_state_operational(ogs_fsm_t *s, mme_event_t *e)
|
|||
|
||||
ogs_pkbuf_free(pkbuf);
|
||||
break;
|
||||
|
||||
case MME_EVT_S6A_MESSAGE:
|
||||
mme_ue = e->mme_ue;
|
||||
ogs_assert(mme_ue);
|
||||
|
@ -376,6 +385,7 @@ void mme_state_operational(ogs_fsm_t *s, mme_event_t *e)
|
|||
}
|
||||
ogs_pkbuf_free(s6abuf);
|
||||
break;
|
||||
|
||||
case MME_EVT_S11_MESSAGE:
|
||||
pkbuf = e->pkbuf;
|
||||
ogs_assert(pkbuf);
|
||||
|
@ -460,6 +470,76 @@ void mme_state_operational(ogs_fsm_t *s, mme_event_t *e)
|
|||
}
|
||||
ogs_pkbuf_free(pkbuf);
|
||||
break;
|
||||
|
||||
case MME_EVT_SGSAP_LO_SCTP_COMM_UP:
|
||||
sock = e->vlr_sock;
|
||||
ogs_assert(sock);
|
||||
addr = e->vlr_addr;
|
||||
ogs_assert(addr);
|
||||
|
||||
max_num_of_ostreams = e->max_num_of_ostreams;
|
||||
|
||||
vlr = mme_vlr_find_by_addr(addr);
|
||||
ogs_assert(vlr);
|
||||
ogs_free(addr);
|
||||
|
||||
vlr->max_num_of_ostreams =
|
||||
ogs_min(max_num_of_ostreams, vlr->max_num_of_ostreams);
|
||||
|
||||
ogs_warn("VLR-SGs SCTP_COMM_UP[%s] Max Num of Outbound Streams[%d]",
|
||||
OGS_ADDR(addr, buf), vlr->max_num_of_ostreams);
|
||||
break;
|
||||
|
||||
case MME_EVT_SGSAP_LO_CONNREFUSED:
|
||||
sock = e->vlr_sock;
|
||||
ogs_assert(sock);
|
||||
addr = e->vlr_addr;
|
||||
ogs_assert(addr);
|
||||
|
||||
vlr = mme_vlr_find_by_addr(addr);
|
||||
ogs_assert(vlr);
|
||||
ogs_free(addr);
|
||||
|
||||
if (vlr) {
|
||||
ogs_info("VLR-SGs[%s] connection refused!!!",
|
||||
OGS_ADDR(addr, buf));
|
||||
mme_vlr_remove(vlr);
|
||||
} else {
|
||||
ogs_warn("VLR-SGs[%s] connection refused, Already Removed!",
|
||||
OGS_ADDR(addr, buf));
|
||||
}
|
||||
|
||||
break;
|
||||
case MME_EVT_SGSAP_MESSAGE:
|
||||
sock = e->vlr_sock;
|
||||
ogs_assert(sock);
|
||||
addr = e->vlr_addr;
|
||||
ogs_assert(addr);
|
||||
pkbuf = e->pkbuf;
|
||||
ogs_assert(pkbuf);
|
||||
|
||||
vlr = mme_vlr_find_by_addr(addr);
|
||||
ogs_assert(vlr);
|
||||
ogs_free(addr);
|
||||
|
||||
#if 0
|
||||
ogs_assert(vlr);
|
||||
ogs_assert(OGS_FSM_STATE(&vlr->sm));
|
||||
|
||||
rc = s1ap_decode_pdu(&s1ap_message, pkbuf);
|
||||
if (rc == OGS_OK) {
|
||||
e->vlr = vlr;
|
||||
e->s1ap_message = &s1ap_message;
|
||||
ogs_fsm_dispatch(&vlr->sm, e);
|
||||
} else {
|
||||
ogs_error("Cannot process SGSAP message");
|
||||
}
|
||||
|
||||
s1ap_free_pdu(&s1ap_message);
|
||||
ogs_pkbuf_free(pkbuf);
|
||||
#endif
|
||||
break;
|
||||
|
||||
default:
|
||||
ogs_error("No handler for event %s", mme_event_get_name(e));
|
||||
break;
|
||||
|
|
|
@ -69,7 +69,6 @@ int s1ap_usrsctp_recv_handler(struct socket *sock,
|
|||
if (not->sn_header.sn_length == (uint32_t)datalen) {
|
||||
switch(not->sn_header.sn_type) {
|
||||
case SCTP_ASSOC_CHANGE :
|
||||
{
|
||||
ogs_debug("SCTP_ASSOC_CHANGE:"
|
||||
"[T:%d, F:0x%x, S:%d, I/O:%d/%d]",
|
||||
not->sn_assoc_change.sac_type,
|
||||
|
@ -130,7 +129,6 @@ int s1ap_usrsctp_recv_handler(struct socket *sock,
|
|||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case SCTP_SHUTDOWN_EVENT :
|
||||
{
|
||||
ogs_sockaddr_t *addr = usrsctp_remote_addr(&store);
|
||||
|
|
|
@ -106,8 +106,8 @@ static void sgsap_recv_handler(short when, ogs_socket_t fd, void *data)
|
|||
|
||||
e = mme_event_new(MME_EVT_S1AP_LO_SCTP_COMM_UP);
|
||||
ogs_assert(e);
|
||||
e->enb_sock = sock;
|
||||
e->enb_addr = addr;
|
||||
e->vlr_sock = sock;
|
||||
e->vlr_addr = addr;
|
||||
e->max_num_of_istreams =
|
||||
not->sn_assoc_change.sac_inbound_streams;
|
||||
e->max_num_of_ostreams =
|
||||
|
@ -115,7 +115,7 @@ static void sgsap_recv_handler(short when, ogs_socket_t fd, void *data)
|
|||
rv = ogs_queue_push(mme_self()->queue, e);
|
||||
if (rv != OGS_OK) {
|
||||
ogs_warn("ogs_queue_push() failed:%d", (int)rv);
|
||||
ogs_free(e->enb_addr);
|
||||
ogs_free(e->vlr_addr);
|
||||
mme_event_free(e);
|
||||
}
|
||||
} else if (not->sn_assoc_change.sac_state == SCTP_SHUTDOWN_COMP ||
|
||||
|
@ -132,12 +132,12 @@ static void sgsap_recv_handler(short when, ogs_socket_t fd, void *data)
|
|||
|
||||
e = mme_event_new(MME_EVT_S1AP_LO_CONNREFUSED);
|
||||
ogs_assert(e);
|
||||
e->enb_sock = sock;
|
||||
e->enb_addr = addr;
|
||||
e->vlr_sock = sock;
|
||||
e->vlr_addr = addr;
|
||||
rv = ogs_queue_push(mme_self()->queue, e);
|
||||
if (rv != OGS_OK) {
|
||||
ogs_warn("ogs_queue_push() failed:%d", (int)rv);
|
||||
ogs_free(e->enb_addr);
|
||||
ogs_free(e->vlr_addr);
|
||||
mme_event_free(e);
|
||||
}
|
||||
}
|
||||
|
@ -156,12 +156,12 @@ static void sgsap_recv_handler(short when, ogs_socket_t fd, void *data)
|
|||
|
||||
e = mme_event_new(MME_EVT_S1AP_LO_CONNREFUSED);
|
||||
ogs_assert(e);
|
||||
e->enb_sock = sock;
|
||||
e->enb_addr = addr;
|
||||
e->vlr_sock = sock;
|
||||
e->vlr_addr = addr;
|
||||
rv = ogs_queue_push(mme_self()->queue, e);
|
||||
if (rv != OGS_OK) {
|
||||
ogs_warn("ogs_queue_push() failed:%d", (int)rv);
|
||||
ogs_free(e->enb_addr);
|
||||
ogs_free(e->vlr_addr);
|
||||
mme_event_free(e);
|
||||
}
|
||||
break;
|
||||
|
@ -198,13 +198,13 @@ static void sgsap_recv_handler(short when, ogs_socket_t fd, void *data)
|
|||
|
||||
e = mme_event_new(MME_EVT_S1AP_MESSAGE);
|
||||
ogs_assert(e);
|
||||
e->enb_sock = sock;
|
||||
e->enb_addr = addr;
|
||||
e->vlr_sock = sock;
|
||||
e->vlr_addr = addr;
|
||||
e->pkbuf = pkbuf;
|
||||
rv = ogs_queue_push(mme_self()->queue, e);
|
||||
if (rv != OGS_OK) {
|
||||
ogs_warn("ogs_queue_push() failed:%d", (int)rv);
|
||||
ogs_free(e->enb_addr);
|
||||
ogs_free(e->vlr_addr);
|
||||
ogs_pkbuf_free(e->pkbuf);
|
||||
mme_event_free(e);
|
||||
}
|
||||
|
|
|
@ -139,7 +139,7 @@ static void sgsap_connect_timeout(void *data)
|
|||
addr = node->addr;
|
||||
ogs_assert(addr);
|
||||
|
||||
ogs_warn("[SGsAP] Connect to VLR[%s]:%d failed",
|
||||
ogs_warn("[SGsAP] Connect to VLR [%s]:%d failed",
|
||||
OGS_ADDR(addr, buf), OGS_PORT(addr));
|
||||
|
||||
ogs_assert(vlr->t_conn);
|
||||
|
|
|
@ -20,15 +20,14 @@
|
|||
#include "ogs-sctp.h"
|
||||
|
||||
#include "app/context.h"
|
||||
#include "mme-event.h"
|
||||
#include "sgsap-path.h"
|
||||
|
||||
int sgsap_usrsctp_recv_handler(struct socket *sock,
|
||||
static int sgsap_usrsctp_recv_handler(struct socket *sock,
|
||||
union sctp_sockstore addr, void *data, size_t datalen,
|
||||
struct sctp_rcvinfo rcv, int flags, void *ulp_info);
|
||||
|
||||
#if 0
|
||||
static ogs_sockaddr_t *usrsctp_remote_addr(union sctp_sockstore *store);
|
||||
#endif
|
||||
|
||||
ogs_sock_t *sgsap_client(ogs_socknode_t *node)
|
||||
{
|
||||
|
@ -55,12 +54,11 @@ void sgsap_recv_handler(short when, ogs_socket_t fd, void *data)
|
|||
ogs_assert_if_reached();
|
||||
}
|
||||
|
||||
int sgsap_usrsctp_recv_handler(struct socket *sock,
|
||||
static int sgsap_usrsctp_recv_handler(struct socket *sock,
|
||||
union sctp_sockstore store, void *data, size_t datalen,
|
||||
struct sctp_rcvinfo rcv, int flags, void *ulp_info)
|
||||
{
|
||||
if (data) {
|
||||
#if 0
|
||||
int rv;
|
||||
mme_event_t *e = NULL;
|
||||
|
||||
|
@ -69,7 +67,6 @@ int sgsap_usrsctp_recv_handler(struct socket *sock,
|
|||
if (not->sn_header.sn_length == (uint32_t)datalen) {
|
||||
switch(not->sn_header.sn_type) {
|
||||
case SCTP_ASSOC_CHANGE :
|
||||
{
|
||||
ogs_debug("SCTP_ASSOC_CHANGE:"
|
||||
"[T:%d, F:0x%x, S:%d, I/O:%d/%d]",
|
||||
not->sn_assoc_change.sac_type,
|
||||
|
@ -93,14 +90,14 @@ int sgsap_usrsctp_recv_handler(struct socket *sock,
|
|||
SCTP_COMM_LOST)
|
||||
ogs_debug("SCTP_COMM_LOST");
|
||||
|
||||
e = mme_event_new(MME_EVT_S1AP_LO_CONNREFUSED);
|
||||
e = mme_event_new(MME_EVT_SGSAP_LO_CONNREFUSED);
|
||||
ogs_assert(e);
|
||||
e->enb_sock = (ogs_sock_t *)sock;
|
||||
e->enb_addr = addr;
|
||||
e->vlr_sock = (ogs_sock_t *)sock;
|
||||
e->vlr_addr = addr;
|
||||
rv = ogs_queue_push(mme_self()->queue, e);
|
||||
if (rv != OGS_OK) {
|
||||
ogs_warn("ogs_queue_push() failed:%d", (int)rv);
|
||||
ogs_free(e->enb_addr);
|
||||
ogs_free(e->vlr_addr);
|
||||
mme_event_free(e);
|
||||
} else {
|
||||
ogs_pollset_notify(mme_self()->pollset);
|
||||
|
@ -112,25 +109,24 @@ int sgsap_usrsctp_recv_handler(struct socket *sock,
|
|||
|
||||
ogs_debug("SCTP_COMM_UP");
|
||||
|
||||
e = mme_event_new(MME_EVT_S1AP_LO_SCTP_COMM_UP);
|
||||
e = mme_event_new(MME_EVT_SGSAP_LO_SCTP_COMM_UP);
|
||||
ogs_assert(e);
|
||||
e->enb_sock = (ogs_sock_t *)sock;
|
||||
e->enb_addr = addr;
|
||||
e->inbound_streams =
|
||||
e->vlr_sock = (ogs_sock_t *)sock;
|
||||
e->vlr_addr = addr;
|
||||
e->max_num_of_istreams =
|
||||
not->sn_assoc_change.sac_inbound_streams;
|
||||
e->outbound_streams =
|
||||
e->max_num_of_ostreams =
|
||||
not->sn_assoc_change.sac_outbound_streams;
|
||||
rv = ogs_queue_push(mme_self()->queue, e);
|
||||
if (rv != OGS_OK) {
|
||||
ogs_warn("ogs_queue_push() failed:%d", (int)rv);
|
||||
ogs_free(e->enb_addr);
|
||||
ogs_free(e->vlr_addr);
|
||||
mme_event_free(e);
|
||||
} else {
|
||||
ogs_pollset_notify(mme_self()->pollset);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case SCTP_SHUTDOWN_EVENT :
|
||||
{
|
||||
ogs_sockaddr_t *addr = usrsctp_remote_addr(&store);
|
||||
|
@ -142,14 +138,14 @@ int sgsap_usrsctp_recv_handler(struct socket *sock,
|
|||
not->sn_shutdown_event.sse_flags,
|
||||
not->sn_shutdown_event.sse_length);
|
||||
|
||||
e = mme_event_new(MME_EVT_S1AP_LO_CONNREFUSED);
|
||||
e = mme_event_new(MME_EVT_SGSAP_LO_CONNREFUSED);
|
||||
ogs_assert(e);
|
||||
e->enb_sock = (ogs_sock_t *)sock;
|
||||
e->enb_addr = addr;
|
||||
e->vlr_sock = (ogs_sock_t *)sock;
|
||||
e->vlr_addr = addr;
|
||||
rv = ogs_queue_push(mme_self()->queue, e);
|
||||
if (rv != OGS_OK) {
|
||||
ogs_warn("ogs_queue_push() failed:%d", (int)rv);
|
||||
ogs_free(e->enb_addr);
|
||||
ogs_free(e->vlr_addr);
|
||||
mme_event_free(e);
|
||||
} else {
|
||||
ogs_pollset_notify(mme_self()->pollset);
|
||||
|
@ -175,6 +171,14 @@ int sgsap_usrsctp_recv_handler(struct socket *sock,
|
|||
not->sn_send_failed_event.ssfe_flags,
|
||||
not->sn_send_failed_event.ssfe_error);
|
||||
break;
|
||||
case SCTP_ADAPTATION_INDICATION :
|
||||
ogs_error("SCTP_ADAPTATION_INDICATION:"
|
||||
"[T:%d, F:0x%x, S:%d, I:%d]",
|
||||
not->sn_adaptation_event.sai_type,
|
||||
not->sn_adaptation_event.sai_flags,
|
||||
not->sn_adaptation_event.sai_length,
|
||||
not->sn_adaptation_event.sai_adaptation_ind);
|
||||
break;
|
||||
default :
|
||||
ogs_error("Discarding event with "
|
||||
"unknown flags:0x%x type:0x%x",
|
||||
|
@ -192,15 +196,15 @@ int sgsap_usrsctp_recv_handler(struct socket *sock,
|
|||
addr = usrsctp_remote_addr(&store);
|
||||
ogs_assert(addr);
|
||||
|
||||
e = mme_event_new(MME_EVT_S1AP_MESSAGE);
|
||||
e = mme_event_new(MME_EVT_SGSAP_MESSAGE);
|
||||
ogs_assert(e);
|
||||
e->enb_sock = (ogs_sock_t *)sock;
|
||||
e->enb_addr = addr;
|
||||
e->vlr_sock = (ogs_sock_t *)sock;
|
||||
e->vlr_addr = addr;
|
||||
e->pkbuf = pkbuf;
|
||||
rv = ogs_queue_push(mme_self()->queue, e);
|
||||
if (rv != OGS_OK) {
|
||||
ogs_warn("ogs_queue_push() failed:%d", (int)rv);
|
||||
ogs_free(e->enb_addr);
|
||||
ogs_free(e->vlr_addr);
|
||||
ogs_pkbuf_free(e->pkbuf);
|
||||
mme_event_free(e);
|
||||
} else {
|
||||
|
@ -209,13 +213,11 @@ int sgsap_usrsctp_recv_handler(struct socket *sock,
|
|||
} else {
|
||||
ogs_error("Not engough buffer. Need more recv : 0x%x", flags);
|
||||
}
|
||||
#endif
|
||||
free(data);
|
||||
}
|
||||
return (1);
|
||||
}
|
||||
|
||||
#if 0
|
||||
static ogs_sockaddr_t *usrsctp_remote_addr(union sctp_sockstore *store)
|
||||
{
|
||||
ogs_sockaddr_t *addr = NULL;
|
||||
|
@ -239,4 +241,3 @@ static ogs_sockaddr_t *usrsctp_remote_addr(union sctp_sockstore *store)
|
|||
|
||||
return addr;
|
||||
}
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue