[SGsAP] continue to implement it
This commit is contained in:
parent
0be339e52d
commit
ec7d9f2917
|
@ -1 +1 @@
|
|||
Subproject commit 1239ee54c9d168ce094bab66d38a2ae84fe3cada
|
||||
Subproject commit 1106c4453e686b5f166b596468e218f6fd06c50a
|
|
@ -15,6 +15,7 @@
|
|||
#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
|
||||
|
@ -83,8 +84,10 @@ void mme_context_init()
|
|||
self.imsi_ue_hash = ogs_hash_make();
|
||||
self.guti_ue_hash = ogs_hash_make();
|
||||
|
||||
/* Timer value */
|
||||
self.t3413_value = ogs_time_from_sec(2); /* Paging retry timer: 2 secs */
|
||||
/* 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);
|
||||
|
||||
context_initialized = 1;
|
||||
}
|
||||
|
@ -1519,6 +1522,7 @@ 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);
|
||||
|
@ -1530,6 +1534,14 @@ 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;
|
||||
|
@ -1537,11 +1549,20 @@ 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);
|
||||
}
|
||||
|
||||
|
|
|
@ -119,8 +119,10 @@ typedef struct mme_context_s {
|
|||
/* S1SetupResponse */
|
||||
uint8_t relative_capacity;
|
||||
|
||||
/* Timer value */
|
||||
ogs_time_t t3413_value; /* Paging retry timer value */
|
||||
/* Paging retry timer value */
|
||||
ogs_time_t t3413_value;
|
||||
/* Client timer value to connect to server */
|
||||
ogs_time_t connect_timer_value;
|
||||
|
||||
/* Generator for unique identification */
|
||||
uint32_t mme_ue_s1ap_id; /* mme_ue_s1ap_id generator */
|
||||
|
@ -170,7 +172,10 @@ 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;
|
||||
|
||||
nas_tai_t tai;
|
||||
nas_lai_t lai;
|
||||
|
|
|
@ -52,6 +52,7 @@ typedef enum {
|
|||
typedef long S1AP_ProcedureCode_t;
|
||||
typedef struct S1AP_S1AP_PDU s1ap_message_t;
|
||||
typedef struct nas_message_s nas_message_t;
|
||||
typedef struct mme_vlr_s mme_vlr_t;
|
||||
typedef struct mme_enb_s mme_enb_t;
|
||||
typedef struct enb_ue_s enb_ue_t;
|
||||
typedef struct mme_ue_s mme_ue_t;
|
||||
|
@ -73,6 +74,7 @@ typedef struct mme_event_s {
|
|||
uint8_t nas_type;
|
||||
nas_message_t *nas_message;
|
||||
|
||||
mme_vlr_t *vlr;
|
||||
mme_enb_t *enb;
|
||||
enb_ue_t *enb_ue;
|
||||
mme_ue_t *mme_ue;
|
||||
|
|
|
@ -55,7 +55,6 @@ void s1ap_state_operational(ogs_fsm_t *s, mme_event_t *e)
|
|||
ogs_assert(s);
|
||||
ogs_assert(e);
|
||||
|
||||
ogs_assert(e);
|
||||
mme_sm_debug(e);
|
||||
|
||||
enb = e->enb;
|
||||
|
|
|
@ -30,6 +30,29 @@ void sgsap_close()
|
|||
{
|
||||
}
|
||||
|
||||
void sgsap_connect_timeout(void *data)
|
||||
{
|
||||
#if 0
|
||||
mme_vlr_t *vlr = data;
|
||||
ogs_assert(vlr);
|
||||
|
||||
if (mme_ue->max_paging_retry >= MAX_NUM_OF_PAGING) {
|
||||
/* Paging failed */
|
||||
ogs_warn("[EMM] Paging to IMSI[%s] failed. Stop paging",
|
||||
mme_ue->imsi_bcd);
|
||||
if (mme_ue->last_paging_msg) {
|
||||
ogs_pkbuf_free(mme_ue->last_paging_msg);
|
||||
mme_ue->last_paging_msg = NULL;
|
||||
}
|
||||
} else {
|
||||
mme_ue->max_paging_retry++;
|
||||
s1ap_handle_paging(mme_ue);
|
||||
/* Start T3413 */
|
||||
ogs_timer_start(mme_ue->t3413, mme_self()->t3413_value);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
int sgsap_send(ogs_sock_t *sock, ogs_pkbuf_t *pkbuf,
|
||||
ogs_sockaddr_t *addr, uint16_t stream_no)
|
||||
{
|
||||
|
|
|
@ -32,6 +32,8 @@ void sgsap_close(void);
|
|||
ogs_sock_t *sgsap_client(ogs_socknode_t *node);
|
||||
void sgsap_recv_handler(short when, ogs_socket_t fd, void *data);
|
||||
|
||||
void sgsap_connect_timeout(void *data);
|
||||
|
||||
int sgsap_send(ogs_sock_t *sock,
|
||||
ogs_pkbuf_t *pkbuf, ogs_sockaddr_t *addr, uint16_t stream_no);
|
||||
int sgsap_recv(ogs_sock_t *sock, ogs_pkbuf_t *pkbuf);
|
||||
|
|
|
@ -38,11 +38,15 @@ void sgsap_state_final(ogs_fsm_t *s, mme_event_t *e)
|
|||
|
||||
void sgsap_state_will_connect(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);
|
||||
|
||||
switch (e->id) {
|
||||
case OGS_FSM_ENTRY_SIG:
|
||||
break;
|
||||
|
|
Loading…
Reference in New Issue