Move llc_* fields from BTS to PCU
Change-Id: Iffb916e53fdf99164ad07cd19e4b35a64136307echanges/91/22191/4
parent
519d071131
commit
f473ec9d7a
|
@ -201,9 +201,6 @@ static void bts_init(struct gprs_rlcmac_bts *bts, BTS* bts_obj)
|
|||
bts->n3105 = 8;
|
||||
bts->si13_is_set = false;
|
||||
|
||||
bts->llc_codel_interval_msec = LLC_CODEL_USE_DEFAULT;
|
||||
bts->llc_idle_ack_csec = 10;
|
||||
|
||||
bts->app_info = NULL;
|
||||
bts->bts = bts_obj;
|
||||
bts->T_defs_bts = T_defs_bts;
|
||||
|
|
|
@ -89,10 +89,6 @@ struct gprs_rlcmac_bts {
|
|||
uint16_t mcs_mask; /* Allowed MCS mask from BTS */
|
||||
uint8_t initial_cs_dl, initial_cs_ul;
|
||||
uint8_t initial_mcs_dl, initial_mcs_ul;
|
||||
uint16_t force_llc_lifetime; /* overrides lifetime from SGSN */
|
||||
uint32_t llc_discard_csec;
|
||||
uint32_t llc_idle_ack_csec;
|
||||
uint32_t llc_codel_interval_msec; /* 0=disabled, -1=use default interval */
|
||||
/* Timer defintions */
|
||||
struct osmo_tdef *T_defs_bts; /* timers controlled by BTS, received through PCUIF */
|
||||
uint8_t n3101;
|
||||
|
|
|
@ -676,7 +676,7 @@ static uint32_t compute_bucket_size(struct gprs_rlcmac_bts *bts,
|
|||
uint16_t bucket_time = the_pcu->vty.fc_bucket_time;
|
||||
|
||||
if (bucket_time == 0)
|
||||
bucket_time = bts->force_llc_lifetime;
|
||||
bucket_time = the_pcu->vty.force_llc_lifetime;
|
||||
|
||||
if (bucket_time == 0xffff)
|
||||
bucket_size = FC_MAX_BUCKET_SIZE;
|
||||
|
|
|
@ -121,7 +121,7 @@ struct GprsMs *ms_alloc(struct BTS *bts, uint32_t tlli)
|
|||
ms_set_mode(ms, GPRS);
|
||||
|
||||
if (ms->bts)
|
||||
codel_interval = bts_data(ms->bts)->llc_codel_interval_msec;
|
||||
codel_interval = the_pcu->vty.llc_codel_interval_msec;
|
||||
|
||||
if (codel_interval) {
|
||||
if (codel_interval == LLC_CODEL_USE_DEFAULT)
|
||||
|
|
|
@ -94,6 +94,8 @@ struct gprs_pcu *gprs_pcu_alloc(void *ctx)
|
|||
/* TODO: increase them when CRBB decoding is implemented */
|
||||
pcu->vty.ws_base = 64;
|
||||
pcu->vty.ws_pdch = 0;
|
||||
pcu->vty.llc_codel_interval_msec = LLC_CODEL_USE_DEFAULT;
|
||||
pcu->vty.llc_idle_ack_csec = 10;
|
||||
|
||||
pcu->T_defs = T_defs_pcu;
|
||||
osmo_tdefs_reset(pcu->T_defs);
|
||||
|
|
|
@ -97,6 +97,10 @@ struct gprs_pcu {
|
|||
enum gprs_ns2_dialect ns_dialect; /* Are we talking Gb with IP-SNS (true) or classic Gb? */
|
||||
uint16_t ws_base;
|
||||
uint16_t ws_pdch; /* increase WS by this value per PDCH */
|
||||
uint16_t force_llc_lifetime; /* overrides lifetime from SGSN */
|
||||
uint32_t llc_discard_csec;
|
||||
uint32_t llc_idle_ack_csec;
|
||||
uint32_t llc_codel_interval_msec; /* 0=disabled, -1=use default interval */
|
||||
} vty;
|
||||
|
||||
struct gsmtap_inst *gsmtap;
|
||||
|
|
|
@ -224,8 +224,8 @@ struct msgb *gprs_llc_queue::dequeue(const MetaInfo **info)
|
|||
void gprs_llc_queue::calc_pdu_lifetime(BTS *bts, const uint16_t pdu_delay_csec, struct timespec *tv)
|
||||
{
|
||||
uint16_t delay_csec;
|
||||
if (bts->bts_data()->force_llc_lifetime)
|
||||
delay_csec = bts->bts_data()->force_llc_lifetime;
|
||||
if (bts->pcu->vty.force_llc_lifetime)
|
||||
delay_csec = bts->pcu->vty.force_llc_lifetime;
|
||||
else
|
||||
delay_csec = pdu_delay_csec;
|
||||
|
||||
|
|
|
@ -201,24 +201,24 @@ static int config_write_pcu(struct vty *vty)
|
|||
if (the_pcu->vty.dl_arq_type == EGPRS_ARQ2)
|
||||
vty_out(vty, " egprs dl arq-type arq2%s", VTY_NEWLINE);
|
||||
|
||||
if (bts->force_llc_lifetime == 0xffff)
|
||||
if (the_pcu->vty.force_llc_lifetime == 0xffff)
|
||||
vty_out(vty, " queue lifetime infinite%s", VTY_NEWLINE);
|
||||
else if (bts->force_llc_lifetime)
|
||||
vty_out(vty, " queue lifetime %d%s", bts->force_llc_lifetime,
|
||||
else if (the_pcu->vty.force_llc_lifetime)
|
||||
vty_out(vty, " queue lifetime %d%s", the_pcu->vty.force_llc_lifetime,
|
||||
VTY_NEWLINE);
|
||||
if (bts->llc_discard_csec)
|
||||
vty_out(vty, " queue hysteresis %d%s", bts->llc_discard_csec,
|
||||
if (the_pcu->vty.llc_discard_csec)
|
||||
vty_out(vty, " queue hysteresis %d%s", the_pcu->vty.llc_discard_csec,
|
||||
VTY_NEWLINE);
|
||||
if (bts->llc_idle_ack_csec)
|
||||
vty_out(vty, " queue idle-ack-delay %d%s", bts->llc_idle_ack_csec,
|
||||
if (the_pcu->vty.llc_idle_ack_csec)
|
||||
vty_out(vty, " queue idle-ack-delay %d%s", the_pcu->vty.llc_idle_ack_csec,
|
||||
VTY_NEWLINE);
|
||||
if (bts->llc_codel_interval_msec == LLC_CODEL_USE_DEFAULT)
|
||||
if (the_pcu->vty.llc_codel_interval_msec == LLC_CODEL_USE_DEFAULT)
|
||||
vty_out(vty, " queue codel%s", VTY_NEWLINE);
|
||||
else if (bts->llc_codel_interval_msec == LLC_CODEL_DISABLE)
|
||||
else if (the_pcu->vty.llc_codel_interval_msec == LLC_CODEL_DISABLE)
|
||||
vty_out(vty, " no queue codel%s", VTY_NEWLINE);
|
||||
else
|
||||
vty_out(vty, " queue codel interval %d%s",
|
||||
bts->llc_codel_interval_msec/10, VTY_NEWLINE);
|
||||
the_pcu->vty.llc_codel_interval_msec/10, VTY_NEWLINE);
|
||||
|
||||
if (the_pcu->alloc_algorithm == alloc_algorithm_a)
|
||||
vty_out(vty, " alloc-algorithm a%s", VTY_NEWLINE);
|
||||
|
@ -579,11 +579,8 @@ DEFUN_USRATTR(cfg_pcu_queue_lifetime,
|
|||
"queue lifetime <1-65534>",
|
||||
QUEUE_STR LIFETIME_STR "Lifetime in centi-seconds")
|
||||
{
|
||||
struct gprs_rlcmac_bts *bts = bts_main_data();
|
||||
uint16_t csec = atoi(argv[0]);
|
||||
|
||||
bts->force_llc_lifetime = csec;
|
||||
|
||||
the_pcu->vty.force_llc_lifetime = csec;
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
|
@ -593,10 +590,7 @@ DEFUN_USRATTR(cfg_pcu_queue_lifetime_inf,
|
|||
"queue lifetime infinite",
|
||||
QUEUE_STR LIFETIME_STR "Infinite lifetime")
|
||||
{
|
||||
struct gprs_rlcmac_bts *bts = bts_main_data();
|
||||
|
||||
bts->force_llc_lifetime = 0xffff;
|
||||
|
||||
the_pcu->vty.force_llc_lifetime = 0xffff;
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
|
@ -607,10 +601,7 @@ DEFUN_USRATTR(cfg_pcu_no_queue_lifetime,
|
|||
NO_STR QUEUE_STR "Disable lifetime limit of LLC frame (use value given "
|
||||
"by SGSN)\n")
|
||||
{
|
||||
struct gprs_rlcmac_bts *bts = bts_main_data();
|
||||
|
||||
bts->force_llc_lifetime = 0;
|
||||
|
||||
the_pcu->vty.force_llc_lifetime = 0;
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
|
@ -623,11 +614,8 @@ DEFUN_USRATTR(cfg_pcu_queue_hysteresis,
|
|||
"queue hysteresis <1-65535>",
|
||||
QUEUE_STR QUEUE_HYSTERESIS_STR "Hysteresis in centi-seconds")
|
||||
{
|
||||
struct gprs_rlcmac_bts *bts = bts_main_data();
|
||||
uint16_t csec = atoi(argv[0]);
|
||||
|
||||
bts->llc_discard_csec = csec;
|
||||
|
||||
the_pcu->vty.llc_discard_csec = csec;
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
|
@ -637,10 +625,7 @@ DEFUN_USRATTR(cfg_pcu_no_queue_hysteresis,
|
|||
"no queue hysteresis",
|
||||
NO_STR QUEUE_STR QUEUE_HYSTERESIS_STR)
|
||||
{
|
||||
struct gprs_rlcmac_bts *bts = bts_main_data();
|
||||
|
||||
bts->llc_discard_csec = 0;
|
||||
|
||||
the_pcu->vty.llc_discard_csec = 0;
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
|
@ -651,10 +636,7 @@ DEFUN_USRATTR(cfg_pcu_queue_codel,
|
|||
"queue codel",
|
||||
QUEUE_STR QUEUE_CODEL_STR)
|
||||
{
|
||||
struct gprs_rlcmac_bts *bts = bts_main_data();
|
||||
|
||||
bts->llc_codel_interval_msec = LLC_CODEL_USE_DEFAULT;
|
||||
|
||||
the_pcu->vty.llc_codel_interval_msec = LLC_CODEL_USE_DEFAULT;
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
|
@ -664,11 +646,8 @@ DEFUN_USRATTR(cfg_pcu_queue_codel_interval,
|
|||
"queue codel interval <1-1000>",
|
||||
QUEUE_STR QUEUE_CODEL_STR "Specify interval\n" "Interval in centi-seconds")
|
||||
{
|
||||
struct gprs_rlcmac_bts *bts = bts_main_data();
|
||||
uint16_t csec = atoi(argv[0]);
|
||||
|
||||
bts->llc_codel_interval_msec = 10*csec;
|
||||
|
||||
the_pcu->vty.llc_codel_interval_msec = 10*csec;
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
|
@ -678,10 +657,7 @@ DEFUN_USRATTR(cfg_pcu_no_queue_codel,
|
|||
"no queue codel",
|
||||
NO_STR QUEUE_STR QUEUE_CODEL_STR)
|
||||
{
|
||||
struct gprs_rlcmac_bts *bts = bts_main_data();
|
||||
|
||||
bts->llc_codel_interval_msec = LLC_CODEL_DISABLE;
|
||||
|
||||
the_pcu->vty.llc_codel_interval_msec = LLC_CODEL_DISABLE;
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
|
@ -694,11 +670,8 @@ DEFUN_ATTR(cfg_pcu_queue_idle_ack_delay,
|
|||
QUEUE_STR QUEUE_IDLE_ACK_STR "Idle ACK delay in centi-seconds",
|
||||
CMD_ATTR_IMMEDIATE)
|
||||
{
|
||||
struct gprs_rlcmac_bts *bts = bts_main_data();
|
||||
uint16_t csec = atoi(argv[0]);
|
||||
|
||||
bts->llc_idle_ack_csec = csec;
|
||||
|
||||
the_pcu->vty.llc_idle_ack_csec = csec;
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
|
@ -708,10 +681,7 @@ DEFUN_ATTR(cfg_pcu_no_queue_idle_ack_delay,
|
|||
NO_STR QUEUE_STR QUEUE_IDLE_ACK_STR,
|
||||
CMD_ATTR_IMMEDIATE)
|
||||
{
|
||||
struct gprs_rlcmac_bts *bts = bts_main_data();
|
||||
|
||||
bts->llc_idle_ack_csec = 0;
|
||||
|
||||
the_pcu->vty.llc_idle_ack_csec = 0;
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
|
|
|
@ -202,9 +202,9 @@ void gprs_rlcmac_dl_tbf::cleanup()
|
|||
|
||||
void gprs_rlcmac_dl_tbf::start_llc_timer()
|
||||
{
|
||||
if (bts_data()->llc_idle_ack_csec > 0) {
|
||||
if (the_pcu->vty.llc_idle_ack_csec > 0) {
|
||||
struct timespec tv;
|
||||
csecs_to_timespec(bts_data()->llc_idle_ack_csec, &tv);
|
||||
csecs_to_timespec(the_pcu->vty.llc_idle_ack_csec, &tv);
|
||||
osmo_timer_schedule(&m_llc_timer, tv.tv_sec, tv.tv_nsec / 1000);
|
||||
}
|
||||
}
|
||||
|
@ -348,8 +348,8 @@ struct msgb *gprs_rlcmac_dl_tbf::llc_dequeue(bssgp_bvc_ctx *bctx)
|
|||
const unsigned keep_small_thresh = 60;
|
||||
const MetaInfo *info;
|
||||
|
||||
if (bts_data()->llc_discard_csec)
|
||||
csecs_to_timespec(bts_data()->llc_discard_csec, &hyst_delta);
|
||||
if (the_pcu->vty.llc_discard_csec)
|
||||
csecs_to_timespec(the_pcu->vty.llc_discard_csec, &hyst_delta);
|
||||
|
||||
osmo_clock_gettime(CLOCK_MONOTONIC, &tv_now);
|
||||
timespecadd(&tv_now, &hyst_delta, &tv_now2);
|
||||
|
|
Loading…
Reference in New Issue