gsm_bts: add version and variant details

* add version string to gsm_bts
* add PCU version string to gsm_bts
* rename GSM_BTS_TYPE_OSMO_SYSMO -> GSM_BTS_OSMOBTS to avoid confusion
  between BTS model and variant
* add variant enum to gsm_bts_model using enum with variants for each
  hw vendor of OsmoBTS
* show connected PCU version (if available) in vty via 'show bts'

This will come in handy when logging details regarding particular BTS
reported via OML, see:

Related: OS#1614

Change-Id: I6710d53115f34634a7b70969cc05fd5c72ff8ab2
This commit is contained in:
Max 2017-03-23 12:01:07 +01:00 committed by Harald Welte
parent 689e7e5562
commit f9685c1461
9 changed files with 38 additions and 18 deletions

View File

@ -469,7 +469,7 @@ static inline int is_ipaccess_bts(struct gsm_bts *bts)
{
switch (bts->type) {
case GSM_BTS_TYPE_NANOBTS:
case GSM_BTS_TYPE_OSMO_SYSMO:
case GSM_BTS_TYPE_OSMOBTS:
return 1;
default:
break;
@ -480,7 +480,7 @@ static inline int is_ipaccess_bts(struct gsm_bts *bts)
static inline int is_sysmobts_v2(struct gsm_bts *bts)
{
switch (bts->type) {
case GSM_BTS_TYPE_OSMO_SYSMO:
case GSM_BTS_TYPE_OSMOBTS:
return 1;
default:
break;

View File

@ -64,6 +64,8 @@ enum gsm_chreq_reason_t {
#define HARDCODED_BTS1_TS 6
#define HARDCODED_BTS2_TS 11
#define MAX_VERSION_LENGTH 64
enum gsm_hooks {
GSM_HOOK_NM_SWLOAD,
GSM_HOOK_RR_PAGING,
@ -489,16 +491,26 @@ enum gsm_bts_type {
GSM_BTS_TYPE_NANOBTS,
GSM_BTS_TYPE_RBS2000,
GSM_BTS_TYPE_NOKIA_SITE,
GSM_BTS_TYPE_OSMO_SYSMO,
GSM_BTS_TYPE_OSMOBTS,
_NUM_GSM_BTS_TYPE
};
enum gsm_bts_type_variant {
BTS_UNKNOWN,
BTS_OSMO_LITECELL15,
BTS_OSMO_OCTPHY,
BTS_OSMO_SYSMO,
BTS_OSMO_TRX,
_NUM_BTS_VARIANT
};
struct vty;
struct gsm_bts_model {
struct llist_head list;
enum gsm_bts_type type;
enum gsm_bts_type_variant variant;
const char *name;
bool started;
@ -653,6 +665,11 @@ struct gsm_bts {
enum gsm_bts_type type;
struct gsm_bts_model *model;
enum gsm_band band;
char version[MAX_VERSION_LENGTH];
/* Connected PCU version (if any) */
char pcu_version[MAX_VERSION_LENGTH];
/* maximum Tx power that the MS is permitted to use in this cell */
int ms_max_power;

View File

@ -738,7 +738,7 @@ static int abis_nm_rcvmsg_manuf(struct msgb *mb)
switch (bts_type) {
case GSM_BTS_TYPE_NANOBTS:
case GSM_BTS_TYPE_OSMO_SYSMO:
case GSM_BTS_TYPE_OSMOBTS:
rc = abis_nm_rx_ipacc(mb);
abis_nm_queue_send_next(sign_link->trx->bts);
break;
@ -1723,7 +1723,7 @@ static int verify_chan_comb(struct gsm_bts_trx_ts *ts, uint8_t chan_comb,
}
*reason = "Unknown combination";
return -EINVAL;
case GSM_BTS_TYPE_OSMO_SYSMO:
case GSM_BTS_TYPE_OSMOBTS:
/* no known restrictions */
return 0;
default:

View File

@ -245,6 +245,9 @@ static void bts_dump_vty(struct vty *vty, struct gsm_bts *bts)
bts->num_trx, VTY_NEWLINE);
vty_out(vty, "Description: %s%s",
bts->description ? bts->description : "(null)", VTY_NEWLINE);
if (strnlen(bts->pcu_version, MAX_VERSION_LENGTH))
vty_out(vty, "PCU version %s connected%s", bts->pcu_version,
VTY_NEWLINE);
vty_out(vty, "MS Max power: %u dBm%s", bts->ms_max_power, VTY_NEWLINE);
vty_out(vty, "Minimum Rx Level for Access: %i dBm%s",
rxlev2dbm(bts->si_common.cell_sel_par.rxlev_acc_min),
@ -649,7 +652,7 @@ static void config_write_bts_single(struct vty *vty, struct gsm_bts *bts)
bts->early_classmark_allowed ? "allowed" : "forbidden", VTY_NEWLINE);
switch (bts->type) {
case GSM_BTS_TYPE_NANOBTS:
case GSM_BTS_TYPE_OSMO_SYSMO:
case GSM_BTS_TYPE_OSMOBTS:
vty_out(vty, " ip.access unit_id %u %u%s",
bts->ip_access.site_id, bts->ip_access.bts_id, VTY_NEWLINE);
if (bts->ip_access.rsl_ip) {

View File

@ -46,7 +46,7 @@ int bts_model_sysmobts_init(void)
{
model_sysmobts = bts_model_nanobts;
model_sysmobts.name = "sysmobts";
model_sysmobts.type = GSM_BTS_TYPE_OSMO_SYSMO;
model_sysmobts.type = GSM_BTS_TYPE_OSMOBTS;
model_sysmobts.features.data = &model_sysmobts._features_data[0];
model_sysmobts.features.data_len =

View File

@ -179,7 +179,7 @@ int e1_reconfig_bts(struct gsm_bts *bts)
/* skip signal link initialization, this is done later for these BTS. */
if (bts->type == GSM_BTS_TYPE_NANOBTS ||
bts->type == GSM_BTS_TYPE_OSMO_SYSMO)
bts->type == GSM_BTS_TYPE_OSMOBTS)
return e1inp_line_update(line);
/* OML link */

View File

@ -830,7 +830,7 @@ static int generate_si5(uint8_t *output, struct gsm_bts *bts)
/* ip.access nanoBTS needs l2_plen!! */
switch (bts->type) {
case GSM_BTS_TYPE_NANOBTS:
case GSM_BTS_TYPE_OSMO_SYSMO:
case GSM_BTS_TYPE_OSMOBTS:
*output++ = GSM48_LEN2PLEN(l2_plen);
l2_plen++;
break;
@ -865,7 +865,7 @@ static int generate_si5bis(uint8_t *output, struct gsm_bts *bts)
/* ip.access nanoBTS needs l2_plen!! */
switch (bts->type) {
case GSM_BTS_TYPE_NANOBTS:
case GSM_BTS_TYPE_OSMO_SYSMO:
case GSM_BTS_TYPE_OSMOBTS:
*output++ = GSM48_LEN2PLEN(l2_plen);
l2_plen++;
break;
@ -909,7 +909,7 @@ static int generate_si5ter(uint8_t *output, struct gsm_bts *bts)
/* ip.access nanoBTS needs l2_plen!! */
switch (bts->type) {
case GSM_BTS_TYPE_NANOBTS:
case GSM_BTS_TYPE_OSMO_SYSMO:
case GSM_BTS_TYPE_OSMOBTS:
*output++ = GSM48_LEN2PLEN(l2_plen);
l2_plen++;
break;
@ -946,7 +946,7 @@ static int generate_si6(uint8_t *output, struct gsm_bts *bts)
/* ip.access nanoBTS needs l2_plen!! */
switch (bts->type) {
case GSM_BTS_TYPE_NANOBTS:
case GSM_BTS_TYPE_OSMO_SYSMO:
case GSM_BTS_TYPE_OSMOBTS:
*output++ = GSM48_LEN2PLEN(l2_plen);
l2_plen++;
break;

View File

@ -96,7 +96,7 @@ const struct value_string bts_type_names[_NUM_GSM_BTS_TYPE+1] = {
{ GSM_BTS_TYPE_NANOBTS, "nanobts" },
{ GSM_BTS_TYPE_RBS2000, "rbs2000" },
{ GSM_BTS_TYPE_NOKIA_SITE, "nokia_site" },
{ GSM_BTS_TYPE_OSMO_SYSMO, "sysmobts" },
{ GSM_BTS_TYPE_OSMOBTS, "sysmobts" },
{ 0, NULL }
};
@ -106,7 +106,7 @@ const struct value_string bts_type_descs[_NUM_GSM_BTS_TYPE+1] = {
{ GSM_BTS_TYPE_NANOBTS, "ip.access nanoBTS or compatible" },
{ GSM_BTS_TYPE_RBS2000, "Ericsson RBS2000 Series" },
{ GSM_BTS_TYPE_NOKIA_SITE, "Nokia {Metro,Ultra,In}Site" },
{ GSM_BTS_TYPE_OSMO_SYSMO, "sysmocom sysmoBTS" },
{ GSM_BTS_TYPE_OSMOBTS, "sysmocom sysmoBTS" },
{ 0, NULL }
};
@ -274,7 +274,7 @@ int gsm_set_bts_type(struct gsm_bts *bts, enum gsm_bts_type type)
switch (bts->type) {
case GSM_BTS_TYPE_NANOBTS:
case GSM_BTS_TYPE_OSMO_SYSMO:
case GSM_BTS_TYPE_OSMOBTS:
/* Set the default OML Stream ID to 0xff */
bts->oml_tei = 0xff;
bts->c0->nominal_power = 23;

View File

@ -1962,7 +1962,7 @@ static int tch_map(struct gsm_lchan *lchan, struct gsm_lchan *remote_lchan)
// todo: map between different bts types
switch (bts->type) {
case GSM_BTS_TYPE_NANOBTS:
case GSM_BTS_TYPE_OSMO_SYSMO:
case GSM_BTS_TYPE_OSMOBTS:
if (!ipacc_rtp_direct) {
if (!lchan->abis_ip.rtp_socket) {
LOGP(DHO, LOGL_ERROR, "no RTP socket for "
@ -2053,7 +2053,7 @@ static int tch_recv_mncc(struct gsm_network *net, uint32_t callref, int enable)
switch (bts->type) {
case GSM_BTS_TYPE_NANOBTS:
case GSM_BTS_TYPE_OSMO_SYSMO:
case GSM_BTS_TYPE_OSMOBTS:
if (ipacc_rtp_direct) {
LOGP(DCC, LOGL_ERROR, "Error: RTP proxy is disabled\n");
return -EINVAL;
@ -3633,7 +3633,7 @@ int mncc_tx_to_cc(struct gsm_network *net, int msg_type, void *arg)
bts = trans->conn->lchan->ts->trx->bts;
switch (bts->type) {
case GSM_BTS_TYPE_NANOBTS:
case GSM_BTS_TYPE_OSMO_SYSMO:
case GSM_BTS_TYPE_OSMOBTS:
if (!trans->conn->lchan->abis_ip.rtp_socket) {
DEBUGP(DMNCC, "TCH frame to lchan without RTP connection\n");
return 0;