From bd15c6c2f5d6511c8b4fd6587cc770a6ac19eed4 Mon Sep 17 00:00:00 2001
From: Cedric Roux <cedric.roux@eurecom.fr>
Date: Wed, 13 Nov 2013 09:10:04 +0000
Subject: [PATCH] - Some new messages for S1AP
git-svn-id: http://svn.eurecom.fr/openair4G/trunk@4376 818b1a75-f10b-46b9-bf7c-635c3b92a50f
---
openair2/COMMON/s1ap_messages_def.h | 16 +++--
openair2/COMMON/s1ap_messages_types.h | 91 ++++++++++++++++++++++++---
2 files changed, 95 insertions(+), 12 deletions(-)
diff --git a/openair2/COMMON/s1ap_messages_def.h b/openair2/COMMON/s1ap_messages_def.h
index 81c705ec10..a05951bccd 100644
--- a/openair2/COMMON/s1ap_messages_def.h
+++ b/openair2/COMMON/s1ap_messages_def.h
@@ -1,4 +1,12 @@
-MESSAGE_DEF(S1AP_REGISTER_ENB , MESSAGE_PRIORITY_MED, s1ap_register_eNB_t , s1ap_register_eNB )
-MESSAGE_DEF(S1AP_NAS_FIRST_REQ, MESSAGE_PRIORITY_MED, s1ap_nas_first_req_t, s1ap_nas_first_req)
-MESSAGE_DEF(S1AP_UPLINK_NAS , MESSAGE_PRIORITY_MED, s1ap_uplink_nas_t , s1ap_uplink_nas )
-MESSAGE_DEF(S1AP_DOWNLINK_NAS , MESSAGE_PRIORITY_MED, s1ap_downlink_nas_t , s1ap_downlink_nas )
\ No newline at end of file
+/* eNB application layer -> S1AP messages */
+MESSAGE_DEF(S1AP_REGISTER_ENB , MESSAGE_PRIORITY_MED, s1ap_register_eNB_t , s1ap_register_eNB )
+
+/* RRC -> S1AP messages */
+MESSAGE_DEF(S1AP_NAS_FIRST_REQ , MESSAGE_PRIORITY_MED, s1ap_nas_first_req_t , s1ap_nas_first_req)
+MESSAGE_DEF(S1AP_UPLINK_NAS , MESSAGE_PRIORITY_MED, s1ap_uplink_nas_t , s1ap_uplink_nas )
+MESSAGE_DEF(S1AP_UE_CAPABILITIES_IND , MESSAGE_PRIORITY_MED, s1ap_ue_cap_info_ind_t , s1ap_ue_cap_info_ind)
+MESSAGE_DEF(S1AP_INITIAL_CONTEXT_SETUP_RESP, MESSAGE_PRIORITY_MED, s1ap_initial_context_setup_resp_t, s1ap_initial_context_setup_resp)
+
+/* S1AP -> RRC messages */
+MESSAGE_DEF(S1AP_DOWNLINK_NAS , MESSAGE_PRIORITY_MED, s1ap_downlink_nas_t , s1ap_downlink_nas )
+MESSAGE_DEF(S1AP_INITIAL_CONTEXT_SETUP_REQ , MESSAGE_PRIORITY_MED, s1ap_initial_context_setup_req_t , s1ap_initial_context_setup_req )
\ No newline at end of file
diff --git a/openair2/COMMON/s1ap_messages_types.h b/openair2/COMMON/s1ap_messages_types.h
index 2d21ab46bc..5af78391d6 100644
--- a/openair2/COMMON/s1ap_messages_types.h
+++ b/openair2/COMMON/s1ap_messages_types.h
@@ -20,6 +20,16 @@ typedef struct {
char ipv6_address[40];
} net_ip_address_t;
+/* Maximum number of e-rabs to be setup/deleted in a single message.
+ * Even if only one bearer will be modified by message.
+ */
+#define S1AP_MAX_E_RAB 11
+
+/* Length of the transport layer address string
+ * 160 bits / 8 bits by char.
+ */
+#define S1AP_TRANSPORT_LAYER_ADDRESS_SIZE (160 / 8)
+
#define S1AP_MAX_NB_MME_IP_ADDRESS 10
/* Provides the establishment cause for the RRC connection request as provided
@@ -66,9 +76,52 @@ typedef struct {
} nas_pdu_t, ue_radio_cap_t;
typedef struct {
- /* For virtual mode, mod_id of the eNB as defined in the rest of the L1/L2 stack */
- uint8_t mod_id;
+ /* Length of the transport layer address buffer. S1AP layer received a
+ * bit string<1..160> containing one of the following addresses: ipv4,
+ * ipv6, or ipv4 and ipv6. The layer doesn't interpret the buffer but
+ * silently forward it to S1-U.
+ */
+ uint8_t length;
+ uint8_t buffer[20];
+} transport_layer_addr_t;
+
+typedef struct {
+ uint8_t qci;
+
+} e_rab_level_qos_parameter_t;
+
+typedef struct {
+ /* Unique e_rab_id for the UE. */
+ uint8_t e_rab_id;
+ /* Quality of service for this e_rab */
+ e_rab_level_qos_parameter_t qos;
+ /* The NAS PDU should be forwarded by the RRC layer to the NAS layer */
+ nas_pdu_t nas_pdu;
+ /* The transport layer address for the IP packets */
+ transport_layer_addr_t sgw_addr;
+ /* S-GW Tunnel endpoint identifier */
+ uint32_t gtp_teid;
+} e_rab_t;
+
+typedef struct {
+ /* Unique e_rab_id for the UE. */
+ uint8_t e_rab_id;
+
+ /* The transport layer address for the IP packets */
+ transport_layer_addr_t eNB_addr;
+
+ /* S-GW Tunnel endpoint identifier */
+ uint32_t gtp_teid;
+} e_rab_setup_t;
+
+typedef struct {
+ /* Unique e_rab_id for the UE. */
+ uint8_t e_rab_id;
+ /* Cause of the failure */
+ // cause_t cause;
+} e_rab_failed_t;
+typedef struct {
/* Unique eNB_id to identify the eNB within EPC.
* For macro eNB ids this field should be 20 bits long.
* For home eNB ids this field should be 28 bits long.
@@ -110,9 +163,6 @@ typedef struct {
* will be the unique identifier used between RRC and S1AP.
*/
typedef struct {
- /* For virtual mode, mod_id of the eNB as defined in the rest of the L1/L2 stack */
- uint8_t mod_id;
-
/* RNTI of the mobile */
uint16_t rnti;
@@ -129,9 +179,6 @@ typedef struct {
} s1ap_nas_first_req_t;
typedef struct {
- /* For virtual mode, mod_id of the eNB as defined in the rest of the L1/L2 stack */
- uint8_t mod_id;
-
/* Unique UE identifier within an eNB */
unsigned eNB_ue_s1ap_id:24;
@@ -141,4 +188,32 @@ typedef struct {
typedef s1ap_uplink_nas_t s1ap_downlink_nas_t;
+typedef struct {
+ unsigned eNB_ue_s1ap_id:24;
+
+ /* Number of e_rab to be setup in the list */
+ uint8_t nb_of_e_rabs;
+ /* list of e_rab to be setup by RRC layers */
+ e_rab_t e_rab_param[S1AP_MAX_E_RAB];
+} s1ap_initial_context_setup_req_t;
+
+typedef struct {
+ unsigned eNB_ue_s1ap_id:24;
+
+ /* Number of e_rab setup-ed in the list */
+ uint8_t nb_of_e_rabs;
+ /* list of e_rab setup-ed by RRC layers */
+ e_rab_setup_t e_rabs[S1AP_MAX_E_RAB];
+
+ /* Number of e_rab failed to be setup in list */
+ uint8_t nb_of_e_rabs_failed;
+ /* list of e_rabs that failed to be setup */
+ e_rab_failed_t e_rabs_failed[S1AP_MAX_E_RAB];
+} s1ap_initial_context_setup_resp_t;
+
+typedef struct {
+ unsigned eNB_ue_s1ap_id:24;
+ ue_radio_cap_t ue_radio_cap;
+} s1ap_ue_cap_info_ind_t;
+
#endif /* S1AP_MESSAGES_TYPES_H_ */
--
GitLab