Files
openairinterface5g/openair3/NAS/UE/EMM/SAP/emm_asDef.h
T
Robert Schmidt 8107939f08 Change OAI license to CSSL v1.0 (and others)
- all RAN code, CI code, configuration files, dockerfiles, in CSSL v1.0
- all deployment code (openshift, charts, ancillary files like shell
  scripts), in MIT
- documentation in CC-BY-4.0
- exceptions might apply and are listed in NOTICE
- there is a new LICENSES folder with all licenses
- CONTRIBUTIONS.md has been updated accordingly

For automated changes based on OAI PL v1.1:

    perl -i~ -0pe 's/\/\*.*Licensed to the OpenAirInterface.*openairinterface.org\n#?/\/*\n * SPDX-License-Identifier: LicenseRef-CSSL-1.0\n/s' **/*.{c,h,cpp}
    perl -i~ -0pe 's/\/\*.*Licensed to the OpenAirInterface.*openairinterface.org\n#?/\/*\n * SPDX-License-Identifier: LicenseRef-CSSL-1.0\n/s' **/*.ts
    perl -i~ -0pe 's/<!--.*Licensed to the OpenAirInterface.*openairinterface.org\n.*-->/<!-- SPDX-License-Identifier: LicenseRef-CSSL-1.0 -->/s' **/*.xml

The rest (cmake, files with missing license, cmake) manually.
2026-03-27 16:36:37 +01:00

252 lines
10 KiB
C

/*
* SPDX-License-Identifier: LicenseRef-CSSL-1.0
*/
/*****************************************************************************
Source emm_asDef.h
Version 0.1
Date 2012/10/16
Product NAS stack
Subsystem EPS Mobility Management
Description Defines the EMM primitives available at the EMMAS Service
Access Point to transfer NAS messages to/from the Access
Stratum sublayer.
*****************************************************************************/
#ifndef __EMM_ASDEF_H__
#define __EMM_ASDEF_H__
#include "commonDef.h"
#include "OctetString.h"
/****************************************************************************/
/********************* G L O B A L C O N S T A N T S *******************/
/****************************************************************************/
/*
* EMMAS-SAP primitives
*/
typedef enum emm_as_primitive_u {
_EMMAS_START = 200,
_EMMAS_SECURITY_REQ, /* EMM->AS: Security request */
_EMMAS_SECURITY_IND, /* AS->EMM: Security indication */
_EMMAS_SECURITY_RES, /* EMM->AS: Security response */
_EMMAS_SECURITY_REJ, /* EMM->AS: Security reject */
_EMMAS_ESTABLISH_REQ, /* EMM->AS: Connection establish request */
_EMMAS_ESTABLISH_CNF, /* AS->EMM: Connection establish confirm */
_EMMAS_ESTABLISH_REJ, /* AS->EMM: Connection establish reject */
_EMMAS_RELEASE_REQ, /* EMM->AS: Connection release request */
_EMMAS_RELEASE_IND, /* AS->EMM: Connection release indication */
_EMMAS_DATA_REQ, /* EMM->AS: Data transfer request */
_EMMAS_DATA_IND, /* AS->EMM: Data transfer indication */
_EMMAS_PAGE_IND, /* AS->EMM: Paging data indication */
_EMMAS_STATUS_IND, /* AS->EMM: Status indication */
_EMMAS_CELL_INFO_REQ, /* EMM->AS: Cell information request */
_EMMAS_CELL_INFO_RES, /* AS->EMM: Cell information response */
_EMMAS_CELL_INFO_IND, /* AS->EMM: Cell information indication */
_EMMAS_END
} emm_as_primitive_t;
/* Data used to setup EPS NAS security */
typedef struct emm_as_security_data_s {
uint8_t is_new; /* New security data indicator */
#define EMM_AS_NO_KEY_AVAILABLE 0xff
uint8_t ksi; /* NAS key set identifier */
uint8_t sqn; /* Sequence number */
uint32_t count; /* NAS counter */
const OctetString *k_enc; /* NAS cyphering key */
const OctetString *k_int; /* NAS integrity key */
} emm_as_security_data_t;
/****************************************************************************/
/************************ G L O B A L T Y P E S ************************/
/****************************************************************************/
/*
* EMMAS primitive for security
* ----------------------------
*/
typedef struct emm_as_security_s {
uint32_t ueid; /* UE lower layer identifier */
const GUTI_t *guti; /* GUTI temporary mobile identity */
emm_as_security_data_t sctx;/* EPS NAS security context */
int emm_cause; /* EMM failure cause code */
/*
* Identity request/response
*/
uint8_t identType; /* Type of requested UE's identity */
const imsi_t *imsi; /* The requested IMSI of the UE */
const imei_t *imei; /* The requested IMEI of the UE */
uint32_t tmsi; /* The requested TMSI of the UE */
/*
* Authentication request/response
*/
uint8_t ksi; /* NAS key set identifier */
const OctetString *rand; /* Random challenge number */
const OctetString *autn; /* Authentication token */
const OctetString *res; /* Authentication response */
const OctetString *auts; /* Synchronisation failure */
/*
* Security Mode Command
*/
uint8_t eea; /* Replayed EPS encryption algorithms */
uint8_t eia; /* Replayed EPS integrity algorithms */
uint8_t uea; /* Replayed UMTS encryption algorithms */
uint8_t ucs2;
uint8_t uia; /* Replayed UMTS integrity algorithms */
uint8_t gea; /* Replayed GPRS encryption algorithms */
uint8_t imeisv_request;
uint8_t umts_present;
uint8_t gprs_present;
// Added by LG
uint8_t selected_eea; /* Selected EPS encryption algorithms */
uint8_t selected_eia; /* Selected EPS integrity algorithms */
#define EMM_AS_MSG_TYPE_IDENT 0x01 /* Identification message */
#define EMM_AS_MSG_TYPE_AUTH 0x02 /* Authentication message */
#define EMM_AS_MSG_TYPE_SMC 0x03 /* Security Mode Command */
uint8_t msgType; /* Type of NAS security message to transfer */
} emm_as_security_t;
/*
* EMMAS primitive for connection establishment
* --------------------------------------------
*/
typedef struct emm_as_EPS_identity_s {
const GUTI_t *guti; /* The GUTI, if valid */
const tai_t *tai; /* The last visited registered Tracking
* Area Identity, if available */
const imsi_t *imsi; /* IMSI in case of "AttachWithImsi" */
const imei_t *imei; /* UE's IMEI for emergency bearer services */
} emm_as_EPS_identity_t;
typedef struct emm_as_establish_s {
uint32_t ueid; /* UE lower layer identifier */
emm_as_EPS_identity_t UEid; /* UE's EPS mobile identity */
emm_as_security_data_t sctx;/* EPS NAS security context */
bool switch_off; /* true if the UE is switched off */
uint8_t type; /* Network attach/detach type */
uint8_t RRCcause; /* Connection establishment cause */
uint8_t RRCtype; /* Associated call type */
const plmn_t *plmnID; /* Identifier of the selected PLMN */
uint8_t ksi; /* NAS key set identifier */
uint8_t encryption:4; /* Ciphering algorithm */
uint8_t integrity:4; /* Integrity protection algorithm */
int emm_cause; /* EMM failure cause code */
const GUTI_t *new_guti; /* New GUTI, if re-allocated */
int n_tacs; /* Number of concecutive tracking areas
* the UE is registered to */
tac_t tac; /* Code of the first tracking area the UE
* is registered to */
#define EMM_AS_NAS_INFO_ATTACH 0x01 /* Attach request */
#define EMM_AS_NAS_INFO_DETACH 0x02 /* Detach request */
#define EMM_AS_NAS_INFO_TAU 0x03 /* Tracking Area Update request */
#define EMM_AS_NAS_INFO_SR 0x04 /* Service Request */
#define EMM_AS_NAS_INFO_EXTSR 0x05 /* Extended Service Request */
uint8_t NASinfo; /* Type of initial NAS information to transfer */
OctetString NASmsg; /* NAS message to be transfered within
* initial NAS information message */
} emm_as_establish_t;
/*
* EMMAS primitive for connection release
* --------------------------------------
*/
typedef struct emm_as_release_s {
uint32_t ueid; /* UE lower layer identifier */
const GUTI_t *guti; /* GUTI temporary mobile identity */
#define EMM_AS_CAUSE_AUTHENTICATION 0x01 /* Authentication failure */
#define EMM_AS_CAUSE_DETACH 0x02 /* Detach requested */
uint8_t cause; /* Release cause */
} emm_as_release_t;
/*
* EMMAS primitive for data transfer
* ---------------------------------
*/
typedef struct emm_as_data_s {
uint32_t ueid; /* UE lower layer identifier */
const GUTI_t *guti; /* GUTI temporary mobile identity */
emm_as_security_data_t sctx;/* EPS NAS security context */
bool switch_off; /* true if the UE is switched off */
uint8_t type; /* Network detach type */
uint8_t delivered; /* Data message delivery indicator */
#define EMM_AS_NAS_DATA_ATTACH 0x01 /* Attach complete */
#define EMM_AS_NAS_DATA_DETACH 0x02 /* Detach request */
uint8_t NASinfo; /* Type of NAS information to transfer */
OctetString NASmsg; /* NAS message to be transfered */
} emm_as_data_t;
/*
* EMMAS primitive for paging
* --------------------------
*/
typedef struct emm_as_page_s {} emm_as_page_t;
/*
* EMMAS primitive for status indication
* -------------------------------------
*/
typedef struct emm_as_status_s {
uint32_t ueid; /* UE lower layer identifier */
const GUTI_t *guti; /* GUTI temporary mobile identity */
emm_as_security_data_t sctx;/* EPS NAS security context */
int emm_cause; /* EMM failure cause code */
} emm_as_status_t;
/*
* EMMAS primitive for cell information
* ------------------------------------
*/
typedef struct emm_as_cell_info_s {
uint8_t found; /* Indicates whether a suitable cell is found */
#define EMM_AS_PLMN_LIST_SIZE 6
PLMN_LIST_T(EMM_AS_PLMN_LIST_SIZE) plmnIDs;
/* List of identifiers of available PLMNs */
uint8_t rat; /* Bitmap of Radio Access Technologies */
tac_t tac; /* Tracking Area Code */
ci_t cellID; /* cell identity */
} emm_as_cell_info_t;
/*
* --------------------------------
* Structure of EMMAS-SAP primitive
* --------------------------------
*/
typedef struct emm_as_s {
emm_as_primitive_t primitive;
union {
emm_as_security_t security;
emm_as_establish_t establish;
emm_as_release_t release;
emm_as_data_t data;
emm_as_page_t page;
emm_as_status_t status;
emm_as_cell_info_t cell_info;
} u;
} emm_as_t;
/****************************************************************************/
/******************** G L O B A L V A R I A B L E S ********************/
/****************************************************************************/
/****************************************************************************/
/****************** E X P O R T E D F U N C T I O N S ******************/
/****************************************************************************/
/*
* Defined in LowerLayer.c
* Setup security data according to the given EPS security context
*/
void emm_as_set_security_data(emm_as_security_data_t *data, const void *context,
int is_new, int is_ciphered);
#endif /* __EMM_ASDEF_H__*/