forked from acouzens/open5gs
Merge branch 'master' of https://github.com/acetcom/cellwire
This commit is contained in:
commit
13175e9e41
|
@ -141,15 +141,7 @@ status_t context_parse_config()
|
|||
n += (t+m)->size;
|
||||
|
||||
char *v = jsmntok_to_string(json, t+m+1);
|
||||
if (jsmntok_equal(json, t+m, "CONTEXT") == 0)
|
||||
{
|
||||
if (v) self.trace_level.context = atoi(v);
|
||||
}
|
||||
else if (jsmntok_equal(json, t+m, "SM") == 0)
|
||||
{
|
||||
if (v) self.trace_level.sm = atoi(v);
|
||||
}
|
||||
else if (jsmntok_equal(json, t+m, "S1AP") == 0)
|
||||
if (jsmntok_equal(json, t+m, "S1AP") == 0)
|
||||
{
|
||||
if (v) self.trace_level.s1ap = atoi(v);
|
||||
}
|
||||
|
@ -165,6 +157,10 @@ status_t context_parse_config()
|
|||
{
|
||||
if (v) self.trace_level.gtp = atoi(v);
|
||||
}
|
||||
else if (jsmntok_equal(json, t+m, "OTHERS") == 0)
|
||||
{
|
||||
if (v) self.trace_level.others = atoi(v);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -31,12 +31,11 @@ typedef struct _context_t {
|
|||
void *database;
|
||||
|
||||
struct {
|
||||
int context;
|
||||
int sm;
|
||||
int s1ap;
|
||||
int nas;
|
||||
int gtp;
|
||||
int s6a;
|
||||
int others;
|
||||
} trace_level;
|
||||
} context_t;
|
||||
|
||||
|
|
|
@ -25,9 +25,6 @@ extern "C" {
|
|||
* @{
|
||||
*/
|
||||
|
||||
/** A constant representing a 'large' string. */
|
||||
#define HUGE_STRING_LEN 8192
|
||||
|
||||
/*
|
||||
* Define the structures used by the CORE general-purpose library.
|
||||
*/
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
|
||||
#define MAX_SIG_DESC_SIZE 256
|
||||
|
||||
#define HUGE_STRING_LEN 8192
|
||||
#define MAX_FILEPATH_LEN 256
|
||||
#define MAX_ERROR_STRING_LEN 1024
|
||||
|
||||
|
|
|
@ -254,7 +254,7 @@ void d_trace_off(int *mod_name)
|
|||
|
||||
int d_msg(int tp, int lv, c_time_t t, char *fn, int ln, char *fmt, ...)
|
||||
{
|
||||
char str[384] = {0}, fstr[512] = {0}, *ac_str;
|
||||
char str[384] = {0}, fstr[HUGE_STRING_LEN] = {0}, *ac_str;
|
||||
time_exp_t te;
|
||||
size_t n;
|
||||
char *lv_str[5] = {"NONE", "FATL", "ERRR", "WARN", "INFO"};
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
#define TRACE_MODULE _mutex
|
||||
|
||||
#include "core.h"
|
||||
#include "core_arch_mutex.h"
|
||||
#include "core_errno.h"
|
||||
|
@ -16,7 +18,7 @@ status_t mutex_init(void)
|
|||
|
||||
status_t mutex_final(void)
|
||||
{
|
||||
d_print("%d not freed in mutex_pool[%d]\n",
|
||||
d_trace(1, "%d not freed in mutex_pool[%d]\n",
|
||||
pool_size(&mutex_pool) - pool_avail(&mutex_pool),
|
||||
pool_size(&mutex_pool));
|
||||
pool_final(&mutex_pool);
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
#include "core.h"
|
||||
#define TRACE_MODULE _pkbuf
|
||||
|
||||
#include "core.h"
|
||||
#include "core_pkbuf.h"
|
||||
#include "core_errno.h"
|
||||
#include "core_lib.h"
|
||||
|
@ -82,28 +83,28 @@ status_t pkbuf_final(void)
|
|||
|
||||
void pkbuf_show(void)
|
||||
{
|
||||
d_print("%d not freed in pkbuf_pool[%d]\n",
|
||||
d_trace(1, "%d not freed in pkbuf_pool[%d]\n",
|
||||
pool_size(&pkbuf_pool) - pool_avail(&pkbuf_pool),
|
||||
pool_size(&pkbuf_pool));
|
||||
d_print("%d not freed in clbuf_pool[%d]\n",
|
||||
d_trace(1, "%d not freed in clbuf_pool[%d]\n",
|
||||
pool_size(&clbuf_pool) - pool_avail(&clbuf_pool),
|
||||
pool_size(&clbuf_pool));
|
||||
d_print("%d not freed in cluster128_pool[%d]\n",
|
||||
d_trace(1, "%d not freed in cluster128_pool[%d]\n",
|
||||
pool_size(&cluster_128_pool) - pool_avail(&cluster_128_pool),
|
||||
pool_size(&cluster_128_pool));
|
||||
d_print("%d not freed in cluster256_pool[%d]\n",
|
||||
d_trace(1, "%d not freed in cluster256_pool[%d]\n",
|
||||
pool_size(&cluster_256_pool) - pool_avail(&cluster_256_pool),
|
||||
pool_size(&cluster_256_pool));
|
||||
d_print("%d not freed in cluster512_pool[%d]\n",
|
||||
d_trace(1, "%d not freed in cluster512_pool[%d]\n",
|
||||
pool_size(&cluster_512_pool) - pool_avail(&cluster_512_pool),
|
||||
pool_size(&cluster_512_pool));
|
||||
d_print("%d not freed in cluster1024_pool[%d]\n",
|
||||
d_trace(1, "%d not freed in cluster1024_pool[%d]\n",
|
||||
pool_size(&cluster_1024_pool) - pool_avail(&cluster_1024_pool),
|
||||
pool_size(&cluster_1024_pool));
|
||||
d_print("%d not freed in cluster2048_pool[%d]\n",
|
||||
d_trace(1, "%d not freed in cluster2048_pool[%d]\n",
|
||||
pool_size(&cluster_2048_pool) - pool_avail(&cluster_2048_pool),
|
||||
pool_size(&cluster_2048_pool));
|
||||
d_print("%d not freed in cluster8192_pool[%d]\n",
|
||||
d_trace(1, "%d not freed in cluster8192_pool[%d]\n",
|
||||
pool_size(&cluster_8192_pool) - pool_avail(&cluster_8192_pool),
|
||||
pool_size(&cluster_8192_pool));
|
||||
}
|
||||
|
|
|
@ -67,7 +67,7 @@ status_t gtp_xact_final(void)
|
|||
if (gtp_xact_pool_initialized == 1 &&
|
||||
pool_size(>p_xact_pool) == pool_avail(>p_xact_pool))
|
||||
{
|
||||
d_print("%d not freed in gtp_xact_pool[%d] of GTP Transaction\n",
|
||||
d_trace(1, "%d not freed in gtp_xact_pool[%d] of GTP Transaction\n",
|
||||
pool_size(>p_xact_pool) - pool_avail(>p_xact_pool),
|
||||
pool_size(>p_xact_pool));
|
||||
index_final(>p_xact_pool);
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#define TRACE_MODULE _s1ap_recv
|
||||
|
||||
#include "core_debug.h"
|
||||
#include "core_lib.h"
|
||||
#include "core_param.h"
|
||||
#include "s1ap_message.h"
|
||||
|
||||
static int s1ap_decode_initiating(s1ap_message_t *message,
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#define TRACE_MODULE _s1ap_send
|
||||
|
||||
#include "core_debug.h"
|
||||
#include "core_lib.h"
|
||||
#include "core_param.h"
|
||||
|
||||
#include "types.h"
|
||||
#include "s1ap_message.h"
|
||||
|
|
|
@ -8,7 +8,7 @@ libs6a_la_SOURCES = \
|
|||
s6a_lib.h
|
||||
|
||||
nodist_libs6a_la_SOURCES = \
|
||||
s6a_init.c s6a_fd.c s6a_config.c s6a_dict.c
|
||||
s6a_init.c s6a_fd.c s6a_config.c s6a_hook.c s6a_dict.c
|
||||
|
||||
libs6a_la_DEPENDENCIES = \
|
||||
$(top_srcdir)/lib/base/libbase.la \
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#define TRACE_MODULE _s6a
|
||||
#define TRACE_MODULE _s6a_fd
|
||||
|
||||
#include "core_debug.h"
|
||||
#include "core_lib.h"
|
||||
#include "core_param.h"
|
||||
#include "core_signal.h"
|
||||
#include "core_semaphore.h"
|
||||
|
||||
|
@ -10,7 +10,7 @@
|
|||
static void s6a_gnutls_log_func(int level, const char *str);
|
||||
static void s6a_fd_logger(int printlevel, const char *format, va_list ap);
|
||||
|
||||
status_t s6a_config_apply();
|
||||
extern status_t s6a_config_apply();
|
||||
|
||||
int s6a_fd_init(const char *conffile)
|
||||
{
|
||||
|
@ -43,6 +43,9 @@ int s6a_fd_init(const char *conffile)
|
|||
CHECK_FCT_DO( s6a_config_apply(), goto error );
|
||||
}
|
||||
|
||||
/* register debug hook */
|
||||
CHECK_FCT_DO( s6a_hook_init(), goto error );
|
||||
|
||||
/* Start the servers */
|
||||
CHECK_FCT_DO( fd_core_start(), goto error );
|
||||
|
||||
|
@ -58,6 +61,8 @@ error:
|
|||
|
||||
void s6a_fd_final()
|
||||
{
|
||||
s6a_hook_final();
|
||||
|
||||
CHECK_FCT_DO( fd_core_shutdown(), d_error("fd_core_shutdown() failed") );
|
||||
CHECK_FCT_DO( fd_core_wait_shutdown_complete(),
|
||||
d_error("fd_core_wait_shutdown_complete() failed"));
|
||||
|
|
|
@ -0,0 +1,149 @@
|
|||
#define TRACE_MODULE _s6a_hook
|
||||
|
||||
#include "core_debug.h"
|
||||
|
||||
#include "s6a_lib.h"
|
||||
|
||||
static struct fd_hook_hdl *s6a_hook_hdl = NULL;
|
||||
static char * buf = NULL;
|
||||
static size_t len;
|
||||
static pthread_mutex_t mtx = PTHREAD_MUTEX_INITIALIZER;
|
||||
|
||||
static s6a_hook_user_handler s6a_hook_user_handler_instance = NULL;
|
||||
|
||||
/* The callback called when messages are received and sent */
|
||||
static void s6a_hook_cb_tree(enum fd_hook_type type, struct msg * msg,
|
||||
struct peer_hdr * peer, void * other, struct fd_hook_permsgdata *pmd,
|
||||
void * regdata)
|
||||
{
|
||||
char * peer_name = peer ? peer->info.pi_diamid : "<unknown peer>";
|
||||
|
||||
CHECK_POSIX_DO( pthread_mutex_lock(&mtx), );
|
||||
|
||||
if (s6a_hook_user_handler_instance)
|
||||
s6a_hook_user_handler_instance(type, msg, peer, other, pmd, regdata);
|
||||
|
||||
if (msg) {
|
||||
CHECK_MALLOC_DO( fd_msg_dump_treeview(&buf, &len, NULL, msg, fd_g_config->cnf_dict, (type == HOOK_MESSAGE_PARSING_ERROR) ? 0 : 1, 1),
|
||||
{ LOG_E("Error while dumping a message"); pthread_mutex_unlock(&mtx); return; } );
|
||||
}
|
||||
|
||||
switch (type) {
|
||||
/* errors */
|
||||
case HOOK_MESSAGE_FAILOVER:
|
||||
LOG_E("FAILOVER from '%s':", peer_name);
|
||||
LOG_SPLIT(FD_LOG_ERROR, " ", buf, NULL);
|
||||
break;
|
||||
case HOOK_MESSAGE_PARSING_ERROR:
|
||||
if (msg) {
|
||||
DiamId_t id = NULL;
|
||||
if (fd_msg_source_get( msg, &id, NULL ))
|
||||
id = (DiamId_t)"<error getting source>";
|
||||
if (!id)
|
||||
id = (DiamId_t)"<local>";
|
||||
LOG_E("PARSING ERROR: '%s' from '%s': ", (char *)other, (char *)id);
|
||||
LOG_SPLIT(FD_LOG_ERROR, " ", buf, NULL);
|
||||
} else {
|
||||
struct fd_cnx_rcvdata *rcv_data = other;
|
||||
CHECK_MALLOC_DO(fd_dump_extend_hexdump(&buf, &len, NULL, rcv_data->buffer, rcv_data->length, 0, 0), break);
|
||||
LOG_E("PARSING ERROR: %zdB msg from '%s': %s", rcv_data->length, peer_name, buf);
|
||||
}
|
||||
break;
|
||||
case HOOK_MESSAGE_ROUTING_ERROR:
|
||||
LOG_E("ROUTING ERROR '%s' for: ", (char *)other);
|
||||
LOG_SPLIT(FD_LOG_ERROR, " ", buf, NULL);
|
||||
break;
|
||||
case HOOK_MESSAGE_DROPPED:
|
||||
LOG_E("DROPPED '%s'", (char *)other);
|
||||
LOG_SPLIT(FD_LOG_ERROR, " ", buf, NULL);
|
||||
break;
|
||||
|
||||
/* send receive */
|
||||
case HOOK_MESSAGE_RECEIVED:
|
||||
LOG_N("RCV from '%s':", peer_name);
|
||||
LOG_SPLIT(FD_LOG_DEBUG, " ", buf, NULL);
|
||||
break;
|
||||
case HOOK_MESSAGE_SENT:
|
||||
LOG_N("SND to '%s':", peer_name);
|
||||
LOG_SPLIT(FD_LOG_DEBUG, " ", buf, NULL);
|
||||
break;
|
||||
|
||||
/* routing */
|
||||
case HOOK_MESSAGE_LOCAL:
|
||||
LOG_N("ISSUED:");
|
||||
LOG_SPLIT(FD_LOG_DEBUG, " ", buf, NULL);
|
||||
break;
|
||||
case HOOK_MESSAGE_ROUTING_FORWARD:
|
||||
LOG_D("FORWARDING: %s", buf);
|
||||
LOG_SPLIT(FD_LOG_DEBUG, " ", buf, NULL);
|
||||
break;
|
||||
case HOOK_MESSAGE_ROUTING_LOCAL:
|
||||
LOG_D("DISPATCHING: %s", buf);
|
||||
LOG_SPLIT(FD_LOG_DEBUG, " ", buf, NULL);
|
||||
break;
|
||||
|
||||
/* peers */
|
||||
case HOOK_PEER_CONNECT_FAILED:
|
||||
LOG_N("CONNECT FAILED to %s: %s", peer_name, (char *)other);
|
||||
break;
|
||||
case HOOK_PEER_CONNECT_SUCCESS:
|
||||
{
|
||||
char protobuf[40];
|
||||
if (peer) {
|
||||
CHECK_FCT_DO(fd_peer_cnx_proto_info(peer, protobuf, sizeof(protobuf)), break );
|
||||
} else {
|
||||
protobuf[0] = '-';
|
||||
protobuf[1] = '\0';
|
||||
}
|
||||
d_info("CONNECTED TO '%s' (%s):", peer_name, protobuf);
|
||||
LOG_N("CONNECTED TO '%s' (%s):", peer_name, protobuf);
|
||||
LOG_SPLIT(FD_LOG_NOTICE, " ", buf, NULL);
|
||||
}
|
||||
break;
|
||||
|
||||
/* Not handled */
|
||||
case HOOK_DATA_RECEIVED:
|
||||
break;
|
||||
}
|
||||
|
||||
CHECK_POSIX_DO( pthread_mutex_unlock(&mtx), );
|
||||
}
|
||||
|
||||
int s6a_hook_init()
|
||||
{
|
||||
uint32_t mask_errors, mask_sndrcv, mask_routing, mask_peers;
|
||||
uint32_t mask_tree;
|
||||
|
||||
mask_errors = HOOK_MASK( HOOK_MESSAGE_FAILOVER, HOOK_MESSAGE_PARSING_ERROR,
|
||||
HOOK_MESSAGE_ROUTING_ERROR, HOOK_MESSAGE_DROPPED );
|
||||
mask_sndrcv = HOOK_MASK( HOOK_MESSAGE_RECEIVED, HOOK_MESSAGE_SENT );
|
||||
mask_routing= HOOK_MASK( HOOK_MESSAGE_LOCAL,
|
||||
HOOK_MESSAGE_ROUTING_FORWARD, HOOK_MESSAGE_ROUTING_LOCAL );
|
||||
mask_peers = HOOK_MASK( HOOK_PEER_CONNECT_FAILED,
|
||||
HOOK_PEER_CONNECT_SUCCESS );
|
||||
|
||||
mask_tree = mask_errors;
|
||||
mask_tree |= mask_sndrcv;
|
||||
mask_tree |= mask_routing;
|
||||
mask_tree |= mask_peers;
|
||||
|
||||
CHECK_FCT( fd_hook_register(
|
||||
mask_tree, s6a_hook_cb_tree, NULL, NULL, &s6a_hook_hdl) );
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void s6a_hook_final()
|
||||
{
|
||||
if (s6a_hook_hdl) { CHECK_FCT_DO( fd_hook_unregister( s6a_hook_hdl ), ); }
|
||||
}
|
||||
|
||||
void s6a_hook_register(s6a_hook_user_handler instance)
|
||||
{
|
||||
s6a_hook_user_handler_instance = instance;
|
||||
}
|
||||
|
||||
void s6a_hook_unregister(void)
|
||||
{
|
||||
s6a_hook_user_handler_instance = NULL;
|
||||
}
|
|
@ -164,6 +164,16 @@ CORE_DECLARE(void) s6a_final(void);
|
|||
|
||||
CORE_DECLARE(int) s6a_config_init(void);
|
||||
|
||||
CORE_DECLARE(int) s6a_hook_init();
|
||||
CORE_DECLARE(void) s6a_hook_final();
|
||||
|
||||
typedef void (*s6a_hook_user_handler)(
|
||||
enum fd_hook_type type, struct msg *msg, struct peer_hdr *peer,
|
||||
void *other, struct fd_hook_permsgdata *pmd, void *regdata);
|
||||
|
||||
CORE_DECLARE(void) s6a_hook_register(s6a_hook_user_handler instance);
|
||||
CORE_DECLARE(void) s6a_hook_unregister();
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
|
4
main.c
4
main.c
|
@ -4,6 +4,7 @@
|
|||
|
||||
/* Core library */
|
||||
#define TRACE_MODULE _main_
|
||||
#include "core_general.h"
|
||||
#include "core_debug.h"
|
||||
#include "core_signal.h"
|
||||
|
||||
|
@ -116,10 +117,12 @@ int main(int argc, char *argv[])
|
|||
show_version();
|
||||
d_print("\n");
|
||||
|
||||
core_initialize();
|
||||
if (app_initialize(config_path, log_path) != CORE_OK)
|
||||
{
|
||||
d_fatal("NextEPC initialization failed. Aborted");
|
||||
app_terminate();
|
||||
core_terminate();
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
|
@ -130,6 +133,7 @@ int main(int argc, char *argv[])
|
|||
d_info("NextEPC daemon terminating...");
|
||||
|
||||
app_terminate();
|
||||
core_terminate();
|
||||
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
|
|
|
@ -282,25 +282,32 @@ status_t hss_context_parse_config()
|
|||
|
||||
status_t hss_context_setup_trace_module()
|
||||
{
|
||||
int context = context_self()->trace_level.context;
|
||||
int s6a = context_self()->trace_level.s6a;
|
||||
|
||||
if (context)
|
||||
{
|
||||
extern int _context;
|
||||
d_trace_level(&_context, context);
|
||||
extern int _hss_context;
|
||||
d_trace_level(&_hss_context, context);
|
||||
}
|
||||
int others = context_self()->trace_level.others;
|
||||
|
||||
if (s6a)
|
||||
{
|
||||
extern int _hss_s6a_handler;
|
||||
d_trace_level(&_hss_s6a_handler, s6a);
|
||||
extern int _s6a;
|
||||
d_trace_level(&_s6a, s6a);
|
||||
extern int _s6a_fd;
|
||||
d_trace_level(&_s6a_fd, s6a);
|
||||
extern int _s6a_init;
|
||||
d_trace_level(&_s6a_init, s6a);
|
||||
extern int _s6a_hook;
|
||||
d_trace_level(&_s6a_hook, s6a);
|
||||
}
|
||||
|
||||
if (others)
|
||||
{
|
||||
extern int _mutex;
|
||||
d_trace_level(&_mutex, others);
|
||||
extern int _pkbuf;
|
||||
d_trace_level(&_pkbuf, others);
|
||||
|
||||
extern int _context;
|
||||
d_trace_level(&_context, others);
|
||||
extern int _hss_context;
|
||||
d_trace_level(&_hss_context, others);
|
||||
}
|
||||
|
||||
return CORE_OK;
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
#define TRACE_MODULE _app
|
||||
|
||||
#include "core_general.h"
|
||||
#include "core_debug.h"
|
||||
#include "core_thread.h"
|
||||
#include "core_net.h"
|
||||
|
@ -20,7 +19,9 @@ status_t app_will_initialize(char *config_path, char *log_path)
|
|||
{
|
||||
status_t rv;
|
||||
|
||||
#if 0
|
||||
core_initialize();
|
||||
#endif
|
||||
context_init();
|
||||
|
||||
rv = context_read_file(config_path);
|
||||
|
@ -68,7 +69,9 @@ void app_will_terminate(void)
|
|||
void app_did_terminate(void)
|
||||
{
|
||||
context_final();
|
||||
#if 0
|
||||
core_terminate();
|
||||
#endif
|
||||
}
|
||||
|
||||
void *THREAD_FUNC net_main(thread_id id, void *data)
|
||||
|
|
|
@ -124,7 +124,7 @@ void emm_handle_attach_request(
|
|||
imsi_bcd);
|
||||
mme_ue_set_imsi(mme_ue, imsi_bcd);
|
||||
|
||||
d_info("[NAS] Attach request : IMSI[%s] --> EMM", imsi_bcd);
|
||||
d_trace(3, "[NAS] Attach request : IMSI[%s] --> EMM\n", imsi_bcd);
|
||||
|
||||
if (SECURITY_CONTEXT_IS_VALID(mme_ue))
|
||||
{
|
||||
|
@ -183,8 +183,8 @@ void emm_handle_attach_request(
|
|||
guti.mme_code = nas_guti->mme_code;
|
||||
guti.m_tmsi = nas_guti->m_tmsi;
|
||||
|
||||
d_info("[NAS] Attach request : GUTI[G:%d,C:%d,M_TMSI:0x%x]-"
|
||||
"IMSI:[%s] --> EMM",
|
||||
d_trace(3, "[NAS] Attach request : GUTI[G:%d,C:%d,M_TMSI:0x%x]-"
|
||||
"IMSI:[%s] --> EMM\n",
|
||||
guti.mme_gid,
|
||||
guti.mme_code,
|
||||
guti.m_tmsi,
|
||||
|
@ -350,6 +350,9 @@ void emm_handle_authentication_request(mme_ue_t *mme_ue)
|
|||
enb_ue = mme_ue->enb_ue;
|
||||
d_assert(enb_ue, return, "Null param");
|
||||
|
||||
d_trace(3, "[NAS] Authentication request : UE[%s] <-- EMM\n",
|
||||
mme_ue->imsi_bcd);
|
||||
|
||||
memset(&message, 0, sizeof(message));
|
||||
message.emm.h.protocol_discriminator = NAS_PROTOCOL_DISCRIMINATOR_EMM;
|
||||
message.emm.h.message_type = NAS_AUTHENTICATION_REQUEST;
|
||||
|
@ -403,7 +406,7 @@ void emm_handle_authentication_response(mme_ue_t *mme_ue,
|
|||
return;
|
||||
}
|
||||
|
||||
d_info("[NAS] Authentication response : UE[%s] --> EMM",
|
||||
d_trace(3, "[NAS] Authentication response : UE[%s] --> EMM\n",
|
||||
mme_ue->imsi_bcd);
|
||||
|
||||
memset(&message, 0, sizeof(message));
|
||||
|
@ -460,7 +463,7 @@ void emm_handle_authentication_response(mme_ue_t *mme_ue,
|
|||
mme_kdf_nas(MME_KDF_NAS_ENC_ALG, mme_ue->selected_enc_algorithm,
|
||||
mme_ue->kasme, mme_ue->knas_enc);
|
||||
|
||||
d_info("[NAS] Security mode command : UE[%s] <-- EMM",
|
||||
d_trace(3, "[NAS] Security mode command : UE[%s] <-- EMM\n",
|
||||
mme_ue->imsi_bcd);
|
||||
|
||||
rv = nas_security_encode(&emmbuf, mme_ue, &message);
|
||||
|
@ -490,14 +493,14 @@ void emm_handle_create_session_response(mme_bearer_t *bearer)
|
|||
d_assert(rv == CORE_OK && esmbuf,
|
||||
return, "bearer build error");
|
||||
|
||||
d_info("[NAS] Activate default bearer context request : EMM <-- ESM[%d]",
|
||||
bearer->ebi);
|
||||
d_trace(3, "[NAS] Activate default bearer context request : "
|
||||
"EMM <-- ESM[%d]\n", bearer->ebi);
|
||||
|
||||
rv = emm_build_attach_accept(&emmbuf, mme_ue, esmbuf);
|
||||
d_assert(rv == CORE_OK && emmbuf,
|
||||
pkbuf_free(esmbuf); return, "emm build error");
|
||||
|
||||
d_info("[NAS] Attach accept : UE[%s] <-- EMM", mme_ue->imsi_bcd);
|
||||
d_trace(3, "[NAS] Attach accept : UE[%s] <-- EMM\n", mme_ue->imsi_bcd);
|
||||
|
||||
rv = s1ap_build_initial_context_setup_request(&s1apbuf, bearer, emmbuf);
|
||||
d_assert(rv == CORE_OK && s1apbuf,
|
||||
|
@ -575,7 +578,7 @@ void emm_handle_attach_complete(
|
|||
NAS_EMM_INFORMATION_NETWORK_DAYLIGHT_SAVING_TIME_PRESENT;
|
||||
network_daylight_saving_time->length = 1;
|
||||
|
||||
d_info("[NAS] EMM information : UE[%s] <-- EMM",
|
||||
d_trace(3, "[NAS] EMM information : UE[%s] <-- EMM\n",
|
||||
mme_ue->imsi_bcd);
|
||||
|
||||
rv = nas_security_encode(&emmbuf, mme_ue, &message);
|
||||
|
@ -610,7 +613,8 @@ void emm_handle_detach_request(
|
|||
enb_ue = mme_ue->enb_ue;
|
||||
d_assert(enb_ue, return, "Null param");
|
||||
|
||||
d_info("[NAS] Detach request : UE_IMSI[%s] --> EMM", mme_ue->imsi_bcd);
|
||||
d_trace(3, "[NAS] Detach request : UE_IMSI[%s] --> EMM\n",
|
||||
mme_ue->imsi_bcd);
|
||||
|
||||
switch (detach_type->detach_type)
|
||||
{
|
||||
|
@ -674,7 +678,7 @@ void emm_handle_detach_accept(
|
|||
message.emm.h.protocol_discriminator = NAS_PROTOCOL_DISCRIMINATOR_EMM;
|
||||
message.emm.h.message_type = NAS_DETACH_ACCEPT;
|
||||
|
||||
d_info("[NAS] Detach accept : UE[%s] <-- EMM",
|
||||
d_trace(3, "[NAS] Detach accept : UE[%s] <-- EMM\n",
|
||||
mme_ue->imsi_bcd);
|
||||
|
||||
rv = nas_security_encode(&emmbuf, mme_ue, &message);
|
||||
|
@ -733,7 +737,7 @@ void emm_handle_delete_session_response(mme_bearer_t *bearer)
|
|||
sess = mme_sess_find_by_ebi(mme_ue, bearer->ebi);
|
||||
mme_sess_remove(sess);
|
||||
|
||||
d_info("[NAS] Delete Session Response : UE[%s] <-- EMM[%d]",
|
||||
d_trace(3, "[NAS] Delete Session Response : UE[%s] <-- EMM[%d]\n",
|
||||
mme_ue->imsi_bcd, message->emm.h.message_type);
|
||||
|
||||
switch(message->emm.h.message_type)
|
||||
|
|
|
@ -14,7 +14,7 @@ void emm_state_initial(fsm_t *s, event_t *e)
|
|||
{
|
||||
d_assert(s, return, "Null param");
|
||||
|
||||
mme_sm_trace(1, e);
|
||||
mme_sm_trace(3, e);
|
||||
|
||||
FSM_TRAN(s, &emm_state_operational);
|
||||
}
|
||||
|
@ -23,7 +23,7 @@ void emm_state_final(fsm_t *s, event_t *e)
|
|||
{
|
||||
d_assert(s, return, "Null param");
|
||||
|
||||
mme_sm_trace(1, e);
|
||||
mme_sm_trace(3, e);
|
||||
}
|
||||
|
||||
void emm_state_operational(fsm_t *s, event_t *e)
|
||||
|
@ -31,7 +31,7 @@ void emm_state_operational(fsm_t *s, event_t *e)
|
|||
d_assert(s, return, "Null param");
|
||||
d_assert(e, return, "Null param");
|
||||
|
||||
mme_sm_trace(1, e);
|
||||
mme_sm_trace(3, e);
|
||||
|
||||
switch (event_get(e))
|
||||
{
|
||||
|
@ -78,8 +78,6 @@ void emm_state_operational(fsm_t *s, event_t *e)
|
|||
{
|
||||
case S6A_CMD_AUTHENTICATION_INFORMATION:
|
||||
{
|
||||
d_info("[NAS] Authentication request : UE[%s] <-- EMM",
|
||||
mme_ue->imsi_bcd);
|
||||
emm_handle_authentication_request(mme_ue);
|
||||
break;
|
||||
}
|
||||
|
@ -107,8 +105,8 @@ void emm_state_operational(fsm_t *s, event_t *e)
|
|||
}
|
||||
case GTP_MODIFY_BEARER_RESPONSE_TYPE:
|
||||
{
|
||||
d_info("[GTP] Modify Bearer Response : "
|
||||
"MME <-- SGW");
|
||||
d_trace(3, "[GTP] Modify Bearer Response : "
|
||||
"MME <-- SGW\n");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -160,8 +158,8 @@ void emm_state_operational(fsm_t *s, event_t *e)
|
|||
}
|
||||
case NAS_SECURITY_MODE_COMPLETE:
|
||||
{
|
||||
d_info("[NAS] Security mode complete : UE[%s] --> EMM",
|
||||
mme_ue->imsi_bcd);
|
||||
d_trace(3, "[NAS] Security mode complete : "
|
||||
"UE[%s] --> EMM\n", mme_ue->imsi_bcd);
|
||||
|
||||
/* Update Kenb */
|
||||
if (SECURITY_CONTEXT_IS_VALID(mme_ue))
|
||||
|
@ -173,7 +171,7 @@ void emm_state_operational(fsm_t *s, event_t *e)
|
|||
}
|
||||
case NAS_ATTACH_COMPLETE:
|
||||
{
|
||||
d_info("[NAS] Attach complete : UE[%s] --> EMM",
|
||||
d_trace(3, "[NAS] Attach complete : UE[%s] --> EMM\n",
|
||||
mme_ue->imsi_bcd);
|
||||
emm_handle_attach_complete(
|
||||
mme_ue, &message->emm.attach_complete);
|
||||
|
@ -223,7 +221,7 @@ void emm_state_exception(fsm_t *s, event_t *e)
|
|||
d_assert(s, return, "Null param");
|
||||
d_assert(e, return, "Null param");
|
||||
|
||||
mme_sm_trace(1, e);
|
||||
mme_sm_trace(3, e);
|
||||
|
||||
switch (event_get(e))
|
||||
{
|
||||
|
|
|
@ -12,7 +12,7 @@ void esm_state_initial(fsm_t *s, event_t *e)
|
|||
{
|
||||
d_assert(s, return, "Null param");
|
||||
|
||||
mme_sm_trace(1, e);
|
||||
mme_sm_trace(3, e);
|
||||
|
||||
FSM_TRAN(s, &esm_state_operational);
|
||||
}
|
||||
|
@ -21,7 +21,7 @@ void esm_state_final(fsm_t *s, event_t *e)
|
|||
{
|
||||
d_assert(s, return, "Null param");
|
||||
|
||||
mme_sm_trace(1, e);
|
||||
mme_sm_trace(3, e);
|
||||
}
|
||||
|
||||
void esm_state_operational(fsm_t *s, event_t *e)
|
||||
|
@ -29,7 +29,7 @@ void esm_state_operational(fsm_t *s, event_t *e)
|
|||
d_assert(s, return, "Null param");
|
||||
d_assert(e, return, "Null param");
|
||||
|
||||
mme_sm_trace(1, e);
|
||||
mme_sm_trace(3, e);
|
||||
|
||||
switch (event_get(e))
|
||||
{
|
||||
|
@ -58,8 +58,8 @@ void esm_state_operational(fsm_t *s, event_t *e)
|
|||
{
|
||||
case S6A_CMD_UPDATE_LOCATION:
|
||||
{
|
||||
d_info("[NAS] ESM information request : "
|
||||
"UE[%s] <--- ESM[%d]",
|
||||
d_trace(3, "[NAS] ESM information request : "
|
||||
"UE[%s] <--- ESM[%d]\n",
|
||||
mme_ue->imsi_bcd, bearer->pti);
|
||||
esm_handle_s6a_update_location(bearer);
|
||||
break;
|
||||
|
@ -97,8 +97,8 @@ void esm_state_operational(fsm_t *s, event_t *e)
|
|||
{
|
||||
esm_handle_pdn_connectivity_request(
|
||||
bearer, &message->esm.pdn_connectivity_request);
|
||||
d_info("[NAS] PDN connectivity request : "
|
||||
"UE[%s] --> ESM[%d]",
|
||||
d_trace(3, "[NAS] PDN connectivity request : "
|
||||
"UE[%s] --> ESM[%d]\n",
|
||||
mme_ue->imsi_bcd, bearer->pti);
|
||||
break;
|
||||
}
|
||||
|
@ -107,8 +107,8 @@ void esm_state_operational(fsm_t *s, event_t *e)
|
|||
/* FIXME : SGW Selection */
|
||||
bearer->sgw = mme_sgw_first();
|
||||
|
||||
d_info("[NAS] ESM information response : "
|
||||
"UE[%s] --> ESM[%d]",
|
||||
d_trace(3, "[NAS] ESM information response : "
|
||||
"UE[%s] --> ESM[%d]\n",
|
||||
mme_ue->imsi_bcd, bearer->pti);
|
||||
esm_handle_information_response(
|
||||
bearer, &message->esm.esm_information_response);
|
||||
|
@ -116,8 +116,8 @@ void esm_state_operational(fsm_t *s, event_t *e)
|
|||
}
|
||||
case NAS_ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_ACCEPT:
|
||||
{
|
||||
d_info("[NAS] Activate default eps bearer context accept : "
|
||||
"UE[%s] --> ESM[%d]",
|
||||
d_trace(3, "[NAS] Activate default eps bearer "
|
||||
"context accept : UE[%s] --> ESM[%d]\n",
|
||||
mme_ue->imsi_bcd, bearer->pti);
|
||||
break;
|
||||
}
|
||||
|
@ -144,7 +144,7 @@ void esm_state_exception(fsm_t *s, event_t *e)
|
|||
d_assert(s, return, "Null param");
|
||||
d_assert(e, return, "Null param");
|
||||
|
||||
mme_sm_trace(1, e);
|
||||
mme_sm_trace(3, e);
|
||||
|
||||
switch (event_get(e))
|
||||
{
|
||||
|
|
|
@ -780,35 +780,18 @@ status_t mme_context_parse_config()
|
|||
|
||||
status_t mme_context_setup_trace_module()
|
||||
{
|
||||
int context = context_self()->trace_level.context;
|
||||
int sm = context_self()->trace_level.sm;
|
||||
int s1ap = context_self()->trace_level.s1ap;
|
||||
int nas = context_self()->trace_level.nas;
|
||||
int s6a = context_self()->trace_level.s6a;
|
||||
int gtp = context_self()->trace_level.gtp;
|
||||
|
||||
if (context)
|
||||
{
|
||||
extern int _context;
|
||||
d_trace_level(&_context, context);
|
||||
extern int _mme_context;
|
||||
d_trace_level(&_mme_context, context);
|
||||
}
|
||||
|
||||
if (sm)
|
||||
{
|
||||
extern int _mme_sm;
|
||||
d_trace_level(&_mme_sm, sm);
|
||||
extern int _s1ap_sm;
|
||||
d_trace_level(&_s1ap_sm, sm);
|
||||
extern int _emm_sm;
|
||||
d_trace_level(&_emm_sm, sm);
|
||||
extern int _esm_sm;
|
||||
d_trace_level(&_esm_sm, sm);
|
||||
}
|
||||
int others = context_self()->trace_level.others;
|
||||
|
||||
if (s1ap)
|
||||
{
|
||||
extern int _s1ap_sm;
|
||||
d_trace_level(&_s1ap_sm, s1ap);
|
||||
extern int _s1ap_build;
|
||||
d_trace_level(&_s1ap_build, s1ap);
|
||||
extern int _s1ap_handler;
|
||||
d_trace_level(&_s1ap_handler, s1ap);
|
||||
extern int _s1ap_path;
|
||||
|
@ -825,6 +808,10 @@ status_t mme_context_setup_trace_module()
|
|||
|
||||
if (nas)
|
||||
{
|
||||
extern int _emm_sm;
|
||||
d_trace_level(&_emm_sm, nas);
|
||||
extern int _esm_sm;
|
||||
d_trace_level(&_esm_sm, nas);
|
||||
extern int _emm_handler;
|
||||
d_trace_level(&_emm_handler, nas);
|
||||
extern int _esm_handler;
|
||||
|
@ -841,10 +828,12 @@ status_t mme_context_setup_trace_module()
|
|||
{
|
||||
extern int _mme_s6a_handler;
|
||||
d_trace_level(&_mme_s6a_handler, s6a);
|
||||
extern int _s6a;
|
||||
d_trace_level(&_s6a, s6a);
|
||||
extern int _s6a_fd;
|
||||
d_trace_level(&_s6a_fd, s6a);
|
||||
extern int _s6a_init;
|
||||
d_trace_level(&_s6a_init, s6a);
|
||||
extern int _s6a_hook;
|
||||
d_trace_level(&_s6a_hook, s6a);
|
||||
}
|
||||
|
||||
if (gtp)
|
||||
|
@ -861,6 +850,21 @@ status_t mme_context_setup_trace_module()
|
|||
d_trace_level(&_gtp_xact, gtp);
|
||||
}
|
||||
|
||||
if (others)
|
||||
{
|
||||
extern int _mutex;
|
||||
d_trace_level(&_mutex, others);
|
||||
extern int _pkbuf;
|
||||
d_trace_level(&_pkbuf, others);
|
||||
|
||||
extern int _context;
|
||||
d_trace_level(&_context, others);
|
||||
extern int _mme_context;
|
||||
d_trace_level(&_mme_context, others);
|
||||
extern int _mme_sm;
|
||||
d_trace_level(&_mme_sm, others);
|
||||
}
|
||||
|
||||
return CORE_OK;
|
||||
}
|
||||
|
||||
|
|
|
@ -74,8 +74,8 @@ void mme_s11_handle_create_session_response(
|
|||
bearer->sgw_s1u_teid = ntohl(sgw_s1u_teid->teid);
|
||||
bearer->sgw_s1u_addr = sgw_s1u_teid->ipv4_addr;
|
||||
|
||||
d_info("[GTP] Create Session Response : "
|
||||
"MME[%d] <-- SGW[%d]", sess->mme_s11_teid, sess->sgw_s11_teid);
|
||||
d_trace(3, "[GTP] Create Session Response : "
|
||||
"MME[%d] <-- SGW[%d]\n", sess->mme_s11_teid, sess->sgw_s11_teid);
|
||||
|
||||
event_set(&e, MME_EVT_EMM_BEARER_FROM_S11);
|
||||
event_set_param1(&e, (c_uintptr_t)bearer->index);
|
||||
|
@ -116,8 +116,8 @@ void mme_s11_handle_delete_session_response(
|
|||
return;
|
||||
}
|
||||
|
||||
d_info("[GTP] Delete Session Response : "
|
||||
"MME[%d] <-- SGW[%d]", sess->mme_s11_teid, sess->sgw_s11_teid);
|
||||
d_trace(3, "[GTP] Delete Session Response : "
|
||||
"MME[%d] <-- SGW[%d]\n", sess->mme_s11_teid, sess->sgw_s11_teid);
|
||||
|
||||
event_set(&e, MME_EVT_EMM_BEARER_FROM_S11);
|
||||
event_set_param1(&e, (c_uintptr_t)bearer->index);
|
||||
|
@ -149,8 +149,8 @@ void mme_s11_handle_release_access_bearers_response(
|
|||
return;
|
||||
}
|
||||
|
||||
d_info("[GTP] Release Access Bearers Response : "
|
||||
"MME[%d] <-- SGW[%d]", sess->mme_s11_teid, sess->sgw_s11_teid);
|
||||
d_trace(3, "[GTP] Release Access Bearers Response : "
|
||||
"MME[%d] <-- SGW[%d]\n", sess->mme_s11_teid, sess->sgw_s11_teid);
|
||||
|
||||
event_set(&e, MME_EVT_S1AP_UE_FROM_S11);
|
||||
event_set_param1(&e, (c_uintptr_t)enb->index);
|
||||
|
|
|
@ -47,7 +47,7 @@ static void mme_s6a_aia_cb(void *data, struct msg **msg)
|
|||
mme_ue = mi->mme_ue;
|
||||
d_assert(mme_ue, error++; goto out,);
|
||||
|
||||
d_info("[S6A] Authentication-Information-Response : UE[%s] <-- HSS",
|
||||
d_trace(3, "[S6A] Authentication-Information-Response : UE[%s] <-- HSS\n",
|
||||
mme_ue->imsi_bcd);
|
||||
|
||||
/* Value of Result Code */
|
||||
|
@ -237,7 +237,7 @@ int mme_s6a_send_air(mme_ue_t *mme_ue)
|
|||
s6a_config->stats.nb_sent++;
|
||||
d_assert(pthread_mutex_unlock(&s6a_config->stats_lock) == 0,, );
|
||||
|
||||
d_info("[S6A] Authentication-Information-Request : UE[%s] --> HSS",
|
||||
d_trace(3, "[S6A] Authentication-Information-Request : UE[%s] --> HSS\n",
|
||||
mme_ue->imsi_bcd);
|
||||
|
||||
return 0;
|
||||
|
@ -278,7 +278,7 @@ static void mme_s6a_ula_cb(void *data, struct msg **msg)
|
|||
mme_ue = mi->mme_ue;
|
||||
d_assert(mme_ue, error++; goto out,);
|
||||
|
||||
d_info("[S6A] Update-Location-Response : UE[%s] <-- HSS",
|
||||
d_trace(3, "[S6A] Update-Location-Response : UE[%s] <-- HSS\n",
|
||||
mme_ue->imsi_bcd);
|
||||
|
||||
/* Value of Result Code */
|
||||
|
@ -557,7 +557,7 @@ int mme_s6a_send_ulr(mme_ue_t *mme_ue)
|
|||
s6a_config->stats.nb_sent++;
|
||||
d_assert(pthread_mutex_unlock(&s6a_config->stats_lock) == 0,, );
|
||||
|
||||
d_info("[S6A] Update-Location-Request : UE[%s] --> HSS",
|
||||
d_trace(3, "[S6A] Update-Location-Request : UE[%s] --> HSS\n",
|
||||
mme_ue->imsi_bcd);
|
||||
|
||||
return 0;
|
||||
|
@ -605,7 +605,7 @@ void mme_s6a_final(void)
|
|||
{
|
||||
d_assert(fd_sess_handler_destroy(&mme_s6a_reg, NULL) == 0,,);
|
||||
|
||||
d_print("%d not freed in sess_state_pool[%d] of S6A-SM\n",
|
||||
d_trace(1, "%d not freed in sess_state_pool[%d] of S6A-SM\n",
|
||||
pool_size(&sess_state_pool) - pool_avail(&sess_state_pool),
|
||||
pool_size(&sess_state_pool));
|
||||
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
|
||||
void mme_state_initial(fsm_t *s, event_t *e)
|
||||
{
|
||||
mme_sm_trace(1, e);
|
||||
mme_sm_trace(3, e);
|
||||
|
||||
d_assert(s, return, "Null param");
|
||||
|
||||
|
@ -23,7 +23,7 @@ void mme_state_initial(fsm_t *s, event_t *e)
|
|||
|
||||
void mme_state_final(fsm_t *s, event_t *e)
|
||||
{
|
||||
mme_sm_trace(1, e);
|
||||
mme_sm_trace(3, e);
|
||||
|
||||
d_assert(s, return, "Null param");
|
||||
}
|
||||
|
@ -35,7 +35,7 @@ void mme_state_operational(fsm_t *s, event_t *e)
|
|||
status_t rv;
|
||||
char buf[INET_ADDRSTRLEN];
|
||||
|
||||
mme_sm_trace(1, e);
|
||||
mme_sm_trace(3, e);
|
||||
|
||||
d_assert(s, return, "Null param");
|
||||
|
||||
|
@ -114,7 +114,8 @@ void mme_state_operational(fsm_t *s, event_t *e)
|
|||
enb = mme_enb_find(index);
|
||||
if (enb)
|
||||
{
|
||||
d_info("eNB-S1[%x] connection refused!!!", enb->enb_id);
|
||||
d_trace(1, "eNB-S1[%x] connection refused!!!\n",
|
||||
enb->enb_id);
|
||||
mme_enb_remove(enb);
|
||||
}
|
||||
else
|
||||
|
|
|
@ -137,8 +137,8 @@ status_t s1ap_build_downlink_nas_transport(
|
|||
d_assert(s1apbuf && encoded >= 0,return CORE_ERROR,);
|
||||
pkbuf_free(emmbuf);
|
||||
|
||||
d_info("[S1AP] downlinkNASTransport : "
|
||||
"UE[eNB-UE-S1AP-ID(%d)] <-- eNB[%s:%d]",
|
||||
d_trace(3, "[S1AP] downlinkNASTransport : "
|
||||
"UE[eNB-UE-S1AP-ID(%d)] <-- eNB[%s:%d]\n",
|
||||
enb_ue->enb_ue_s1ap_id,
|
||||
INET_NTOP(&enb_ue->enb->s1ap_sock->remote.sin_addr.s_addr, buf),
|
||||
enb_ue->enb->enb_id);
|
||||
|
@ -252,8 +252,8 @@ status_t s1ap_build_initial_context_setup_request(
|
|||
|
||||
d_assert(s1apbuf && encoded >= 0,return CORE_ERROR,);
|
||||
|
||||
d_info("[S1AP] Initial Context Setup Request : "
|
||||
"UE[eNB-UE-S1AP-ID(%d)] <-- eNB[%s:%d]",
|
||||
d_trace(3, "[S1AP] Initial Context Setup Request : "
|
||||
"UE[eNB-UE-S1AP-ID(%d)] <-- eNB[%s:%d]\n",
|
||||
enb_ue->enb_ue_s1ap_id,
|
||||
INET_NTOP(&enb_ue->enb->s1ap_sock->remote.sin_addr.s_addr, buf),
|
||||
enb_ue->enb->enb_id);
|
||||
|
@ -333,8 +333,8 @@ status_t s1ap_build_ue_context_release_commmand(
|
|||
|
||||
d_assert(s1apbuf && encoded >= 0, return CORE_ERROR,);
|
||||
|
||||
d_info("[S1AP] UE Context Release Command : "
|
||||
"UE[mME-UE-S1AP-ID(%d)] <-- eNB[%s:%d]",
|
||||
d_trace(3, "[S1AP] UE Context Release Command : "
|
||||
"UE[mME-UE-S1AP-ID(%d)] <-- eNB[%s:%d]\n",
|
||||
enb_ue->mme_ue_s1ap_id,
|
||||
INET_NTOP(&enb_ue->enb->s1ap_sock->remote.sin_addr.s_addr, buf),
|
||||
enb_ue->enb->enb_id);
|
||||
|
|
|
@ -153,7 +153,7 @@ void s1ap_handle_s1_setup_request(mme_enb_t *enb, s1ap_message_t *message)
|
|||
}
|
||||
#endif
|
||||
d_assert(enb->s1ap_sock, return,);
|
||||
d_info("[S1AP] S1SetupRequest : eNB[%s:%d] --> MME",
|
||||
d_trace(3, "[S1AP] S1SetupRequest : eNB[%s:%d] --> MME\n",
|
||||
INET_NTOP(&enb->s1ap_sock->remote.sin_addr.s_addr, buf),
|
||||
enb_id);
|
||||
|
||||
|
@ -164,7 +164,7 @@ void s1ap_handle_s1_setup_request(mme_enb_t *enb, s1ap_message_t *message)
|
|||
d_assert(s1ap_send_to_enb(enb, s1apbuf) == CORE_OK, , "send error");
|
||||
|
||||
d_assert(enb->s1ap_sock, return,);
|
||||
d_info("[S1AP] S1SetupResponse: eNB[%s:%d] <-- MME",
|
||||
d_trace(3, "[S1AP] S1SetupResponse: eNB[%s:%d] <-- MME\n",
|
||||
INET_NTOP(&enb->s1ap_sock->remote.sin_addr.s_addr, buf),
|
||||
enb_id);
|
||||
}
|
||||
|
@ -251,7 +251,8 @@ void s1ap_handle_initial_ue_message(mme_enb_t *enb, s1ap_message_t *message)
|
|||
enb_ue->e_cgi.cell_id = (ntohl(enb_ue->e_cgi.cell_id) >> 4);
|
||||
|
||||
d_assert(enb->s1ap_sock, enb_ue_remove(enb_ue); return,);
|
||||
d_info("[S1AP] InitialUEMessage : UE[eNB-UE-S1AP-ID(%d)] --> eNB[%s:%d]",
|
||||
d_trace(3, "[S1AP] InitialUEMessage : "
|
||||
"UE[eNB-UE-S1AP-ID(%d)] --> eNB[%s:%d]\n",
|
||||
enb_ue->enb_ue_s1ap_id,
|
||||
INET_NTOP(&enb->s1ap_sock->remote.sin_addr.s_addr, buf),
|
||||
enb->enb_id);
|
||||
|
@ -273,7 +274,8 @@ void s1ap_handle_uplink_nas_transport(
|
|||
enb_ue = enb_ue_find_by_enb_ue_s1ap_id(enb, ies->eNB_UE_S1AP_ID);
|
||||
d_assert(enb_ue, return, "Null param");
|
||||
|
||||
d_info("[S1AP] uplinkNASTransport : UE[eNB-UE-S1AP-ID(%d)] --> eNB[%s:%d]",
|
||||
d_trace(3, "[S1AP] uplinkNASTransport : "
|
||||
"UE[eNB-UE-S1AP-ID(%d)] --> eNB[%s:%d]\n",
|
||||
enb_ue->enb_ue_s1ap_id,
|
||||
INET_NTOP(&enb->s1ap_sock->remote.sin_addr.s_addr, buf),
|
||||
enb->enb_id);
|
||||
|
@ -295,8 +297,8 @@ void s1ap_handle_ue_capability_info_indication(
|
|||
enb_ue = enb_ue_find_by_enb_ue_s1ap_id(enb, ies->eNB_UE_S1AP_ID);
|
||||
d_assert(enb_ue, return, "No UE Context[%d]", ies->eNB_UE_S1AP_ID);
|
||||
|
||||
d_info("[S1AP] UE Capability Info Indication : "
|
||||
"UE[eNB-UE-S1AP-ID(%d)] --> eNB[%s:%d]",
|
||||
d_trace(3, "[S1AP] UE Capability Info Indication : "
|
||||
"UE[eNB-UE-S1AP-ID(%d)] --> eNB[%s:%d]\n",
|
||||
enb_ue->enb_ue_s1ap_id,
|
||||
INET_NTOP(&enb->s1ap_sock->remote.sin_addr.s_addr, buf),
|
||||
enb->enb_id);
|
||||
|
@ -317,8 +319,8 @@ void s1ap_handle_initial_context_setup_response(
|
|||
enb_ue = enb_ue_find_by_enb_ue_s1ap_id(enb, ies->eNB_UE_S1AP_ID);
|
||||
d_assert(enb_ue, return, "No UE Context[%d]", ies->eNB_UE_S1AP_ID);
|
||||
|
||||
d_info("[S1AP] Initial Context Setup Response : "
|
||||
"UE[eNB-UE-S1AP-ID(%d)] --> eNB[%s:%d]",
|
||||
d_trace(3, "[S1AP] Initial Context Setup Response : "
|
||||
"UE[eNB-UE-S1AP-ID(%d)] --> eNB[%s:%d]\n",
|
||||
enb_ue->enb_ue_s1ap_id,
|
||||
INET_NTOP(&enb->s1ap_sock->remote.sin_addr.s_addr, buf),
|
||||
enb->enb_id);
|
||||
|
@ -366,8 +368,8 @@ void s1ap_handle_ue_context_release_request(
|
|||
enb_ue = enb_ue_find_by_mme_ue_s1ap_id(ies->mme_ue_s1ap_id);
|
||||
d_assert(enb_ue, return, "No UE Context[%d]", ies->mme_ue_s1ap_id);
|
||||
|
||||
d_info("[S1AP] UE Context Release Request : "
|
||||
"UE[mME-UE-S1AP-ID(%d)] --> eNB[%s:%d]",
|
||||
d_trace(3, "[S1AP] UE Context Release Request : "
|
||||
"UE[mME-UE-S1AP-ID(%d)] --> eNB[%s:%d]\n",
|
||||
enb_ue->mme_ue_s1ap_id,
|
||||
INET_NTOP(&enb->s1ap_sock->remote.sin_addr.s_addr, buf),
|
||||
enb->enb_id);
|
||||
|
@ -492,8 +494,8 @@ void s1ap_handle_ue_context_release_complete(
|
|||
enb_ue = enb_ue_find_by_mme_ue_s1ap_id(ies->mme_ue_s1ap_id);
|
||||
d_assert(enb_ue, return, "No UE Context[%d]", ies->mme_ue_s1ap_id);
|
||||
|
||||
d_info("[S1AP] UE Context Release Complete : "
|
||||
"UE[mME-UE-S1AP-ID(%d)] --> eNB[%s:%d]",
|
||||
d_trace(3, "[S1AP] UE Context Release Complete : "
|
||||
"UE[mME-UE-S1AP-ID(%d)] --> eNB[%s:%d]\n",
|
||||
enb_ue->mme_ue_s1ap_id,
|
||||
INET_NTOP(&enb->s1ap_sock->remote.sin_addr.s_addr, buf),
|
||||
enb->enb_id);
|
||||
|
|
|
@ -14,7 +14,7 @@ void s1ap_state_initial(fsm_t *s, event_t *e)
|
|||
{
|
||||
d_assert(s, return, "Null param");
|
||||
|
||||
mme_sm_trace(1, e);
|
||||
mme_sm_trace(3, e);
|
||||
|
||||
FSM_TRAN(s, &s1ap_state_operational);
|
||||
}
|
||||
|
@ -23,7 +23,7 @@ void s1ap_state_final(fsm_t *s, event_t *e)
|
|||
{
|
||||
d_assert(s, return, "Null param");
|
||||
|
||||
mme_sm_trace(1, e);
|
||||
mme_sm_trace(3, e);
|
||||
}
|
||||
|
||||
void s1ap_state_operational(fsm_t *s, event_t *e)
|
||||
|
@ -31,7 +31,7 @@ void s1ap_state_operational(fsm_t *s, event_t *e)
|
|||
d_assert(s, return, "Null param");
|
||||
d_assert(e, return, "Null param");
|
||||
|
||||
mme_sm_trace(1, e);
|
||||
mme_sm_trace(3, e);
|
||||
|
||||
switch (event_get(e))
|
||||
{
|
||||
|
@ -203,7 +203,7 @@ void s1ap_state_exception(fsm_t *s, event_t *e)
|
|||
d_assert(s, return, "Null param");
|
||||
d_assert(e, return, "Null param");
|
||||
|
||||
mme_sm_trace(1, e);
|
||||
mme_sm_trace(3, e);
|
||||
|
||||
switch (event_get(e))
|
||||
{
|
||||
|
|
|
@ -49,10 +49,10 @@ status_t pgw_context_final()
|
|||
gtp_xact_delete_all(&self.s5c_node);
|
||||
pgw_sess_remove_all();
|
||||
|
||||
d_print("%d not freed in pgw_sess_pool[%d] in PGW-Context\n",
|
||||
d_trace(1, "%d not freed in pgw_sess_pool[%d] in PGW-Context\n",
|
||||
index_size(&pgw_sess_pool) - pool_avail(&pgw_sess_pool),
|
||||
index_size(&pgw_sess_pool));
|
||||
d_print("%d not freed in pgw_ip_pool[%d] in PGW-Context\n",
|
||||
d_trace(1, "%d not freed in pgw_ip_pool[%d] in PGW-Context\n",
|
||||
index_size(&pgw_ip_pool_pool) - pool_avail(&pgw_ip_pool_pool),
|
||||
index_size(&pgw_ip_pool_pool));
|
||||
|
||||
|
@ -399,26 +399,13 @@ status_t pgw_context_parse_config()
|
|||
|
||||
status_t pgw_context_setup_trace_module()
|
||||
{
|
||||
int context = context_self()->trace_level.context;
|
||||
int sm = context_self()->trace_level.sm;
|
||||
int others = context_self()->trace_level.others;
|
||||
int gtp = context_self()->trace_level.gtp;
|
||||
|
||||
if (context)
|
||||
{
|
||||
extern int _context;
|
||||
d_trace_level(&_context, context);
|
||||
extern int _pgw_context;
|
||||
d_trace_level(&_pgw_context, context);
|
||||
}
|
||||
|
||||
if (sm)
|
||||
{
|
||||
extern int _pgw_sm;
|
||||
d_trace_level(&_pgw_sm, sm);
|
||||
}
|
||||
|
||||
if (gtp)
|
||||
{
|
||||
extern int _pgw_sm;
|
||||
d_trace_level(&_pgw_sm, gtp);
|
||||
extern int _pgw_handler;
|
||||
d_trace_level(&_pgw_handler, gtp);
|
||||
extern int _gtp_path;
|
||||
|
@ -431,6 +418,19 @@ status_t pgw_context_setup_trace_module()
|
|||
d_trace_level(&_gtp_xact, gtp);
|
||||
}
|
||||
|
||||
if (others)
|
||||
{
|
||||
extern int _mutex;
|
||||
d_trace_level(&_mutex, others);
|
||||
extern int _pkbuf;
|
||||
d_trace_level(&_pkbuf, others);
|
||||
|
||||
extern int _context;
|
||||
d_trace_level(&_context, others);
|
||||
extern int _pgw_context;
|
||||
d_trace_level(&_pgw_context, others);
|
||||
}
|
||||
|
||||
return CORE_OK;
|
||||
}
|
||||
|
||||
|
|
|
@ -182,8 +182,8 @@ void pgw_handle_create_session_request(
|
|||
bearer->sgw_s5u_teid = ntohl(sgw_s5u_teid->teid);
|
||||
bearer->sgw_s5u_addr = sgw_s5u_teid->ipv4_addr;
|
||||
|
||||
d_info("[GTP] Create Session Reqeust : "
|
||||
"SGW[%d] --> PGW", sess->sgw_s5c_teid);
|
||||
d_trace(3, "[GTP] Create Session Reqeust : "
|
||||
"SGW[%d] --> PGW\n", sess->sgw_s5c_teid);
|
||||
|
||||
/* Send Control Plane(UL) : PGW-S5C */
|
||||
memset(&pgw_s5c_teid, 0, sizeof(gtp_f_teid_t));
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
|
||||
void pgw_state_initial(fsm_t *s, event_t *e)
|
||||
{
|
||||
pgw_sm_trace(1, e);
|
||||
pgw_sm_trace(3, e);
|
||||
|
||||
d_assert(s, return, "Null param");
|
||||
|
||||
|
@ -18,7 +18,7 @@ void pgw_state_initial(fsm_t *s, event_t *e)
|
|||
|
||||
void pgw_state_final(fsm_t *s, event_t *e)
|
||||
{
|
||||
pgw_sm_trace(1, e);
|
||||
pgw_sm_trace(3, e);
|
||||
|
||||
d_assert(s, return, "Null param");
|
||||
}
|
||||
|
@ -27,7 +27,7 @@ void pgw_state_operational(fsm_t *s, event_t *e)
|
|||
{
|
||||
status_t rv;
|
||||
|
||||
pgw_sm_trace(1, e);
|
||||
pgw_sm_trace(3, e);
|
||||
|
||||
d_assert(s, return, "Null param");
|
||||
|
||||
|
|
|
@ -50,7 +50,7 @@ status_t sgw_context_final()
|
|||
|
||||
sgw_sess_remove_all();
|
||||
|
||||
d_print("%d not freed in sgw_sess_pool[%d] in SGW-Context\n",
|
||||
d_trace(1, "%d not freed in sgw_sess_pool[%d] in SGW-Context\n",
|
||||
index_size(&sgw_sess_pool) - pool_avail(&sgw_sess_pool),
|
||||
index_size(&sgw_sess_pool));
|
||||
index_final(&sgw_bearer_pool);
|
||||
|
@ -391,26 +391,13 @@ status_t sgw_context_parse_config()
|
|||
|
||||
status_t sgw_context_setup_trace_module()
|
||||
{
|
||||
int context = context_self()->trace_level.context;
|
||||
int sm = context_self()->trace_level.sm;
|
||||
int gtp = context_self()->trace_level.gtp;
|
||||
|
||||
if (context)
|
||||
{
|
||||
extern int _context;
|
||||
d_trace_level(&_context, context);
|
||||
extern int _sgw_context;
|
||||
d_trace_level(&_sgw_context, context);
|
||||
}
|
||||
|
||||
if (sm)
|
||||
{
|
||||
extern int _sgw_sm;
|
||||
d_trace_level(&_sgw_sm, sm);
|
||||
}
|
||||
int others = context_self()->trace_level.others;
|
||||
|
||||
if (gtp)
|
||||
{
|
||||
extern int _sgw_sm;
|
||||
d_trace_level(&_sgw_sm, gtp);
|
||||
extern int _sgw_handler;
|
||||
d_trace_level(&_sgw_handler, gtp);
|
||||
extern int _gtp_path;
|
||||
|
@ -423,6 +410,19 @@ status_t sgw_context_setup_trace_module()
|
|||
d_trace_level(&_gtp_xact, gtp);
|
||||
}
|
||||
|
||||
if (others)
|
||||
{
|
||||
extern int _mutex;
|
||||
d_trace_level(&_mutex, others);
|
||||
extern int _pkbuf;
|
||||
d_trace_level(&_pkbuf, others);
|
||||
|
||||
extern int _context;
|
||||
d_trace_level(&_context, others);
|
||||
extern int _sgw_context;
|
||||
d_trace_level(&_sgw_context, others);
|
||||
}
|
||||
|
||||
return CORE_OK;
|
||||
}
|
||||
|
||||
|
|
|
@ -85,8 +85,8 @@ void sgw_handle_create_session_request(
|
|||
d_assert(sgw_s5c_send_to_pgw(xact, type, 0, pkbuf) == CORE_OK,
|
||||
return, "failed to send message");
|
||||
|
||||
d_info("[GTP] Create Session Reqeust : "
|
||||
"SGW[%d] --> PGW", sess->sgw_s5c_teid);
|
||||
d_trace(3, "[GTP] Create Session Reqeust : "
|
||||
"SGW[%d] --> PGW\n", sess->sgw_s5c_teid);
|
||||
}
|
||||
|
||||
void sgw_handle_create_session_response(gtp_xact_t *xact,
|
||||
|
@ -174,8 +174,8 @@ void sgw_handle_create_session_response(gtp_xact_t *xact,
|
|||
d_assert(sgw_s11_send_to_mme(xact, GTP_CREATE_SESSION_RESPONSE_TYPE,
|
||||
sess->mme_s11_teid, pkbuf) == CORE_OK, return,
|
||||
"failed to send message");
|
||||
d_info("[GTP] Create Session Response : "
|
||||
"SGW[%d] <-- PGW[%d]", sess->sgw_s5c_teid, sess->pgw_s5c_teid);
|
||||
d_trace(3, "[GTP] Create Session Response : "
|
||||
"SGW[%d] <-- PGW[%d]\n", sess->sgw_s5c_teid, sess->pgw_s5c_teid);
|
||||
}
|
||||
|
||||
CORE_DECLARE(void) sgw_handle_modify_bearer_request(gtp_xact_t *xact,
|
||||
|
@ -235,8 +235,8 @@ CORE_DECLARE(void) sgw_handle_modify_bearer_request(gtp_xact_t *xact,
|
|||
sess->mme_s11_teid, pkbuf) == CORE_OK, return,
|
||||
"failed to send message");
|
||||
|
||||
d_info("[GTP] Modify Bearer Reqeust : "
|
||||
"MME[%d] --> SGW[%d]", sess->mme_s11_teid, sess->sgw_s11_teid);
|
||||
d_trace(3, "[GTP] Modify Bearer Reqeust : "
|
||||
"MME[%d] --> SGW[%d]\n", sess->mme_s11_teid, sess->sgw_s11_teid);
|
||||
}
|
||||
|
||||
void sgw_handle_delete_session_request(gtp_xact_t *xact,
|
||||
|
@ -256,8 +256,8 @@ void sgw_handle_delete_session_request(gtp_xact_t *xact,
|
|||
sess->pgw_s5c_teid, pkbuf) == CORE_OK,
|
||||
return, "failed to send message");
|
||||
|
||||
d_info("[GTP] Delete Session Reqeust : "
|
||||
"SGW[%d] --> PGW[%d]", sess->sgw_s5c_teid, sess->pgw_s5c_teid);
|
||||
d_trace(3, "[GTP] Delete Session Reqeust : "
|
||||
"SGW[%d] --> PGW[%d]\n", sess->sgw_s5c_teid, sess->pgw_s5c_teid);
|
||||
}
|
||||
|
||||
void sgw_handle_delete_session_response(gtp_xact_t *xact,
|
||||
|
@ -287,8 +287,8 @@ void sgw_handle_delete_session_response(gtp_xact_t *xact,
|
|||
/* Remove a pgw session */
|
||||
if (sess)
|
||||
{
|
||||
d_info("[GTP] Delete Session Response : "
|
||||
"SGW[%d] --> PGW[%d]", sess->sgw_s5c_teid, sess->pgw_s5c_teid);
|
||||
d_trace(3, "[GTP] Delete Session Response : "
|
||||
"SGW[%d] --> PGW[%d]\n", sess->sgw_s5c_teid, sess->pgw_s5c_teid);
|
||||
|
||||
/* backup sgw_s5c_teid in session context */
|
||||
mme_s11_teid = sess->mme_s11_teid;
|
||||
|
@ -344,6 +344,6 @@ void sgw_handle_release_access_bearers_request(gtp_xact_t *xact,
|
|||
sess->mme_s11_teid, pkbuf) == CORE_OK, return,
|
||||
"failed to send message");
|
||||
|
||||
d_info("[GTP] Release Access Bearers Reqeust : "
|
||||
"MME[%d] --> SGW[%d]", sess->mme_s11_teid, sess->sgw_s11_teid);
|
||||
d_trace(3, "[GTP] Release Access Bearers Reqeust : "
|
||||
"MME[%d] --> SGW[%d]\n", sess->mme_s11_teid, sess->sgw_s11_teid);
|
||||
}
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
|
||||
void sgw_state_initial(fsm_t *s, event_t *e)
|
||||
{
|
||||
sgw_sm_trace(1, e);
|
||||
sgw_sm_trace(3, e);
|
||||
|
||||
d_assert(s, return, "Null param");
|
||||
|
||||
|
@ -17,7 +17,7 @@ void sgw_state_initial(fsm_t *s, event_t *e)
|
|||
|
||||
void sgw_state_final(fsm_t *s, event_t *e)
|
||||
{
|
||||
sgw_sm_trace(1, e);
|
||||
sgw_sm_trace(3, e);
|
||||
|
||||
d_assert(s, return, "Null param");
|
||||
}
|
||||
|
@ -26,7 +26,7 @@ void sgw_state_operational(fsm_t *s, event_t *e)
|
|||
{
|
||||
status_t rv;
|
||||
|
||||
sgw_sm_trace(1, e);
|
||||
sgw_sm_trace(3, e);
|
||||
|
||||
d_assert(s, return, "Null param");
|
||||
|
||||
|
|
|
@ -3,12 +3,11 @@
|
|||
LOG_PATH : "@prefix@/var/log/nextepc.log",
|
||||
TRACE:
|
||||
{
|
||||
CONTEXT: 1,
|
||||
SM: 1,
|
||||
S1AP: 1,
|
||||
NAS: 1,
|
||||
S6A: 1,
|
||||
GTP: 1,
|
||||
OTHERS: 1,
|
||||
}
|
||||
|
||||
HSS :
|
||||
|
|
|
@ -429,8 +429,8 @@ int main(int argc, const char *const argv[]) {
|
|||
int list_provided = 0;
|
||||
abts_suite *suite = NULL;
|
||||
|
||||
d_trace_global_off();
|
||||
test_initialize();
|
||||
d_trace_global_off();
|
||||
|
||||
quiet = !isatty(STDOUT_FILENO);
|
||||
|
||||
|
|
|
@ -14,13 +14,17 @@
|
|||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#include "core_general.h"
|
||||
#include "core_debug.h"
|
||||
#include "core_semaphore.h"
|
||||
#include "s6a_lib.h"
|
||||
|
||||
#include "app.h"
|
||||
#include "mme_context.h"
|
||||
#include "abts.h"
|
||||
#include "testutil.h"
|
||||
|
||||
#if 0
|
||||
void core_assert_ok(abts_case* tc, const char* context, status_t rv,
|
||||
int lineno)
|
||||
{
|
||||
|
@ -35,16 +39,45 @@ void core_assert_ok(abts_case* tc, const char* context, status_t rv,
|
|||
abts_fail(tc, buf, lineno);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
static semaphore_id test_sem;
|
||||
static void test_s6a_hook_handler(enum fd_hook_type type, struct msg * msg,
|
||||
struct peer_hdr * peer, void * other, struct fd_hook_permsgdata *pmd,
|
||||
void * regdata)
|
||||
{
|
||||
if (type == HOOK_PEER_CONNECT_SUCCESS)
|
||||
{
|
||||
d_assert(semaphore_post(test_sem) == CORE_OK,,
|
||||
"semaphore_post() failed");
|
||||
}
|
||||
}
|
||||
|
||||
void test_terminate(void)
|
||||
{
|
||||
d_trace_global_on();
|
||||
|
||||
app_terminate();
|
||||
core_terminate();
|
||||
}
|
||||
|
||||
void test_initialize(void)
|
||||
{
|
||||
s6a_hook_register(test_s6a_hook_handler);
|
||||
|
||||
core_initialize();
|
||||
d_assert(semaphore_create(&test_sem, 0) == CORE_OK,
|
||||
return, "semaphore_create() failed");
|
||||
|
||||
app_initialize(NULL, NULL);
|
||||
|
||||
d_assert(semaphore_wait(test_sem) == CORE_OK, return,
|
||||
"semaphore_wait() failed");
|
||||
d_assert(semaphore_wait(test_sem) == CORE_OK, return,
|
||||
"semaphore_wait() failed");
|
||||
d_assert(semaphore_delete(test_sem) == CORE_OK, return,
|
||||
"semaphore_delete() failed");
|
||||
|
||||
atexit(test_terminate);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue