diff options
author | Vadim Yanitskiy <vyanitskiy@sysmocom.de> | 2023-09-09 00:57:38 +0700 |
---|---|---|
committer | Vadim Yanitskiy <vyanitskiy@sysmocom.de> | 2023-09-23 17:54:05 +0700 |
commit | daf7b2838721af9713a492fe8c9816dba5ac1244 (patch) | |
tree | 4d614ea0199fe1f93d6c0e8c756a6ba6bc779ae6 /src | |
parent | c992bda3cd2d19c4288c03fdfbaf44ebecff8755 (diff) |
oml: ipacc: send GPRS Cell attributes based on IPA Object Version
Change-Id: Ie0fb3eaf76e1f70e5a19bb088e1674b7e553d32a
Related: OS#4505
Diffstat (limited to 'src')
-rw-r--r-- | src/osmo-bsc/bts_ipaccess_nanobts_omlattr.c | 82 |
1 files changed, 56 insertions, 26 deletions
diff --git a/src/osmo-bsc/bts_ipaccess_nanobts_omlattr.c b/src/osmo-bsc/bts_ipaccess_nanobts_omlattr.c index 83c5a30ec..96c4d50f5 100644 --- a/src/osmo-bsc/bts_ipaccess_nanobts_omlattr.c +++ b/src/osmo-bsc/bts_ipaccess_nanobts_omlattr.c @@ -227,9 +227,8 @@ struct msgb *nanobts_gen_set_nse_attr(struct gsm_bts_sm *bts_sm) struct msgb *nanobts_gen_set_cell_attr(struct gsm_bts *bts) { + const struct gsm_gprs_cell *cell = &bts->gprs.cell; struct msgb *msgb; - struct abis_nm_ipacc_att_rlc_cfg rlc_cfg; - struct abis_nm_ipacc_att_rlc_cfg_2 rlc_cfg_2; uint8_t buf[2]; msgb = msgb_alloc(1024, __func__); @@ -250,7 +249,7 @@ struct msgb *nanobts_gen_set_cell_attr(struct gsm_bts *bts) msgb_tl16v_put(msgb, NM_ATT_IPACC_BVCI, 2, buf); /* all timers in seconds, unless otherwise stated */ - rlc_cfg = (struct abis_nm_ipacc_att_rlc_cfg){ + const struct abis_nm_ipacc_att_rlc_cfg rlc_cfg = { .t3142 = 20, /* T3142 */ .t3169 = 5, /* T3169 */ .t3191 = 5, /* T3191 */ @@ -263,31 +262,62 @@ struct msgb *nanobts_gen_set_cell_attr(struct gsm_bts *bts) }; msgb_tl16v_put(msgb, NM_ATT_IPACC_RLC_CFG, sizeof(rlc_cfg), (const uint8_t *)&rlc_cfg); - if (bts->gprs.mode == BTS_GPRS_EGPRS) { - buf[0] = 0x8f; - buf[1] = 0xff; - } else { - buf[0] = 0x0f; - buf[1] = 0x00; + switch (bts->type) { + case GSM_BTS_TYPE_NANOBTS: + if (cell->mo.ipaccess.obj_version < 4) + break; + /* fall-through */ + case GSM_BTS_TYPE_OSMOBTS: + if (bts->gprs.mode == BTS_GPRS_EGPRS) { + buf[0] = 0x8f; + buf[1] = 0xff; + } else { + buf[0] = 0x0f; + buf[1] = 0x00; + } + msgb_tl16v_put(msgb, NM_ATT_IPACC_CODING_SCHEMES, 2, buf); + break; + default: + break; } - msgb_tl16v_put(msgb, NM_ATT_IPACC_CODING_SCHEMES, 2, buf); - rlc_cfg_2 = (struct abis_nm_ipacc_att_rlc_cfg_2){ - .t_dl_tbf_ext_10ms = htons(250), /* 0..500 */ - .t_ul_tbf_ext_10ms = htons(250), /* 0..500 */ - .initial_cs = 2, /* CS2 */ - }; - msgb_tl16v_put(msgb, NM_ATT_IPACC_RLC_CFG_2, sizeof(rlc_cfg_2), (const uint8_t *)&rlc_cfg_2); - -#if 0 - /* EDGE model only, breaks older models. - * Should inquire the BTS capabilities */ - struct abis_nm_ipacc_att_rlc_cfg_3 rlc_cfg_3; - rlc_cfg_3 = (struct abis_nm_ipacc_att_rlc_cfg_3){ - .initial_mcs = 2, /* MCS2 */ - }; - msgb_tl16v_put(msgb, NM_ATT_IPACC_RLC_CFG_3, sizeof(rlc_cfg_3), (const uint8_t *)&rlc_cfg_3); -#endif + switch (bts->type) { + case GSM_BTS_TYPE_NANOBTS: + if (cell->mo.ipaccess.obj_version < 20) + break; + /* fall-through */ + case GSM_BTS_TYPE_OSMOBTS: + { + const struct abis_nm_ipacc_att_rlc_cfg_2 rlc_cfg_2 = { + .t_dl_tbf_ext_10ms = htons(250), /* 0..500 */ + .t_ul_tbf_ext_10ms = htons(250), /* 0..500 */ + .initial_cs = 2, /* CS2 */ + }; + msgb_tl16v_put(msgb, NM_ATT_IPACC_RLC_CFG_2, + sizeof(rlc_cfg_2), (const uint8_t *)&rlc_cfg_2); + break; + } + default: + break; + } + + switch (bts->type) { + case GSM_BTS_TYPE_NANOBTS: + if (cell->mo.ipaccess.obj_version < 30) + break; + /* fall-through */ + case GSM_BTS_TYPE_OSMOBTS: + { + const struct abis_nm_ipacc_att_rlc_cfg_3 rlc_cfg_3 = { + .initial_mcs = 2, /* MCS2 */ + }; + msgb_tl16v_put(msgb, NM_ATT_IPACC_RLC_CFG_3, + sizeof(rlc_cfg_3), (const uint8_t *)&rlc_cfg_3); + break; + } + default: + break; + } return msgb; } |