diff --git a/configs/open5gs/amf.yaml.in b/configs/open5gs/amf.yaml.in index b177886f7..b12150138 100644 --- a/configs/open5gs/amf.yaml.in +++ b/configs/open5gs/amf.yaml.in @@ -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 # diff --git a/configs/open5gs/ausf.yaml.in b/configs/open5gs/ausf.yaml.in index 89b401ea1..d27d23b10 100644 --- a/configs/open5gs/ausf.yaml.in +++ b/configs/open5gs/ausf.yaml.in @@ -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 # diff --git a/configs/open5gs/hss.yaml.in b/configs/open5gs/hss.yaml.in index 3748d2d9a..698c03b2a 100644 --- a/configs/open5gs/hss.yaml.in +++ b/configs/open5gs/hss.yaml.in @@ -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 # diff --git a/configs/open5gs/mme.yaml.in b/configs/open5gs/mme.yaml.in index 2c8fb82be..26b3e086f 100644 --- a/configs/open5gs/mme.yaml.in +++ b/configs/open5gs/mme.yaml.in @@ -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 # diff --git a/configs/open5gs/nrf.yaml.in b/configs/open5gs/nrf.yaml.in index 6eed1845d..d83a5f63d 100644 --- a/configs/open5gs/nrf.yaml.in +++ b/configs/open5gs/nrf.yaml.in @@ -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 # diff --git a/configs/open5gs/pcrf.yaml.in b/configs/open5gs/pcrf.yaml.in index a7f345359..d4ccd8912 100644 --- a/configs/open5gs/pcrf.yaml.in +++ b/configs/open5gs/pcrf.yaml.in @@ -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 # diff --git a/configs/open5gs/sgwc.yaml.in b/configs/open5gs/sgwc.yaml.in index e7aa8a111..fe49174d0 100644 --- a/configs/open5gs/sgwc.yaml.in +++ b/configs/open5gs/sgwc.yaml.in @@ -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 # diff --git a/configs/open5gs/sgwu.yaml.in b/configs/open5gs/sgwu.yaml.in index 809eba728..be4c73612 100644 --- a/configs/open5gs/sgwu.yaml.in +++ b/configs/open5gs/sgwu.yaml.in @@ -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: diff --git a/configs/open5gs/smf.yaml.in b/configs/open5gs/smf.yaml.in index 739165698..63251a5e5 100644 --- a/configs/open5gs/smf.yaml.in +++ b/configs/open5gs/smf.yaml.in @@ -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 # diff --git a/configs/open5gs/udm.yaml.in b/configs/open5gs/udm.yaml.in index 01312b50f..a55ef1332 100644 --- a/configs/open5gs/udm.yaml.in +++ b/configs/open5gs/udm.yaml.in @@ -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 # diff --git a/configs/open5gs/udr.yaml.in b/configs/open5gs/udr.yaml.in index ba0412fdc..3039ec3cc 100644 --- a/configs/open5gs/udr.yaml.in +++ b/configs/open5gs/udr.yaml.in @@ -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 # diff --git a/configs/open5gs/upf.yaml.in b/configs/open5gs/upf.yaml.in index 0da77f0f4..2756e3c38 100644 --- a/configs/open5gs/upf.yaml.in +++ b/configs/open5gs/upf.yaml.in @@ -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: diff --git a/lib/app/ogs-context.c b/lib/app/ogs-context.c index 673665539..59b4e7f1b 100644 --- a/lib/app/ogs-context.c +++ b/lib/app/ogs-context.c @@ -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); } diff --git a/lib/core/ogs-3gpp-types.h b/lib/core/ogs-3gpp-types.h index 7a80c48bb..7a7ce17bd 100644 --- a/lib/core/ogs-3gpp-types.h +++ b/lib/core/ogs-3gpp-types.h @@ -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 diff --git a/lib/gtp/types.h b/lib/gtp/types.h index 6d1a0c85a..e63c57495 100644 --- a/lib/gtp/types.h +++ b/lib/gtp/types.h @@ -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 diff --git a/lib/pfcp/context.h b/lib/pfcp/context.h index 97f05f3b0..c0aa74114 100644 --- a/lib/pfcp/context.h +++ b/lib/pfcp/context.h @@ -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; diff --git a/lib/pfcp/handler.c b/lib/pfcp/handler.c index 75cba43b6..276dfda28 100644 --- a/lib/pfcp/handler.c +++ b/lib/pfcp/handler.c @@ -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); } } } diff --git a/src/amf/nas-security.c b/src/amf/nas-security.c index eb2d6dff3..04df18557 100644 --- a/src/amf/nas-security.c +++ b/src/amf/nas-security.c @@ -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; } } diff --git a/src/mme/emm-build.c b/src/mme/emm-build.c index 0dde516db..ffaf44095 100644 --- a/src/mme/emm-build.c +++ b/src/mme/emm-build.c @@ -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)); diff --git a/src/mme/emm-handler.c b/src/mme/emm-handler.c index 0b5058d6e..72a440ffe 100644 --- a/src/mme/emm-handler.c +++ b/src/mme/emm-handler.c @@ -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; diff --git a/src/mme/emm-sm.c b/src/mme/emm-sm.c index ba223a6f8..91c5ce371 100644 --- a/src/mme/emm-sm.c +++ b/src/mme/emm-sm.c @@ -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) { diff --git a/src/mme/esm-build.c b/src/mme/esm-build.c index 5e22adae2..2f31b09a2 100644 --- a/src/mme/esm-build.c +++ b/src/mme/esm-build.c @@ -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); diff --git a/src/mme/esm-sm.c b/src/mme/esm-sm.c index 4ce7ef7e9..ab1c3f8b4 100644 --- a/src/mme/esm-sm.c +++ b/src/mme/esm-sm.c @@ -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( diff --git a/src/mme/mme-path.c b/src/mme/mme-path.c index 17360c722..3241d47be 100644 --- a/src/mme/mme-path.c +++ b/src/mme/mme-path.c @@ -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); } diff --git a/src/mme/mme-path.h b/src/mme/mme-path.h index e9f205e9e..4d625b72e 100644 --- a/src/mme/mme-path.h +++ b/src/mme/mme-path.h @@ -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 diff --git a/src/mme/mme-s11-build.c b/src/mme/mme-s11-build.c index 815aee237..229975b30 100644 --- a/src/mme/mme-s11-build.c +++ b/src/mme/mme-s11-build.c @@ -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); diff --git a/src/mme/mme-s11-handler.c b/src/mme/mme-s11-handler.c index 419338600..093f8d78e 100644 --- a/src/mme/mme-s11-handler.c +++ b/src/mme/mme-s11-handler.c @@ -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); } diff --git a/src/mme/nas-path.c b/src/mme/nas-path.c index 51beccb79..aafe59a8e 100644 --- a/src/mme/nas-path.c +++ b/src/mme/nas-path.c @@ -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); diff --git a/src/mme/nas-security.c b/src/mme/nas-security.c index cbf0f2dfe..b13608a93 100644 --- a/src/mme/nas-security.c +++ b/src/mme/nas-security.c @@ -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; } } diff --git a/src/mme/s1ap-handler.c b/src/mme/s1ap-handler.c index 5d255ac9e..2def1b84f 100644 --- a/src/mme/s1ap-handler.c +++ b/src/mme/s1ap-handler.c @@ -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), diff --git a/src/mme/sgsap-build.c b/src/mme/sgsap-build.c index 443a80a9e..b4dd54c51 100644 --- a/src/mme/sgsap-build.c +++ b/src/mme/sgsap-build.c @@ -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); diff --git a/src/mme/sgsap-handler.c b/src/mme/sgsap-handler.c index 5e19158b3..7887b9fa5 100644 --- a/src/mme/sgsap-handler.c +++ b/src/mme/sgsap-handler.c @@ -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); diff --git a/src/sgwc/s11-build.c b/src/sgwc/s11-build.c index 063dd8727..fa962fa4e 100644 --- a/src/sgwc/s11-build.c +++ b/src/sgwc/s11-build.c @@ -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); diff --git a/src/sgwc/s11-handler.c b/src/sgwc/s11-handler.c index d6f7ea0fe..960bef16b 100644 --- a/src/sgwc/s11-handler.c +++ b/src/sgwc/s11-handler.c @@ -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; diff --git a/src/smf/s5c-handler.c b/src/smf/s5c-handler.c index 3d7e712d5..15556c877 100644 --- a/src/smf/s5c-handler.c +++ b/src/smf/s5c-handler.c @@ -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 == diff --git a/tests/attach/ue-context-test.c b/tests/attach/ue-context-test.c index 7848f7e31..646ba848b 100644 --- a/tests/attach/ue-context-test.c +++ b/tests/attach/ue-context-test.c @@ -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);