Some code that is disabled to be able to compile libmsc without libbsc is
related to communication to the BTS, that is replaced by the new A-interface.
However, the following bits are not; Any opinions about what to do with it:
- Report on which ARFCN and timeslot a silent call has occured.
I would simply drop the ARFCN and timeslot information, saying "silent call
successful". (same in two log messages)
static int scall_cbfn(unsigned int subsys, unsigned int signal,
void *handler_data, void *signal_data)
{
struct scall_signal_data *sigdata = signal_data;
struct vty *vty = sigdata->data;
switch (signal) {
case S_SCALL_SUCCESS:
vty_out(vty, "%% silent call on ARFCN %u timeslot %u%s",
sigdata->conn->lchan->ts->trx->arfcn,
sigdata->conn->lchan->ts->nr,
VTY_NEWLINE);
break;
case S_SCALL_EXPIRED:
vty_out(vty, "%% silent call expired paging%s", VTY_NEWLINE);
break;
}
return 0;
}
- Add Osmocom specific TLVs to SMPP
/* Append the Osmocom vendor-specific additional TLVs to a SMPP msg */
static void append_osmo_tlvs(tlv_t **req_tlv, const struct gsm_lchan *lchan)
{
int idx = calc_initial_idx(ARRAY_SIZE(lchan->meas_rep),
lchan->meas_rep_idx, 1);
const struct gsm_meas_rep *mr = &lchan->meas_rep[idx];
const struct gsm_meas_rep_unidir *ul_meas = &mr->ul;
const struct gsm_meas_rep_unidir *dl_meas = &mr->dl;
/* Osmocom vendor-specific SMPP34 extensions */
append_tlv_u16(req_tlv, TLVID_osmo_arfcn, lchan->ts->trx->arfcn);
if (mr->flags & MEAS_REP_F_MS_L1) {
uint8_t ms_dbm;
append_tlv_u8(req_tlv, TLVID_osmo_ta, mr->ms_l1.ta);
ms_dbm = ms_pwr_dbm(lchan->ts->trx->bts->band,
mr->ms_l1.pwr);
append_tlv_u8(req_tlv, TLVID_osmo_ms_l1_txpwr, ms_dbm);
} else if (mr->flags & MEAS_REP_F_MS_TO) /* Save Timing Offset field = MS
Timing Offset + 63 */
append_tlv_u8(req_tlv, TLVID_osmo_ta, mr->ms_timing_offset + 63);
append_tlv_u16(req_tlv, TLVID_osmo_rxlev_ul,
rxlev2dbm(ul_meas->full.rx_lev));
append_tlv_u8(req_tlv, TLVID_osmo_rxqual_ul, ul_meas->full.rx_qual);
if (mr->flags & MEAS_REP_F_DL_VALID) {
append_tlv_u16(req_tlv, TLVID_osmo_rxlev_dl,
rxlev2dbm(dl_meas->full.rx_lev));
append_tlv_u8(req_tlv, TLVID_osmo_rxqual_dl,
dl_meas->full.rx_qual);
}
if (lchan->conn && lchan->conn->vsub) {
struct vlr_subscr *vsub = lchan->conn->vsub;
size_t imei_len = strlen(vsub->imei);
if (imei_len)
append_tlv(req_tlv, TLVID_osmo_imei,
(uint8_t *)vsub->imei, imei_len+1);
}
}
deliver_to_esme() {
[...]
if (esme->acl && esme->acl->osmocom_ext &&
conn->lchan)
append_osmo_tlvs(&deliver.tlv, conn->lchan);
[...]
}
- Siemens BS11 MRPCI
/* see mail on openbsc@ 9 Feb 2016 22:30:15 +0100
* We need to hook sending of MRPCI to Siemens BS11 somewhere else */
if (is_siemens_bts(conn->bts))
send_siemens_mrpci(msg->lchan, classmark2-1);
- Debug log: report bts - trx - ts - ti in mncc_rcvmsg()
(No BTS information available in OsmoMSC anymore)
- In gsm48_cc_rx_setup(), populate struct gsm_mncc setup with lchan type.
(lchan information is no longer available in OsmoMSC)
- In libmsc, gsm_04_08.c, we connect libbsc handle_abisip_signal(); the same is
done in osmo_bsc_audio.c in osmo_bsc_audio_init(), so I assume it can be
dropped from libmsc.
/*
* This will be run by the linker when loading the DSO. We use it to
* do system initialization, e.g. registration of signal handlers.
*/
static __attribute__((constructor)) void on_dso_load_0408(void)
{
osmo_signal_register_handler(SS_ABISIP, handle_abisip_signal, NULL);
}
~N