Projects
osmocom:master
osmo-bts
Log In
Username
Password
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
Expand all
Collapse all
Changes of Revision 178
View file
osmo-bts.spec
Changed
@@ -14,13 +14,13 @@ Name: osmo-bts Requires: osmocom-master -Version: 1.7.0.44.17fe7 +Version: 1.7.0.49.1f755 Release: 0 Summary: Osmocom BTS-Side code (Abis, scheduling) License: AGPL-3.0-or-later AND GPL-2.0-only Group: Productivity/Telephony/Servers URL: https://osmocom.org/projects/osmobts -Source: osmo-bts_1.7.0.44.17fe7.tar.xz +Source: osmo-bts_1.7.0.49.1f755.tar.xz Source1: rpmlintrc BuildRequires: autoconf BuildRequires: automake
View file
commit_17fe7d6841599fe13a24491ac325591f3d2a05e3.txt
Deleted
View file
commit_1f755bcfeea11318cba8e2bcf266afd20d7a0730.txt
Added
View file
osmo-bts_1.7.0.44.17fe7.dsc -> osmo-bts_1.7.0.49.1f755.dsc
Changed
@@ -2,7 +2,7 @@ Source: osmo-bts Binary: osmo-bts, osmo-bts-trx, osmo-bts-trx-dbg, osmo-bts-virtual, osmo-bts-virtual-dbg, osmo-bts-doc Architecture: any all -Version: 1.7.0.44.17fe7 +Version: 1.7.0.49.1f755 Maintainer: Osmocom team <openbsc@lists.osmocom.org> Homepage: https://projects.osmocom.org/projects/osmobts Standards-Version: 3.9.8 @@ -17,8 +17,8 @@ osmo-bts-virtual deb net optional arch=any osmo-bts-virtual-dbg deb debug extra arch=any Checksums-Sha1: - 3a5fdd2235d1d4148949d59493a69c83a56c258b 506848 osmo-bts_1.7.0.44.17fe7.tar.xz + cab5283529a0073b8b87fb0f32ad27f1062aabc9 508740 osmo-bts_1.7.0.49.1f755.tar.xz Checksums-Sha256: - 5942e16afeb8f30d8ee33d40a3ad889cca9e11aaf926b25b8368502ecdceadb9 506848 osmo-bts_1.7.0.44.17fe7.tar.xz + 227d47821ae46a4fbd60f9088ba307738cb1e37ba8e0579fd77d6033915ffaeb 508740 osmo-bts_1.7.0.49.1f755.tar.xz Files: - 129bb08080692200d13a9b736c020748 506848 osmo-bts_1.7.0.44.17fe7.tar.xz + 0f3caff0ade8c3050c1fc31d7c921afd 508740 osmo-bts_1.7.0.49.1f755.tar.xz
View file
osmo-bts_1.7.0.44.17fe7.tar.xz/.tarball-version -> osmo-bts_1.7.0.49.1f755.tar.xz/.tarball-version
Changed
@@ -1 +1 @@ -1.7.0.44-17fe7 +1.7.0.49-1f755
View file
osmo-bts_1.7.0.44.17fe7.tar.xz/TODO-RELEASE -> osmo-bts_1.7.0.49.1f755.tar.xz/TODO-RELEASE
Changed
@@ -8,3 +8,4 @@ # If any interfaces have been removed or changed since the last public release: c:r:0. #library what description / commit summary line libosmogsm >1.9.0 added new PRIM_INFO to include/osmocom/gsm/l1sap.h +libosmogsm >1.9.0 use of RLP code in libosmogsm
View file
osmo-bts_1.7.0.44.17fe7.tar.xz/debian/changelog -> osmo-bts_1.7.0.49.1f755.tar.xz/debian/changelog
Changed
@@ -1,8 +1,8 @@ -osmo-bts (1.7.0.44.17fe7) unstable; urgency=medium +osmo-bts (1.7.0.49.1f755) unstable; urgency=medium * Automatically generated changelog entry for building the Osmocom master feed - -- Osmocom OBS scripts <info@osmocom.org> Sun, 17 Dec 2023 10:50:11 +0000 + -- Osmocom OBS scripts <info@osmocom.org> Thu, 21 Dec 2023 11:39:48 +0000 osmo-bts (1.7.0) unstable; urgency=medium
View file
osmo-bts_1.7.0.44.17fe7.tar.xz/include/osmo-bts/bts.h -> osmo-bts_1.7.0.49.1f755.tar.xz/include/osmo-bts/bts.h
Changed
@@ -377,6 +377,8 @@ char *local_host; uint32_t sapi_mask; uint8_t sapi_acch; + bool rlp; + bool rlp_skip_null; } gsmtap; struct osmux_state osmux;
View file
osmo-bts_1.7.0.44.17fe7.tar.xz/include/osmo-bts/lchan.h -> osmo-bts_1.7.0.49.1f755.tar.xz/include/osmo-bts/lchan.h
Changed
@@ -287,7 +287,11 @@ } dtx_fr_hr_efr; uint8_t last_cmr; uint32_t last_fn; - + struct { + /* buffers to re-combine RLP frame from multiple Um blocks */ + uint8_t rlp_buf_ul576/8; /* maximum size of RLP frame */ + uint8_t rlp_buf_dl576/8; /* maximum size of RLP frame */ + } csd; } tch; /* 3GPP TS 48.058 § 9.3.37: 0; 255 ok, -1 means invalid*/
View file
osmo-bts_1.7.0.44.17fe7.tar.xz/src/common/l1sap.c -> osmo-bts_1.7.0.49.1f755.tar.xz/src/common/l1sap.c
Changed
@@ -33,6 +33,7 @@ #include <osmocom/gsm/l1sap.h> #include <osmocom/gsm/gsm_utils.h> #include <osmocom/gsm/rsl.h> +#include <osmocom/gsm/rlp.h> #include <osmocom/core/gsmtap.h> #include <osmocom/core/gsmtap_util.h> #include <osmocom/core/utils.h> @@ -1848,19 +1849,95 @@ return 1; } -static void send_ul_rtp_packet_data(struct gsm_lchan *lchan, uint32_t fn, +/* process one MAC block of unpacked bits of a non-transparent CSD channel */ +static void gsmtap_csd_rlp_process(struct gsm_lchan *lchan, bool is_uplink, + const struct ph_tch_param *tch_ind, + const uint8_t *data, unsigned int data_len) +{ + struct gsm_bts_trx *trx = lchan->ts->trx; + struct gsmtap_inst *inst = trx->bts->gsmtap.inst; + struct osmo_rlp_frame_decoded rlpf; + pbit_t *rlp_buf; + int byte_len; + + if (!inst || !trx->bts->gsmtap.rlp) + return; + + if (lchan->csd_mode != LCHAN_CSD_M_NT) + return; + + if (is_uplink) + rlp_buf = lchan->tch.csd.rlp_buf_ul; + else + rlp_buf = lchan->tch.csd.rlp_buf_dl; + + /* TCH/F 9.6: 4x60bit block => 240bit RLP frame + * TCH/F 4.8: 2x 2x60bit blocks starting at B0/B2/B4 => 240bit RLP frame + * TCH/H 4.8: 4x60bit block => 240bit RLP frame + * TCH/F 2.4: 2x36bit blocks => transparent only + * TCH/H 2.4: 4x36bit blocks => transparent only + * TCH/F 14.4: 2x 290 bit block (starting with M1=0) => 576-bit RLP frame + */ + + if (lchan->type == GSM_LCHAN_TCH_F && lchan->tch_mode == GSM48_CMODE_DATA_6k0) { + /* in this mode we have 120bit MAC blocks; two of them need to be concatenated + * to render a 240-bit RLP frame. The fist block is present in B0/B2/B4. + * The E7 bit is used to indicate the Frame MF0a */ + OSMO_ASSERT(data_len == 120); + ubit_t e7 = data4*7+3; + if (e7 == 0) { + osmo_ubit2pbit_ext(rlp_buf, 0, data, 0, data_len, 1); + return; + } else { + osmo_ubit2pbit_ext(rlp_buf, 120, data, 0, data_len, 1); + byte_len = 240/8; + } + } else if (lchan->type == GSM_LCHAN_TCH_F && lchan->tch_mode == GSM48_CMODE_DATA_14k5) { + /* in this mode we have 290bit MAC blocks containing M1, M2 and 288 data bits; + * two of them need to be concatenated to render a + * 576-bit RLP frame. The start of a RLP frame is + * denoted by a block with M1-bit set to 0. */ + OSMO_ASSERT(data_len == 290); + ubit_t m1 = data0; + if (m1 == 0) { + osmo_ubit2pbit_ext(rlp_buf, 0, data, 2, data_len, 1); + return; + } else { + osmo_ubit2pbit_ext(rlp_buf, 288, data, 2, data_len, 1); + byte_len = 576/8; + } + } else { + byte_len = osmo_ubit2pbit_ext(rlp_buf, 0, data, 0, data_len, 1); + } + + if (trx->bts->gsmtap.rlp_skip_null) { + int rc = osmo_rlp_decode(&rlpf, 0, rlp_buf, byte_len); + if (rc == 0 && rlpf.ftype == OSMO_RLP_FT_U && rlpf.u_ftype == OSMO_RLP_U_FT_NULL) + return; + } + + gsmtap_send_ex(inst, GSMTAP_TYPE_GSM_RLP, trx->arfcn | is_uplink ? GSMTAP_ARFCN_F_UPLINK : 0, + lchan->ts->nr, + lchan->type == GSM_LCHAN_TCH_H ? GSMTAP_CHANNEL_VOICE_H : GSMTAP_CHANNEL_VOICE_F, + lchan->nr, tch_ind->fn, tch_ind->rssi, 0, rlp_buf, byte_len); + +} + +static void send_ul_rtp_packet_data(struct gsm_lchan *lchan, const struct ph_tch_param *tch_ind, const uint8_t *data, uint16_t data_len) { uint8_t rtp_plRFC4040_RTP_PLEN; int rc; + gsmtap_csd_rlp_process(lchan, true, tch_ind, data, data_len); + rc = csd_v110_rtp_encode(lchan, &rtp_pl0, data, data_len); if (rc < 0) return; osmo_rtp_send_frame_ext(lchan->abis_ip.rtp_socket, &rtp_pl0, sizeof(rtp_pl), - fn_ms_adj(fn, lchan), + fn_ms_adj(tch_ind->fn, lchan), lchan->rtp_tx_marker); /* Only clear the marker bit once we have sent a RTP packet with it */ lchan->rtp_tx_marker = false; @@ -2000,7 +2077,7 @@ send_ul_rtp_packet_speech(lchan, fn, msg->data, msg->len); break; case RSL_CMOD_SPD_DATA: - send_ul_rtp_packet_data(lchan, fn, msg->data, msg->len); + send_ul_rtp_packet_data(lchan, tch_ind, msg->data, msg->len); break; case RSL_CMOD_SPD_SIGN: return 0; /* drop stale TCH.ind */ @@ -2309,6 +2386,10 @@ int rc = csd_v110_rtp_decode(lchan, msg->tail, rtp_pl, rtp_pl_len); if (rc > 0) { + /* 'fake' tch_ind containing all-zero so gsmtap code can be shared + * between UL and DL */ + static const struct ph_tch_param fake_tch_ind = {}; + gsmtap_csd_rlp_process(lchan, false, &fake_tch_ind, msg->tail, rc); msgb_put(msg, rc); } else { msgb_free(msg); @@ -2420,6 +2501,10 @@ lchan->ecu_state = NULL; } + /* reset CSD RLP buffers to avoid any user plane data leaking from + * one previous lchan into a later one */ + memset(&lchan->tch.csd, 0, sizeof(lchan->tch.csd)); + return l1sap_chan_act_dact_modify(trx, chan_nr, PRIM_INFO_DEACTIVATE, 0); }
View file
osmo-bts_1.7.0.44.17fe7.tar.xz/src/common/oml.c -> osmo-bts_1.7.0.49.1f755.tar.xz/src/common/oml.c
Changed
@@ -279,17 +279,216 @@ return 0; } +/* Add attribute 9.4.8 BCCH ARFCN for BTS class */ +static inline void add_att_bcch_arfcn(struct msgb *msg, const struct gsm_bts *bts) +{ + /* type + 16 bit value */ + msgb_tv16_put(msg, NM_ATT_BCCH_ARFCN, bts->c0->arfcn); +} + +/* Add attribute 9.4.25 Interference Level Boundaries for BTS class */ +static inline void add_att_interf_bound(struct msgb *msg, const struct gsm_bts *bts) +{ + /* type + 8 bit values */ + msgb_put_u8(msg, NM_ATT_INTERF_BOUND); + for (int j = 0; j < ARRAY_SIZE(bts->interference.boundary); j++) + msgb_put_u8(msg, abs(bts->interference.boundaryj)); +} + +/* Add attribute 9.4.24 Intave Parameter for BTS class */ +static inline void add_att_intave_param(struct msgb *msg, const struct gsm_bts *bts) +{ + /* type + 8 bit value */ + msgb_tv_put(msg, NM_ATT_INTAVE_PARAM, bts->interference.intave); +} + +/* Add attribute 9.4.14 Connection Failure Criterion for BTS class */ +static inline void add_att_conn_fail_crit(struct msgb *msg, const struct gsm_bts *bts) +{ + /* type + length + values */ + msgb_tv16_put(msg, NM_ATT_CONN_FAIL_CRIT, 2); + msgb_put_u8(msg, 0x01); + msgb_put_u8(msg, bts->radio_link_timeout.current); +} + +/* Add attribute 9.4.31 Maximum Timing Advance for BTS class */ +static inline void add_att_max_ta(struct msgb *msg, const struct gsm_bts *bts) +{ + /* type + 8 bit value */ + msgb_tv_put(msg, NM_ATT_MAX_TA, bts->max_ta); +} + +/* Add attribute 9.4.39 Overload Period for BTS class */ +static inline void add_att_overl_period(struct msgb *msg, const struct gsm_bts *bts) +{ + /* type + length + value */ + msgb_tv16_put(msg, NM_ATT_OVERL_PERIOD, 1); + msgb_put_u8(msg, bts->load.overload_period); +} + +/* Add attribute 9.4.12 CCCH Load Threshold for BTS class */ +static inline void add_att_ccch_l_t(struct msgb *msg, const struct gsm_bts *bts) +{ + /* type + 8 bit value */ + msgb_tv_put(msg, NM_ATT_CCCH_L_T, bts->load.ccch.load_ind_thresh); +} + +/* Add attribute 9.4.11 CCCH Load Indication Period for BTS class */ +static inline void add_att_ccch_l_i_p(struct msgb *msg, const struct gsm_bts *bts) +{ + /* type + 8 bit value */ + msgb_tv_put(msg, NM_ATT_CCCH_L_I_P, bts->load.ccch.load_ind_period); +} + +/* Add attribute 9.4.44 RACH Busy Threshold for BTS class */ +static inline void add_att_rach_b_thresh(struct msgb *msg, const struct gsm_bts *bts) +{ + /* type + 8 bit value */ + msgb_tv_put(msg, NM_ATT_RACH_B_THRESH, abs(bts->load.rach.busy_thresh)); +} + +/* Add attribute 9.4.45 RACH Load Averaging Slots for BTS class */ +static inline void add_att_ldavg_slots(struct msgb *msg, const struct gsm_bts *bts) +{ + /* type + 16 bit value */ + msgb_tv16_put(msg, NM_ATT_LDAVG_SLOTS, bts->load.rach.averaging_slots); +} + +/* Add attribute 9.4.10 BTS Air Timer for BTS class */ +static inline void add_att_bts_air_timer(struct msgb *msg, const struct gsm_bts *bts) +{ + /* type + 8 bit value */ + msgb_tv_put(msg, NM_ATT_BTS_AIR_TIMER, bts->t3105_ms / 10); +} + +/* Add attribute 9.4.37 NY1 for BTS class */ +static inline void add_att_ny1(struct msgb *msg, const struct gsm_bts *bts) +{ + /* type + 8 bit value */ + msgb_tv_put(msg, NM_ATT_NY1, bts->ny1); +} + +/* Add attribute 9.4.9 BSIC for BTS class */ +static inline int add_att_bsic(struct msgb *msg, const struct gsm_bts *bts) +{ + /* BSIC must be configured. */ + if (!bts->bsic_configured) + return -EINVAL; + /* type + 8 bit value */ + msgb_tv_put(msg, NM_ATT_BSIC, bts->bsic); + return 0; +} + +/* Add attribute 9.4.20 GSM Time for BTS class */ +static inline void add_att_gsm_time(struct msgb *msg, const struct gsm_bts *bts) +{ + /* type + 16 bit value */ + msgb_tv16_put(msg, NM_ATT_GSM_TIME, bts->gsm_time.fn % GSM_RFN_MODULUS); +} + +/* Add attribute 9.4.47 RF Max Power Reduction for radio carrier class */ +static inline void add_att_rf_maxpowr_r(struct msgb *msg, const struct gsm_bts_trx *trx) +{ + /* type + 8 bit value */ + msgb_tv_put(msg, NM_ATT_RF_MAXPOWR_R, trx->max_power_red / 2); +} + +/* Add attribute 9.4.5 ARFCN List for radio carrier class */ +static inline void add_att_arfcn_list(struct msgb *msg, const struct gsm_bts_trx *trx) +{ +#if 0 + /* type + length + values */ + msgb_tv16_put(msg, NM_ATT_ARFCN_LIST, trx->arfcn_num * 2); + for (int j = 0; j < trx->arfcn_num; j++) + msgb_put_u16(msg, trx->arfcn_listj); +#else + /* type + length + values */ + msgb_tv16_put(msg, NM_ATT_ARFCN_LIST, 2); + msgb_put_u16(msg, trx->arfcn); +#endif +} + +/* Add attribute 9.4.5 ARFCN List for channel class */ +static inline void add_att_arfcn_list_ts(struct msgb *msg, const struct gsm_bts_trx_ts *ts) +{ + if (ts->hopping.enabled) { + /* type + length + values */ + msgb_tv16_put(msg, NM_ATT_ARFCN_LIST, ts->hopping.arfcn_num * 2); + for (int j = 0; j < ts->hopping.arfcn_num; j++) + msgb_put_u16(msg, ts->hopping.arfcn_listj); + } else { + /* type + length + values */ + msgb_tv16_put(msg, NM_ATT_ARFCN_LIST, 2); + msgb_put_u16(msg, ts->trx->arfcn); + } +} + +/* Add attribute 9.4.13 Channel Combination for channel class */ +static inline int add_att_chan_comb(struct msgb *msg, const struct gsm_bts_trx_ts *ts) +{ + int comb = abis_nm_chcomb4pchan(ts->pchan); + + /* If current channel combination is not yet set, 0xff is returned. */ + if (comb < 0 || comb == 0xff) + return -EINVAL; + /* type + 8 bit value */ + msgb_tv_put(msg, NM_ATT_CHAN_COMB, comb); + return 0; +} + +/* Add attribute 9.4.60 TSC for channel class */ +static inline void add_att_tsc(struct msgb *msg, const struct gsm_bts_trx_ts *ts) +{ + /* type + 8 bit value */ + msgb_tv_put(msg, NM_ATT_TSC, ts->tsc); +} + +/* Add attribute 9.4.60 HSN for channel class */ +static inline int add_att_hsn(struct msgb *msg, const struct gsm_bts_trx_ts *ts) +{ + if (!ts->hopping.enabled) + return -EINVAL; + /* type + 8 bit value */ + msgb_tv_put(msg, NM_ATT_HSN, ts->hopping.hsn); + return 0; +} + +/* Add attribute 9.4.21 MAIO for channel class */ +static inline int add_att_maio(struct msgb *msg, const struct gsm_bts_trx_ts *ts) +{ + if (!ts->hopping.enabled) + return -EINVAL; + /* type + 8 bit value */ + msgb_tv_put(msg, NM_ATT_MAIO, ts->hopping.maio); + return 0; +} + /* send 3GPP TS 52.021 §8.11.2 Get Attribute Response */ static int oml_tx_attr_resp(const struct gsm_abis_mo *mo, const uint8_t *attr, uint16_t attr_len) { struct msgb *nmsg = oml_msgb_alloc(); unsigned int num_unsupported = 0; + struct gsm_bts_trx *trx = NULL; + struct gsm_bts_trx_ts *ts = NULL; int rc; if (!nmsg) return -NM_NACK_CANT_PERFORM; + /* Set TRX, if object class is Radio Carrier, Baseband Transceiver or Channel. */ + switch (mo->obj_class) { + case NM_OC_RADIO_CARRIER: + case NM_OC_BASEB_TRANSC: + case NM_OC_CHANNEL: + trx = gsm_bts_trx_num(mo->bts, mo->obj_inst.trx_nr); + break; + } + + /* Set TS, if object class is Channel. */ + if (mo->obj_class == NM_OC_CHANNEL && trx) + ts = &trx->tsmo->obj_inst.ts_nr; + for (unsigned int i = 0; i < attr_len; i++) { switch (attri) { case NM_ATT_OPER_STATE: @@ -318,6 +517,115 @@ if (add_att_ipacc_features(nmsg, mo) != 0) goto unsupported; break; + case NM_ATT_BCCH_ARFCN: + if (mo->obj_class != NM_OC_BTS) + goto unsupported; + add_att_bcch_arfcn(nmsg, mo->bts); + break; + case NM_ATT_INTERF_BOUND: + if (mo->obj_class != NM_OC_BTS) + goto unsupported; + add_att_interf_bound(nmsg, mo->bts); + break; + case NM_ATT_INTAVE_PARAM: + if (mo->obj_class != NM_OC_BTS) + goto unsupported; + add_att_intave_param(nmsg, mo->bts); + break; + case NM_ATT_CONN_FAIL_CRIT: + if (mo->obj_class != NM_OC_BTS) + goto unsupported; + add_att_conn_fail_crit(nmsg, mo->bts); + break; + case NM_ATT_MAX_TA: + if (mo->obj_class != NM_OC_BTS) + goto unsupported; + add_att_max_ta(nmsg, mo->bts); + break; + case NM_ATT_OVERL_PERIOD: + if (mo->obj_class != NM_OC_BTS) + goto unsupported; + add_att_overl_period(nmsg, mo->bts); + break; + case NM_ATT_CCCH_L_T: + if (mo->obj_class != NM_OC_BTS) + goto unsupported; + add_att_ccch_l_t(nmsg, mo->bts); + break; + case NM_ATT_CCCH_L_I_P: + if (mo->obj_class != NM_OC_BTS) + goto unsupported; + add_att_ccch_l_i_p(nmsg, mo->bts); + break; + case NM_ATT_RACH_B_THRESH: + if (mo->obj_class != NM_OC_BTS) + goto unsupported; + add_att_rach_b_thresh(nmsg, mo->bts); + break; + case NM_ATT_LDAVG_SLOTS: + if (mo->obj_class != NM_OC_BTS) + goto unsupported; + add_att_ldavg_slots(nmsg, mo->bts); + break; + case NM_ATT_BTS_AIR_TIMER: + if (mo->obj_class != NM_OC_BTS) + goto unsupported; + add_att_bts_air_timer(nmsg, mo->bts); + break; + case NM_ATT_NY1: + if (mo->obj_class != NM_OC_BTS) + goto unsupported; + add_att_ny1(nmsg, mo->bts); + break; + case NM_ATT_BSIC: + if (mo->obj_class != NM_OC_BTS) + goto unsupported; + if (add_att_bsic(nmsg, mo->bts) != 0) + goto unsupported; + break; + case NM_ATT_GSM_TIME: + if (mo->obj_class != NM_OC_BTS) + goto unsupported; + add_att_gsm_time(nmsg, mo->bts); + break; + case NM_ATT_RF_MAXPOWR_R: + if (mo->obj_class != NM_OC_RADIO_CARRIER || !trx) + goto unsupported; + add_att_rf_maxpowr_r(nmsg, trx); + break; + case NM_ATT_ARFCN_LIST: + if (mo->obj_class == NM_OC_RADIO_CARRIER && trx) { + add_att_arfcn_list(nmsg, trx); + break; + } + if (mo->obj_class == NM_OC_CHANNEL && ts) { + add_att_arfcn_list_ts(nmsg, ts); + break; + } + goto unsupported; + case NM_ATT_CHAN_COMB: + if (mo->obj_class != NM_OC_CHANNEL || !ts) + goto unsupported; + if (add_att_chan_comb(nmsg, ts) != 0) + goto unsupported; + break; + case NM_ATT_TSC: + if (mo->obj_class != NM_OC_CHANNEL || !ts) + goto unsupported; + add_att_tsc(nmsg, ts); + break; + case NM_ATT_HSN: + if (mo->obj_class != NM_OC_CHANNEL || !ts) + goto unsupported; + if (add_att_hsn(nmsg, ts) != 0) + goto unsupported; + break; + case NM_ATT_MAIO: + if (mo->obj_class != NM_OC_CHANNEL || !ts) + goto unsupported; + if (add_att_maio(nmsg, ts) != 0) + goto unsupported; + break; default: unsupported: LOGP(DOML, LOGL_ERROR, "%s: O&M Get Attributes %u, %s is unsupported\n",
View file
osmo-bts_1.7.0.44.17fe7.tar.xz/src/common/vty.c -> osmo-bts_1.7.0.49.1f755.tar.xz/src/common/vty.c
Changed
@@ -447,6 +447,12 @@ sapi_buf = osmo_str_tolower(get_value_string(gsmtap_sapi_names, GSMTAP_CHANNEL_ACCH)); vty_out(vty, " gsmtap-sapi %s%s", sapi_buf, VTY_NEWLINE); } + if (bts->gsmtap.rlp) { + if (bts->gsmtap.rlp_skip_null) + vty_out(vty, " gsmtap-rlp skip-null%s", VTY_NEWLINE); + else + vty_out(vty, " gsmtap-rlp%s", VTY_NEWLINE); + } vty_out(vty, " min-qual-rach %d%s", bts->min_qual_rach, VTY_NEWLINE); vty_out(vty, " min-qual-norm %d%s", bts->min_qual_norm, @@ -2386,6 +2392,29 @@ return CMD_SUCCESS; } +DEFUN(cfg_bts_gsmtap_rlp, cfg_bts_gsmtap_rlp_cmd, + "gsmtap-rlp skip-null", + "Enable generation of GSMTAP frames for RLP (non-transparent CSD)\n" + "Skip the generation of GSMTAP for RLP NULL frames\n") +{ + struct gsm_bts *bts = vty->index; + bts->gsmtap.rlp = true; + if (argc >= 1 && !strcmp(argv0, "skip-null")) + bts->gsmtap.rlp_skip_null = true; + else + bts->gsmtap.rlp_skip_null = false; + return CMD_SUCCESS; +} + +DEFUN(cfg_bts_no_gsmtap_rlp, cfg_bts_no_gsmtap_rlp_cmd, + "no gsmtap-rlp", + NO_STR "Disable generation of GSMTAP frames for RLP (non-transparent CSD)\n") +{ + struct gsm_bts *bts = vty->index; + bts->gsmtap.rlp = false; + return CMD_SUCCESS; +} + static struct cmd_node phy_node = { PHY_NODE, "%s(phy)# ", @@ -2757,6 +2786,8 @@ install_element(BTS_NODE, &cfg_bts_gsmtap_sapi_all_cmd); install_element(BTS_NODE, &cfg_bts_gsmtap_sapi_cmd); install_element(BTS_NODE, &cfg_bts_no_gsmtap_sapi_cmd); + install_element(BTS_NODE, &cfg_bts_gsmtap_rlp_cmd); + install_element(BTS_NODE, &cfg_bts_no_gsmtap_rlp_cmd); /* Osmux Node */ install_element(BTS_NODE, &cfg_bts_osmux_cmd);
View file
osmo-bts_1.7.0.44.17fe7.tar.xz/tests/osmo-bts.vty -> osmo-bts_1.7.0.49.1f755.tar.xz/tests/osmo-bts.vty
Changed
@@ -262,6 +262,8 @@ gsmtap-sapi (enable-all|disable-all) gsmtap-sapi (bcch|ccch|rach|agch|pch|sdcch|tch/f|tch/h|pacch|pdtch|ptcch|cbch|sacch) no gsmtap-sapi (bcch|ccch|rach|agch|pch|sdcch|tch/f|tch/h|pacch|pdtch|ptcch|cbch|sacch) + gsmtap-rlp skip-null + no gsmtap-rlp osmux trx <0-254> ... @@ -285,6 +287,7 @@ gsmtap-remote-host Enable GSMTAP Um logging (see also 'gsmtap-sapi') gsmtap-local-host Enable local bind for GSMTAP Um logging (see also 'gsmtap-sapi') gsmtap-sapi Enable/disable sending of UL/DL messages over GSMTAP + gsmtap-rlp Enable generation of GSMTAP frames for RLP (non-transparent CSD) osmux Configure Osmux trx Select a TRX to configure ...
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.