Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
oai
openairinterface5G
Commits
a632b032
Commit
a632b032
authored
Dec 10, 2013
by
gauthier
Browse files
Add 802.21 in oaisim exe, work in progress.
git-svn-id:
http://svn.eurecom.fr/openair4G/trunk@4658
818b1a75-f10b-46b9-bf7c-635c3b92a50f
parent
568128e1
Changes
30
Hide whitespace changes
Inline
Side-by-side
common/utils/Makefile.inc
View file @
a632b032
...
...
@@ -6,7 +6,14 @@ ITTI_OBJS += $(ITTI_DIR)/backtrace.o
ITTI_OBJS
+=
$(ITTI_DIR)
/signals.o
ITTI_OBJS
+=
$(ITTI_DIR)
/timer.o
UTILS_OBJS
=
$(ITTI_OBJS)
HASHTABLE_DIR
=
$(COMMON_UTILS_DIR)
/collection/hashtable
HASHTABLE_OBJS
=
$(HASHTABLE_DIR)
/hashtable.o
HASHTABLE_OBJS
+=
$(HASHTABLE_DIR)
/obj_hashtable.o
UTILS_OBJS
=
$(ITTI_OBJS)
$(HASHTABLE_OBJS)
UTILS_incl
=
\
-I
$(COMMON_UTILS_DIR)
\
...
...
openair2/COMMON/messages_def.h
View file @
a632b032
...
...
@@ -9,3 +9,5 @@
#include
"s1ap_messages_def.h"
#include
"sctp_messages_def.h"
#include
"x2ap_messages_def.h"
#include
"ral_messages_def.h"
openair2/COMMON/messages_types.h
View file @
a632b032
...
...
@@ -16,5 +16,6 @@
#include
"s1ap_messages_types.h"
#include
"sctp_messages_types.h"
#include
"x2ap_messages_types.h"
#include
"ral_messages_types.h"
#endif
/* MESSAGES_TYPES_H_ */
openair2/COMMON/ral_messages_def.h
0 → 100755
View file @
a632b032
MESSAGE_DEF
(
RRC_RAL_SYSTEM_CONFIGURATION_IND
,
MESSAGE_PRIORITY_MED
,
rrc_ral_system_configuration_ind_t
,
rrc_ral_system_configuration_ind
)
MESSAGE_DEF
(
RRC_RAL_SYSTEM_INFORMATION_IND
,
MESSAGE_PRIORITY_MED
,
rrc_ral_system_information_ind_t
,
rrc_ral_system_information_ind
)
MESSAGE_DEF
(
RRC_RAL_SCAN_REQ
,
MESSAGE_PRIORITY_MED
,
rrc_ral_scan_req_t
,
rrc_ral_scan_req
)
MESSAGE_DEF
(
RRC_RAL_SCAN_CONF
,
MESSAGE_PRIORITY_MED
,
rrc_ral_scan_conf_t
,
rrc_ral_scan_conf
)
MESSAGE_DEF
(
RRC_RAL_CONFIGURE_THRESHOLD_REQ
,
MESSAGE_PRIORITY_MAX
,
rrc_ral_configure_threshold_req_t
,
rrc_ral_configure_threshold_req
)
MESSAGE_DEF
(
RRC_RAL_CONFIGURE_THRESHOLD_CONF
,
MESSAGE_PRIORITY_MED
,
rrc_ral_configure_threshold_conf_t
,
rrc_ral_configure_threshold_conf
)
MESSAGE_DEF
(
RRC_RAL_MEASUREMENT_REPORT_IND
,
MESSAGE_PRIORITY_MAX
,
rrc_ral_measurement_report_ind_t
,
rrc_ral_measurement_report_ind
)
MESSAGE_DEF
(
RRC_RAL_CONNECTION_ESTABLISHMENT_REQ
,
MESSAGE_PRIORITY_MED
,
rrc_ral_connection_establishment_req_t
,
rrc_ral_connection_establishment_req
)
MESSAGE_DEF
(
RRC_RAL_CONNECTION_ESTABLISHMENT_CONF
,
MESSAGE_PRIORITY_MED
,
rrc_ral_connection_establishment_conf_t
,
rrc_ral_connection_establishment_conf
)
MESSAGE_DEF
(
RRC_RAL_CONNECTION_ESTABLISHMENT_IND
,
MESSAGE_PRIORITY_MED
,
rrc_ral_connection_establishment_ind_t
,
rrc_ral_connection_establishment_ind
)
MESSAGE_DEF
(
RRC_RAL_CONNECTION_REESTABLISHMENT_IND
,
MESSAGE_PRIORITY_MED
,
rrc_ral_connection_reestablishment_ind_t
,
rrc_ral_connection_reestablishment_ind
)
MESSAGE_DEF
(
RRC_RAL_CONNECTION_RECONFIGURATION_IND
,
MESSAGE_PRIORITY_MAX
,
rrc_ral_connection_reconfiguration_ind_t
,
rrc_ral_connection_reconfiguration_ind
)
MESSAGE_DEF
(
RRC_RAL_CONNECTION_RELEASE_REQ
,
MESSAGE_PRIORITY_MED
,
rrc_ral_connection_release_req_t
,
rrc_ral_connection_release_req
)
MESSAGE_DEF
(
RRC_RAL_CONNECTION_RELEASE_CONF
,
MESSAGE_PRIORITY_MED
,
rrc_ral_connection_release_conf_t
,
rrc_ral_connection_release_conf
)
MESSAGE_DEF
(
RRC_RAL_CONNECTION_RELEASE_IND
,
MESSAGE_PRIORITY_MED
,
rrc_ral_connection_release_ind_t
,
rrc_ral_connection_release_ind
)
openair2/COMMON/ral_messages_types.h
0 → 100755
View file @
a632b032
#ifndef RAL_MESSAGES_TYPES_H_
#define RAL_MESSAGES_TYPES_H_
#include
"asn1_constants.h"
#include
"platform_types.h"
/* 802.21 mappings with the RRC protocol :
(Research Report RR-12-265 Mapping of IEEE 802.21 MIH primitives to EPS/LTE protocols March 13 th, 2012, Michelle WETTERWALD, Prof. Christian BONNET )
LINK EVENTS:
Link_Detected System Information
Link_Up RRC Connection establishment
RRC Connection re-establishment
RRC Connection reconfiguration
Link_Down RRC Connection reconfiguration
RRC Connection Release
Link_Parameters_Report Measurement report
Link_Going_Down N/A
Link_Handover_Imminent N/A
Link_Handover_Complete RRC Connection reconfiguration
Link_PDU_Transmit_Status N/A
LINK COMMANDS:
Link_Capability_Discover N/A
Link_Event_Subscribe Measurement configuration
Link_Event_Unsubscribe Measurement configuration
Link_Get_Parameters Measurement configuration
Link_Configure_Thresholds Measurement configuration
Link_Action / Disconnect RRC Connection Release
Link_Action / Low Power N/A
Link_Action / Power Down RRC Connection Release
Link_Action / Power Up RRC Connection establishment
*/
#define RRC_RAL_SYSTEM_CONFIGURATION_IND(mSGpTR) (mSGpTR)->ittiMsg.rrc_ral_system_configuration_ind
#define RRC_RAL_SYSTEM_INFORMATION_IND(mSGpTR) (mSGpTR)->ittiMsg.rrc_ral_system_information_ind
#define RRC_RAL_CONFIGURE_THRESHOLD_REQ(mSGpTR) (mSGpTR)->ittiMsg.rrc_ral_configure_threshold_req
#define RRC_RAL_CONFIGURE_THRESHOLD_CONF(mSGpTR) (mSGpTR)->ittiMsg.rrc_ral_configure_threshold_conf
#define RRC_RAL_MEASUREMENT_REPORT_IND(mSGpTR) (mSGpTR)->ittiMsg.rrc_ral_measurement_report_ind
#define RRC_RAL_CONNECTION_ESTABLISHMENT_REQ(mSGpTR) (mSGpTR)->ittiMsg.rrc_ral_connection_establishment_req
#define RRC_RAL_CONNECTION_ESTABLISHMENT_CONF(mSGpTR) (mSGpTR)->ittiMsg.rrc_ral_connection_establishment_conf
#define RRC_RAL_CONNECTION_ESTABLISHMENT_IND(mSGpTR) (mSGpTR)->ittiMsg.rrc_ral_connection_establishment_ind
#define RRC_RAL_CONNECTION_REESTABLISHMENT_IND(mSGpTR) (mSGpTR)->ittiMsg.rrc_ral_connection_reestablishment_ind
#define RRC_RAL_CONNECTION_RECONFIGURATION_IND(mSGpTR) (mSGpTR)->ittiMsg.rrc_ral_connection_reconfiguration_ind
#define RRC_RAL_CONNECTION_RELEASE_REQ(mSGpTR) (mSGpTR)->ittiMsg.rrc_ral_connection_release_req
#define RRC_RAL_CONNECTION_RELEASE_CONF(mSGpTR) (mSGpTR)->ittiMsg.rrc_ral_connection_release_conf
#define RRC_RAL_CONNECTION_RELEASE_IND(mSGpTR) (mSGpTR)->ittiMsg.rrc_ral_connection_release_ind
#include
"MIH_C_header_codec.h"
typedef
MIH_C_TRANSACTION_ID_T
ral_transaction_id_t
;
typedef
MIH_C_STATUS_T
ral_status_t
;
typedef
MIH_C_CHOICE_T
ral_choice_t
;
typedef
MIH_C_CONFIG_STATUS_T
ral_config_status_t
;
typedef
MIH_C_TH_ACTION_T
ral_th_action_t
;
#define RAL_STATUS_SUCCESS MIH_C_STATUS_SUCCESS
#define RAL_STATUS_UNSPECIFIED_FAILURE MIH_C_STATUS_UNSPECIFIED_FAILURE
#define RAL_STATUS_REJECTED MIH_C_STATUS_REJECTED
#define RAL_STATUS_AUTHORIZATION_FAILURE MIH_C_STATUS_AUTHORIZATION_FAILURE
#define RAL_STATUS_NETWORK_ERROR MIH_C_STATUS_NETWORK_ERROR
#define RAL_3GPP_ADDR_LENGTH MIH_C_3GPP_ADDR_LENGTH
#define RAL_3GPP2_ADDR_LENGTH MIH_C_3GPP2_ADDR_LENGTH
#define RAL_OTHER_L2_ADDR_LENGTH MIH_C_OTHER_L2_ADDR_LENGTH
#define RAL_LINK_SCAN_RSP_LENGTH MIH_C_LINK_SCAN_RSP_LENGTH
#define RAL_THRESHOLD_LIST_LENGTH MIH_C_THRESHOLD_LIST_LENGTH
#define RAL_LINK_ADDR_LIST_LENGTH MIH_C_LINK_ADDR_LIST_LENGTH
#define RAL_QOS_LIST_LENGTH MIH_C_QOS_LIST_LENGTH
#define RAL_LINK_STATUS_REQ_LIST_LENGTH MIH_C_LINK_STATUS_REQ_LIST_LENGTH
#define RAL_LINK_CFG_PARAM_LIST_LENGTH MIH_C_LINK_CFG_PARAM_LIST_LENGTH
typedef
struct
ral_network_id_s
{
u_int16_t
length
;
u_int8_t
val
[
253
];}
ral_network_id_t
;
typedef
struct
ral_link_addr_s
{
u_int16_t
length
;
u_int8_t
val
[
RAL_LINK_ADDR_LIST_LENGTH
];}
ral_link_addr_t
;
typedef
struct
ral_sig_strength_s
{
ral_choice_t
choice
;
union
{
uint8_t
dbm
;
uint8_t
percentage
;
}
_union
;
}
ral_sig_strength_t
;
#define RAL_SIG_STRENGTH_CHOICE_DBM (ral_choice_t)0
#define RAL_SIG_STRENGTH_CHOICE_PERCENTAGE (ral_choice_t)1
// FOR ENB ONLY
typedef
struct
rrc_ral_system_configuration_ind_s
{
plmn_t
plmn_id
;
unsigned
int
cell_id
:
28
;
}
rrc_ral_system_configuration_ind_t
;
// FOR UE ONLY
typedef
struct
rrc_ral_system_information_ind_s
{
plmn_t
plmn_id
;
unsigned
int
cell_id
:
28
;
uint8_t
dbm
;
// sig strength
uint16_t
sinr
;
uint32_t
link_data_rate
;
//the maximum data rate in kb/s
}
rrc_ral_system_information_ind_t
;
typedef
struct
ral_link_scan_resp_s
{
ral_link_addr_t
link_addr
;
ral_network_id_t
network_id
;
ral_sig_strength_t
sig_strength
;
}
ral_link_scan_resp_t
;
typedef
struct
rrc_ral_scan_req_s
{
ral_transaction_id_t
transaction_id
;
}
rrc_ral_scan_req_t
;
typedef
struct
rrc_ral_scan_conf_s
{
ral_transaction_id_t
transaction_id
;
#define RAL_MAX_LINK_SCAN_RESP 16
uint8_t
num_scan_resp
;
ral_link_scan_resp_t
ink_scan_resp
[
RAL_MAX_LINK_SCAN_RESP
];
}
rrc_ral_scan_conf_t
;
typedef
struct
rrc_ral_connection_establishment_req_s
{
ral_transaction_id_t
transaction_id
;
}
rrc_ral_connection_establishment_req_t
;
typedef
struct
rrc_ral_connection_establishment_conf_s
{
ral_transaction_id_t
transaction_id
;
}
rrc_ral_connection_establishment_conf_t
;
typedef
struct
rrc_ral_connection_establishment_ind_s
{
uint16_t
ue_id
;
// may be c-rnti
}
rrc_ral_connection_establishment_ind_t
;
typedef
struct
rrc_ral_connection_reestablishment_ind_s
{
uint16_t
ue_id
;
uint8_t
num_drb
;
rb_id_t
drb_id
[
maxDRB
];
uint8_t
num_srb
;
}
rrc_ral_connection_reestablishment_ind_t
;
typedef
struct
rrc_ral_connection_reconfiguration_ind_s
{
uint16_t
ue_id
;
}
rrc_ral_connection_reconfiguration_ind_t
;
#define RAL_ABOVE_THRESHOLD MIH_C_ABOVE_THRESHOLD
#define RAL_BELOW_THRESHOLD MIH_C_BELOW_THRESHOLD
typedef
struct
ral_threshold_s
{
uint16_t
threshold_val
;
uint8_t
threshold_xdir
;
}
ral_threshold_t
;
typedef
MIH_C_LINK_PARAM_GEN_T
ral_link_param_gen_t
;
#define RAL_LINK_PARAM_GEN_DATA_RATE MIH_C_LINK_PARAM_GEN_DATA_RATE
#define RAL_LINK_PARAM_GEN_SIGNAL_STRENGTH MIH_C_LINK_PARAM_GEN_SIGNAL_STRENGTH
#define RAL_LINK_PARAM_GEN_SINR MIH_C_LINK_PARAM_GEN_SINR
#define RAL_LINK_PARAM_GEN_THROUGHPUT MIH_C_LINK_PARAM_GEN_THROUGHPUT
#define RAL_LINK_PARAM_GEN_PACKET_ERROR_RATE MIH_C_LINK_PARAM_GEN_PACKET_ERROR_RATE
typedef
MIH_C_LINK_PARAM_QOS_T
ral_link_param_qos_t
;
typedef
MIH_C_LINK_PARAM_LTE_T
ral_link_param_lte_t
;
#define RAL_LINK_PARAM_LTE_UE_RSRP MIH_C_LINK_PARAM_LTE_UE_RSRP
#define RAL_LINK_PARAM_LTE_UE_RSRQ MIH_C_LINK_PARAM_LTE_UE_RSRQ
#define RAL_LINK_PARAM_LTE_UE_CQI MIH_C_LINK_PARAM_LTE_UE_CQI
#define RAL_LINK_PARAM_LTE_AVAILABLE_BW MIH_C_LINK_PARAM_LTE_AVAILABLE_BW
#define RAL_LINK_PARAM_LTE_PACKET_DELAY MIH_C_LINK_PARAM_LTE_PACKET_DELAY
#define RAL_LINK_PARAM_LTE_PACKET_LOSS_RATE MIH_C_LINK_PARAM_LTE_PACKET_LOSS_RATE
#define RAL_LINK_PARAM_LTE_L2_BUFFER_STATUS MIH_C_LINK_PARAM_LTE_L2_BUFFER_STATUS
#define RAL_LINK_PARAM_LTE_MOBILE_NODE_CAPABILITIES MIH_C_LINK_PARAM_LTE_MOBILE_NODE_CAPABILITIES
#define RAL_LINK_PARAM_LTE_EMBMS_CAPABILITY MIH_C_LINK_PARAM_LTE_EMBMS_CAPABILITY
#define RAL_LINK_PARAM_LTE_JUMBO_FEASIBILITY MIH_C_LINK_PARAM_LTE_JUMBO_FEASIBILITY
#define RAL_LINK_PARAM_LTE_JUMBO_SETUP_STATUS MIH_C_LINK_PARAM_LTE_JUMBO_SETUP_STATUS
#define RAL_LINK_PARAM_LTE_NUM_ACTIVE_EMBMS_RECEIVERS_PER_FLOW MIH_C_LINK_PARAM_LTE_NUM_ACTIVE_EMBMS_RECEIVERS_PER_FLOW
#define RAL_LINK_PARAM_TYPE_CHOICE_GEN MIH_C_LINK_PARAM_TYPE_CHOICE_GEN
#define RAL_LINK_PARAM_TYPE_CHOICE_QOS MIH_C_LINK_PARAM_TYPE_CHOICE_QOS
#define RAL_LINK_PARAM_TYPE_CHOICE_LTE MIH_C_LINK_PARAM_TYPE_CHOICE_LTE
typedef
struct
ral_link_param_type_s
{
ral_choice_t
choice
;
union
{
ral_link_param_gen_t
link_param_gen
;
ral_link_param_qos_t
link_param_qos
;
ral_link_param_lte_t
link_param_lte
;
}
_union
;
}
ral_link_param_type_t
;
typedef
struct
ral_link_cfg_param_s
{
ral_link_param_type_t
link_param_type
;
#define RAL_LINK_CFG_PARAM_CHOICE_TIMER_NULL 0
#define RAL_LINK_CFG_PARAM_CHOICE_TIMER 1
uint8_t
union_choice
;
union
{
uint8_t
null_attr
;
uint16_t
timer_interval
;
// This timer value (ms) is used to set the interval between periodic reports.
}
_union
;
#define RAL_TH_ACTION_SET_NORMAL_THRESHOLD MIH_C_SET_NORMAL_THRESHOLD
#define RAL_TH_ACTION_SET_ONE_SHOT_THRESHOLD MIH_C_SET_ONE_SHOT_THRESHOLD
#define RAL_TH_ACTION_CANCEL_THRESHOLD MIH_C_CANCEL_THRESHOLD
ral_th_action_t
th_action
;
// indicates what action to apply to the listed thresholds.
// When “Cancel threshold” is selected and no thresholds are specified, then
// all currently configured thresholds for the given LINK_PARAM_TYPE are can-
// celled.
// When “Cancel threshold” is selected and thresholds are specified only those
// configured thresholds for the given LINK_PARAM_TYPE and whose threshold
// value match what was specified are cancelled.
// With “Set one-shot threshold” the listed thresholds are first set and then
// each of the threshold is cancelled as soon as it is crossed for the first
// time.
uint8_t
num_thresholds
;
#define RAL_LINK_CFG_PARAM_MAX_THRESHOLDS 16
ral_threshold_t
thresholds
[
RAL_LINK_CFG_PARAM_MAX_THRESHOLDS
];
}
ral_link_cfg_param_t
;
typedef
struct
rrc_ral_configure_threshold_req_s
{
ral_transaction_id_t
transaction_id
;
#define RAL_MAX_LINK_CFG_PARAMS 16
uint8_t
num_link_cfg_params
;
ral_link_cfg_param_t
link_cfg_params
[
RAL_MAX_LINK_CFG_PARAMS
];
}
rrc_ral_configure_threshold_req_t
;
typedef
struct
ral_link_cfg_status_s
{
ral_link_param_type_t
link_param_type
;
ral_threshold_t
threshold
;
ral_config_status_t
config_status
;
}
ral_link_cfg_status_t
;
typedef
struct
rrc_ral_configure_threshold_conf_s
{
ral_transaction_id_t
transaction_id
;
ral_status_t
status
;
uint8_t
num_link_cfg_params
;
ral_link_cfg_status_t
cfg_status
[
RAL_MAX_LINK_CFG_PARAMS
];
}
rrc_ral_configure_threshold_conf_t
;
typedef
struct
rrc_ral_measurement_report_ind_s
{
}
rrc_ral_measurement_report_ind_t
;
typedef
struct
rrc_ral_connection_release_req_s
{
ral_transaction_id_t
transaction_id
;
uint16_t
ue_id
;
}
rrc_ral_connection_release_req_t
;
typedef
struct
rrc_ral_connection_release_conf_s
{
ral_transaction_id_t
transaction_id
;
uint16_t
ue_id
;
}
rrc_ral_connection_release_conf_t
;
typedef
struct
rrc_ral_connection_release_ind_s
{
uint16_t
ue_id
;
}
rrc_ral_connection_release_ind_t
;
#endif
/* RAL_MESSAGES_TYPES_H_ */
openair2/COMMON/tasks_def.h
View file @
a632b032
...
...
@@ -20,6 +20,9 @@ SUB_TASK_DEF(TASK_L2L1, TASK_PDCP_ENB, 200)
/// Radio Resource Control task
TASK_DEF
(
TASK_RRC_ENB
,
TASK_PRIORITY_MED
,
200
)
/// S1ap task
/// RAL task for ENB
TASK_DEF
(
TASK_RAL_ENB
,
TASK_PRIORITY_MED
,
200
)
TASK_DEF
(
TASK_S1AP
,
TASK_PRIORITY_MED
,
200
)
/// X2ap task, acts as both source and target
TASK_DEF
(
TASK_X2AP
,
TASK_PRIORITY_MED
,
200
)
...
...
@@ -39,4 +42,5 @@ SUB_TASK_DEF(TASK_L2L1, TASK_PDCP_UE, 200)
TASK_DEF
(
TASK_RRC_UE
,
TASK_PRIORITY_MED
,
200
)
/// Non Access Stratum task
TASK_DEF
(
TASK_NAS_UE
,
TASK_PRIORITY_MED
,
200
)
TASK_DEF
(
TASK_RAL_UE
,
TASK_PRIORITY_MED
,
200
)
openair2/LAYER2/PDCP_v10.1.0/pdcp.h
View file @
a632b032
...
...
@@ -361,15 +361,21 @@ protected_pdcp_fifo(void pdcp_fifo_read_input_sdus_from_otg (u32_t frame, u8_t e
/*
* Following two types are utilized between NAS driver and PDCP
*/
typedef
struct
pdcp_data_req_header_t
{
typedef
int
traffic_type_t
;
typedef
struct
pdcp_data_req_header_s
{
rb_id_t
rb_id
;
sdu_size_t
data_size
;
int
inst
;
sdu_size_t
data_size
;
int
inst
;
traffic_type_t
traffic_type
;
}
pdcp_data_req_header_t
;
typedef
struct
pdcp_data_ind_header_t
{
typedef
struct
pdcp_data_ind_header_s
{
rb_id_t
rb_id
;
sdu_size_t
data_size
;
int
inst
;
sdu_size_t
data_size
;
int
inst
;
int
dummy
;
}
pdcp_data_ind_header_t
;
struct
pdcp_netlink_element_s
{
...
...
openair2/LAYER2/PDCP_v10.1.0/pdcp_fifo.c
View file @
a632b032
...
...
@@ -60,6 +60,7 @@ extern int otg_enabled;
#include
"../MAC/extern.h"
#include
"RRC/L2_INTERFACE/openair_rrc_L2_interface.h"
#include
"NAS/DRIVER/LITE/constant.h"
#include
"SIMULATION/ETH_TRANSPORT/extern.h"
#include
"UTIL/OCG/OCG.h"
#include
"UTIL/OCG/OCG_extern.h"
...
...
@@ -312,6 +313,22 @@ int
pdcp_input_sdu_buffer
,
PDCP_DATA_PDU
);
}
}
else
if
((
pdcp_input_header
.
traffic_type
==
OAI_NW_DRV_IPV6_ADDR_TYPE_MULTICAST
)
||
(
pdcp_input_header
.
traffic_type
==
OAI_NW_DRV_IPV4_ADDR_TYPE_MULTICAST
))
{
printf
(
"[MSC_MSG][FRAME %05d][IP][MOD %02d][][--- PDCP_DATA_REQ on MBMS bearer/ %d Bytes --->][PDCP][MOD %02d][RB %02d]
\n
"
,
frame
,
pdcp_read_header
.
inst
,
pdcp_read_header
.
data_size
,
pdcp_read_header
.
inst
,
pdcp_read_header
.
rb_id
);
if
(
pdcp_array
[
pdcp_read_header
.
inst
][
pdcp_read_header
.
rb_id
%
NB_RB_MAX
].
instanciated_instance
)
{
pdcp_data_req
(
pdcp_input_header
.
inst
,
frame
,
eNB_flag
,
pdcp_input_header
.
rb_id
,
RLC_MUI_UNDEFINED
,
RLC_SDU_CONFIRM_NO
,
pdcp_input_header
.
data_size
,
pdcp_input_sdu_buffer
,
PDCP_TM
);
}
}
else
if
(
eNB_flag
)
{
// is a broadcast packet, we have to send this packet on all default RABS of all connected UEs
LOG_D
(
PDCP
,
"Checking if could sent on default rabs
\n
"
);
...
...
@@ -537,12 +554,10 @@ int pdcp_fifo_read_input_sdus (u32_t frame, u8_t eNB_flag, u8_t UE_index, u8_t e
while
(
pdcp_netlink_dequeue_element
(
eNB_flag
,
UE_index
,
eNB_index
,
&
data
)
!=
0
)
{
if
(
data
->
pdcp_read_header
.
rb_id
!=
0
)
{
if
(
pdcp_array
[
data
->
pdcp_read_header
.
inst
][
data
->
pdcp_read_header
.
rb_id
%
NB_RB_MAX
].
instanciated_instance
)
{
#ifdef PDCP_DEBUG
LOG_D
(
PDCP
,
"[MSC_MSG][FRAME %05d][IP][MOD %02d][][--- PDCP_DATA_REQ "
LOG_D
(
PDCP
,
"[FRAME %05d][IP][MOD %02d][][--- PDCP_DATA_REQ "
"/ %d Bytes --->][PDCP][MOD %02d][RB %02d]
\n
"
,
frame
,
data
->
pdcp_read_header
.
inst
,
data
->
pdcp_read_header
.
data_size
,
data
->
pdcp_read_header
.
inst
,
data
->
pdcp_read_header
.
rb_id
);
#endif
pdcp_data_req
(
data
->
pdcp_read_header
.
inst
,
frame
,
...
...
openair2/Makefile
View file @
a632b032
...
...
@@ -134,6 +134,12 @@ nasmesh_netlink.ko:
naslite_netlink_ether.ko
:
(
cd
NAS/DRIVER/LITE
&&
$(MAKE)
-j
$(NUM_CORES)
$(SET_UM)
OAI_NW_DRIVER_TYPE_ETHERNET
=
1
NAS_NETLINK
=
1
OAI_NW_DRIVER_USE_NETLINK
=
1
V
=
1
-C
/usr/src/
$(LINUX_KERNEL)
M
=
`
pwd
`
modules
)
oai_nw_ether.ko
:
(
cd
NAS/DRIVER/LITE
&&
$(MAKE)
-j
$(NUM_CORES)
$(SET_UM)
OAI_NW_DRIVER_TYPE_ETHERNET
=
1
NAS_NETLINK
=
1
OAI_NW_DRIVER_USE_NETLINK
=
1
V
=
1
-C
/usr/src/
$(LINUX_KERNEL)
M
=
`
pwd
`
modules
)
oai_nw_drv.ko
:
(
cd
NAS/DRIVER/LITE
&&
$(MAKE)
-j
$(NUM_CORES)
$(SET_UM)
OAI_NW_DRIVER_TYPE_ETHERNET
=
1
NAS_NETLINK
=
1
OAI_NW_DRIVER_USE_NETLINK
=
1
V
=
1
-C
/usr/src/
$(LINUX_KERNEL)
M
=
`
pwd
`
modules
)
nasmesh_netlink_address_fix.ko
:
(
cd
NAS/DRIVER/MESH
&&
$(MAKE)
-j
$(NUM_CORES)
$(SET_UM)
NAS_NETLINK
=
1
ADDRESS_FIX
=
1
V
=
1
-C
/usr/src/
$(LINUX_KERNEL)
M
=
`
pwd
`
modules
)
...
...
openair2/NAS/DRIVER/LITE/Makefile
View file @
a632b032
...
...
@@ -92,7 +92,7 @@ obj-m += oai_nw_drv.o
oai_nw_drv-objs
+=
device.o
oai_nw_drv-objs
+=
common.o
oai_nw_drv-objs
+=
ioctl.o
#
oai_nw_drv-objs += classifier.o
oai_nw_drv-objs
+=
classifier.o
oai_nw_drv-objs
+=
tool.o
ifdef
OAI_NW_DRIVER_USE_NETLINK
oai_nw_drv-objs
+=
netlink.o
...
...
openair2/NAS/DRIVER/LITE/classifier.c
View file @
a632b032
...
...
@@ -148,168 +148,59 @@
&& ((((__const uint8_t *) (a))[3] & (((__const uint8_t *) (m))[3])) == (((__const uint8_t *) (b))[3] & (((__const uint8_t *) (m))[3]))))
//#define OAI_DRV_DEBUG_CLASS
//#define OAI_DRV_DEBUG_SEND
//---------------------------------------------------------------------------
void
oai_nw_drv_create_mask_ipv6_addr
(
struct
in6_addr
*
masked_addrP
,
int
prefix_len
){
// Find the IP traffic type (UNICAST, MULTICAST, BROADCAST)
traffic_type_t
oai_nw_drv_find_traffic_type
(
struct
sk_buff
*
skb
)
{
//---------------------------------------------------------------------------
int
u6_addr8_index
;
int
u6_addr1_index
;
int
index
;
masked_addrP
->
s6_addr32
[
0
]
=
0xFFFFFFFF
;
masked_addrP
->
s6_addr32
[
1
]
=
0xFFFFFFFF
;
masked_addrP
->
s6_addr32
[
2
]
=
0xFFFFFFFF
;
masked_addrP
->
s6_addr32
[
3
]
=
0xFFFFFFFF
;
switch
(
prefix_len
)
{
case
128
:
return
;
case
112
:
masked_addrP
->
s6_addr32
[
3
]
=
htonl
(
0xFFFF0000
);
return
;
case
96
:
masked_addrP
->
s6_addr32
[
3
]
=
0x00000000
;
return
;
case
80
:
masked_addrP
->
s6_addr32
[
2
]
=
htonl
(
0xFFFF0000
);
masked_addrP
->
s6_addr32
[
3
]
=
0x00000000
;
return
;
case
64
:
masked_addrP
->
s6_addr32
[
2
]
=
0x00000000
;
masked_addrP
->
s6_addr32
[
3
]
=
0x00000000
;
return
;
case
48
:
masked_addrP
->
s6_addr32
[
1
]
=
htonl
(
0xFFFF0000
);
masked_addrP
->
s6_addr32
[
2
]
=
0x00000000
;
masked_addrP
->
s6_addr32
[
3
]
=
0x00000000
;
return
;
case
32
:
masked_addrP
->
s6_addr32
[
1
]
=
0x00000000
;
masked_addrP
->
s6_addr32
[
2
]
=
0x00000000
;
masked_addrP
->
s6_addr32
[
3
]
=
0x00000000
;
return
;
case
16
:
masked_addrP
->
s6_addr32
[
0
]
=
htonl
(
0xFFFF0000
);
masked_addrP
->
s6_addr32
[
1
]
=
0x00000000
;
masked_addrP
->
s6_addr32
[
2
]
=
0x00000000
;
masked_addrP
->
s6_addr32
[
3
]
=
0x00000000
;
return
;
default:
u6_addr8_index
=
prefix_len
>>
3
;
u6_addr1_index
=
prefix_len
&
0x07
;
for
(
index
=
u6_addr8_index
;
index
<
16
;
index
++
)
{
masked_addrP
->
s6_addr
[
index
]
=
0
;
}
if
(
u6_addr1_index
>
0
)
{
masked_addrP
->
s6_addr
[
u6_addr8_index
+
1
]
=
htons
(
0xFF
<<
(
8
-
u6_addr1_index
));
}
for
(
index
=
0
;
index
<
4
;
index
++
)
{
masked_addrP
->
s6_addr32
[
index
]
=
htonl
(
masked_addrP
->
s6_addr32
[
index
]);
}
}
}
//---------------------------------------------------------------------------
void
oai_nw_drv_create_mask_ipv4_addr
(
struct
in_addr
*
masked_addrP
,
int
prefix_len
){
//---------------------------------------------------------------------------
if
(
prefix_len
>
32
)
{
prefix_len
=
32
;
}
masked_addrP
->
s_addr
=
htonl
(
0xFFFFFFFF
<<
(
32
-
prefix_len
));
return
;
}
//---------------------------------------------------------------------------
// Search the entity with the IPv6 address 'addr'
// Navid: the ipv6 classifier is not fully tested
struct
cx_entity
*
oai_nw_drv_find_cx6
(
struct
sk_buff
*
skb
,
unsigned
char
dscp
,
struct
oai_nw_drv_priv
*
gpriv
,
int
inst
,
int
*
paddr_type
,
unsigned
char
*
cx_searcher
)
{
//---------------------------------------------------------------------------
unsigned
char
cxi
;
struct
cx_entity
*
cx
=
NULL
;
struct
classifier_entity
*
sclassifier
=
NULL
;
u32
mc_addr_hdr
;
struct
in6_addr
masked_addr
;
traffic_type_t
traffic_type
=
OAI_NW_DRV_IPVX_ADDR_TYPE_UNKNOWN
;
if
(
skb
!=
NULL
)
{
switch
(
ntohs
(
skb
->
protocol
))
{
case
ETH_P_IPV6
:
traffic_type
=
OAI_NW_DRV_IPV6_ADDR_TYPE_UNKNOWN
;
#ifdef OAI_DRV_DEBUG_CLASS
printk
(
"SOURCE ADDR %X:%X:%X:%X:%X:%X:%X:%X"
,
NIP6ADDR
(
&
(
ipv6_hdr
(
skb
)
->
saddr
)));
printk
(
" DEST ADDR %X:%X:%X:%X:%X:%X:%X:%X
\n
"
,
NIP6ADDR
(
&
(
ipv6_hdr
(
skb
)
->
daddr
)));
#endif
mc_addr_hdr
=
ntohl
(
ipv6_hdr
(
skb
)
->
daddr
.
in6_u
.
u6_addr32
[
0
]);
//printk(" mc_addr_hdr %08X\n",mc_addr_hdr);
// First check if multicast [1st octet is FF]
if
((
mc_addr_hdr
&
0xFF000000
)
==
0xFF000000
)
{
// packet type according to the scope of the multicast packet
// we don't consider RPT bits in second octet [maybe done later if needed]
switch
(
mc_addr_hdr
&
0x000F0000
)
{
case
(
0x00020000
):
*
paddr_type
=
OAI_NW_DRV_IPV6_ADDR_TYPE_MC_SIGNALLING
;
#ifdef OAI_DRV_DEBUG_CLASS
printk
(
"nasrg_CLASS_cx6: multicast packet - signalling
\n
"
);
#endif
break
;
case
(
0x000E0000
):
*
paddr_type
=
OAI_NW_DRV_IPV6_ADDR_TYPE_MC_MBMS
;
//*pmbms_ix = 0;
//cx=gpriv->cx; // MBMS associate to Mobile 0
#ifdef OAI_DRV_DEBUG_CLASS
printk
(
"nasrg_CLASS_cx6: multicast packet - MBMS data
\n
"
);
#endif
break
;
default:
printk
(
"nasrg_CLASS_cx6: default
\n
"
);
*
paddr_type
=
OAI_NW_DRV_IPV6_ADDR_TYPE_UNKNOWN
;
//*pmbms_ix = NASRG_MBMS_SVCES_MAX;
}
if
(
IN6_IS_ADDR_MULTICAST
(
&
ipv6_hdr
(
skb
)
->
daddr
.
in6_u
.
u6_addr32
[
0
]))
{
traffic_type
=
OAI_NW_DRV_IPV6_ADDR_TYPE_MULTICAST
;
}
else
{
*
paddr_type
=
OAI_NW_DRV_IPV6_ADDR_TYPE_UNICAST
;
for
(
cxi
=*
cx_searcher
;
cxi
<
OAI_NW_DRV_CX_MAX
;
cxi
++
)
{
(
*
cx_searcher
)
++
;
sclassifier
=
gpriv
->
cx
[
cxi
].
sclassifier
[
dscp
];
while
(
sclassifier
!=
NULL
)
{
if
((
sclassifier
->
ip_version
==
OAI_NW_DRV_IP_VERSION_6
)
||
(
sclassifier
->
ip_version
==
OAI_NW_DRV_IP_VERSION_ALL
))
{
// verify that this is an IPv6 rule
/*LGif (IN6_IS_ADDR_UNSPECIFIED(&(sclassifier->daddr.ipv6))) {
printk("oai_nw_drv_find_cx6: addr is null \n");
sclassifier = sclassifier->next;
continue;
}*/
#ifdef OAI_DRV_DEBUG_CLASS
printk
(
"cx %d : DSCP %d %X:%X:%X:%X:%X:%X:%X:%X
\n
"
,
cxi
,
dscp
,
NIP6ADDR
(
&
(
sclassifier
->
daddr
.
ipv6
)));
#endif //OAI_DRV_DEBUG_CLASS
//if ((dst = (unsigned int*)&(((struct rt6_info *)skbdst)->rt6i_gateway)) == 0){
// LG: STRANGE
if
(
IN6_IS_ADDR_UNSPECIFIED
(
&
ipv6_hdr
(
skb
)
->
daddr
))
{
printk
(
"oai_nw_drv_find_cx6: dst addr is null
\n
"
);
sclassifier
=
sclassifier
->
next
;
continue
;
}
oai_nw_drv_create_mask_ipv6_addr
(
&
masked_addr
,
sclassifier
->
dplen
);
if
(
IN6_ARE_ADDR_MASKED_EQUAL
(
&
ipv6_hdr
(
skb
)
->
daddr
,
&
(
sclassifier
->
daddr
.
ipv6
),
&
masked_addr
))
{
#ifdef OAI_DRV_DEBUG_CLASS
printk
(
"oai_nw_drv_find_cx6: found cx %d: %X:%X:%X:%X:%X:%X:%X:%X
\n
"
,
cxi
,
NIP6ADDR
(
&
(
sclassifier
->
daddr
.
ipv6
)));
#endif //OAI_DRV_DEBUG_CLASS
return
&
gpriv
->
cx
[
cxi
];
}
}