Projects
osmocom:master
osmo-bsc
Sign Up
Log In
Username
Password
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
Expand all
Collapse all
Changes of Revision 184
View file
osmo-bsc.spec
Changed
@@ -18,13 +18,13 @@ Name: osmo-bsc Requires: osmocom-master -Version: 1.11.0.1.c4b330 +Version: 1.11.0.6.c3446 Release: 0 Summary: OsmoBSC: Osmocom's Base Station Controller for 2G CS mobile networks License: AGPL-3.0-or-later AND GPL-2.0-or-later Group: Hardware/Mobile URL: https://osmocom.org/projects/osmobsc -Source: osmo-bsc_1.11.0.1.c4b330.tar.xz +Source: osmo-bsc_1.11.0.6.c3446.tar.xz Source1: rpmlintrc BuildRequires: automake >= 1.9 BuildRequires: libtool >= 2
View file
commit_c3446ef49e90c1a9e8aad3b888e37f58ddcd968d.txt
Added
View file
commit_c4b330ba4c5999d59665933b0e9802968574b93a.txt
Deleted
View file
osmo-bsc_1.11.0.1.c4b330.dsc -> osmo-bsc_1.11.0.6.c3446.dsc
Changed
@@ -2,7 +2,7 @@ Source: osmo-bsc Binary: osmo-bsc, osmo-bsc-dbg, abisip-find, osmo-bsc-ipaccess-utils, osmo-bsc-bs11-utils, osmo-bsc-meas-utils, osmo-bsc-doc Architecture: any all -Version: 1.11.0.1.c4b330 +Version: 1.11.0.6.c3446 Maintainer: Osmocom team <openbsc@lists.osmocom.org> Homepage: https://projects.osmocom.org/projects/osmo-bsc Standards-Version: 3.9.8 @@ -18,8 +18,8 @@ osmo-bsc-ipaccess-utils deb net extra arch=any osmo-bsc-meas-utils deb net extra arch=any Checksums-Sha1: - 377c46a16655d54b6f64530903fbbe759149dc80 616792 osmo-bsc_1.11.0.1.c4b330.tar.xz + 12a4ae64262619d6cfd5a391c4044871f3ca3079 617416 osmo-bsc_1.11.0.6.c3446.tar.xz Checksums-Sha256: - ff1f54797c4483ca938c85cce8118a7b28a3547bb92c788957f6d44fc55900bd 616792 osmo-bsc_1.11.0.1.c4b330.tar.xz + 806e3b2f20075d06a95b6eddf1af2c4c29cb1597f20724818b66f87b804ddc93 617416 osmo-bsc_1.11.0.6.c3446.tar.xz Files: - 8287148d04cee47badb6e1c81ebd0d6c 616792 osmo-bsc_1.11.0.1.c4b330.tar.xz + 05082e15a7bb01ff2c14367ae2822c81 617416 osmo-bsc_1.11.0.6.c3446.tar.xz
View file
osmo-bsc_1.11.0.1.c4b330.tar.xz/.tarball-version -> osmo-bsc_1.11.0.6.c3446.tar.xz/.tarball-version
Changed
@@ -1 +1 @@ -1.11.0.1-c4b330 +1.11.0.6-c3446
View file
osmo-bsc_1.11.0.1.c4b330.tar.xz/debian/changelog -> osmo-bsc_1.11.0.6.c3446.tar.xz/debian/changelog
Changed
@@ -1,8 +1,8 @@ -osmo-bsc (1.11.0.1.c4b330) unstable; urgency=medium +osmo-bsc (1.11.0.6.c3446) unstable; urgency=medium * Automatically generated changelog entry for building the Osmocom master feed - -- Osmocom OBS scripts <info@osmocom.org> Tue, 12 Sep 2023 22:16:09 +0000 + -- Osmocom OBS scripts <info@osmocom.org> Wed, 13 Sep 2023 10:45:58 +0000 osmo-bsc (1.11.0) unstable; urgency=medium
View file
osmo-bsc_1.11.0.1.c4b330.tar.xz/include/osmocom/bsc/abis_nm.h -> osmo-bsc_1.11.0.6.c3446.tar.xz/include/osmocom/bsc/abis_nm.h
Changed
@@ -29,9 +29,6 @@ #include <osmocom/bsc/gsm_data.h> #include <osmocom/bsc/signal.h> -/* max number of attributes represented as 3GPP TS 52.021 §9.4.62 SW Description array */ -#define MAX_BTS_ATTR 5 - /* The BCCH info from an ip.access test, in host byte order * and already parsed... */ struct ipac_bcch_info {
View file
osmo-bsc_1.11.0.1.c4b330.tar.xz/include/osmocom/bsc/bts_ipaccess_nanobts_omlattr.h -> osmo-bsc_1.11.0.6.c3446.tar.xz/include/osmocom/bsc/bts_ipaccess_nanobts_omlattr.h
Changed
@@ -23,12 +23,19 @@ #include <stdint.h> #include <osmocom/core/msgb.h> +#include <osmocom/gsm/tlv.h> struct gsm_bts_sm; struct gsm_bts; struct gsm_bts_trx; struct gsm_gprs_nsvc; +extern const struct tlv_definition ipacc_eie_tlv_def; + +int ipacc_parse_supp_features(const struct gsm_bts *bts, + const struct abis_om_fom_hdr *foh, + const uint8_t *data, uint16_t data_len); + struct msgb *nanobts_gen_set_bts_attr(struct gsm_bts *bts); struct msgb *nanobts_gen_set_nse_attr(struct gsm_bts_sm *bts_sm); struct msgb *nanobts_gen_set_cell_attr(struct gsm_bts *bts);
View file
osmo-bsc_1.11.0.1.c4b330.tar.xz/src/osmo-bsc/abis_nm.c -> osmo-bsc_1.11.0.6.c3446.tar.xz/src/osmo-bsc/abis_nm.c
Changed
@@ -52,11 +52,15 @@ #include <osmocom/bsc/nm_common_fsm.h> #include <osmocom/gsm/bts_features.h> #include <osmocom/bsc/ipaccess.h> +#include <osmocom/bsc/bts_ipaccess_nanobts_omlattr.h> #define OM_ALLOC_SIZE 1024 #define OM_HEADROOM_SIZE 128 #define IPACC_SEGMENT_SIZE 245 +/* max number of SW Description IEs we can parse */ +#define SW_DESCR_MAX 5 + #define LOGPMO(mo, ss, lvl, fmt, args ...) \ LOGP(ss, lvl, "OC=%s(%02x) INST=(%02x,%02x,%02x): " fmt, \ get_value_string(abis_nm_obj_class_names, (mo)->obj_class), \ @@ -560,6 +564,45 @@ return ari + num_unreported + 1; /* we have to account for 1st byte with number of unreported attributes */ } +/* Parse Attribute Response Info content for 3GPP TS 52.021 §9.4.30 Manufacturer Id */ +static void parse_osmo_bts_features(struct gsm_bts *bts, + const uint8_t *data, uint16_t data_len) +{ + /* log potential BTS feature vector overflow */ + if (data_len > sizeof(bts->_features_data)) { + LOGPMO(&bts->mo, DNM, LOGL_NOTICE, + "Get Attributes Response: feature vector is truncated " + "(from %u to %zu bytes)\n", data_len, sizeof(bts->_features_data)); + data_len = sizeof(bts->_features_data); + } + + /* check that max. expected BTS attribute is above given feature vector length */ + if (data_len > OSMO_BYTES_FOR_BITS(_NUM_BTS_FEAT)) { + LOGPMO(&bts->mo, DNM, LOGL_NOTICE, + "Get Attributes Response: reported unexpectedly long (%u bytes) " + "feature vector - most likely it was compiled against newer BSC headers. " + "Consider upgrading your BSC to later version.\n", data_len); + } + + memcpy(bts->_features_data, data, data_len); + bts->features_known = true; + + /* Log each BTS feature in the reported vector */ + for (unsigned int i = 0; i < data_len * 8; i++) { + if (!osmo_bts_has_feature(&bts->features, i)) + continue; + + if (i >= _NUM_BTS_FEAT) { + LOGPMO(&bts->mo, DNM, LOGL_NOTICE, + "Get Attributes Response: unknown feature 0x%02x is supported\n", i); + } else { + LOGPMO(&bts->mo, DNM, LOGL_NOTICE, + "Get Attributes Response: feature '%s' is supported\n", + osmo_bts_features_name(i)); + } + } +} + /* Handle 3GPP TS 52.021 §8.11.3 Get Attribute Response (with nanoBTS specific attribute formatting) */ static int parse_attr_resp_info_attr(struct gsm_bts *bts, const struct gsm_bts_trx *trx, struct abis_om_fom_hdr *foh, struct tlv_parsed *tp) { @@ -570,42 +613,22 @@ uint16_t port; struct in_addr ia = {0}; char unit_id40; - struct abis_nm_sw_desc sw_descrMAX_BTS_ATTR; - - /* Parse Attribute Response Info content for 3GPP TS 52.021 §9.4.30 Manufacturer Id */ - if (bts->type == GSM_BTS_TYPE_OSMOBTS && TLVP_PRES_LEN(tp, NM_ATT_MANUF_ID, 2)) { - len = TLVP_LEN(tp, NM_ATT_MANUF_ID); - - /* log potential BTS feature vector overflow */ - if (len > sizeof(bts->_features_data)) { - LOGPMO(&bts->mo, DNM, LOGL_NOTICE, "Get Attributes Response: feature vector is truncated " - "(from %u to %zu bytes)\n", len, sizeof(bts->_features_data)); - len = sizeof(bts->_features_data); - } - /* check that max. expected BTS attribute is above given feature vector length */ - if (len > OSMO_BYTES_FOR_BITS(_NUM_BTS_FEAT)) { - LOGPMO(&bts->mo, DNM, LOGL_NOTICE, "Get Attributes Response: reported unexpectedly long (%u bytes) " - "feature vector - most likely it was compiled against newer BSC headers. " - "Consider upgrading your BSC to later version.\n", len); + switch (bts->type) { + case GSM_BTS_TYPE_OSMOBTS: + if (TLVP_PRES_LEN(tp, NM_ATT_MANUF_ID, 2)) { + parse_osmo_bts_features(bts, TLVP_VAL(tp, NM_ATT_MANUF_ID), + TLVP_LEN(tp, NM_ATT_MANUF_ID)); } - - memcpy(bts->_features_data, TLVP_VAL(tp, NM_ATT_MANUF_ID), len); - bts->features_known = true; - - /* Log each BTS feature in the reported vector */ - for (i = 0; i < len * 8; i++) { - if (!osmo_bts_has_feature(&bts->features, i)) - continue; - - if (i >= _NUM_BTS_FEAT) - LOGPMO(&bts->mo, DNM, LOGL_NOTICE, "Get Attributes Response: unknown feature 0x%02x is" - " supported\n", i); - else - LOGPMO(&bts->mo, DNM, LOGL_NOTICE, "Get Attributes Response: feature '%s' is" - " supported\n", osmo_bts_features_name(i)); + /* fall-through */ + case GSM_BTS_TYPE_NANOBTS: + if (TLVP_PRESENT(tp, NM_ATT_IPACC_SUPP_FEATURES)) { + ipacc_parse_supp_features(bts, foh, TLVP_VAL(tp, NM_ATT_IPACC_SUPP_FEATURES), + TLVP_LEN(tp, NM_ATT_IPACC_SUPP_FEATURES)); } - + break; + default: + break; } /* Parse Attribute Response Info content for 3GPP TS 52.021 §9.4.28 Manufacturer Dependent State */ @@ -617,6 +640,7 @@ /* Parse Attribute Response Info content for 3GPP TS 52.021 §9.4.61 SW Configuration */ if (TLVP_PRESENT(tp, NM_ATT_SW_CONFIG)) { + struct abis_nm_sw_desc sw_descrSW_DESCR_MAX; data = TLVP_VAL(tp, NM_ATT_SW_CONFIG); len = TLVP_LEN(tp, NM_ATT_SW_CONFIG); /* after parsing manufacturer-specific attributes there's list of replies in form of sw-conf structure: */ @@ -728,7 +752,7 @@ struct tlv_parsed tp; const uint8_t *sw_config; int ret, sw_config_len, len; - struct abis_nm_sw_desc sw_descrMAX_BTS_ATTR; + struct abis_nm_sw_desc sw_descrSW_DESCR_MAX; DEBUGPFOH(DNM, foh, "Software Activate Request, ACKing and Activating\n");
View file
osmo-bsc_1.11.0.1.c4b330.tar.xz/src/osmo-bsc/bts_ipaccess_nanobts_omlattr.c -> osmo-bsc_1.11.0.6.c3446.tar.xz/src/osmo-bsc/bts_ipaccess_nanobts_omlattr.c
Changed
@@ -26,6 +26,73 @@ #include <osmocom/bsc/bts.h> #include <osmocom/gsm/bts_features.h> +const struct tlv_definition ipacc_eie_tlv_def = { + .def = { + /* TODO: add more values from enum ipac_eie */ + NM_IPAC_EIE_FREQ_BANDS = { TLV_TYPE_TL16V }, + NM_IPAC_EIE_MAX_TA = { TLV_TYPE_TL16V }, + NM_IPAC_EIE_CIPH_ALGOS = { TLV_TYPE_TL16V }, + NM_IPAC_EIE_CHAN_TYPES = { TLV_TYPE_TL16V }, + NM_IPAC_EIE_CHAN_MODES = { TLV_TYPE_TL16V }, + NM_IPAC_EIE_GPRS_CODING = { TLV_TYPE_TL16V }, + NM_IPAC_EIE_RTP_FEATURES = { TLV_TYPE_TL16V }, + NM_IPAC_EIE_RSL_FEATURES = { TLV_TYPE_TL16V }, + } +}; + +static inline uint32_t ipacc_parse_supp_flags(const struct abis_om_fom_hdr *foh, + const struct value_string *flags, + const struct tlv_p_entry *e, + const char *text) +{ + uint32_t u32 = 0; + + for (unsigned int i = 0; i < OSMO_MAX(e->len, 4); i++) + u32 |= e->vali << (i * 8); + for (const struct value_string *vs = flags; vs->value && vs->str; vs++) { + if (u32 & vs->value) + LOGPFOH(DNM, LOGL_DEBUG, foh, "%s '%s' is supported\n", text, vs->str); + } + + return u32; +} + +/* Parse ip.access Supported Features IE */ +int ipacc_parse_supp_features(const struct gsm_bts *bts, + const struct abis_om_fom_hdr *foh, + const uint8_t *data, uint16_t data_len) +{ + const struct tlv_p_entry *e; + struct tlv_parsed tp; + + if (tlv_parse(&tp, &ipacc_eie_tlv_def, data, data_len, 0, 0) < 0) { + LOGPFOH(DNM, LOGL_ERROR, foh, "%s(): tlv_parse failed\n", __func__); + return -EINVAL; + } + + /* TODO: store the flags in the respective MO state */ + if ((e = TLVP_GET(&tp, NM_IPAC_EIE_FREQ_BANDS)) != NULL) + ipacc_parse_supp_flags(foh, abis_nm_ipacc_freq_band_desc, e, "Freq. band"); + if ((e = TLVP_GET(&tp, NM_IPAC_EIE_CIPH_ALGOS)) != NULL) + ipacc_parse_supp_flags(foh, abis_nm_ipacc_ciph_algo_desc, e, "Ciphering algorithm"); + if ((e = TLVP_GET(&tp, NM_IPAC_EIE_CHAN_TYPES)) != NULL) + ipacc_parse_supp_flags(foh, abis_nm_ipacc_chant_desc, e, "Channel type"); + if ((e = TLVP_GET(&tp, NM_IPAC_EIE_CHAN_MODES)) != NULL) + ipacc_parse_supp_flags(foh, abis_nm_ipacc_chanm_desc, e, "Channel mode"); + if ((e = TLVP_GET(&tp, NM_IPAC_EIE_GPRS_CODING)) != NULL) + ipacc_parse_supp_flags(foh, abis_nm_ipacc_gprs_coding_desc, e, "GPRS Coding Scheme"); + if ((e = TLVP_GET(&tp, NM_IPAC_EIE_RTP_FEATURES)) != NULL) + ipacc_parse_supp_flags(foh, abis_nm_ipacc_rtp_feat_desc, e, "RTP Feature"); + if ((e = TLVP_GET(&tp, NM_IPAC_EIE_RSL_FEATURES)) != NULL) + ipacc_parse_supp_flags(foh, abis_nm_ipacc_rsl_feat_desc, e, "RSL Feature"); + if (TLVP_PRES_LEN(&tp, NM_IPAC_EIE_MAX_TA, 1)) { + uint8_t u8 = *TLVP_VAL(&tp, NM_IPAC_EIE_MAX_TA); + LOGPFOH(DNM, LOGL_DEBUG, foh, "Max Timing Advance %u\n", u8); + } + + return 0; +} + /* 3GPP TS 52.021 section 8.6.1 Set BTS Attributes */ struct msgb *nanobts_gen_set_bts_attr(struct gsm_bts *bts) {
View file
osmo-bsc_1.11.0.1.c4b330.tar.xz/src/osmo-bsc/bts_siemens_bs11.c -> osmo-bsc_1.11.0.6.c3446.tar.xz/src/osmo-bsc/bts_siemens_bs11.c
Changed
@@ -423,57 +423,35 @@ patch_nm_tables(trx->bts); - switch (trx->bts->type) { - case GSM_BTS_TYPE_BS11: - /* FIXME: discover this by fetching an attribute */ + /* FIXME: discover this by fetching an attribute */ #if 0 - trx->nominal_power = 15; /* 15dBm == 30mW PA configuration */ + trx->nominal_power = 15; /* 15dBm == 30mW PA configuration */ #else - trx->nominal_power = 24; /* 24dBm == 250mW PA configuration */ + trx->nominal_power = 24; /* 24dBm == 250mW PA configuration */ #endif - abis_nm_conn_terr_sign(trx, e1l->e1_nr, e1l->e1_ts, - e1l->e1_ts_ss); - abis_nm_establish_tei(trx->bts, trx->nr, e1l->e1_nr, - e1l->e1_ts, e1l->e1_ts_ss, trx->rsl_tei_primary); - - /* Set Radio Attributes */ - if (trx == trx->bts->c0) - abis_nm_set_radio_attr(trx, bs11_attr_radio, - sizeof(bs11_attr_radio)); - else { - uint8_t trx1_attr_radiosizeof(bs11_attr_radio); - uint8_t arfcn_low = trx->arfcn & 0xff; - uint8_t arfcn_high = (trx->arfcn >> 8) & 0x0f; - memcpy(trx1_attr_radio, bs11_attr_radio, - sizeof(trx1_attr_radio)); - - /* patch ARFCN into TRX Attributes */ - trx1_attr_radio2 &= 0xf0; - trx1_attr_radio2 |= arfcn_high; - trx1_attr_radio3 = arfcn_low; - - abis_nm_set_radio_attr(trx, trx1_attr_radio, - sizeof(trx1_attr_radio)); - } - break; - case GSM_BTS_TYPE_NANOBTS: - switch (trx->bts->band) { - case GSM_BAND_850: - case GSM_BAND_900: - trx->nominal_power = 20; - break; - case GSM_BAND_1800: - case GSM_BAND_1900: - trx->nominal_power = 23; - break; - default: - LOGP(DNM, LOGL_ERROR, "Unsupported nanoBTS GSM band %s\n", - gsm_band_name(trx->bts->band)); - break; - } - break; - default: - break; + abis_nm_conn_terr_sign(trx, e1l->e1_nr, e1l->e1_ts, + e1l->e1_ts_ss); + abis_nm_establish_tei(trx->bts, trx->nr, e1l->e1_nr, + e1l->e1_ts, e1l->e1_ts_ss, trx->rsl_tei_primary); + + /* Set Radio Attributes */ + if (trx == trx->bts->c0) + abis_nm_set_radio_attr(trx, bs11_attr_radio, + sizeof(bs11_attr_radio)); + else { + uint8_t trx1_attr_radiosizeof(bs11_attr_radio); + uint8_t arfcn_low = trx->arfcn & 0xff; + uint8_t arfcn_high = (trx->arfcn >> 8) & 0x0f; + memcpy(trx1_attr_radio, bs11_attr_radio, + sizeof(trx1_attr_radio)); + + /* patch ARFCN into TRX Attributes */ + trx1_attr_radio2 &= 0xf0; + trx1_attr_radio2 |= arfcn_high; + trx1_attr_radio3 = arfcn_low; + + abis_nm_set_radio_attr(trx, trx1_attr_radio, + sizeof(trx1_attr_radio)); } for (i = 0; i < TRX_NR_TS; i++) @@ -484,17 +462,11 @@ { struct gsm_bts_trx *trx; - switch (bts->type) { - case GSM_BTS_TYPE_BS11: - patch_nm_tables(bts); - abis_nm_raw_msg(bts, sizeof(msg_1), msg_1); /* set BTS SiteMgr attr*/ - abis_nm_set_bts_attr(bts, bs11_attr_bts, sizeof(bs11_attr_bts)); - abis_nm_raw_msg(bts, sizeof(msg_3), msg_3); /* set BTS handover attr */ - abis_nm_raw_msg(bts, sizeof(msg_4), msg_4); /* set BTS power control attr */ - break; - default: - break; - } + patch_nm_tables(bts); + abis_nm_raw_msg(bts, sizeof(msg_1), msg_1); /* set BTS SiteMgr attr*/ + abis_nm_set_bts_attr(bts, bs11_attr_bts, sizeof(bs11_attr_bts)); + abis_nm_raw_msg(bts, sizeof(msg_3), msg_3); /* set BTS handover attr */ + abis_nm_raw_msg(bts, sizeof(msg_4), msg_4); /* set BTS power control attr */ llist_for_each_entry(trx, &bts->trx_list, list) nm_reconfig_trx(trx);
View file
osmo-bsc_1.11.0.1.c4b330.tar.xz/src/osmo-bsc/nm_bb_transc_fsm.c -> osmo-bsc_1.11.0.6.c3446.tar.xz/src/osmo-bsc/nm_bb_transc_fsm.c
Changed
@@ -111,13 +111,18 @@ /* Request TRX-level attributes */ if (!bb_transc->mo.get_attr_sent && !bb_transc->mo.get_attr_rep_received) { - bb_transc->mo.get_attr_sent = true; - /* N. B: we rely on attribute order when parsing response in abis_nm_rx_get_attr_resp() */ - const uint8_t trx_attr = { NM_ATT_MANUF_STATE, NM_ATT_SW_CONFIG, NM_ATT_IPACC_SUPP_FEATURES }; - /* we should not request more attributes than we're ready to handle */ - OSMO_ASSERT(sizeof(trx_attr) < MAX_BTS_ATTR); + uint8_t attr_buf3; /* enlarge if needed */ + uint8_t *ptr = &attr_buf0; + + *(ptr++) = NM_ATT_MANUF_STATE; + *(ptr++) = NM_ATT_SW_CONFIG; + if (is_ipa_abisip_bts(trx->bts)) + *(ptr++) = NM_ATT_IPACC_SUPP_FEATURES; + + OSMO_ASSERT((ptr - attr_buf) <= sizeof(attr_buf)); abis_nm_get_attr(trx->bts, NM_OC_BASEB_TRANSC, 0, trx->nr, 0xff, - trx_attr, sizeof(trx_attr)); + &attr_buf0, (ptr - attr_buf)); + bb_transc->mo.get_attr_sent = true; } if (bb_transc->mo.get_attr_rep_received &&
View file
osmo-bsc_1.11.0.1.c4b330.tar.xz/src/osmo-bsc/nm_bts_fsm.c -> osmo-bsc_1.11.0.6.c3446.tar.xz/src/osmo-bsc/nm_bts_fsm.c
Changed
@@ -98,13 +98,18 @@ /* Request generic BTS-level attributes */ if (!bts->mo.get_attr_sent && !bts->mo.get_attr_rep_received) { - bts->mo.get_attr_sent = true; - /* N. B: we rely on attribute order when parsing response in abis_nm_rx_get_attr_resp() */ - const uint8_t bts_attr = { NM_ATT_MANUF_ID, NM_ATT_SW_CONFIG, NM_ATT_IPACC_SUPP_FEATURES}; - /* we should not request more attributes than we're ready to handle */ - OSMO_ASSERT(sizeof(bts_attr) < MAX_BTS_ATTR); + uint8_t attr_buf3; /* enlarge if needed */ + uint8_t *ptr = &attr_buf0; + + *(ptr++) = NM_ATT_MANUF_ID; + *(ptr++) = NM_ATT_SW_CONFIG; + if (is_ipa_abisip_bts(bts)) + *(ptr++) = NM_ATT_IPACC_SUPP_FEATURES; + + OSMO_ASSERT((ptr - attr_buf) <= sizeof(attr_buf)); abis_nm_get_attr(bts, NM_OC_BTS, 0, 0xff, 0xff, - bts_attr, sizeof(bts_attr)); + &attr_buf0, (ptr - attr_buf)); + bts->mo.get_attr_sent = true; } if (bts->mo.get_attr_rep_received &&
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
.