Initial version of Support for Nokia *Site BTS
This includes the MetroSite, but also other Nokia BTS models.
This commit is contained in:
parent
e5215b5398
commit
1664602476
|
@ -0,0 +1,118 @@
|
|||
!
|
||||
! OpenBSC configuration saved from vty
|
||||
! !
|
||||
password foo
|
||||
!
|
||||
line vty
|
||||
no login
|
||||
!
|
||||
e1_input
|
||||
e1_line 0 driver misdn
|
||||
network
|
||||
network country code 1
|
||||
mobile network code 1
|
||||
short name OpenBSC
|
||||
long name OpenBSC
|
||||
auth policy accept-all
|
||||
timer t3101 10
|
||||
timer t3113 60
|
||||
bts 0
|
||||
type nokia_site
|
||||
band GSM1800
|
||||
cell_identity 1
|
||||
location_area_code 1
|
||||
base_station_id_code 63
|
||||
training_sequence_code 7
|
||||
|
||||
oml e1 line 0 timeslot 1 sub-slot full
|
||||
oml e1 tei 1
|
||||
|
||||
trx 0
|
||||
arfcn 866
|
||||
max_power_red 24
|
||||
rsl e1 line 0 timeslot 2 sub-slot full
|
||||
rsl e1 tei 1
|
||||
timeslot 0
|
||||
phys_chan_config CCCH+SDCCH4
|
||||
e1 line 0 timeslot 6 sub-slot full
|
||||
timeslot 1
|
||||
phys_chan_config SDCCH8
|
||||
e1 line 0 timeslot 6 sub-slot 1
|
||||
timeslot 2
|
||||
phys_chan_config TCH/F
|
||||
e1 line 0 timeslot 6 sub-slot 2
|
||||
timeslot 3
|
||||
phys_chan_config TCH/F
|
||||
e1 line 0 timeslot 6 sub-slot 3
|
||||
timeslot 4
|
||||
phys_chan_config TCH/F
|
||||
e1 line 0 timeslot 7 sub-slot 0
|
||||
timeslot 5
|
||||
phys_chan_config TCH/F
|
||||
e1 line 0 timeslot 7 sub-slot 1
|
||||
timeslot 6
|
||||
phys_chan_config TCH/F
|
||||
e1 line 0 timeslot 7 sub-slot 2
|
||||
timeslot 7
|
||||
phys_chan_config TCH/F
|
||||
e1 line 0 timeslot 7 sub-slot 3
|
||||
|
||||
trx 1
|
||||
arfcn 870
|
||||
max_power_red 24
|
||||
rsl e1 line 0 timeslot 3 sub-slot full
|
||||
rsl e1 tei 2
|
||||
timeslot 0
|
||||
phys_chan_config TCH/F
|
||||
e1 line 0 timeslot 8 sub-slot 0
|
||||
timeslot 1
|
||||
phys_chan_config TCH/F
|
||||
e1 line 0 timeslot 8 sub-slot 1
|
||||
timeslot 2
|
||||
phys_chan_config TCH/F
|
||||
e1 line 0 timeslot 8 sub-slot 2
|
||||
timeslot 3
|
||||
phys_chan_config TCH/F
|
||||
e1 line 0 timeslot 8 sub-slot 3
|
||||
timeslot 4
|
||||
phys_chan_config TCH/F
|
||||
e1 line 0 timeslot 9 sub-slot 0
|
||||
timeslot 5
|
||||
phys_chan_config TCH/F
|
||||
e1 line 0 timeslot 9 sub-slot 1
|
||||
timeslot 6
|
||||
phys_chan_config TCH/F
|
||||
e1 line 0 timeslot 9 sub-slot 2
|
||||
timeslot 7
|
||||
phys_chan_config TCH/F
|
||||
e1 line 0 timeslot 9 sub-slot 3
|
||||
|
||||
trx 2
|
||||
arfcn 874
|
||||
max_power_red 24
|
||||
rsl e1 line 0 timeslot 4 sub-slot full
|
||||
rsl e1 tei 3
|
||||
timeslot 0
|
||||
phys_chan_config TCH/F
|
||||
e1 line 0 timeslot 10 sub-slot 0
|
||||
timeslot 1
|
||||
phys_chan_config TCH/F
|
||||
e1 line 0 timeslot 10 sub-slot 1
|
||||
timeslot 2
|
||||
phys_chan_config TCH/F
|
||||
e1 line 0 timeslot 10 sub-slot 2
|
||||
timeslot 3
|
||||
phys_chan_config TCH/F
|
||||
e1 line 0 timeslot 10 sub-slot 3
|
||||
timeslot 4
|
||||
phys_chan_config TCH/F
|
||||
e1 line 0 timeslot 11 sub-slot 0
|
||||
timeslot 5
|
||||
phys_chan_config TCH/F
|
||||
e1 line 0 timeslot 11 sub-slot 1
|
||||
timeslot 6
|
||||
phys_chan_config TCH/F
|
||||
e1 line 0 timeslot 11 sub-slot 2
|
||||
timeslot 7
|
||||
phys_chan_config TCH/F
|
||||
e1 line 0 timeslot 11 sub-slot 3
|
|
@ -90,5 +90,12 @@ int rsl_chan_ms_power_ctrl(struct gsm_lchan *lchan, unsigned int fpc, int dbm);
|
|||
int rsl_sms_cb_command(struct gsm_bts *bts, uint8_t chan_number,
|
||||
uint8_t cb_command, const uint8_t *data, int len);
|
||||
|
||||
/* some Nokia specific stuff */
|
||||
int rsl_nokia_si_begin(struct gsm_bts_trx *trx);
|
||||
int rsl_nokia_si_end(struct gsm_bts_trx *trx);
|
||||
|
||||
/* required for Nokia BTS power control */
|
||||
int rsl_bs_power_control(struct gsm_bts_trx *trx, uint8_t channel, uint8_t reduction);
|
||||
|
||||
#endif /* RSL_MT_H */
|
||||
|
||||
|
|
|
@ -14,4 +14,5 @@ extern int bts_model_bs11_init(void);
|
|||
extern int bts_model_rbs2k_init(void);
|
||||
extern int bts_model_nanobts_init(void);
|
||||
extern int bts_model_hslfemto_init(void);
|
||||
extern int bts_model_nokia_site_init(void);
|
||||
#endif
|
||||
|
|
|
@ -325,6 +325,7 @@ enum gsm_bts_type {
|
|||
GSM_BTS_TYPE_NANOBTS,
|
||||
GSM_BTS_TYPE_RBS2000,
|
||||
GSM_BTS_TYPE_HSL_FEMTO,
|
||||
GSM_BTS_TYPE_NOKIA_SITE,
|
||||
};
|
||||
|
||||
struct vty;
|
||||
|
|
|
@ -11,6 +11,7 @@ libbsc_a_SOURCES = abis_nm.c abis_nm_vty.c \
|
|||
bts_ericsson_rbs2000.c \
|
||||
bts_ipaccess_nanobts.c \
|
||||
bts_siemens_bs11.c \
|
||||
bts_nokia_site.c \
|
||||
bts_hsl_femtocell.c \
|
||||
bts_unknown.c \
|
||||
chan_alloc.c \
|
||||
|
|
|
@ -1108,6 +1108,12 @@ static int abis_rsl_rx_trx(struct msgb *msg)
|
|||
LOGP(DRSL, LOGL_ERROR, "%s CCCH/ACCH/CPU Overload\n",
|
||||
gsm_trx_name(msg->trx));
|
||||
break;
|
||||
case 0x42: /* Nokia specific: SI End ACK */
|
||||
LOGP(DRSL, LOGL_INFO, "Nokia SI End ACK\n");
|
||||
break;
|
||||
case 0x43: /* Nokia specific: SI End NACK */
|
||||
LOGP(DRSL, LOGL_INFO, "Nokia SI End NACK\n");
|
||||
break;
|
||||
default:
|
||||
LOGP(DRSL, LOGL_NOTICE, "%s Unknown Abis RSL TRX message "
|
||||
"type 0x%02x\n", gsm_trx_name(msg->trx), rslh->msg_type);
|
||||
|
@ -1892,3 +1898,50 @@ int rsl_sms_cb_command(struct gsm_bts *bts, uint8_t chan_number,
|
|||
|
||||
return abis_rsl_sendmsg(cb_cmd);
|
||||
}
|
||||
|
||||
int rsl_nokia_si_begin(struct gsm_bts_trx *trx)
|
||||
{
|
||||
struct abis_rsl_common_hdr *ch;
|
||||
struct msgb *msg = rsl_msgb_alloc();
|
||||
|
||||
ch = (struct abis_rsl_common_hdr *) msgb_put(msg, sizeof(*ch));
|
||||
ch->msg_discr = ABIS_RSL_MDISC_TRX;
|
||||
ch->msg_type = 0x40; /* Nokia SI Begin */
|
||||
|
||||
msg->trx = trx;
|
||||
|
||||
return abis_rsl_sendmsg(msg);
|
||||
}
|
||||
|
||||
int rsl_nokia_si_end(struct gsm_bts_trx *trx)
|
||||
{
|
||||
struct abis_rsl_common_hdr *ch;
|
||||
struct msgb *msg = rsl_msgb_alloc();
|
||||
|
||||
ch = (struct abis_rsl_common_hdr *) msgb_put(msg, sizeof(*ch));
|
||||
ch->msg_discr = ABIS_RSL_MDISC_TRX;
|
||||
ch->msg_type = 0x41; /* Nokia SI End */
|
||||
|
||||
msgb_tv_put(msg, 0xFD, 0x00); /* Nokia Pagemode Info, No paging reorganisation required */
|
||||
|
||||
msg->trx = trx;
|
||||
|
||||
return abis_rsl_sendmsg(msg);
|
||||
}
|
||||
|
||||
int rsl_bs_power_control(struct gsm_bts_trx *trx, uint8_t channel, uint8_t reduction)
|
||||
{
|
||||
struct abis_rsl_common_hdr *ch;
|
||||
struct msgb *msg = rsl_msgb_alloc();
|
||||
|
||||
ch = (struct abis_rsl_common_hdr *) msgb_put(msg, sizeof(*ch));
|
||||
ch->msg_discr = ABIS_RSL_MDISC_DED_CHAN;
|
||||
ch->msg_type = RSL_MT_BS_POWER_CONTROL;
|
||||
|
||||
msgb_tv_put(msg, RSL_IE_CHAN_NR, channel);
|
||||
msgb_tv_put(msg, RSL_IE_BS_POWER, reduction); /* reduction in 2dB steps */
|
||||
|
||||
msg->trx = trx;
|
||||
|
||||
return abis_rsl_sendmsg(msg);
|
||||
}
|
||||
|
|
|
@ -249,8 +249,19 @@ static void bootstrap_rsl(struct gsm_bts_trx *trx)
|
|||
trx->bts->nr, trx->nr, trx->arfcn, bsc_gsmnet->country_code,
|
||||
bsc_gsmnet->network_code, trx->bts->location_area_code,
|
||||
trx->bts->cell_identity, trx->bts->bsic, trx->bts->tsc);
|
||||
|
||||
if (trx->bts->type == GSM_BTS_TYPE_NOKIA_SITE) {
|
||||
rsl_nokia_si_begin(trx);
|
||||
}
|
||||
|
||||
set_system_infos(trx);
|
||||
|
||||
if (trx->bts->type == GSM_BTS_TYPE_NOKIA_SITE) {
|
||||
/* channel unspecific, power reduction in 2 dB steps */
|
||||
rsl_bs_power_control(trx, 0xFF, trx->max_power_red / 2);
|
||||
rsl_nokia_si_end(trx);
|
||||
}
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(trx->ts); i++)
|
||||
generate_ma_for_ts(&trx->ts[i]);
|
||||
}
|
||||
|
@ -268,6 +279,24 @@ static int inp_sig_cb(unsigned int subsys, unsigned int signal,
|
|||
|
||||
switch (signal) {
|
||||
case S_INP_TEI_UP:
|
||||
if (isd->link_type == E1INP_SIGN_OML) {
|
||||
/* TODO: this is required for the Nokia BTS, hopping is configured
|
||||
during OML, other MA is not set. */
|
||||
struct gsm_bts_trx *cur_trx;
|
||||
/* was static in system_information.c */
|
||||
extern int generate_cell_chan_list(uint8_t *chan_list, struct gsm_bts *bts);
|
||||
uint8_t ca[20];
|
||||
/* has to be called before generate_ma_for_ts to
|
||||
set bts->si_common.cell_alloc */
|
||||
generate_cell_chan_list(ca, trx->bts);
|
||||
|
||||
llist_for_each_entry(cur_trx, &trx->bts->trx_list, list) {
|
||||
int i;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(cur_trx->ts); i++)
|
||||
generate_ma_for_ts(&cur_trx->ts[i]);
|
||||
}
|
||||
}
|
||||
if (isd->link_type == E1INP_SIGN_RSL)
|
||||
bootstrap_rsl(trx);
|
||||
break;
|
||||
|
|
|
@ -24,6 +24,7 @@ int bts_init(void)
|
|||
bts_model_rbs2k_init();
|
||||
bts_model_nanobts_init();
|
||||
bts_model_hslfemto_init();
|
||||
bts_model_nokia_site_init();
|
||||
/* Your new BTS here. */
|
||||
return 0;
|
||||
}
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -154,7 +154,7 @@ static int bitvec2freq_list(uint8_t *chan_list, struct bitvec *bv,
|
|||
}
|
||||
|
||||
/* generate a cell channel list as per Section 10.5.2.1b of 04.08 */
|
||||
static int generate_cell_chan_list(uint8_t *chan_list, struct gsm_bts *bts)
|
||||
/* static*/ int generate_cell_chan_list(uint8_t *chan_list, struct gsm_bts *bts)
|
||||
{
|
||||
struct gsm_bts_trx *trx;
|
||||
struct bitvec *bv = &bts->si_common.cell_alloc;
|
||||
|
|
|
@ -193,6 +193,7 @@ static const struct value_string bts_types[] = {
|
|||
{ GSM_BTS_TYPE_NANOBTS, "nanobts" },
|
||||
{ GSM_BTS_TYPE_RBS2000, "rbs2000" },
|
||||
{ GSM_BTS_TYPE_HSL_FEMTO, "hsl_femto" },
|
||||
{ GSM_BTS_TYPE_NOKIA_SITE, "nokia_site" },
|
||||
{ 0, NULL }
|
||||
};
|
||||
|
||||
|
|
|
@ -1634,6 +1634,7 @@ static int tch_map(struct gsm_lchan *lchan, struct gsm_lchan *remote_lchan)
|
|||
break;
|
||||
case GSM_BTS_TYPE_BS11:
|
||||
case GSM_BTS_TYPE_RBS2000:
|
||||
case GSM_BTS_TYPE_NOKIA_SITE:
|
||||
trau_mux_map_lchan(lchan, remote_lchan);
|
||||
break;
|
||||
default:
|
||||
|
|
Loading…
Reference in New Issue