Receive cell informations via PCU socket interface
These informations provide RAI, timers, counters and other attributes to
the BSSGP and RLC/MAC processes.
The attributes are stored in gprs_rlcmac_bts global structure.
diff --git a/src/sysmo_l1_if.cpp b/src/sysmo_l1_if.cpp
index 106d40b..89d7ab8 100644
--- a/src/sysmo_l1_if.cpp
+++ b/src/sysmo_l1_if.cpp
@@ -34,6 +34,7 @@
#include <gprs_rlcmac.h>
#include <pcu_l1_if.h>
#include <gprs_debug.h>
+#include <gprs_bssgp_pcu.h>
#include "../../osmo-bts/include/osmo-bts/pcuif_proto.h"
static int pcu_sock_send(struct msgb *msg);
@@ -236,12 +237,13 @@
int rc = 0;
int trx, ts, tfi;
struct gprs_rlcmac_tbf *tbf;
-// uint8_t si13[23];
+ int i;
LOGP(DL1IF, LOGL_INFO, "Info indication received:\n");
if (!(info_ind->flags & PCU_IF_FLAG_ACTIVE)) {
LOGP(DL1IF, LOGL_NOTICE, "BTS not available\n");
+bssgp_failed:
/* free all TBF */
for (trx = 0; trx < 8; trx++) {
bts->trx[trx].arfcn = info_ind->trx[trx].arfcn;
@@ -256,6 +258,73 @@
return 0;
}
LOGP(DL1IF, LOGL_INFO, "BTS available\n");
+ LOGP(DL1IF, LOGL_INFO, " mcc=%d\n", info_ind->mcc);
+ LOGP(DL1IF, LOGL_INFO, " mnc=%d\n", info_ind->mnc);
+ LOGP(DL1IF, LOGL_INFO, " lac=%d\n", info_ind->lac);
+ LOGP(DL1IF, LOGL_INFO, " rac=%d\n", info_ind->rac);
+ LOGP(DL1IF, LOGL_INFO, " cell_id=%d\n", info_ind->cell_id);
+ LOGP(DL1IF, LOGL_INFO, " nsei=%d\n", info_ind->nsei);
+ LOGP(DL1IF, LOGL_INFO, " nse_timer=%d %d %d %d %d %d %d\n",
+ info_ind->nse_timer[0], info_ind->nse_timer[1],
+ info_ind->nse_timer[2], info_ind->nse_timer[3],
+ info_ind->nse_timer[4], info_ind->nse_timer[5],
+ info_ind->nse_timer[6]);
+ LOGP(DL1IF, LOGL_INFO, " cell_timer=%d %d %d %d %d %d %d %d %d %d %d\n",
+ info_ind->cell_timer[0], info_ind->cell_timer[1],
+ info_ind->cell_timer[2], info_ind->cell_timer[3],
+ info_ind->cell_timer[4], info_ind->cell_timer[5],
+ info_ind->cell_timer[6], info_ind->cell_timer[7],
+ info_ind->cell_timer[8], info_ind->cell_timer[9],
+ info_ind->cell_timer[10]);
+ LOGP(DL1IF, LOGL_INFO, " repeat_time=%d\n", info_ind->repeat_time);
+ LOGP(DL1IF, LOGL_INFO, " repeat_count=%d\n", info_ind->repeat_count);
+ LOGP(DL1IF, LOGL_INFO, " bvci=%d\n", info_ind->bvci);
+ LOGP(DL1IF, LOGL_INFO, " t3142=%d\n", info_ind->t3142);
+ LOGP(DL1IF, LOGL_INFO, " t3169=%d\n", info_ind->t3169);
+ LOGP(DL1IF, LOGL_INFO, " t3191=%d\n", info_ind->t3191);
+ LOGP(DL1IF, LOGL_INFO, " t3193=%d (ms)\n", info_ind->t3193_10ms * 10);
+ LOGP(DL1IF, LOGL_INFO, " t3195=%d\n", info_ind->t3195);
+ LOGP(DL1IF, LOGL_INFO, " n3101=%d\n", info_ind->n3101);
+ LOGP(DL1IF, LOGL_INFO, " n3103=%d\n", info_ind->n3103);
+ LOGP(DL1IF, LOGL_INFO, " n3105=%d\n", info_ind->n3105);
+ LOGP(DL1IF, LOGL_INFO, " cv_countdown=%d\n", info_ind->cv_countdown);
+ LOGP(DL1IF, LOGL_INFO, " dl_tbf_ext=%d\n", info_ind->dl_tbf_ext);
+ LOGP(DL1IF, LOGL_INFO, " ul_tbf_ext=%d\n", info_ind->ul_tbf_ext);
+ for (i = 0; i < 4; i++) {
+ if ((info_ind->flags & (PCU_IF_FLAG_CS1 << i)))
+ LOGP(DL1IF, LOGL_INFO, " Use CS%d\n", i+1);
+ }
+ for (i = 0; i < 9; i++) {
+ if ((info_ind->flags & (PCU_IF_FLAG_MCS1 << i)))
+ LOGP(DL1IF, LOGL_INFO, " Use MCS%d\n", i+1);
+ }
+ LOGP(DL1IF, LOGL_INFO, " initial_cs=%d\n", info_ind->initial_cs);
+ LOGP(DL1IF, LOGL_INFO, " initial_mcs=%d\n", info_ind->initial_mcs);
+ LOGP(DL1IF, LOGL_INFO, " nsvci=%d\n", info_ind->nsvci[0]);
+ LOGP(DL1IF, LOGL_INFO, " local_port=%d\n", info_ind->local_port[0]);
+ LOGP(DL1IF, LOGL_INFO, " remote_port=%d\n", info_ind->remote_port[0]);
+ LOGP(DL1IF, LOGL_INFO, " remote_ip=%d\n", info_ind->remote_ip[0]);
+
+ bts->cs1 = !!(info_ind->flags & PCU_IF_FLAG_CS1);
+ bts->cs2 = !!(info_ind->flags & PCU_IF_FLAG_CS2);
+ bts->cs3 = !!(info_ind->flags & PCU_IF_FLAG_CS3);
+ bts->cs4 = !!(info_ind->flags & PCU_IF_FLAG_CS4);
+ if (!bts->cs1 && !bts->cs2 && !bts->cs3 && !bts->cs4)
+ bts->cs1 = 1;
+ if (info_ind->t3142) { /* if timer values are set */
+ bts->t3142 = info_ind->t3142;
+ bts->t3169 = info_ind->t3169;
+ bts->t3191 = info_ind->t3191;
+ bts->t3193_msec = info_ind->t3193_10ms * 10;
+ bts->t3195 = info_ind->t3195;
+ bts->n3101 = info_ind->n3101;
+ bts->n3103 = info_ind->n3103;
+ bts->n3105 = info_ind->n3105;
+ }
+ if (info_ind->initial_cs < 1 || info_ind->initial_cs > 4)
+ bts->initial_cs = 1;
+ else
+ bts->initial_cs = info_ind->initial_cs;
for (trx = 0; trx < 8; trx++) {
bts->trx[trx].arfcn = info_ind->trx[trx].arfcn;
@@ -283,11 +352,6 @@
}
}
-#warning FIXME: RAC
-// rc = generate_si13(si13, 0 /* rac */);
-// printf("rc=%d\n", rc);
-// pcu_l1if_tx_bcch(si13, 23);
-
return rc;
}