//----------------------------------------------------------------------------- void rlc_um_configure( rlc_um_entity_t * const rlc_pP, const frame_t frameP, const uint32_t timer_reorderingP, const uint32_t rx_sn_field_lengthP, const uint32_t tx_sn_field_lengthP, const uint32_t is_mXchP) //----------------------------------------------------------------------------- { if (rx_sn_field_lengthP == 10) { rlc_pP->rx_sn_length = 10; rlc_pP->rx_sn_modulo = RLC_UM_SN_10_BITS_MODULO; rlc_pP->rx_um_window_size = RLC_UM_WINDOW_SIZE_SN_10_BITS; rlc_pP->rx_header_min_length_in_bytes = 2; } else if (rx_sn_field_lengthP == 5) { rlc_pP->rx_sn_length = 5; rlc_pP->rx_sn_modulo = RLC_UM_SN_5_BITS_MODULO; rlc_pP->rx_um_window_size = RLC_UM_WINDOW_SIZE_SN_5_BITS; rlc_pP->rx_header_min_length_in_bytes = 1; } else if (rx_sn_field_lengthP != 0) { LOG_E(RLC, "[FRAME %05d][%s][RLC_UM][MOD %u/%u][RB %u][CONFIGURE] INVALID RX SN LENGTH %d BITS NOT IMPLEMENTED YET, RLC NOT CONFIGURED\n", frameP, (rlc_pP->is_enb) ? "eNB" : "UE", rlc_pP->enb_module_id, rlc_pP->ue_module_id, rlc_pP->rb_id, rx_sn_field_lengthP); return; } if (tx_sn_field_lengthP == 10) { rlc_pP->tx_sn_length = 10; rlc_pP->tx_sn_modulo = RLC_UM_SN_10_BITS_MODULO; rlc_pP->tx_um_window_size = RLC_UM_WINDOW_SIZE_SN_10_BITS; rlc_pP->tx_header_min_length_in_bytes = 2; } else if (tx_sn_field_lengthP == 5) { rlc_pP->tx_sn_length = 5; rlc_pP->tx_sn_modulo = RLC_UM_SN_5_BITS_MODULO; rlc_pP->tx_um_window_size = RLC_UM_WINDOW_SIZE_SN_5_BITS; rlc_pP->tx_header_min_length_in_bytes = 1; } else if (tx_sn_field_lengthP != 0) { LOG_E(RLC, "[FRAME %05d][%s][RLC_UM][MOD %02d/%02][RB %u][CONFIGURE] INVALID RX SN LENGTH %d BITS NOT IMPLEMENTED YET, RLC NOT CONFIGURED\n", frameP, (rlc_pP->is_enb) ? "eNB" : "UE", rlc_pP->enb_module_id, rlc_pP->ue_module_id, rlc_pP->rb_id, tx_sn_field_lengthP); return; } if (is_mXchP > 0) { rlc_pP->tx_um_window_size = 0; rlc_pP->rx_um_window_size = 0; } rlc_pP->is_mxch = is_mXchP; rlc_pP->last_reassemblied_sn = rlc_pP->rx_sn_modulo - 1; rlc_pP->last_reassemblied_missing_sn = rlc_pP->rx_sn_modulo - 1; rlc_pP->reassembly_missing_sn_detected = 0; // timers rlc_um_init_timer_reordering(rlc_pP, timer_reorderingP); rlc_pP->first_pdu = 1; rlc_um_reset_state_variables (rlc_pP); }
//----------------------------------------------------------------------------- void rlc_um_configure( const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t * const rlc_pP, const uint32_t timer_reorderingP, const uint32_t rx_sn_field_lengthP, const uint32_t tx_sn_field_lengthP, const uint32_t is_mXchP) { if (rx_sn_field_lengthP == 10) { rlc_pP->rx_sn_length = 10; rlc_pP->rx_sn_modulo = RLC_UM_SN_10_BITS_MODULO; rlc_pP->rx_um_window_size = RLC_UM_WINDOW_SIZE_SN_10_BITS; rlc_pP->rx_header_min_length_in_bytes = 2; } else if (rx_sn_field_lengthP == 5) { rlc_pP->rx_sn_length = 5; rlc_pP->rx_sn_modulo = RLC_UM_SN_5_BITS_MODULO; rlc_pP->rx_um_window_size = RLC_UM_WINDOW_SIZE_SN_5_BITS; rlc_pP->rx_header_min_length_in_bytes = 1; } else if (rx_sn_field_lengthP != 0) { LOG_E(RLC, PROTOCOL_RLC_UM_CTXT_FMT" [CONFIGURE] RB %u INVALID RX SN LENGTH %d BITS NOT IMPLEMENTED YET, RLC NOT CONFIGURED\n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP,rlc_pP), rlc_pP->rb_id, rx_sn_field_lengthP); return; } if (tx_sn_field_lengthP == 10) { rlc_pP->tx_sn_length = 10; rlc_pP->tx_sn_modulo = RLC_UM_SN_10_BITS_MODULO; rlc_pP->tx_um_window_size = RLC_UM_WINDOW_SIZE_SN_10_BITS; rlc_pP->tx_header_min_length_in_bytes = 2; } else if (tx_sn_field_lengthP == 5) { rlc_pP->tx_sn_length = 5; rlc_pP->tx_sn_modulo = RLC_UM_SN_5_BITS_MODULO; rlc_pP->tx_um_window_size = RLC_UM_WINDOW_SIZE_SN_5_BITS; rlc_pP->tx_header_min_length_in_bytes = 1; } else if (tx_sn_field_lengthP != 0) { LOG_E(RLC, PROTOCOL_RLC_UM_CTXT_FMT" [CONFIGURE] RB %u INVALID RX SN LENGTH %d BITS NOT IMPLEMENTED YET, RLC NOT CONFIGURED\n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP,rlc_pP), rlc_pP->rb_id, tx_sn_field_lengthP); return; } if (is_mXchP > 0) { rlc_pP->tx_um_window_size = 0; rlc_pP->rx_um_window_size = 0; } rlc_pP->is_mxch = is_mXchP; rlc_pP->last_reassemblied_sn = rlc_pP->rx_sn_modulo - 1; rlc_pP->last_reassemblied_missing_sn = rlc_pP->rx_sn_modulo - 1; rlc_pP->reassembly_missing_sn_detected = 0; // timers rlc_um_init_timer_reordering(ctxt_pP,rlc_pP, timer_reorderingP); rlc_pP->first_pdu = 1; rlc_um_reset_state_variables (ctxt_pP,rlc_pP); }