forked from acouzens/open5gs
[SGsAP] Client program
This commit is contained in:
parent
ec7d9f2917
commit
e2aa8ec198
|
@ -15,7 +15,6 @@
|
|||
#include "mme-event.h"
|
||||
#include "s1ap-path.h"
|
||||
#include "s1ap-handler.h"
|
||||
#include "sgsap-path.h"
|
||||
#include "mme-sm.h"
|
||||
|
||||
#define MAX_CELL_PER_ENB 8
|
||||
|
@ -87,7 +86,7 @@ void mme_context_init()
|
|||
/* Paging retry timer: 2 secs */
|
||||
self.t3413_value = ogs_time_from_sec(2);
|
||||
/* Client timer to connect to server: 3 secs */
|
||||
self.connect_timer_value = ogs_time_from_sec(3);
|
||||
self.t_conn_value = ogs_time_from_sec(3);
|
||||
|
||||
context_initialized = 1;
|
||||
}
|
||||
|
@ -1522,7 +1521,6 @@ ogs_sockaddr_t *mme_pgw_addr_find_by_apn(
|
|||
|
||||
mme_vlr_t *mme_vlr_add(ogs_sockaddr_t *addr)
|
||||
{
|
||||
mme_event_t e;
|
||||
mme_vlr_t *vlr = NULL;
|
||||
|
||||
ogs_assert(addr);
|
||||
|
@ -1534,14 +1532,6 @@ mme_vlr_t *mme_vlr_add(ogs_sockaddr_t *addr)
|
|||
vlr->node = ogs_socknode_new(addr);
|
||||
ogs_assert(vlr->node);
|
||||
|
||||
vlr->connect_timer =
|
||||
ogs_timer_add(self.timer_mgr, sgsap_connect_timeout, vlr);
|
||||
ogs_assert(vlr->connect_timer);
|
||||
|
||||
e.vlr = vlr;
|
||||
ogs_fsm_create(&vlr->sm, sgsap_state_initial, sgsap_state_final);
|
||||
ogs_fsm_init(&vlr->sm, &e);
|
||||
|
||||
ogs_list_add(&self.vlr_list, vlr);
|
||||
|
||||
return vlr;
|
||||
|
@ -1549,18 +1539,10 @@ mme_vlr_t *mme_vlr_add(ogs_sockaddr_t *addr)
|
|||
|
||||
void mme_vlr_remove(mme_vlr_t *vlr)
|
||||
{
|
||||
mme_event_t e;
|
||||
|
||||
ogs_assert(vlr);
|
||||
|
||||
ogs_list_remove(&self.vlr_list, vlr);
|
||||
|
||||
ogs_timer_delete(vlr->connect_timer);
|
||||
|
||||
e.vlr = vlr;
|
||||
ogs_fsm_fini(&vlr->sm, &e);
|
||||
ogs_fsm_delete(&vlr->sm);
|
||||
|
||||
ogs_socknode_free(vlr->node);
|
||||
|
||||
ogs_pool_free(&mme_vlr_pool, vlr);
|
||||
|
|
|
@ -122,7 +122,7 @@ typedef struct mme_context_s {
|
|||
/* Paging retry timer value */
|
||||
ogs_time_t t3413_value;
|
||||
/* Client timer value to connect to server */
|
||||
ogs_time_t connect_timer_value;
|
||||
ogs_time_t t_conn_value;
|
||||
|
||||
/* Generator for unique identification */
|
||||
uint32_t mme_ue_s1ap_id; /* mme_ue_s1ap_id generator */
|
||||
|
@ -172,10 +172,9 @@ typedef struct mme_pgw_s {
|
|||
typedef struct mme_vlr_s {
|
||||
ogs_lnode_t lnode;
|
||||
|
||||
ogs_fsm_t sm; /* A state machine */
|
||||
ogs_fsm_t sm; /* A state machine */
|
||||
|
||||
/* client timer to connect to server */
|
||||
ogs_timer_t *connect_timer;
|
||||
ogs_timer_t *t_conn; /* client timer to connect to server */
|
||||
|
||||
nas_tai_t tai;
|
||||
nas_lai_t lai;
|
||||
|
|
|
@ -22,6 +22,8 @@ int mme_initialize()
|
|||
mme_context_init();
|
||||
mme_event_init();
|
||||
|
||||
ogs_sctp_init(context_self()->config.usrsctp.udp_port);
|
||||
|
||||
rv = gtp_xact_init(mme_self()->timer_mgr);
|
||||
if (rv != OGS_OK) return rv;
|
||||
|
||||
|
@ -37,9 +39,6 @@ int mme_initialize()
|
|||
rv = mme_fd_init();
|
||||
if (rv != OGS_OK) return OGS_ERROR;
|
||||
|
||||
rv = ogs_sctp_init(context_self()->config.usrsctp.udp_port);
|
||||
if (rv != OGS_OK) return rv;
|
||||
|
||||
thread = ogs_thread_create(mme_main, NULL);
|
||||
if (!thread) return OGS_ERROR;
|
||||
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
|
||||
#include "s1ap-handler.h"
|
||||
#include "s1ap-path.h"
|
||||
#include "sgsap-path.h"
|
||||
#include "nas-security.h"
|
||||
#include "nas-path.h"
|
||||
#include "emm-handler.h"
|
||||
|
@ -54,6 +55,12 @@ void mme_state_operational(ogs_fsm_t *s, mme_event_t *e)
|
|||
ogs_error("Can't establish S11-GTP path");
|
||||
break;
|
||||
}
|
||||
rv = sgsap_open();
|
||||
if (rv != OGS_OK)
|
||||
{
|
||||
ogs_error("Can't establish SGsAP path");
|
||||
break;
|
||||
}
|
||||
rv = s1ap_open();
|
||||
if (rv != OGS_OK)
|
||||
{
|
||||
|
@ -66,6 +73,7 @@ void mme_state_operational(ogs_fsm_t *s, mme_event_t *e)
|
|||
case OGS_FSM_EXIT_SIG:
|
||||
{
|
||||
mme_gtp_close();
|
||||
sgsap_close();
|
||||
s1ap_close();
|
||||
|
||||
break;
|
||||
|
|
|
@ -28,9 +28,8 @@ static int set_rtoinfo(ogs_sock_t *sock, ogs_sockopt_t *option);
|
|||
static int set_initmsg(ogs_sock_t *sock, ogs_sockopt_t *option);
|
||||
static int set_nodelay(ogs_sock_t *sock, int on);
|
||||
|
||||
int ogs_sctp_init(uint16_t port)
|
||||
void ogs_sctp_init(uint16_t port)
|
||||
{
|
||||
return OGS_OK;
|
||||
}
|
||||
|
||||
void ogs_sctp_final(void)
|
||||
|
|
|
@ -55,7 +55,7 @@ typedef struct ogs_sctp_info_s {
|
|||
uint16_t outbound_streams;
|
||||
} ogs_sctp_info_t;
|
||||
|
||||
int ogs_sctp_init(uint16_t port);
|
||||
void ogs_sctp_init(uint16_t port);
|
||||
void ogs_sctp_final(void);
|
||||
|
||||
ogs_sock_t *ogs_sctp_socket(int family, int type, ogs_socknode_t *node);
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
|
||||
static void ogs_debug_printf(const char *format, ...);
|
||||
|
||||
int ogs_sctp_init(uint16_t port)
|
||||
void ogs_sctp_init(uint16_t port)
|
||||
{
|
||||
usrsctp_init(port, NULL, ogs_debug_printf);
|
||||
#ifdef SCTP_DEBUG
|
||||
|
@ -29,8 +29,6 @@ int ogs_sctp_init(uint16_t port)
|
|||
#endif
|
||||
usrsctp_sysctl_set_sctp_blackhole(2);
|
||||
usrsctp_sysctl_set_sctp_enable_sack_immediately(1);
|
||||
|
||||
return OGS_OK;
|
||||
}
|
||||
|
||||
void ogs_sctp_final()
|
||||
|
|
|
@ -19,15 +19,36 @@
|
|||
|
||||
#include "ogs-sctp.h"
|
||||
|
||||
#include "mme-event.h"
|
||||
#include "mme-sm.h"
|
||||
#include "sgsap-path.h"
|
||||
|
||||
int sgsap_open()
|
||||
{
|
||||
mme_vlr_t *vlr = NULL;
|
||||
|
||||
ogs_list_for_each(&mme_self()->vlr_list, vlr) {
|
||||
mme_event_t e;
|
||||
e.vlr = vlr;
|
||||
|
||||
ogs_fsm_create(&vlr->sm, sgsap_state_initial, sgsap_state_final);
|
||||
ogs_fsm_init(&vlr->sm, &e);
|
||||
}
|
||||
|
||||
return OGS_OK;
|
||||
}
|
||||
|
||||
void sgsap_close()
|
||||
{
|
||||
mme_vlr_t *vlr = NULL;
|
||||
|
||||
ogs_list_for_each(&mme_self()->vlr_list, vlr) {
|
||||
mme_event_t e;
|
||||
e.vlr = vlr;
|
||||
|
||||
ogs_fsm_fini(&vlr->sm, &e);
|
||||
ogs_fsm_delete(&vlr->sm);
|
||||
}
|
||||
}
|
||||
|
||||
void sgsap_connect_timeout(void *data)
|
||||
|
|
|
@ -17,23 +17,42 @@
|
|||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "mme-context.h"
|
||||
#include "mme-event.h"
|
||||
#include "mme-sm.h"
|
||||
|
||||
#include "sgsap-path.h"
|
||||
|
||||
void sgsap_state_initial(ogs_fsm_t *s, mme_event_t *e)
|
||||
{
|
||||
mme_vlr_t *vlr = NULL;
|
||||
ogs_assert(s);
|
||||
ogs_assert(e);
|
||||
|
||||
mme_sm_debug(e);
|
||||
|
||||
vlr = e->vlr;
|
||||
ogs_assert(vlr);
|
||||
|
||||
vlr->t_conn = ogs_timer_add(mme_self()->timer_mgr,
|
||||
sgsap_connect_timeout, vlr);
|
||||
ogs_assert(vlr->t_conn);
|
||||
|
||||
OGS_FSM_TRAN(s, &sgsap_state_will_connect);
|
||||
}
|
||||
|
||||
void sgsap_state_final(ogs_fsm_t *s, mme_event_t *e)
|
||||
{
|
||||
mme_vlr_t *vlr = NULL;
|
||||
ogs_assert(s);
|
||||
ogs_assert(e);
|
||||
|
||||
mme_sm_debug(e);
|
||||
|
||||
vlr = e->vlr;
|
||||
ogs_assert(vlr);
|
||||
|
||||
ogs_timer_delete(vlr->t_conn);
|
||||
}
|
||||
|
||||
void sgsap_state_will_connect(ogs_fsm_t *s, mme_event_t *e)
|
||||
|
@ -49,6 +68,8 @@ void sgsap_state_will_connect(ogs_fsm_t *s, mme_event_t *e)
|
|||
|
||||
switch (e->id) {
|
||||
case OGS_FSM_ENTRY_SIG:
|
||||
ogs_assert(vlr->node);
|
||||
sgsap_client(vlr->node);
|
||||
break;
|
||||
case OGS_FSM_EXIT_SIG:
|
||||
break;
|
||||
|
|
|
@ -41,7 +41,7 @@ ogs_sock_t *sgsap_client(ogs_socknode_t *node)
|
|||
ogs_socknode_set_poll(node, mme_self()->pollset,
|
||||
OGS_POLLIN, sgsap_usrsctp_recv_handler, node);
|
||||
|
||||
sock = ogs_sctp_client(SOCK_STREAM, node);
|
||||
sock = ogs_sctp_client(SOCK_SEQPACKET, node);
|
||||
ogs_assert(sock);
|
||||
|
||||
ogs_info("sgsap_client() [%s]:%d",
|
||||
|
|
|
@ -76,12 +76,7 @@ int test_initialize(app_param_t *param, int argc, const char *const argv[])
|
|||
}
|
||||
|
||||
mme_context_init();
|
||||
|
||||
rv = ogs_sctp_init(context_self()->config.usrsctp.udp_port);
|
||||
if (rv != OGS_OK) {
|
||||
ogs_error("ogs_sctp_init() failed");
|
||||
return OGS_ERROR;
|
||||
}
|
||||
ogs_sctp_init(context_self()->config.usrsctp.udp_port);
|
||||
|
||||
app_did_initialize();
|
||||
|
||||
|
|
|
@ -88,11 +88,8 @@ int test_initialize(app_param_t *param, int argc, const char *const argv[])
|
|||
ogs_error("pcscf_fd_init() failed");
|
||||
return OGS_ERROR;
|
||||
}
|
||||
rv = ogs_sctp_init(context_self()->config.usrsctp.udp_port);
|
||||
if (rv != OGS_OK) {
|
||||
ogs_error("ogs_sctp_init() failed");
|
||||
return OGS_ERROR;
|
||||
}
|
||||
ogs_sctp_init(context_self()->config.usrsctp.udp_port);
|
||||
|
||||
rv = testpacket_init();
|
||||
if (rv != OGS_OK)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue