Allow setting of seperate coding schemes for uplink and downlink
This commit is contained in:
parent
3b1332cdb4
commit
499ff415a9
|
@ -1275,7 +1275,7 @@ int write_immediate_assignment(bitvec * dest, uint8_t downlink, uint8_t ra,
|
||||||
bitvec_write_field(dest, wp, usf, 3); // USF
|
bitvec_write_field(dest, wp, usf, 3); // USF
|
||||||
bitvec_write_field(dest, wp, 0, 1); // USF_GRANULARITY
|
bitvec_write_field(dest, wp, 0, 1); // USF_GRANULARITY
|
||||||
bitvec_write_field(dest, wp, 0, 1); // "0" power control: Not Present
|
bitvec_write_field(dest, wp, 0, 1); // "0" power control: Not Present
|
||||||
bitvec_write_field(dest, wp, bts->initial_cs-1, 2); // CHANNEL_CODING_COMMAND
|
bitvec_write_field(dest, wp, bts->initial_cs_ul-1, 2); // CHANNEL_CODING_COMMAND
|
||||||
bitvec_write_field(dest, wp, 1, 1); // TLLI_BLOCK_CHANNEL_CODING
|
bitvec_write_field(dest, wp, 1, 1); // TLLI_BLOCK_CHANNEL_CODING
|
||||||
if (alpha) {
|
if (alpha) {
|
||||||
bitvec_write_field(dest, wp,0x1,1); // ALPHA = present
|
bitvec_write_field(dest, wp,0x1,1); // ALPHA = present
|
||||||
|
@ -1321,7 +1321,7 @@ void write_packet_uplink_assignment(bitvec * dest, uint8_t old_tfi,
|
||||||
}
|
}
|
||||||
|
|
||||||
bitvec_write_field(dest, wp,0x0,1); // Message escape
|
bitvec_write_field(dest, wp,0x0,1); // Message escape
|
||||||
bitvec_write_field(dest, wp,bts->initial_cs-1, 2); // CHANNEL_CODING_COMMAND
|
bitvec_write_field(dest, wp,bts->initial_cs_ul-1, 2); // CHANNEL_CODING_COMMAND
|
||||||
bitvec_write_field(dest, wp,0x1,1); // TLLI_BLOCK_CHANNEL_CODING
|
bitvec_write_field(dest, wp,0x1,1); // TLLI_BLOCK_CHANNEL_CODING
|
||||||
|
|
||||||
bitvec_write_field(dest, wp,0x1,1); // switch TIMING_ADVANCE_VALUE = on
|
bitvec_write_field(dest, wp,0x1,1); // switch TIMING_ADVANCE_VALUE = on
|
||||||
|
@ -1461,7 +1461,7 @@ void write_packet_uplink_ack(RlcMacDownlink_t * block, struct gprs_rlcmac_tbf *t
|
||||||
block->u.Packet_Uplink_Ack_Nack.UPLINK_TFI = tbf->tfi; // Uplink TFI
|
block->u.Packet_Uplink_Ack_Nack.UPLINK_TFI = tbf->tfi; // Uplink TFI
|
||||||
|
|
||||||
block->u.Packet_Uplink_Ack_Nack.UnionType = 0x0; // PU_AckNack_GPRS = on
|
block->u.Packet_Uplink_Ack_Nack.UnionType = 0x0; // PU_AckNack_GPRS = on
|
||||||
block->u.Packet_Uplink_Ack_Nack.u.PU_AckNack_GPRS_Struct.CHANNEL_CODING_COMMAND = bts->initial_cs - 1; // CS1
|
block->u.Packet_Uplink_Ack_Nack.u.PU_AckNack_GPRS_Struct.CHANNEL_CODING_COMMAND = bts->initial_cs_ul - 1; // CS1
|
||||||
block->u.Packet_Uplink_Ack_Nack.u.PU_AckNack_GPRS_Struct.Ack_Nack_Description.FINAL_ACK_INDICATION = final; // FINAL ACK INDICATION
|
block->u.Packet_Uplink_Ack_Nack.u.PU_AckNack_GPRS_Struct.Ack_Nack_Description.FINAL_ACK_INDICATION = final; // FINAL ACK INDICATION
|
||||||
block->u.Packet_Uplink_Ack_Nack.u.PU_AckNack_GPRS_Struct.Ack_Nack_Description.STARTING_SEQUENCE_NUMBER = tbf->dir.ul.v_r; // STARTING_SEQUENCE_NUMBER
|
block->u.Packet_Uplink_Ack_Nack.u.PU_AckNack_GPRS_Struct.Ack_Nack_Description.STARTING_SEQUENCE_NUMBER = tbf->dir.ul.v_r; // STARTING_SEQUENCE_NUMBER
|
||||||
// RECEIVE_BLOCK_BITMAP
|
// RECEIVE_BLOCK_BITMAP
|
||||||
|
|
|
@ -67,7 +67,7 @@ struct gprs_rlcmac_bts {
|
||||||
uint8_t cs2;
|
uint8_t cs2;
|
||||||
uint8_t cs3;
|
uint8_t cs3;
|
||||||
uint8_t cs4;
|
uint8_t cs4;
|
||||||
uint8_t initial_cs;
|
uint8_t initial_cs_dl, initial_cs_ul;
|
||||||
uint8_t force_cs; /* 0=use from BTS 1=use from VTY */
|
uint8_t force_cs; /* 0=use from BTS 1=use from VTY */
|
||||||
uint16_t force_llc_lifetime; /* overrides lifetime from SGSN */
|
uint16_t force_llc_lifetime; /* overrides lifetime from SGSN */
|
||||||
uint8_t t3142;
|
uint8_t t3142;
|
||||||
|
|
|
@ -1290,7 +1290,7 @@ do_resend:
|
||||||
index = tbf->dir.dl.v_s & mod_sns_half;
|
index = tbf->dir.dl.v_s & mod_sns_half;
|
||||||
data = tbf->rlc_block[index];
|
data = tbf->rlc_block[index];
|
||||||
if (tbf->cs == 0) {
|
if (tbf->cs == 0) {
|
||||||
tbf->cs = bts->initial_cs;
|
tbf->cs = bts->initial_cs_dl;
|
||||||
if (tbf->cs < 1 || tbf->cs > 4)
|
if (tbf->cs < 1 || tbf->cs > 4)
|
||||||
tbf->cs = 1;
|
tbf->cs = 1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -405,9 +405,10 @@ bssgp_failed:
|
||||||
}
|
}
|
||||||
if (!bts->force_cs) {
|
if (!bts->force_cs) {
|
||||||
if (info_ind->initial_cs < 1 || info_ind->initial_cs > 4)
|
if (info_ind->initial_cs < 1 || info_ind->initial_cs > 4)
|
||||||
bts->initial_cs = 1;
|
bts->initial_cs_dl = 1;
|
||||||
else
|
else
|
||||||
bts->initial_cs = info_ind->initial_cs;
|
bts->initial_cs_dl = info_ind->initial_cs;
|
||||||
|
bts->initial_cs_ul = bts->initial_cs_dl;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (trx = 0; trx < 8; trx++) {
|
for (trx = 0; trx < 8; trx++) {
|
||||||
|
|
|
@ -141,9 +141,8 @@ int main(int argc, char *argv[])
|
||||||
struct gprs_rlcmac_bts);
|
struct gprs_rlcmac_bts);
|
||||||
if (!gprs_rlcmac_bts)
|
if (!gprs_rlcmac_bts)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
gprs_rlcmac_bts->initial_cs = 1;
|
|
||||||
bts->fc_interval = 1;
|
bts->fc_interval = 1;
|
||||||
bts->initial_cs = 1;
|
bts->initial_cs_dl = bts->initial_cs_ul = 1;
|
||||||
bts->cs1 = 1;
|
bts->cs1 = 1;
|
||||||
bts->t3142 = 20;
|
bts->t3142 = 20;
|
||||||
bts->t3169 = 5;
|
bts->t3169 = 5;
|
||||||
|
|
|
@ -82,7 +82,12 @@ static int config_write_pcu(struct vty *vty)
|
||||||
vty_out(vty, " flow-control-interval %d%s", bts->fc_interval,
|
vty_out(vty, " flow-control-interval %d%s", bts->fc_interval,
|
||||||
VTY_NEWLINE);
|
VTY_NEWLINE);
|
||||||
if (bts->force_cs)
|
if (bts->force_cs)
|
||||||
vty_out(vty, " cs %d%s", bts->initial_cs, VTY_NEWLINE);
|
if (bts->initial_cs_ul == bts->initial_cs_dl)
|
||||||
|
vty_out(vty, " cs %d%s", bts->initial_cs_dl,
|
||||||
|
VTY_NEWLINE);
|
||||||
|
else
|
||||||
|
vty_out(vty, " cs %d %d%s", bts->initial_cs_dl,
|
||||||
|
bts->initial_cs_ul, VTY_NEWLINE);
|
||||||
if (bts->force_llc_lifetime == 0xffff)
|
if (bts->force_llc_lifetime == 0xffff)
|
||||||
vty_out(vty, " queue lifetime infinite%s", VTY_NEWLINE);
|
vty_out(vty, " queue lifetime infinite%s", VTY_NEWLINE);
|
||||||
else if (bts->force_llc_lifetime)
|
else if (bts->force_llc_lifetime)
|
||||||
|
@ -125,14 +130,19 @@ DEFUN(cfg_pcu_fc_interval,
|
||||||
|
|
||||||
DEFUN(cfg_pcu_cs,
|
DEFUN(cfg_pcu_cs,
|
||||||
cfg_pcu_cs_cmd,
|
cfg_pcu_cs_cmd,
|
||||||
"cs <1-4>",
|
"cs <1-4> [<1-4>]",
|
||||||
"Set the Coding Scheme to be used, (overrides BTS config)\n")
|
"Set the Coding Scheme to be used, (overrides BTS config)\n"
|
||||||
|
"Initial CS used\nAlternative uplink CS")
|
||||||
{
|
{
|
||||||
struct gprs_rlcmac_bts *bts = gprs_rlcmac_bts;
|
struct gprs_rlcmac_bts *bts = gprs_rlcmac_bts;
|
||||||
uint8_t cs = atoi(argv[0]);
|
uint8_t cs = atoi(argv[0]);
|
||||||
|
|
||||||
bts->force_cs = 1;
|
bts->force_cs = 1;
|
||||||
bts->initial_cs = cs;
|
bts->initial_cs_dl = cs;
|
||||||
|
if (argc > 1)
|
||||||
|
bts->initial_cs_ul = atoi(argv[1]);
|
||||||
|
else
|
||||||
|
bts->initial_cs_ul = cs;
|
||||||
|
|
||||||
return CMD_SUCCESS;
|
return CMD_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue