Fix release access bearer #592

This commit is contained in:
Sukchan Lee 2020-10-01 13:27:58 -04:00
parent b6395b870e
commit 88399da5b6
36 changed files with 178 additions and 201 deletions

View File

@ -251,7 +251,7 @@ parameter:
# max:
#
# o Maximum Number of UE per AMF/MME
# ue: 4,096
# ue: 1024
# o Maximum Number of gNB/eNB per AMF/MME
# gnb: 32
#

View File

@ -127,7 +127,7 @@ parameter:
# max:
#
# o Maximum Number of UE per AMF/MME
# ue: 4,096
# ue: 1024
# o Maximum Number of gNB/eNB per AMF/MME
# gnb: 32
#

View File

@ -53,7 +53,7 @@ parameter:
# max:
#
# o Maximum Number of UE per AMF/MME
# ue: 4,096
# ue: 1024
# o Maximum Number of gNB/eNB per AMF/MME
# gnb: 32
#

View File

@ -355,7 +355,7 @@ parameter:
# max:
#
# o Maximum Number of UE per AMF/MME
# ue: 4,096
# ue: 1024
# o Maximum Number of gNB/eNB per AMF/MME
# gnb: 32
#

View File

@ -97,7 +97,7 @@ parameter:
# max:
#
# o Maximum Number of UE per AMF/MME
# ue: 4,096
# ue: 1024
# o Maximum Number of gNB/eNB per AMF/MME
# gnb: 32
#

View File

@ -52,7 +52,7 @@ parameter:
# max:
#
# o Maximum Number of UE per AMF/MME
# ue: 4,096
# ue: 1024
# o Maximum Number of gNB/eNB per AMF/MME
# gnb: 32
#

View File

@ -134,7 +134,7 @@ parameter:
# max:
#
# o Maximum Number of UE per AMF/MME
# ue: 4,096
# ue: 1024
# o Maximum Number of gNB/eNB per AMF/MME
# gnb: 32
#

View File

@ -94,7 +94,7 @@ parameter:
# max:
#
# o Maximum Number of UE per AMF/MME
# ue: 4,096
# ue: 1024
# o Maximum Number of gNB/eNB per AMF/MME
# gnb: 32
#
@ -121,10 +121,4 @@ max:
# 8192: 128
# big: 8
#
# o Memory of Packet Buffering in UPF/SGW
# - Maximum Number of packet(SDU size = 2Kbytes) pool in UPF/SGW
# - UPF/SGW Memory Usage : 32768 * 2Kbytes = 64Mbytes
#
# packet: 32768
#
pool:

View File

@ -316,7 +316,7 @@ parameter:
# max:
#
# o Maximum Number of UE per AMF/MME
# ue: 4,096
# ue: 1024
# o Maximum Number of gNB/eNB per AMF/MME
# gnb: 32
#

View File

@ -127,7 +127,7 @@ parameter:
# max:
#
# o Maximum Number of UE per AMF/MME
# ue: 4,096
# ue: 1024
# o Maximum Number of gNB/eNB per AMF/MME
# gnb: 32
#

View File

@ -129,7 +129,7 @@ parameter:
# max:
#
# o Maximum Number of UE per AMF/MME
# ue: 4,096
# ue: 1024
# o Maximum Number of gNB/eNB per AMF/MME
# gnb: 32
#

View File

@ -182,7 +182,7 @@ parameter:
# max:
#
# o Maximum Number of UE per AMF/MME
# ue: 4,096
# ue: 1024
# o Maximum Number of gNB/eNB per AMF/MME
# gnb: 32
#
@ -209,9 +209,4 @@ max:
# 8192: 128
# big: 8
#
# o Memory of Packet Buffering in UPF/SGW
# - Maximum Number of packet(SDU size = 2Kbytes) pool in UPF/SGW
# - UPF/SGW Memory Usage : 32768 * 2Kbytes = 64Mbytes
#
# packet: 32768
pool:

View File

@ -73,6 +73,7 @@ static void recalculate_pool_size(void)
self.pool.timer = self.max.ue * MAX_NUM_OF_TIMER;
self.pool.nf = self.max.gnb;
self.pool.packet = self.max.ue * OGS_MAX_NUM_OF_PACKET_BUFFER;
#define MAX_NUM_OF_SOCKET 4 /* Num of socket per NF */
self.pool.socket = self.pool.nf * MAX_NUM_OF_SOCKET;
@ -146,25 +147,6 @@ static void regenerate_all_timer_duration(void)
self.time.message.gtp.n3_response_rcount *
self.time.message.gtp.t3_response_duration;
ogs_assert(self.time.message.gtp.t3_holding_duration);
#if 0
ogs_trace("%lld, %lld, %lld, %d, %lld, %d %lld, %d, %lld, %d, %lld",
(long long)self.time.message.duration,
(long long)self.time.message.sbi.client_wait_duration,
(long long)self.time.message.sbi.connection_deadline,
self.time.message.pfcp.n1_response_rcount,
(long long)self.time.message.pfcp.t1_response_duration,
self.time.message.pfcp.n1_holding_rcount,
(long long)self.time.message.pfcp.t1_holding_duration,
self.time.message.gtp.n3_response_rcount,
(long long)self.time.message.gtp.t3_response_duration,
self.time.message.gtp.n3_holding_rcount,
(long long)self.time.message.gtp.t3_holding_duration);
ogs_trace("%lld, %lld, %lld",
(long long)self.time.message.sbi.nf_register_interval,
(long long)self.time.message.pfcp.association_interval,
(long long)self.time.message.pfcp.no_heartbeat_duration);
#endif
}
static void app_context_prepare(void)
@ -172,15 +154,12 @@ static void app_context_prepare(void)
#define USRSCTP_LOCAL_UDP_PORT 9899
self.usrsctp.udp_port = USRSCTP_LOCAL_UDP_PORT;
#define MAX_NUM_OF_UE 4096 /* Num of UE per AMF/MME */
#define MAX_NUM_OF_UE 1024 /* Num of UE per AMF/MME */
#define MAX_NUM_OF_GNB 32 /* Num of gNB per AMF/MME */
self.max.gnb = MAX_NUM_OF_GNB;
self.max.ue = MAX_NUM_OF_UE;
#define MAX_NUM_OF_PACKET_POOL 32768
self.pool.packet = MAX_NUM_OF_PACKET_POOL;
ogs_pkbuf_default_init(&self.pool.defconfig);
recalculate_pool_size();
@ -410,10 +389,6 @@ int ogs_app_context_parse_config(void)
const char *v = ogs_yaml_iter_value(&pool_iter);
if (v)
self.pool.defconfig.cluster_big_pool = atoi(v);
} else if (!strcmp(pool_key, "packet")) {
const char *v = ogs_yaml_iter_value(&pool_iter);
if (v)
self.pool.packet = atoi(v);
} else
ogs_warn("unknown key `%s`", pool_key);
}

View File

@ -32,6 +32,7 @@ extern "C" {
#define OGS_MAX_NUM_OF_BEARER 4 /* Num of Bearer per Session */
#define OGS_MAX_NUM_OF_RULE 4 /* Num of Rule per Session */
#define OGS_MAX_NUM_OF_PF 16 /* Num of PacketFilter per Bearer */
#define OGS_MAX_NUM_OF_PACKET_BUFFER 64 /* Num of PacketBuffer per UE */
/* Num of PacketFilter per Bearer(GTP) or QoS(NAS-5GS) */
#define OGS_MAX_NUM_OF_PACKET_FILTER 16

View File

@ -494,6 +494,16 @@ ED2(uint8_t spare:6;,
#define OGS_GTP_NODE_TYPE_MME 0
#define OGS_GTP_NODE_TYPE_SGSN 1
/* 8.86 Allocation/Retention Priority (ARP) */
typedef struct ogs_gtp_arp_s {
#define OGS_GTP_TIME_TO_BCD(x) OGS_TIME_TO_BCD(x)
ED5(uint8_t spare1:1;,
uint8_t pre_emption_vulnerability:1;,
uint8_t priority_level:4;,
uint8_t spare2:1;,
uint8_t pre_emption_capability:1;)
} __attribute__ ((packed)) ogs_gtp_arp_t;
#ifdef __cplusplus
}
#endif

View File

@ -165,9 +165,8 @@ typedef struct ogs_pfcp_far_s {
ogs_pfcp_smreq_flags_t smreq_flags;
#define MAX_NUM_OF_PACKET_BUFFER 64
uint32_t num_of_buffered_packet;
ogs_pkbuf_t* buffered_packet[MAX_NUM_OF_PACKET_BUFFER];
ogs_pkbuf_t* buffered_packet[OGS_MAX_NUM_OF_PACKET_BUFFER];
/* Related Context */
ogs_pfcp_sess_t *sess;

View File

@ -168,8 +168,10 @@ void ogs_pfcp_up_handle_pdr(
report->type.downlink_data_report = 1;
}
if (far->num_of_buffered_packet < MAX_NUM_OF_PACKET_BUFFER) {
if (far->num_of_buffered_packet < OGS_MAX_NUM_OF_PACKET_BUFFER) {
far->buffered_packet[far->num_of_buffered_packet++] = sendbuf;
} else {
ogs_pkbuf_free(sendbuf);
}
}
}

View File

@ -171,7 +171,7 @@ int nas_5gs_security_decode(amf_ue_t *amf_ue,
memcpy(&mac32, mac, NAS_SECURITY_MAC_SIZE);
if (h->message_authentication_code != mac32) {
ogs_warn("NAS MAC verification failed(0x%x != 0x%x)",
ntohl(h->message_authentication_code), ntohl(mac32));
be32toh(h->message_authentication_code), be32toh(mac32));
amf_ue->mac_failed = 1;
}
}

View File

@ -45,7 +45,7 @@ ogs_pkbuf_t *emm_build_attach_accept(
ogs_assert(mme_ue);
ogs_assert(esmbuf);
ogs_debug("[EMM] Attach accept");
ogs_debug("Attach accept");
memset(&message, 0, sizeof(message));
message.h.security_header_type =
@ -342,7 +342,7 @@ ogs_pkbuf_t *emm_build_detach_accept(mme_ue_t *mme_ue)
OGS_NAS_SECURITY_HEADER_INTEGRITY_PROTECTED_AND_CIPHERED;
message.h.protocol_discriminator = OGS_NAS_PROTOCOL_DISCRIMINATOR_EMM;
ogs_debug("[EMM] Detach accept");
ogs_debug("Detach accept");
ogs_debug(" IMSI[%s]", mme_ue->imsi_bcd);
message.emm.h.protocol_discriminator = OGS_NAS_PROTOCOL_DISCRIMINATOR_EMM;
@ -459,7 +459,7 @@ ogs_pkbuf_t *emm_build_tau_reject(
ogs_assert(mme_ue);
ogs_debug("[EMM] Tracking area update reject");
ogs_debug("Tracking area update reject");
ogs_debug(" IMSI[%s] Cause[%d]",
MME_UE_HAVE_IMSI(mme_ue) ? mme_ue->imsi_bcd : "Unknown", emm_cause);
@ -480,7 +480,7 @@ ogs_pkbuf_t *emm_build_service_reject(
ogs_assert(mme_ue);
ogs_debug("[EMM] Service reject");
ogs_debug("Service reject");
ogs_debug(" Cause[%d]", emm_cause);
memset(&message, 0, sizeof(message));

View File

@ -293,7 +293,7 @@ int emm_handle_attach_complete(
ogs_expect(rv == OGS_OK);
}
ogs_debug("[EMM] EMM information");
ogs_debug("EMM information");
ogs_debug(" IMSI[%s]", mme_ue->imsi_bcd);
return OGS_OK;

View File

@ -120,7 +120,7 @@ static void common_register_state(ogs_fsm_t *s, mme_event_t *e)
if (message->emm.h.security_header_type
== OGS_NAS_SECURITY_HEADER_FOR_SERVICE_REQUEST_MESSAGE) {
ogs_debug("[EMM] Service request");
ogs_debug("Service request");
rv = emm_handle_service_request(
mme_ue, &message->emm.service_request);
if (rv != OGS_OK) {
@ -130,7 +130,7 @@ static void common_register_state(ogs_fsm_t *s, mme_event_t *e)
}
if (!MME_UE_HAVE_IMSI(mme_ue)) {
ogs_info("[EMM] Service request : Unknown UE");
ogs_info("Service request : Unknown UE");
nas_eps_send_service_reject(mme_ue,
EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK);
OGS_FSM_TRAN(s, &emm_state_exception);
@ -160,7 +160,7 @@ static void common_register_state(ogs_fsm_t *s, mme_event_t *e)
switch (message->emm.h.message_type) {
case OGS_NAS_EPS_IDENTITY_RESPONSE:
ogs_debug("[EMM] Identity response");
ogs_debug("Identity response");
CLEAR_MME_UE_TIMER(mme_ue->t3470);
rv = emm_handle_identity_response(mme_ue,
@ -188,7 +188,7 @@ static void common_register_state(ogs_fsm_t *s, mme_event_t *e)
break;
case OGS_NAS_EPS_ATTACH_REQUEST:
ogs_debug("[EMM] Attach request[%s]", mme_ue->imsi_bcd);
ogs_debug("Attach request[%s]", mme_ue->imsi_bcd);
rv = emm_handle_attach_request(
mme_ue, &message->emm.attach_request, e->pkbuf);
if (rv != OGS_OK) {
@ -226,7 +226,7 @@ static void common_register_state(ogs_fsm_t *s, mme_event_t *e)
break;
case OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST:
ogs_debug("[EMM] Tracking area update request");
ogs_debug("Tracking area update request");
rv = emm_handle_tau_request(mme_ue,
&message->emm.tracking_area_update_request, e->pkbuf);
if (rv != OGS_OK) {
@ -236,7 +236,7 @@ static void common_register_state(ogs_fsm_t *s, mme_event_t *e)
}
if (!MME_UE_HAVE_IMSI(mme_ue)) {
ogs_info("[EMM] TAU request : Unknown UE");
ogs_info("TAU request : Unknown UE");
nas_eps_send_tau_reject(mme_ue,
EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK);
OGS_FSM_TRAN(s, &emm_state_exception);
@ -281,12 +281,12 @@ static void common_register_state(ogs_fsm_t *s, mme_event_t *e)
break;
case OGS_NAS_EPS_TRACKING_AREA_UPDATE_COMPLETE:
ogs_debug("[EMM] Tracking area update complete");
ogs_debug("Tracking area update complete");
ogs_debug(" IMSI[%s]", mme_ue->imsi_bcd);
break;
case OGS_NAS_EPS_EXTENDED_SERVICE_REQUEST:
ogs_debug("[EMM] Extended service request");
ogs_debug("Extended service request");
rv = emm_handle_extended_service_request(
mme_ue, &message->emm.extended_service_request);
if (rv != OGS_OK) {
@ -296,7 +296,7 @@ static void common_register_state(ogs_fsm_t *s, mme_event_t *e)
}
if (!MME_UE_HAVE_IMSI(mme_ue)) {
ogs_warn("[EMM] Extended Service request : Unknown UE");
ogs_warn("Extended Service request : Unknown UE");
nas_eps_send_service_reject(mme_ue,
EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK);
OGS_FSM_TRAN(s, &emm_state_exception);
@ -384,14 +384,14 @@ static void common_register_state(ogs_fsm_t *s, mme_event_t *e)
break;
case OGS_NAS_EPS_EMM_STATUS:
ogs_warn("[EMM] EMM STATUS : IMSI[%s] Cause[%d]",
ogs_warn("EMM STATUS : IMSI[%s] Cause[%d]",
mme_ue->imsi_bcd,
message->emm.emm_status.emm_cause);
OGS_FSM_TRAN(s, &emm_state_exception);
break;
case OGS_NAS_EPS_DETACH_REQUEST:
ogs_debug("[EMM] Detach request");
ogs_debug("Detach request");
ogs_debug(" IMSI[%s]", mme_ue->imsi_bcd);
rv = emm_handle_detach_request(
mme_ue, &message->emm.detach_request_from_ue);
@ -411,7 +411,7 @@ static void common_register_state(ogs_fsm_t *s, mme_event_t *e)
break;
case OGS_NAS_EPS_UPLINK_NAS_TRANSPORT:
ogs_debug("[EMM] Uplink NAS Transport");
ogs_debug("Uplink NAS Transport");
ogs_debug(" IMSI[%s]", mme_ue->imsi_bcd);
if (MME_SGSAP_IS_CONNECTED(mme_ue)) {
sgsap_send_uplink_unitdata(mme_ue, &message->emm.
@ -431,6 +431,12 @@ static void common_register_state(ogs_fsm_t *s, mme_event_t *e)
}
break;
case OGS_NAS_EPS_ATTACH_COMPLETE:
ogs_warn("[%s] should not send Attach-Complete"
" if GUTI is not present in Attach-Accept",
mme_ue->imsi_bcd ? mme_ue->imsi_bcd : "Unknown");
break;
default:
ogs_warn("Unknown message[%d]", message->emm.h.message_type);
}
@ -442,7 +448,7 @@ static void common_register_state(ogs_fsm_t *s, mme_event_t *e)
if (mme_ue->t3413.retry_count >=
mme_timer_cfg(MME_TIMER_T3413)->max_count) {
/* Paging failed */
ogs_warn("[EMM] Paging to IMSI[%s] failed. Stop paging",
ogs_warn("Paging to IMSI[%s] failed. Stop paging",
mme_ue->imsi_bcd);
CLEAR_MME_UE_TIMER(mme_ue->t3413);
@ -468,7 +474,7 @@ static void common_register_state(ogs_fsm_t *s, mme_event_t *e)
case MME_TIMER_T3470:
if (mme_ue->t3470.retry_count >=
mme_timer_cfg(MME_TIMER_T3470)->max_count) {
ogs_warn("[EMM] Retransmission of Identity-Request failed. "
ogs_warn("Retransmission of Identity-Request failed. "
"Stop retransmission");
CLEAR_MME_UE_TIMER(mme_ue->t3470);
OGS_FSM_TRAN(&mme_ue->sm, &emm_state_exception);
@ -522,7 +528,7 @@ void emm_state_authentication(ogs_fsm_t *s, mme_event_t *e)
&authentication_response->
authentication_response_parameter;
ogs_debug("[EMM] Authentication response");
ogs_debug("Authentication response");
ogs_debug(" IMSI[%s]", mme_ue->imsi_bcd);
CLEAR_MME_UE_TIMER(mme_ue->t3460);
@ -553,7 +559,7 @@ void emm_state_authentication(ogs_fsm_t *s, mme_event_t *e)
&authentication_failure->
authentication_failure_parameter;
ogs_debug("[EMM] Authentication failure");
ogs_debug("Authentication failure");
ogs_debug(" IMSI[%s] EMM_CAUSE[%d]", mme_ue->imsi_bcd,
authentication_failure->emm_cause);
@ -585,7 +591,7 @@ void emm_state_authentication(ogs_fsm_t *s, mme_event_t *e)
break;
}
case OGS_NAS_EPS_ATTACH_REQUEST:
ogs_warn("[EMM] Attach request[%s]", mme_ue->imsi_bcd);
ogs_warn("Attach request[%s]", mme_ue->imsi_bcd);
rv = emm_handle_attach_request(
mme_ue, &message->emm.attach_request, e->pkbuf);
if (rv != OGS_OK) {
@ -598,13 +604,13 @@ void emm_state_authentication(ogs_fsm_t *s, mme_event_t *e)
OGS_FSM_TRAN(s, &emm_state_authentication);
break;
case OGS_NAS_EPS_EMM_STATUS:
ogs_warn("[EMM] EMM STATUS : IMSI[%s] Cause[%d]",
ogs_warn("EMM STATUS : IMSI[%s] Cause[%d]",
mme_ue->imsi_bcd,
message->emm.emm_status.emm_cause);
OGS_FSM_TRAN(s, &emm_state_exception);
break;
case OGS_NAS_EPS_DETACH_REQUEST:
ogs_debug("[EMM] Detach request");
ogs_debug("Detach request");
ogs_debug(" IMSI[%s]", mme_ue->imsi_bcd);
rv = emm_handle_detach_request(
mme_ue, &message->emm.detach_request_from_ue);
@ -627,7 +633,7 @@ void emm_state_authentication(ogs_fsm_t *s, mme_event_t *e)
case MME_TIMER_T3460:
if (mme_ue->t3460.retry_count >=
mme_timer_cfg(MME_TIMER_T3460)->max_count) {
ogs_warn("[EMM] Retransmission of IMSI[%s] failed. "
ogs_warn("Retransmission of IMSI[%s] failed. "
"Stop retransmission",
mme_ue->imsi_bcd);
OGS_FSM_TRAN(&mme_ue->sm, &emm_state_exception);
@ -678,7 +684,7 @@ void emm_state_security_mode(ogs_fsm_t *s, mme_event_t *e)
if (message->emm.h.security_header_type
== OGS_NAS_SECURITY_HEADER_FOR_SERVICE_REQUEST_MESSAGE) {
ogs_debug("[EMM] Service request");
ogs_debug("Service request");
nas_eps_send_service_reject(mme_ue,
EMM_CAUSE_SECURITY_MODE_REJECTED_UNSPECIFIED);
OGS_FSM_TRAN(s, &emm_state_exception);
@ -687,7 +693,7 @@ void emm_state_security_mode(ogs_fsm_t *s, mme_event_t *e)
switch (message->emm.h.message_type) {
case OGS_NAS_EPS_SECURITY_MODE_COMPLETE:
ogs_debug("[EMM] Security mode complete");
ogs_debug("Security mode complete");
ogs_debug(" IMSI[%s]", mme_ue->imsi_bcd);
CLEAR_MME_UE_TIMER(mme_ue->t3460);
@ -737,14 +743,14 @@ void emm_state_security_mode(ogs_fsm_t *s, mme_event_t *e)
}
break;
case OGS_NAS_EPS_SECURITY_MODE_REJECT:
ogs_warn("[EMM] Security mode reject : IMSI[%s] Cause[%d]",
ogs_warn("Security mode reject : IMSI[%s] Cause[%d]",
mme_ue->imsi_bcd,
message->emm.security_mode_reject.emm_cause);
CLEAR_MME_UE_TIMER(mme_ue->t3460);
OGS_FSM_TRAN(s, &emm_state_exception);
break;
case OGS_NAS_EPS_ATTACH_REQUEST:
ogs_warn("[EMM] Attach request[%s]", mme_ue->imsi_bcd);
ogs_warn("Attach request[%s]", mme_ue->imsi_bcd);
rv = emm_handle_attach_request(
mme_ue, &message->emm.attach_request, e->pkbuf);
if (rv != OGS_OK) {
@ -757,19 +763,19 @@ void emm_state_security_mode(ogs_fsm_t *s, mme_event_t *e)
OGS_FSM_TRAN(s, &emm_state_authentication);
break;
case OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST:
ogs_debug("[EMM] Tracking area update request");
ogs_debug("Tracking area update request");
nas_eps_send_tau_reject(mme_ue,
EMM_CAUSE_SECURITY_MODE_REJECTED_UNSPECIFIED);
OGS_FSM_TRAN(s, &emm_state_exception);
break;
case OGS_NAS_EPS_EMM_STATUS:
ogs_warn("[EMM] EMM STATUS : IMSI[%s] Cause[%d]",
ogs_warn("EMM STATUS : IMSI[%s] Cause[%d]",
mme_ue->imsi_bcd,
message->emm.emm_status.emm_cause);
OGS_FSM_TRAN(s, &emm_state_exception);
break;
case OGS_NAS_EPS_DETACH_REQUEST:
ogs_debug("[EMM] Detach request");
ogs_debug("Detach request");
ogs_debug(" IMSI[%s]", mme_ue->imsi_bcd);
rv = emm_handle_detach_request(
mme_ue, &message->emm.detach_request_from_ue);
@ -792,7 +798,7 @@ void emm_state_security_mode(ogs_fsm_t *s, mme_event_t *e)
case MME_TIMER_T3460:
if (mme_ue->t3460.retry_count >=
mme_timer_cfg(MME_TIMER_T3460)->max_count) {
ogs_warn("[EMM] Retransmission of IMSI[%s] failed. "
ogs_warn("Retransmission of IMSI[%s] failed. "
"Stop retransmission",
mme_ue->imsi_bcd);
OGS_FSM_TRAN(&mme_ue->sm, &emm_state_exception);
@ -842,7 +848,7 @@ void emm_state_initial_context_setup(ogs_fsm_t *s, mme_event_t *e)
switch (message->emm.h.message_type) {
case OGS_NAS_EPS_ATTACH_COMPLETE:
ogs_debug("[EMM] Attach complete");
ogs_debug("Attach complete");
ogs_debug(" IMSI[%s]", mme_ue->imsi_bcd);
rv = emm_handle_attach_complete(
@ -859,7 +865,7 @@ void emm_state_initial_context_setup(ogs_fsm_t *s, mme_event_t *e)
OGS_FSM_TRAN(s, &emm_state_registered);
break;
case OGS_NAS_EPS_ATTACH_REQUEST:
ogs_warn("[EMM] Attach request[%s]", mme_ue->imsi_bcd);
ogs_warn("Attach request[%s]", mme_ue->imsi_bcd);
rv = emm_handle_attach_request(
mme_ue, &message->emm.attach_request, e->pkbuf);
if (rv != OGS_OK) {
@ -872,13 +878,13 @@ void emm_state_initial_context_setup(ogs_fsm_t *s, mme_event_t *e)
OGS_FSM_TRAN(s, &emm_state_authentication);
break;
case OGS_NAS_EPS_EMM_STATUS:
ogs_warn("[EMM] EMM STATUS : IMSI[%s] Cause[%d]",
ogs_warn("EMM STATUS : IMSI[%s] Cause[%d]",
mme_ue->imsi_bcd,
message->emm.emm_status.emm_cause);
OGS_FSM_TRAN(s, &emm_state_exception);
break;
case OGS_NAS_EPS_DETACH_REQUEST:
ogs_debug("[EMM] Detach request");
ogs_debug("Detach request");
ogs_debug(" IMSI[%s]", mme_ue->imsi_bcd);
rv = emm_handle_detach_request(
mme_ue, &message->emm.detach_request_from_ue);
@ -949,7 +955,7 @@ void emm_state_exception(ogs_fsm_t *s, mme_event_t *e)
switch (message->emm.h.message_type) {
case OGS_NAS_EPS_ATTACH_REQUEST:
ogs_debug("[EMM] Attach request[%s]", mme_ue->imsi_bcd);
ogs_debug("Attach request[%s]", mme_ue->imsi_bcd);
rv = emm_handle_attach_request(
mme_ue, &message->emm.attach_request, e->pkbuf);
if (rv != OGS_OK) {

View File

@ -36,7 +36,7 @@ ogs_pkbuf_t *esm_build_pdn_connectivity_reject(
mme_ue = sess->mme_ue;
ogs_assert(mme_ue);
ogs_debug("[ESM] PDN connectivity reject");
ogs_debug("PDN connectivity reject");
ogs_debug(" IMSI[%s] PTI[%d] Cause[%d]",
mme_ue->imsi_bcd, sess->pti, esm_cause);
@ -71,7 +71,7 @@ ogs_pkbuf_t *esm_build_information_request(mme_bearer_t *bearer)
mme_ue = bearer->mme_ue;
ogs_assert(mme_ue);
ogs_debug("[ESM] ESM information request");
ogs_debug("ESM information request");
ogs_debug(" IMSI[%s] PTI[%d] EBI[%d]",
mme_ue->imsi_bcd, sess->pti, bearer->ebi);
@ -127,7 +127,7 @@ ogs_pkbuf_t *esm_build_activate_default_bearer_context_request(
return NULL;
}
ogs_debug("[ESM] Activate default bearer context request");
ogs_debug("Activate default bearer context request");
ogs_debug(" IMSI[%s] PTI[%d] EBI[%d]",
mme_ue->imsi_bcd, sess->pti, bearer->ebi);
@ -274,7 +274,7 @@ ogs_pkbuf_t *esm_build_activate_dedicated_bearer_context_request(
linked_bearer = mme_linked_bearer(bearer);
ogs_assert(linked_bearer);
ogs_debug("[ESM] Activate dedicated bearer context request");
ogs_debug("Activate dedicated bearer context request");
ogs_debug(" IMSI[%s] EBI[%d] Linked-EBI[%d]",
mme_ue->imsi_bcd, bearer->ebi, linked_bearer->ebi);
@ -322,7 +322,7 @@ ogs_pkbuf_t *esm_build_modify_bearer_context_request(
mme_ue = bearer->mme_ue;
ogs_assert(mme_ue);
ogs_debug("[ESM] Modify bearer context request");
ogs_debug("Modify bearer context request");
ogs_debug(" IMSI[%s] PTI[%d] EBI[%d]",
mme_ue->imsi_bcd, sess->pti, bearer->ebi);
@ -372,7 +372,7 @@ ogs_pkbuf_t *esm_build_deactivate_bearer_context_request(
mme_ue = bearer->mme_ue;
ogs_assert(mme_ue);
ogs_debug("[ESM] Deactivate bearer context request");
ogs_debug("Deactivate bearer context request");
ogs_debug(" IMSI[%s] PTI[%d] EBI[%d]",
mme_ue->imsi_bcd, sess->pti, bearer->ebi);
ogs_debug(" Cause[%d]", esm_cause);
@ -409,7 +409,7 @@ ogs_pkbuf_t *esm_build_bearer_resource_allocation_reject(
mme_ue = sess->mme_ue;
ogs_assert(mme_ue);
ogs_debug("[ESM] Bearer resource allocation reject");
ogs_debug("Bearer resource allocation reject");
ogs_debug(" IMSI[%s] PTI[%d] Cause[%d]",
mme_ue->imsi_bcd, sess->pti, esm_cause);
@ -450,7 +450,7 @@ ogs_pkbuf_t *esm_build_bearer_resource_modification_reject(
mme_ue = sess->mme_ue;
ogs_assert(mme_ue);
ogs_debug("[ESM] Bearer resource modification reject");
ogs_debug("Bearer resource modification reject");
ogs_debug(" IMSI[%s] PTI[%d] Cause[%d]",
mme_ue->imsi_bcd, sess->pti, esm_cause);

View File

@ -79,7 +79,7 @@ void esm_state_inactive(ogs_fsm_t *s, mme_event_t *e)
switch (message->esm.h.message_type) {
case OGS_NAS_EPS_PDN_CONNECTIVITY_REQUEST:
ogs_debug("[ESM] PDN Connectivity request");
ogs_debug("PDN Connectivity request");
ogs_debug(" IMSI[%s] PTI[%d] EBI[%d]",
mme_ue->imsi_bcd, sess->pti, bearer->ebi);
rv = esm_handle_pdn_connectivity_request(
@ -90,7 +90,7 @@ void esm_state_inactive(ogs_fsm_t *s, mme_event_t *e)
}
break;
case OGS_NAS_EPS_ESM_INFORMATION_RESPONSE:
ogs_debug("[ESM] ESM information response");
ogs_debug("ESM information response");
ogs_debug(" IMSI[%s] PTI[%d] EBI[%d]",
mme_ue->imsi_bcd, sess->pti, bearer->ebi);
@ -103,7 +103,7 @@ void esm_state_inactive(ogs_fsm_t *s, mme_event_t *e)
}
break;
case OGS_NAS_EPS_ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_ACCEPT:
ogs_debug("[ESM] Activate default EPS bearer "
ogs_debug("Activate default EPS bearer "
"context accept");
ogs_debug(" IMSI[%s] PTI[%d] EBI[%d]",
mme_ue->imsi_bcd, sess->pti, bearer->ebi);
@ -117,7 +117,7 @@ void esm_state_inactive(ogs_fsm_t *s, mme_event_t *e)
OGS_FSM_TRAN(s, esm_state_active);
break;
case OGS_NAS_EPS_ACTIVATE_DEDICATED_EPS_BEARER_CONTEXT_ACCEPT:
ogs_debug("[ESM] Activate dedicated EPS bearer "
ogs_debug("Activate dedicated EPS bearer "
"context accept");
ogs_debug(" IMSI[%s] PTI[%d] EBI[%d]",
mme_ue->imsi_bcd, sess->pti, bearer->ebi);
@ -140,7 +140,7 @@ void esm_state_inactive(ogs_fsm_t *s, mme_event_t *e)
case MME_TIMER_T3489:
if (bearer->t3489.retry_count >=
mme_timer_cfg(MME_TIMER_T3489)->max_count) {
ogs_warn("[EMM] Retransmission of IMSI[%s] failed. "
ogs_warn("Retransmission of IMSI[%s] failed. "
"Stop retransmission",
mme_ue->imsi_bcd);
OGS_FSM_TRAN(&bearer->sm, &esm_state_exception);
@ -195,7 +195,7 @@ void esm_state_active(ogs_fsm_t *s, mme_event_t *e)
switch (message->esm.h.message_type) {
case OGS_NAS_EPS_PDN_CONNECTIVITY_REQUEST:
ogs_debug("[ESM] PDN Connectivity request");
ogs_debug("PDN Connectivity request");
ogs_debug(" IMSI[%s] PTI[%d] EBI[%d]",
mme_ue->imsi_bcd, sess->pti, bearer->ebi);
rv = esm_handle_pdn_connectivity_request(
@ -208,7 +208,7 @@ void esm_state_active(ogs_fsm_t *s, mme_event_t *e)
OGS_FSM_TRAN(s, esm_state_inactive);
break;
case OGS_NAS_EPS_PDN_DISCONNECT_REQUEST:
ogs_debug("[ESM] PDN disconnect request");
ogs_debug("PDN disconnect request");
ogs_debug(" IMSI[%s] PTI[%d] EBI[%d]",
mme_ue->imsi_bcd, sess->pti, bearer->ebi);
if (MME_HAVE_SGW_S1U_PATH(sess)) {
@ -219,14 +219,14 @@ void esm_state_active(ogs_fsm_t *s, mme_event_t *e)
OGS_FSM_TRAN(s, esm_state_pdn_will_disconnect);
break;
case OGS_NAS_EPS_MODIFY_EPS_BEARER_CONTEXT_ACCEPT:
ogs_debug("[ESM] Modify EPS bearer context accept");
ogs_debug("Modify EPS bearer context accept");
ogs_debug(" IMSI[%s] PTI[%d] EBI[%d]",
mme_ue->imsi_bcd, sess->pti, bearer->ebi);
mme_gtp_send_update_bearer_response(bearer);
break;
case OGS_NAS_EPS_DEACTIVATE_EPS_BEARER_CONTEXT_ACCEPT:
ogs_debug("[ESM] Deactivate EPS bearer "
ogs_debug("Deactivate EPS bearer "
"context accept");
ogs_debug(" IMSI[%s] PTI[%d] EBI[%d]",
mme_ue->imsi_bcd, sess->pti, bearer->ebi);
@ -234,13 +234,13 @@ void esm_state_active(ogs_fsm_t *s, mme_event_t *e)
OGS_FSM_TRAN(s, esm_state_bearer_deactivated);
break;
case OGS_NAS_EPS_BEARER_RESOURCE_ALLOCATION_REQUEST:
ogs_debug("[ESM] Bearer resource allocation request");
ogs_debug("Bearer resource allocation request");
ogs_debug(" IMSI[%s] PTI[%d] EBI[%d]",
mme_ue->imsi_bcd, sess->pti, bearer->ebi);
esm_handle_bearer_resource_allocation_request(bearer, message);
break;
case OGS_NAS_EPS_BEARER_RESOURCE_MODIFICATION_REQUEST:
ogs_debug("[ESM] Bearer resource modification request");
ogs_debug("Bearer resource modification request");
ogs_debug(" IMSI[%s] PTI[%d] EBI[%d]",
mme_ue->imsi_bcd, sess->pti, bearer->ebi);
esm_handle_bearer_resource_modification_request(bearer, message);
@ -288,14 +288,14 @@ void esm_state_pdn_will_disconnect(ogs_fsm_t *s, mme_event_t *e)
switch (message->esm.h.message_type) {
case OGS_NAS_EPS_DEACTIVATE_EPS_BEARER_CONTEXT_ACCEPT:
ogs_debug("[ESM] [D] Deactivate EPS bearer "
ogs_debug("[D] Deactivate EPS bearer "
"context accept");
ogs_debug(" IMSI[%s] PTI[%d] EBI[%d]",
mme_ue->imsi_bcd, sess->pti, bearer->ebi);
OGS_FSM_TRAN(s, esm_state_pdn_did_disconnect);
break;
case OGS_NAS_EPS_PDN_CONNECTIVITY_REQUEST:
ogs_debug("[ESM] PDN Connectivity request");
ogs_debug("PDN Connectivity request");
ogs_debug(" IMSI[%s] PTI[%d] EBI[%d]",
mme_ue->imsi_bcd, sess->pti, bearer->ebi);
rv = esm_handle_pdn_connectivity_request(

View File

@ -46,43 +46,26 @@ void mme_send_delete_session_or_mme_ue_context_release(mme_ue_t *mme_ue)
S1AP_Cause_PR_nas, S1AP_CauseNas_normal_release,
S1AP_UE_CTX_REL_UE_CONTEXT_REMOVE, 0);
} else {
ogs_warn("No S1 Context");
ogs_warn("[%s] No S1 Context",
mme_ue->imsi_bcd ? mme_ue->imsi_bcd : "Unknown");
}
}
}
void mme_send_delete_session_or_enb_ue_context_release(enb_ue_t *enb_ue)
{
mme_ue_t *mme_ue = NULL;
ogs_assert(enb_ue);
mme_ue = enb_ue->mme_ue;
if (mme_ue && SESSION_CONTEXT_IS_AVAILABLE(mme_ue)) {
mme_gtp_send_delete_all_sessions(mme_ue);
} else {
s1ap_send_ue_context_release_command(enb_ue,
S1AP_Cause_PR_nas, S1AP_CauseNas_normal_release,
S1AP_UE_CTX_REL_S1_CONTEXT_REMOVE, 0);
}
}
void mme_send_release_access_bearer_or_ue_context_release(enb_ue_t *enb_ue)
{
mme_ue_t *mme_ue = NULL;
ogs_assert(enb_ue);
mme_ue = enb_ue->mme_ue;
if (mme_ue) {
if (BEARER_CONTEXT_IS_ACTIVE(mme_ue)) {
ogs_debug("[%s] EMM-Registered", mme_ue->imsi_bcd);
mme_gtp_send_release_access_bearers_request(mme_ue);
} else {
ogs_warn("[%s] No EMM-Registered", mme_ue->imsi_bcd);
mme_send_delete_session_or_mme_ue_context_release(mme_ue);
}
if (mme_ue && BEARER_CONTEXT_IS_ACTIVE(mme_ue)) {
ogs_debug("[%s] Release access bearer request",
mme_ue->imsi_bcd ? mme_ue->imsi_bcd : "Unknown");
mme_gtp_send_release_access_bearers_request(mme_ue);
} else {
ogs_debug("No UE Context");
s1ap_send_ue_context_release_command(enb_ue,
ogs_debug("[%s] No UE Context",
mme_ue->imsi_bcd ? mme_ue->imsi_bcd : "Unknown");
s1ap_send_ue_context_release_command(enb_ue,
S1AP_Cause_PR_nas, S1AP_CauseNas_normal_release,
S1AP_UE_CTX_REL_S1_CONTEXT_REMOVE, 0);
}

View File

@ -28,7 +28,6 @@ extern "C" {
void mme_send_delete_session_or_detach(mme_ue_t *mme_ue);
void mme_send_delete_session_or_mme_ue_context_release(mme_ue_t *mme_ue);
void mme_send_delete_session_or_enb_ue_context_release(enb_ue_t *enb_ue);
void mme_send_release_access_bearer_or_ue_context_release(enb_ue_t *enb_ue);
#ifdef __cplusplus

View File

@ -94,7 +94,7 @@ ogs_pkbuf_t *mme_s11_build_create_session_request(
memset(&mme_s11_teid, 0, sizeof(ogs_gtp_f_teid_t));
mme_s11_teid.interface_type = OGS_GTP_F_TEID_S11_MME_GTP_C;
mme_s11_teid.teid = htonl(mme_ue->mme_s11_teid);
mme_s11_teid.teid = htobe32(mme_ue->mme_s11_teid);
rv = ogs_gtp_sockaddr_to_f_teid(
mme_self()->gtpc_addr, mme_self()->gtpc_addr6, &mme_s11_teid, &len);
ogs_assert(rv == OGS_OK);
@ -302,7 +302,7 @@ ogs_pkbuf_t *mme_s11_build_modify_bearer_request(
/* Data Plane(DL) : ENB-S1U */
memset(&enb_s1u_teid, 0, sizeof(ogs_gtp_f_teid_t));
enb_s1u_teid.interface_type = OGS_GTP_F_TEID_S1_U_ENODEB_GTP_U;
enb_s1u_teid.teid = htonl(bearer->enb_s1u_teid);
enb_s1u_teid.teid = htobe32(bearer->enb_s1u_teid);
rv = ogs_gtp_ip_to_f_teid(&bearer->enb_s1u_ip, &enb_s1u_teid, &len);
ogs_assert(rv == OGS_OK);
req->bearer_contexts_to_be_modified.s1_u_enodeb_f_teid.presence = 1;
@ -421,7 +421,7 @@ ogs_pkbuf_t *mme_s11_build_create_bearer_response(
/* Data Plane(DL) : ENB-S1U */
memset(&enb_s1u_teid, 0, sizeof(ogs_gtp_f_teid_t));
enb_s1u_teid.interface_type = OGS_GTP_F_TEID_S1_U_ENODEB_GTP_U;
enb_s1u_teid.teid = htonl(bearer->enb_s1u_teid);
enb_s1u_teid.teid = htobe32(bearer->enb_s1u_teid);
rv = ogs_gtp_ip_to_f_teid(&bearer->enb_s1u_ip, &enb_s1u_teid, &len);
ogs_assert(rv == OGS_OK);
rsp->bearer_contexts.s1_u_enodeb_f_teid.presence = 1;
@ -431,7 +431,7 @@ ogs_pkbuf_t *mme_s11_build_create_bearer_response(
/* Data Plane(UL) : SGW-S1U */
memset(&sgw_s1u_teid, 0, sizeof(ogs_gtp_f_teid_t));
sgw_s1u_teid.interface_type = OGS_GTP_F_TEID_S1_U_SGW_GTP_U;
sgw_s1u_teid.teid = htonl(bearer->sgw_s1u_teid);
sgw_s1u_teid.teid = htobe32(bearer->sgw_s1u_teid);
rv = ogs_gtp_ip_to_f_teid(&bearer->sgw_s1u_ip, &sgw_s1u_teid, &len);
ogs_assert(rv == OGS_OK);
rsp->bearer_contexts.s4_u_sgsn_f_teid.presence = 1;
@ -699,7 +699,7 @@ ogs_pkbuf_t *mme_s11_build_create_indirect_data_forwarding_tunnel_request(
memset(&dl_teid[i], 0, sizeof(ogs_gtp_f_teid_t));
dl_teid[i].interface_type =
OGS_GTP_F_TEID_ENODEB_GTP_U_FOR_DL_DATA_FORWARDING;
dl_teid[i].teid = htonl(bearer->enb_dl_teid);
dl_teid[i].teid = htobe32(bearer->enb_dl_teid);
rv = ogs_gtp_ip_to_f_teid(
&bearer->enb_dl_ip, &dl_teid[i], &len);
ogs_assert(rv == OGS_OK);
@ -712,7 +712,7 @@ ogs_pkbuf_t *mme_s11_build_create_indirect_data_forwarding_tunnel_request(
memset(&ul_teid[i], 0, sizeof(ogs_gtp_f_teid_t));
ul_teid[i].interface_type =
OGS_GTP_F_TEID_ENODEB_GTP_U_FOR_UL_DATA_FORWARDING;
ul_teid[i].teid = htonl(bearer->enb_ul_teid);
ul_teid[i].teid = htobe32(bearer->enb_ul_teid);
rv = ogs_gtp_ip_to_f_teid(
&bearer->enb_ul_ip, &ul_teid[i], &len);
ogs_assert(rv == OGS_OK);

View File

@ -162,7 +162,7 @@ void mme_s11_handle_create_session_response(
/* Control Plane(UL) : SGW-S11 */
sgw_s11_teid = rsp->sender_f_teid_for_control_plane.data;
mme_ue->sgw_s11_teid = ntohl(sgw_s11_teid->teid);
mme_ue->sgw_s11_teid = be32toh(sgw_s11_teid->teid);
memcpy(&pdn->paa, rsp->pdn_address_allocation.data,
rsp->pdn_address_allocation.len);
@ -196,7 +196,7 @@ void mme_s11_handle_create_session_response(
/* Data Plane(UL) : SGW-S1U */
sgw_s1u_teid = rsp->bearer_contexts_created.s1_u_enodeb_f_teid.data;
bearer->sgw_s1u_teid = ntohl(sgw_s1u_teid->teid);
bearer->sgw_s1u_teid = be32toh(sgw_s1u_teid->teid);
ogs_debug(" MME_S11_TEID[%d] SGW_S11_TEID[%d]",
mme_ue->mme_s11_teid, mme_ue->sgw_s11_teid);
@ -459,7 +459,7 @@ void mme_s11_handle_create_bearer_request(
/* Data Plane(UL) : SGW-S1U */
sgw_s1u_teid = req->bearer_contexts.s1_u_enodeb_f_teid.data;
bearer->sgw_s1u_teid = ntohl(sgw_s1u_teid->teid);
bearer->sgw_s1u_teid = be32toh(sgw_s1u_teid->teid);
rv = ogs_gtp_f_teid_to_ip(sgw_s1u_teid, &bearer->sgw_s1u_ip);
ogs_assert(rv == OGS_OK);
@ -827,7 +827,7 @@ void mme_s11_handle_create_indirect_data_forwarding_tunnel_response(
teid = rsp->bearer_contexts[i].s4_u_sgsn_f_teid.data;
ogs_assert(teid);
bearer->sgw_dl_teid = ntohl(teid->teid);
bearer->sgw_dl_teid = be32toh(teid->teid);
rv = ogs_gtp_f_teid_to_ip(teid, &bearer->sgw_dl_ip);
ogs_expect_or_return(rv == OGS_OK);
}
@ -835,7 +835,7 @@ void mme_s11_handle_create_indirect_data_forwarding_tunnel_response(
teid = rsp->bearer_contexts[i].s2b_u_epdg_f_teid_5.data;
ogs_assert(teid);
bearer->sgw_ul_teid = ntohl(teid->teid);
bearer->sgw_ul_teid = be32toh(teid->teid);
rv = ogs_gtp_f_teid_to_ip(teid, &bearer->sgw_ul_ip);
ogs_expect_or_return(rv == OGS_OK);
}

View File

@ -131,7 +131,7 @@ void nas_eps_send_attach_reject(mme_ue_t *mme_ue,
ogs_assert(mme_ue);
ogs_debug("[EMM] Attach reject");
ogs_debug("Attach reject");
ogs_debug(" IMSI[%s] Cause[%d]", mme_ue->imsi_bcd, emm_cause);
sess = mme_sess_first(mme_ue);
@ -153,7 +153,7 @@ void nas_eps_send_identity_request(mme_ue_t *mme_ue)
ogs_assert(mme_ue);
ogs_debug("[EMM] Identity request");
ogs_debug("Identity request");
if (mme_ue->t3470.pkbuf) {
emmbuf = mme_ue->t3470.pkbuf;
@ -180,7 +180,7 @@ void nas_eps_send_authentication_request(
ogs_assert(mme_ue);
ogs_debug("[EMM] Authentication request");
ogs_debug("Authentication request");
ogs_debug(" IMSI[%s]", mme_ue->imsi_bcd);
if (mme_ue->t3460.pkbuf) {
@ -208,7 +208,7 @@ void nas_eps_send_security_mode_command(mme_ue_t *mme_ue)
ogs_assert(mme_ue);
ogs_debug("[EMM] Security mode command");
ogs_debug("Security mode command");
ogs_debug(" IMSI[%s]", mme_ue->imsi_bcd);
if (mme_ue->t3460.pkbuf) {
@ -235,7 +235,7 @@ void nas_eps_send_authentication_reject(mme_ue_t *mme_ue)
ogs_assert(mme_ue);
ogs_debug("[EMM] Authentication reject");
ogs_debug("Authentication reject");
ogs_debug(" IMSI[%s]", mme_ue->imsi_bcd);
emmbuf = emm_build_authentication_reject();
@ -475,7 +475,7 @@ void nas_eps_send_tau_accept(
ogs_assert(mme_ue);
ogs_debug("[EMM] Tracking area update accept");
ogs_debug("Tracking area update accept");
ogs_debug(" IMSI[%s]", mme_ue->imsi_bcd);
emmbuf = emm_build_tau_accept(mme_ue);
@ -533,7 +533,7 @@ void nas_eps_send_cs_service_notification(mme_ue_t *mme_ue)
ogs_assert(mme_ue);
ogs_debug("[EMM] CS Service Notification");
ogs_debug("CS Service Notification");
ogs_debug(" IMSI[%s]", mme_ue->imsi_bcd);
emmbuf = emm_build_cs_service_notification(mme_ue);
@ -553,7 +553,7 @@ void nas_eps_send_downlink_nas_transport(
ogs_assert(buffer);
ogs_assert(length);
ogs_debug("[EMM] Downlink NAS transport");
ogs_debug("Downlink NAS transport");
ogs_debug(" IMSI[%s]", mme_ue->imsi_bcd);
emmbuf = emm_build_downlink_nas_transport(mme_ue, buffer, length);

View File

@ -216,7 +216,7 @@ int nas_eps_security_decode(mme_ue_t *mme_ue,
memcpy(&mac32, mac, NAS_SECURITY_MAC_SIZE);
if (h->message_authentication_code != mac32) {
ogs_warn("NAS MAC verification failed(0x%x != 0x%x)",
ntohl(h->message_authentication_code), ntohl(mac32));
be32toh(h->message_authentication_code), be32toh(mac32));
mme_ue->mac_failed = 1;
}
}

View File

@ -141,7 +141,7 @@ void s1ap_handle_s1_setup_request(mme_enb_t *enb, ogs_s1ap_message_t *message)
memcpy(&enb->supported_ta_list[enb->num_of_supported_ta_list].tac,
tAC->buf, sizeof(uint16_t));
enb->supported_ta_list[enb->num_of_supported_ta_list].tac =
ntohs(enb->supported_ta_list
be16toh(enb->supported_ta_list
[enb->num_of_supported_ta_list].tac);
memcpy(&enb->supported_ta_list
[enb->num_of_supported_ta_list].plmn_id,
@ -276,7 +276,7 @@ void s1ap_handle_initial_ue_message(mme_enb_t *enb, ogs_s1ap_message_t *message)
memcpy(&nas_guti.mme_code, S_TMSI->mMEC.buf, S_TMSI->mMEC.size);
/* size must be 4 */
memcpy(&nas_guti.m_tmsi, S_TMSI->m_TMSI.buf, S_TMSI->m_TMSI.size);
nas_guti.m_tmsi = ntohl(nas_guti.m_tmsi);
nas_guti.m_tmsi = be32toh(nas_guti.m_tmsi);
mme_ue = mme_ue_find_by_guti(&nas_guti);
if (!mme_ue) {
@ -323,7 +323,7 @@ void s1ap_handle_initial_ue_message(mme_enb_t *enb, ogs_s1ap_message_t *message)
memcpy(&enb_ue->saved.tai.plmn_id, pLMNidentity->buf,
sizeof(enb_ue->saved.tai.plmn_id));
memcpy(&enb_ue->saved.tai.tac, tAC->buf, sizeof(enb_ue->saved.tai.tac));
enb_ue->saved.tai.tac = ntohs(enb_ue->saved.tai.tac);
enb_ue->saved.tai.tac = be16toh(enb_ue->saved.tai.tac);
ogs_assert(EUTRAN_CGI);
pLMNidentity = &EUTRAN_CGI->pLMNidentity;
@ -334,7 +334,7 @@ void s1ap_handle_initial_ue_message(mme_enb_t *enb, ogs_s1ap_message_t *message)
sizeof(enb_ue->saved.e_cgi.plmn_id));
memcpy(&enb_ue->saved.e_cgi.cell_id, cell_ID->buf,
sizeof(enb_ue->saved.e_cgi.cell_id));
enb_ue->saved.e_cgi.cell_id = (ntohl(enb_ue->saved.e_cgi.cell_id) >> 4);
enb_ue->saved.e_cgi.cell_id = (be32toh(enb_ue->saved.e_cgi.cell_id) >> 4);
ogs_debug(" ENB_UE_S1AP_ID[%d] MME_UE_S1AP_ID[%d] TAC[%d]",
enb_ue->enb_ue_s1ap_id, enb_ue->mme_ue_s1ap_id, enb_ue->saved.tai.tac);
@ -572,7 +572,7 @@ void s1ap_handle_initial_context_setup_response(
memcpy(&bearer->enb_s1u_teid, e_rab->gTP_TEID.buf,
sizeof(bearer->enb_s1u_teid));
bearer->enb_s1u_teid = ntohl(bearer->enb_s1u_teid);
bearer->enb_s1u_teid = be32toh(bearer->enb_s1u_teid);
rv = ogs_asn_BIT_STRING_to_ip(
&e_rab->transportLayerAddress, &bearer->enb_s1u_ip);
ogs_assert(rv == OGS_OK);
@ -682,7 +682,7 @@ void s1ap_handle_initial_context_setup_failure(
* may in principle be adopted. The eNB should ensure
* that no hanging resources remain at the eNB.
*/
mme_send_delete_session_or_enb_ue_context_release(enb_ue);
mme_send_release_access_bearer_or_ue_context_release(enb_ue);
}
void s1ap_handle_ue_context_modification_response(
@ -932,7 +932,7 @@ void s1ap_handle_e_rab_setup_response(
memcpy(&bearer->enb_s1u_teid, e_rab->gTP_TEID.buf,
sizeof(bearer->enb_s1u_teid));
bearer->enb_s1u_teid = ntohl(bearer->enb_s1u_teid);
bearer->enb_s1u_teid = be32toh(bearer->enb_s1u_teid);
rv = ogs_asn_BIT_STRING_to_ip(
&e_rab->transportLayerAddress, &bearer->enb_s1u_ip);
ogs_assert(rv == OGS_OK);
@ -1285,13 +1285,13 @@ void s1ap_handle_path_switch_request(
memcpy(&enb_ue->saved.tai.plmn_id, pLMNidentity->buf,
sizeof(enb_ue->saved.tai.plmn_id));
memcpy(&enb_ue->saved.tai.tac, tAC->buf, sizeof(enb_ue->saved.tai.tac));
enb_ue->saved.tai.tac = ntohs(enb_ue->saved.tai.tac);
enb_ue->saved.tai.tac = be16toh(enb_ue->saved.tai.tac);
memcpy(&enb_ue->saved.e_cgi.plmn_id, pLMNidentity->buf,
sizeof(enb_ue->saved.e_cgi.plmn_id));
memcpy(&enb_ue->saved.e_cgi.cell_id, cell_ID->buf,
sizeof(enb_ue->saved.e_cgi.cell_id));
enb_ue->saved.e_cgi.cell_id = (ntohl(enb_ue->saved.e_cgi.cell_id) >> 4);
enb_ue->saved.e_cgi.cell_id = (be32toh(enb_ue->saved.e_cgi.cell_id) >> 4);
ogs_debug(" OLD TAI[PLMN_ID:%06x,TAC:%d]",
ogs_plmn_id_hexdump(&mme_ue->tai.plmn_id),
@ -1311,12 +1311,12 @@ void s1ap_handle_path_switch_request(
memcpy(&mme_ue->e_cgi, &enb_ue->saved.e_cgi, sizeof(ogs_e_cgi_t));
memcpy(&eea, encryptionAlgorithms->buf, sizeof(eea));
eea = ntohs(eea);
eea = be16toh(eea);
mme_ue->ue_network_capability.eea = eea >> 9;
mme_ue->ue_network_capability.eea0 = 1;
memcpy(&eia, integrityProtectionAlgorithms->buf, sizeof(eia));
eia = ntohs(eia);
eia = be16toh(eia);
mme_ue->ue_network_capability.eia = eia >> 9;
mme_ue->ue_network_capability.eia0 = 0;
@ -1339,7 +1339,7 @@ void s1ap_handle_path_switch_request(
memcpy(&bearer->enb_s1u_teid, e_rab->gTP_TEID.buf,
sizeof(bearer->enb_s1u_teid));
bearer->enb_s1u_teid = ntohl(bearer->enb_s1u_teid);
bearer->enb_s1u_teid = be32toh(bearer->enb_s1u_teid);
rv = ogs_asn_BIT_STRING_to_ip(
&e_rab->transportLayerAddress, &bearer->enb_s1u_ip);
ogs_expect(rv == OGS_OK);
@ -1408,10 +1408,10 @@ void s1ap_handle_enb_configuration_transfer(
memcpy(&source_tac, sourceeNB_ID->selected_TAI.tAC.buf,
sizeof(source_tac));
source_tac = ntohs(source_tac);
source_tac = be16toh(source_tac);
memcpy(&target_tac, targeteNB_ID->selected_TAI.tAC.buf,
sizeof(target_tac));
target_tac = ntohs(target_tac);
target_tac = be16toh(target_tac);
ogs_debug(" Source : ENB_ID[%s:%d], TAC[%d]",
sourceeNB_ID->global_ENB_ID.eNB_ID.present ==
@ -1641,7 +1641,7 @@ void s1ap_handle_handover_request_ack(
memcpy(&bearer->target_s1u_teid, e_rab->gTP_TEID.buf,
sizeof(bearer->target_s1u_teid));
bearer->target_s1u_teid = ntohl(bearer->target_s1u_teid);
bearer->target_s1u_teid = be32toh(bearer->target_s1u_teid);
rv = ogs_asn_BIT_STRING_to_ip(
&e_rab->transportLayerAddress, &bearer->target_s1u_ip);
ogs_assert(rv == OGS_OK);
@ -1651,7 +1651,7 @@ void s1ap_handle_handover_request_ack(
ogs_assert(e_rab->dL_transportLayerAddress->buf);
memcpy(&bearer->enb_dl_teid, e_rab->dL_gTP_TEID->buf,
sizeof(bearer->enb_dl_teid));
bearer->enb_dl_teid = ntohl(bearer->enb_dl_teid);
bearer->enb_dl_teid = be32toh(bearer->enb_dl_teid);
rv = ogs_asn_BIT_STRING_to_ip(
e_rab->dL_transportLayerAddress, &bearer->enb_dl_ip);
ogs_assert(rv == OGS_OK);
@ -1662,7 +1662,7 @@ void s1ap_handle_handover_request_ack(
ogs_assert(e_rab->uL_TransportLayerAddress->buf);
memcpy(&bearer->enb_ul_teid, e_rab->uL_GTP_TEID->buf,
sizeof(bearer->enb_ul_teid));
bearer->enb_ul_teid = ntohl(bearer->enb_ul_teid);
bearer->enb_ul_teid = be32toh(bearer->enb_ul_teid);
rv = ogs_asn_BIT_STRING_to_ip(
e_rab->uL_TransportLayerAddress, &bearer->enb_ul_ip);
ogs_assert(rv == OGS_OK);
@ -1972,14 +1972,14 @@ void s1ap_handle_handover_notification(
sizeof(target_ue->saved.tai.plmn_id));
memcpy(&target_ue->saved.tai.tac,
tAC->buf, sizeof(target_ue->saved.tai.tac));
target_ue->saved.tai.tac = ntohs(target_ue->saved.tai.tac);
target_ue->saved.tai.tac = be16toh(target_ue->saved.tai.tac);
memcpy(&target_ue->saved.e_cgi.plmn_id, pLMNidentity->buf,
sizeof(target_ue->saved.e_cgi.plmn_id));
memcpy(&target_ue->saved.e_cgi.cell_id, cell_ID->buf,
sizeof(target_ue->saved.e_cgi.cell_id));
target_ue->saved.e_cgi.cell_id =
(ntohl(target_ue->saved.e_cgi.cell_id) >> 4);
(be32toh(target_ue->saved.e_cgi.cell_id) >> 4);
ogs_debug(" OLD TAI[PLMN_ID:%06x,TAC:%d]",
ogs_plmn_id_hexdump(&mme_ue->tai.plmn_id),

View File

@ -54,7 +54,7 @@ ogs_pkbuf_t *sgsap_build_location_update_request(mme_ue_t *mme_ue)
ogs_tlv_add(root, SGSAP_IE_EPS_UPDATE_TYPE, SGSAP_IE_EPS_UPDATE_LEN, 0,
&eps_update_type);
memcpy(&lai, &csmap->lai, sizeof(ogs_nas_lai_t));
lai.lac = htons(lai.lac);
lai.lac = htobe16(lai.lac);
ogs_tlv_add(root, SGSAP_IE_LAI_TYPE, SGSAP_IE_LAI_LEN, 0, &lai);
pkbuf = ogs_pkbuf_alloc(NULL, OGS_MAX_SDU_LEN);

View File

@ -96,7 +96,7 @@ void sgsap_handle_location_update_accept(mme_vlr_t *vlr, ogs_pkbuf_t *pkbuf)
if (nas_mobile_identity_tmsi) {
if (nas_mobile_identity_tmsi->type == OGS_NAS_MOBILE_IDENTITY_TMSI) {
mme_ue->p_tmsi = ntohl(nas_mobile_identity_tmsi->tmsi);
mme_ue->p_tmsi = be32toh(nas_mobile_identity_tmsi->tmsi);
} else {
ogs_error("Not supported Identity type[%d]",
nas_mobile_identity_tmsi->type);

View File

@ -23,11 +23,12 @@ ogs_pkbuf_t *sgwc_s11_build_downlink_data_notification(sgwc_bearer_t *bearer)
{
ogs_gtp_message_t message;
ogs_gtp_downlink_data_notification_t *noti = NULL;
/* FIXME : ARP should be retrieved from ? */
uint8_t arp = 0x61;
ogs_gtp_arp_t arp;
sgwc_sess_t *sess = NULL;
ogs_assert(bearer);
sess = bearer->sess;
ogs_assert(sess);
/* Build downlink notification message */
noti = &message.downlink_data_notification;
@ -36,7 +37,11 @@ ogs_pkbuf_t *sgwc_s11_build_downlink_data_notification(sgwc_bearer_t *bearer)
noti->eps_bearer_id.presence = 1;
noti->eps_bearer_id.u8 = bearer->ebi;
/* FIXME : ARP should be retrieved from ? */
memset(&arp, 0, sizeof(arp));
arp.pre_emption_vulnerability = sess->pdn.qos.arp.pre_emption_vulnerability;
arp.priority_level = sess->pdn.qos.arp.priority_level;
arp.pre_emption_capability = sess->pdn.qos.arp.pre_emption_capability;
noti->allocation_retention_priority.presence = 1;
noti->allocation_retention_priority.data = &arp;
noti->allocation_retention_priority.len = sizeof(arp);

View File

@ -91,6 +91,7 @@ void sgwc_s11_handle_create_session_request(
uint16_t decoded;
ogs_gtp_f_teid_t *mme_s11_teid = NULL;
ogs_gtp_uli_t uli;
ogs_gtp_bearer_qos_t bearer_qos;
char apn[OGS_MAX_APN_LEN];
ogs_assert(s11_xact);
@ -120,6 +121,10 @@ void sgwc_s11_handle_create_session_request(
ogs_error("No EPS Bearer ID");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
}
if (req->bearer_contexts_to_be_created.bearer_level_qos.presence == 0) {
ogs_error("No Bearer QoS");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
}
if (req->access_point_name.presence == 0) {
ogs_error("No APN");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
@ -183,6 +188,18 @@ void sgwc_s11_handle_create_session_request(
return;
}
/* Set Bearer QoS */
decoded = ogs_gtp_parse_bearer_qos(&bearer_qos,
&req->bearer_contexts_to_be_created.bearer_level_qos);
ogs_assert(req->bearer_contexts_to_be_created.bearer_level_qos.len ==
decoded);
sess->pdn.qos.qci = bearer_qos.qci;
sess->pdn.qos.arp.priority_level = bearer_qos.priority_level;
sess->pdn.qos.arp.pre_emption_capability =
bearer_qos.pre_emption_capability;
sess->pdn.qos.arp.pre_emption_vulnerability =
bearer_qos.pre_emption_vulnerability;
/* Set PDN Type */
sess->pdn.pdn_type = req->pdn_type.u8;
sess->pdn.paa.pdn_type = req->pdn_type.u8;

View File

@ -186,6 +186,7 @@ void smf_s5c_handle_create_session_request(
ogs_debug(" SGW_S5U_TEID[0x%x] PGW_S5U_TEID[0x%x]",
bearer->sgw_s5u_teid, bearer->pgw_s5u_teid);
/* Set Bearer QoS */
decoded = ogs_gtp_parse_bearer_qos(&bearer_qos,
&req->bearer_contexts_to_be_created.bearer_level_qos);
ogs_assert(req->bearer_contexts_to_be_created.bearer_level_qos.len ==

View File

@ -232,14 +232,6 @@ static void test1_func(abts_case *tc, void *data)
ABTS_PTR_NOTNULL(tc, sendbuf);
rv = testenb_s1ap_send(s1ap, sendbuf);
/* Send UE Context Release Request */
sendbuf = test_s1ap_build_ue_context_release_request(test_ue,
S1AP_Cause_PR_radioNetwork,
S1AP_CauseRadioNetwork_radio_connection_with_ue_lost);
ABTS_PTR_NOTNULL(tc, sendbuf);
rv = testenb_s1ap_send(s1ap, sendbuf);
ABTS_INT_EQUAL(tc, OGS_OK, rv);
/* Receive UE Context Release Command */
recvbuf = testenb_s1ap_read(s1ap);
ABTS_PTR_NOTNULL(tc, recvbuf);
@ -1002,21 +994,19 @@ static void test3_func(abts_case *tc, void *data)
ABTS_PTR_NOTNULL(tc, sendbuf);
rv = testenb_s1ap_send(s1ap, sendbuf);
/* Send UE Context Release Request */
sendbuf = test_s1ap_build_ue_context_release_request(test_ue,
S1AP_Cause_PR_radioNetwork, S1AP_CauseRadioNetwork_user_inactivity);
ABTS_PTR_NOTNULL(tc, sendbuf);
rv = testenb_s1ap_send(s1ap, sendbuf);
ABTS_INT_EQUAL(tc, OGS_OK, rv);
/* Receive UE Context Release Command */
recvbuf = testenb_s1ap_read(s1ap);
ABTS_PTR_NOTNULL(tc, recvbuf);
tests1ap_recv(test_ue, recvbuf);
/* Send Service Request */
/* Send Service Request - INVALID Security MAC */
emmbuf = testemm_build_service_request(test_ue);
ABTS_PTR_NOTNULL(tc, emmbuf);
{
unsigned char *data = emmbuf->data;
ogs_assert(data);
data[3]++;
}
sendbuf = test_s1ap_build_initial_ue_message(
test_ue, emmbuf, S1AP_RRC_Establishment_Cause_mo_Data, true);
ABTS_PTR_NOTNULL(tc, sendbuf);