diff options
Diffstat (limited to 'src/osmo-bts-virtual/main.c')
-rw-r--r-- | src/osmo-bts-virtual/main.c | 66 |
1 files changed, 48 insertions, 18 deletions
diff --git a/src/osmo-bts-virtual/main.c b/src/osmo-bts-virtual/main.c index aa1c608e..82becc37 100644 --- a/src/osmo-bts-virtual/main.c +++ b/src/osmo-bts-virtual/main.c @@ -12,7 +12,7 @@ * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. + * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. @@ -47,39 +47,68 @@ #include <osmo-bts/l1sap.h> #include <osmo-bts/phy_link.h> #include "virtual_um.h" +#include "l1_if.h" /* dummy, since no direct dsp support */ -uint32_t trx_get_hlayer1(struct gsm_bts_trx *trx) +uint32_t trx_get_hlayer1(const struct gsm_bts_trx *trx) { return 0; } int bts_model_init(struct gsm_bts *bts) { + struct bts_virt_priv *bts_virt = talloc_zero(bts, struct bts_virt_priv); + bts->model_priv = bts_virt; bts->variant = BTS_OSMO_VIRTUAL; bts->support.ciphers = CIPHER_A5(1) | CIPHER_A5(2) | CIPHER_A5(3); - - gsm_bts_set_feature(bts, BTS_FEAT_OML_ALERTS); - gsm_bts_set_feature(bts, BTS_FEAT_SPEECH_F_V1); - gsm_bts_set_feature(bts, BTS_FEAT_SPEECH_H_V1); - gsm_bts_set_feature(bts, BTS_FEAT_SPEECH_F_EFR); - gsm_bts_set_feature(bts, BTS_FEAT_SPEECH_F_AMR); - gsm_bts_set_feature(bts, BTS_FEAT_SPEECH_H_AMR); - gsm_bts_set_feature(bts, BTS_FEAT_CBCH); - - bts_model_vty_init(bts); + bts->gprs.cell.support.gprs_codings = NM_IPAC_MASK_GPRS_CODING_CS + | NM_IPAC_MASK_GPRS_CODING_MCS; + + /* order alphabetically */ + osmo_bts_set_feature(bts->features, BTS_FEAT_CBCH); + osmo_bts_set_feature(bts->features, BTS_FEAT_EGPRS); + osmo_bts_set_feature(bts->features, BTS_FEAT_GPRS); + osmo_bts_set_feature(bts->features, BTS_FEAT_OML_ALERTS); + osmo_bts_set_feature(bts->features, BTS_FEAT_SPEECH_F_AMR); + osmo_bts_set_feature(bts->features, BTS_FEAT_SPEECH_F_EFR); + osmo_bts_set_feature(bts->features, BTS_FEAT_SPEECH_F_V1); + osmo_bts_set_feature(bts->features, BTS_FEAT_SPEECH_H_AMR); + osmo_bts_set_feature(bts->features, BTS_FEAT_SPEECH_H_V1); return 0; } int bts_model_trx_init(struct gsm_bts_trx *trx) { + /* Frequency bands indicated to the BSC */ + trx->support.freq_bands = NM_IPAC_F_FREQ_BAND_PGSM + | NM_IPAC_F_FREQ_BAND_EGSM + | NM_IPAC_F_FREQ_BAND_RGSM + | NM_IPAC_F_FREQ_BAND_DCS + | NM_IPAC_F_FREQ_BAND_PCS + | NM_IPAC_F_FREQ_BAND_850 + | NM_IPAC_F_FREQ_BAND_480 + | NM_IPAC_F_FREQ_BAND_450; + + /* Channel types and modes indicated to the BSC */ + trx->support.chan_types = NM_IPAC_MASK_CHANT_COMMON + | NM_IPAC_F_CHANT_BCCH_SDCCH4_CBCH + | NM_IPAC_F_CHANT_SDCCH8_CBCH + | NM_IPAC_F_CHANT_PDCHF + | NM_IPAC_F_CHANT_TCHF_PDCHF; + trx->support.chan_modes = NM_IPAC_MASK_CHANM_SPEECH + | NM_IPAC_MASK_CHANM_CSD_NT + | NM_IPAC_MASK_CHANM_CSD_T; + /* TODO: missing rate adaptation for TCH/F14.4 (see OS#6167) */ + trx->support.chan_modes &= ~NM_IPAC_F_CHANM_CSD_T_14k4; + trx->support.chan_modes &= ~NM_IPAC_F_CHANM_CSD_NT_14k4; + return 0; } void bts_model_print_help() { - LOGP(DSUM, LOGL_NOTICE, "Unimplemented %s\n", __func__); + LOGP(DLGLOBAL, LOGL_NOTICE, "Unimplemented %s\n", __func__); } int bts_model_handle_options(int argc, char **argv) @@ -116,26 +145,27 @@ void bts_model_abis_close(struct gsm_bts *bts) void bts_model_phy_link_set_defaults(struct phy_link *plink) { - plink->u.virt.bts_mcast_group = DEFAULT_BTS_MCAST_GROUP; + plink->u.virt.bts_mcast_group = talloc_strdup(plink, DEFAULT_BTS_MCAST_GROUP); plink->u.virt.bts_mcast_port = DEFAULT_BTS_MCAST_PORT; - plink->u.virt.ms_mcast_group = DEFAULT_MS_MCAST_GROUP; + plink->u.virt.ms_mcast_group = talloc_strdup(plink, DEFAULT_MS_MCAST_GROUP); plink->u.virt.ms_mcast_port = DEFAULT_MS_MCAST_PORT; + plink->u.virt.ttl = -1; /* initialize to -1 to prevent us setting the TTL */ } void bts_model_phy_instance_set_defaults(struct phy_instance *pinst) { - LOGP(DSUM, LOGL_NOTICE, "Unimplemented %s\n", __func__); + LOGP(DLGLOBAL, LOGL_NOTICE, "Unimplemented %s\n", __func__); } int bts_model_ts_disconnect(struct gsm_bts_trx_ts *ts) { - LOGP(DSUM, LOGL_NOTICE, "Unimplemented %s\n", __func__); + LOGP(DLGLOBAL, LOGL_NOTICE, "Unimplemented %s\n", __func__); return -ENOTSUP; } void bts_model_ts_connect(struct gsm_bts_trx_ts *ts, enum gsm_phys_chan_config as_pchan) { - LOGP(DSUM, LOGL_NOTICE, "Unimplemented %s\n", __func__); + LOGP(DLGLOBAL, LOGL_NOTICE, "Unimplemented %s\n", __func__); } int main(int argc, char **argv) |