Projects
osmocom:nightly
osmo-cbc
Log In
Username
Password
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
Expand all
Collapse all
Changes of Revision 29
View file
osmo-cbc.spec
Changed
@@ -17,14 +17,14 @@ %define _lto_cflags %{nil} Name: osmo-cbc -Requires: osmocom-nightly = 1.0.0.202207250002 -Version: 0.3.0.50.5661.202207250002 +Requires: osmocom-nightly = 1.0.0.202207260002 +Version: 0.3.0.55.5044.202207260002 Release: 0 Summary: OsmoCBC: Osmocom's Cell Broadcast Centre for 3GPP mobile networks License: AGPL-3.0-or-later Group: Hardware/Mobile URL: https://osmocom.org/projects/osmo-cbc -Source: osmo-cbc_0.3.0.50.5661.202207250002.tar.gz +Source: osmo-cbc_0.3.0.55.5044.202207260002.tar.gz BuildRequires: automake >= 1.9 BuildRequires: libtool >= 2 BuildRequires: pkgconfig >= 0.20 @@ -44,7 +44,7 @@ OsmoCBC: Osmocom's Cell Broadcast Centre for 3GPP mobile networks. %package utils -Requires: osmocom-nightly = 1.0.0.202207250002 +Requires: osmocom-nightly = 1.0.0.202207260002 Summary: CLI utility to interface osmo-cbc REST interface License: MIT Group: Productivity/Telephony/Utilities @@ -53,7 +53,7 @@ CLI utility to interface with the osmo-cbc REST interface (ECBE). %package -n libosmo-sbcap0 -Requires: osmocom-nightly = 1.0.0.202207250002 +Requires: osmocom-nightly = 1.0.0.202207260002 Summary: Osmocom's library to encode/decode SBc-AP messages Group: System/Libraries @@ -61,7 +61,7 @@ Osmocom's library to encode/decode SBc-AP messages. %package -n libosmo-sbcap-devel -Requires: osmocom-nightly = 1.0.0.202207250002 +Requires: osmocom-nightly = 1.0.0.202207260002 Summary: Development files for libosmo-sbcap Group: Development/Libraries/C and C++ Requires: libosmo-sbcap0 = %{version}
View file
osmo-cbc_0.3.0.50.5661.202207250002.dsc -> osmo-cbc_0.3.0.55.5044.202207260002.dsc
Changed
@@ -2,7 +2,7 @@ Source: osmo-cbc Binary: osmo-cbc, osmo-cbc-utils, osmo-cbc-dbg, osmo-cbc-doc, libosmo-sbcap0, libosmo-sbcap-dev Architecture: any all -Version: 0.3.0.50.5661.202207250002 +Version: 0.3.0.55.5044.202207260002 Maintainer: Osmocom team <openbsc@lists.osmocom.org> Homepage: https://projects.osmocom.org/projects/osmo-cbc Standards-Version: 3.9.8 @@ -17,8 +17,8 @@ osmo-cbc-doc deb doc optional arch=all osmo-cbc-utils deb net extra arch=any Checksums-Sha1: - f5ec9f33b9cd3b217202a1fae49da56d749932ce 249494 osmo-cbc_0.3.0.50.5661.202207250002.tar.gz + c5608366bf0c3483848c7dcbb4242680475f6f68 249604 osmo-cbc_0.3.0.55.5044.202207260002.tar.gz Checksums-Sha256: - ffff0e8b7cdf6ce17277b7e1b3ffb59699f04ff68b58c99a7bf7ee5b5131ccf8 249494 osmo-cbc_0.3.0.50.5661.202207250002.tar.gz + 943c34440879054a816e05ad7de7841138a462150d196db882614281d8dfa4d2 249604 osmo-cbc_0.3.0.55.5044.202207260002.tar.gz Files: - acfb37b4534009b9ab0956411e5eb9c8 249494 osmo-cbc_0.3.0.50.5661.202207250002.tar.gz + af5906b458f68fd41f471ae8e2a0369d 249604 osmo-cbc_0.3.0.55.5044.202207260002.tar.gz
View file
osmo-cbc_0.3.0.50.5661.202207250002.tar.gz/.tarball-version -> osmo-cbc_0.3.0.55.5044.202207260002.tar.gz/.tarball-version
Changed
@@ -1 +1 @@ -0.3.0.50-5661 \ No newline at end of file +0.3.0.55-5044 \ No newline at end of file
View file
osmo-cbc_0.3.0.50.5661.202207250002.tar.gz/contrib/cbc-apitool.py -> osmo-cbc_0.3.0.55.5044.202207260002.tar.gz/contrib/cbc-apitool.py
Changed
@@ -114,10 +114,10 @@ parser = argparse.ArgumentParser() parser.add_argument("-H", "--host", help="Host to connect to", default="localhost") - parser.add_argument("-p", "--port", help="TCP port to connect to", default=12345) + parser.add_argument("-p", "--port", help="TCP port to connect to", type=int, default=12345) parser.add_argument("-v", "--verbose", help="increase output verbosity", action='count', default=0) - subparsers = parser.add_subparsers() + subparsers = parser.add_subparsers(required=True) parser_c_cbs = subparsers.add_parser('create-cbs', help='Create a new CBS message') parser_c_cbs.add_argument("--msg-id", type=int, help='Message Identifier', required=True)
View file
osmo-cbc_0.3.0.50.5661.202207250002.tar.gz/debian/changelog -> osmo-cbc_0.3.0.55.5044.202207260002.tar.gz/debian/changelog
Changed
@@ -1,8 +1,8 @@ -osmo-cbc (0.3.0.50.5661.202207250002) UNRELEASED; urgency=medium +osmo-cbc (0.3.0.55.5044.202207260002) UNRELEASED; urgency=medium * Snapshot build - -- Pau Espin Pedrol <pespin@sysmocom.de> Mon, 25 Jul 2022 00:10:11 +0000 + -- Pau Espin Pedrol <pespin@sysmocom.de> Tue, 26 Jul 2022 00:10:10 +0000 osmo-cbc (0.3.0) unstable; urgency=medium
View file
osmo-cbc_0.3.0.50.5661.202207250002.tar.gz/debian/control -> osmo-cbc_0.3.0.55.5044.202207260002.tar.gz/debian/control
Changed
@@ -25,27 +25,27 @@ Package: osmo-cbc Architecture: any Multi-Arch: foreign -Depends: osmocom-nightly (= 1.0.0.202207250002), ${misc:Depends}, ${shlibs:Depends} +Depends: osmocom-nightly (= 1.0.0.202207260002), ${misc:Depends}, ${shlibs:Depends} Description: OsmoCBC: Osmocom's Cell Broadcast Center Package: osmo-cbc-utils Architecture: any Multi-Arch: foreign -Depends: osmocom-nightly (= 1.0.0.202207250002), ${misc:Depends}, ${shlibs:Depends}, python3 +Depends: osmocom-nightly (= 1.0.0.202207260002), ${misc:Depends}, ${shlibs:Depends}, python3 Description: Utilities for OsmoCBC: Osmocom's Cell Broadcast Center Package: osmo-cbc-dbg Section: debug Architecture: any Multi-Arch: same -Depends: osmocom-nightly (= 1.0.0.202207250002), osmo-cbc (= ${binary:Version}), ${misc:Depends} +Depends: osmocom-nightly (= 1.0.0.202207260002), osmo-cbc (= ${binary:Version}), ${misc:Depends} Description: OsmoCBC: Osmocom's Cell Broadcast Center Package: osmo-cbc-doc Architecture: all Section: doc Priority: optional -Depends: osmocom-nightly (= 1.0.0.202207250002), ${misc:Depends} +Depends: osmocom-nightly (= 1.0.0.202207260002), ${misc:Depends} Description: ${misc:Package} PDF documentation Various manuals: user manual, VTY reference manual and/or protocol/interface manuals. @@ -55,12 +55,12 @@ Architecture: any Multi-Arch: same Pre-Depends: ${misc:Pre-Depends} -Depends: osmocom-nightly (= 1.0.0.202207250002), ${misc:Depends}, ${shlibs:Depends} +Depends: osmocom-nightly (= 1.0.0.202207260002), ${misc:Depends}, ${shlibs:Depends} Description: libosmo-sbcap: Osmocom's library to encode/decode SBc-AP messages Package: libosmo-sbcap-dev Section: libdevel Architecture: any Multi-Arch: same -Depends: osmocom-nightly (= 1.0.0.202207250002), libosmo-sbcap0 (= ${binary:Version}), ${misc:Depends} +Depends: osmocom-nightly (= 1.0.0.202207260002), libosmo-sbcap0 (= ${binary:Version}), ${misc:Depends} Description: libosmo-sbcap: Osmocom's library to encode/decode SBc-AP messages
View file
osmo-cbc_0.3.0.50.5661.202207250002.tar.gz/include/osmocom/cbc/cbsp_link.h -> osmo-cbc_0.3.0.55.5044.202207260002.tar.gz/include/osmocom/cbc/cbsp_link.h
Changed
@@ -24,7 +24,8 @@ int (*rx_cb)(struct cbc_cbsp_link *link, struct osmo_cbsp_decoded *dec); }; -struct cbc_cbsp_mgr *cbc_cbsp_mgr_create(void *ctx); +struct cbc_cbsp_mgr *cbc_cbsp_mgr_alloc(void *ctx); +int cbc_cbsp_mgr_open_srv(struct cbc_cbsp_mgr *mgr); /* a CBSP link with a single (remote) peer connected to us */ struct cbc_cbsp_link {
View file
osmo-cbc_0.3.0.50.5661.202207250002.tar.gz/include/osmocom/cbc/sbcap_link.h -> osmo-cbc_0.3.0.55.5044.202207260002.tar.gz/include/osmocom/cbc/sbcap_link.h
Changed
@@ -26,7 +26,8 @@ /* receive call-back; called for every received message */ int (*rx_cb)(struct cbc_sbcap_link *link, SBcAP_SBC_AP_PDU_t *pdu); }; -struct cbc_sbcap_mgr *cbc_sbcap_mgr_create(void *ctx); +struct cbc_sbcap_mgr *cbc_sbcap_mgr_alloc(void *ctx); +int cbc_sbcap_mgr_open_srv(struct cbc_sbcap_mgr *mgr); /* an SBc-AP link with a single (remote) peer connected to us */ struct cbc_sbcap_link {
View file
osmo-cbc_0.3.0.50.5661.202207250002.tar.gz/src/cbc_data.c -> osmo-cbc_0.3.0.55.5044.202207260002.tar.gz/src/cbc_data.c
Changed
@@ -54,6 +54,12 @@ OSMO_ASSERT(cbc->it_q.rest2main); osmo_fd_register(&cbc->it_q.rest2main->event_ofd); + cbc->cbsp.mgr = cbc_cbsp_mgr_alloc(cbc); + OSMO_ASSERT(cbc->cbsp.mgr); + + cbc->sbcap.mgr = cbc_sbcap_mgr_alloc(cbc); + OSMO_ASSERT(cbc->sbcap.mgr); + return cbc; } @@ -64,14 +70,14 @@ tall_rest_ctx = talloc_named_const(cbc, 0, "REST"); - if (!(cbc->cbsp.mgr = cbc_cbsp_mgr_create(cbc))) { + if ((rc = cbc_cbsp_mgr_open_srv(cbc->cbsp.mgr)) < 0) { LOGP(DMAIN, LOGL_ERROR, "Error binding CBSP port\n"); - return -EIO; + return rc; } - if (!(cbc->sbcap.mgr = cbc_sbcap_mgr_create(cbc))) { + if ((rc = cbc_sbcap_mgr_open_srv(cbc->sbcap.mgr)) < 0) { LOGP(DMAIN, LOGL_ERROR, "Error binding SBc-AP port\n"); - return -EIO; + return rc; } rc = rest_api_init(tall_rest_ctx, cbc->config.ecbe.local_host, cbc->config.ecbe.local_port);
View file
osmo-cbc_0.3.0.50.5661.202207250002.tar.gz/src/cbsp_link.c -> osmo-cbc_0.3.0.55.5044.202207260002.tar.gz/src/cbsp_link.c
Changed
@@ -225,35 +225,44 @@ osmo_stream_srv_destroy(link->conn); } +/* + * CBSP Manager + */ +struct cbc_cbsp_mgr *cbc_cbsp_mgr_alloc(void *ctx) +{ + struct cbc_cbsp_mgr *mgr; + + mgr = talloc_zero(ctx, struct cbc_cbsp_mgr); + OSMO_ASSERT(mgr); + mgr->rx_cb = cbc_cbsp_link_rx_cb; + INIT_LLIST_HEAD(&mgr->links); + + return mgr; +} + /* initialize the CBC-side CBSP server */ -struct cbc_cbsp_mgr *cbc_cbsp_mgr_create(void *ctx) +int cbc_cbsp_mgr_open_srv(struct cbc_cbsp_mgr *mgr) { - struct cbc_cbsp_mgr *cbc = talloc_zero(ctx, struct cbc_cbsp_mgr); - int rc; char *bind_ip = g_cbc->config.cbsp.local_host; int bind_port = g_cbc->config.cbsp.local_port; + struct osmo_stream_srv_link *srv_link; + int rc; - if (bind_port == -1) - bind_port = CBSP_TCP_PORT; - - OSMO_ASSERT(cbc); - cbc->rx_cb = cbc_cbsp_link_rx_cb; - INIT_LLIST_HEAD(&cbc->links); - cbc->srv_link = osmo_stream_srv_link_create(cbc); - osmo_stream_srv_link_set_data(cbc->srv_link, cbc); - osmo_stream_srv_link_set_nodelay(cbc->srv_link, true); - osmo_stream_srv_link_set_port(cbc->srv_link, bind_port); + srv_link = osmo_stream_srv_link_create(mgr); + osmo_stream_srv_link_set_data(srv_link, mgr); + osmo_stream_srv_link_set_nodelay(srv_link, true); + osmo_stream_srv_link_set_port(srv_link, bind_port); if (bind_ip) - osmo_stream_srv_link_set_addr(cbc->srv_link, bind_ip); - osmo_stream_srv_link_set_accept_cb(cbc->srv_link, cbsp_cbc_accept_cb); - rc = osmo_stream_srv_link_open(cbc->srv_link); + osmo_stream_srv_link_set_addr(srv_link, bind_ip); + osmo_stream_srv_link_set_accept_cb(srv_link, cbsp_cbc_accept_cb); + rc = osmo_stream_srv_link_open(srv_link); if (rc < 0) { - osmo_stream_srv_link_destroy(cbc->srv_link); - talloc_free(cbc); - return NULL; + osmo_stream_srv_link_destroy(srv_link); + talloc_free(mgr); + return -EIO; } + mgr->srv_link = srv_link; LOGP(DCBSP, LOGL_NOTICE, "Listening for CBSP at %s\n", - osmo_stream_srv_link_get_sockname(cbc->srv_link)); - - return cbc; + osmo_stream_srv_link_get_sockname(mgr->srv_link)); + return 0; }
View file
osmo-cbc_0.3.0.50.5661.202207250002.tar.gz/src/sbcap_link.c -> osmo-cbc_0.3.0.55.5044.202207260002.tar.gz/src/sbcap_link.c
Changed
@@ -255,31 +255,46 @@ osmo_stream_srv_destroy(link->conn); } +/* + * CBSP Manager + */ +struct cbc_sbcap_mgr *cbc_sbcap_mgr_alloc(void *ctx) +{ + struct cbc_sbcap_mgr *mgr; + + mgr = talloc_zero(ctx, struct cbc_sbcap_mgr); + OSMO_ASSERT(mgr); + mgr->rx_cb = cbc_sbcap_link_rx_cb; + INIT_LLIST_HEAD(&mgr->links); + + return mgr; +} + /* initialize the CBC-side SBc-AP server */ -struct cbc_sbcap_mgr *cbc_sbcap_mgr_create(void *ctx) +int cbc_sbcap_mgr_open_srv(struct cbc_sbcap_mgr *mgr) { - struct cbc_sbcap_mgr *cbc = talloc_zero(ctx, struct cbc_sbcap_mgr); - int rc; int bind_port = g_cbc->config.sbcap.local_port; + struct osmo_stream_srv_link *srv_link; + int rc; - if (bind_port == -1) - bind_port = SBcAP_SCTP_PORT; - - OSMO_ASSERT(cbc); - cbc->rx_cb = cbc_sbcap_link_rx_cb; - INIT_LLIST_HEAD(&cbc->links); - cbc->srv_link = osmo_stream_srv_link_create(cbc); - osmo_stream_srv_link_set_proto(cbc->srv_link, IPPROTO_SCTP); - osmo_stream_srv_link_set_data(cbc->srv_link, cbc); - osmo_stream_srv_link_set_nodelay(cbc->srv_link, true); - osmo_stream_srv_link_set_port(cbc->srv_link, bind_port); - osmo_stream_srv_link_set_addrs(cbc->srv_link, (const char **)g_cbc->config.sbcap.local_host, + srv_link = osmo_stream_srv_link_create(mgr); + osmo_stream_srv_link_set_proto(srv_link, IPPROTO_SCTP); + osmo_stream_srv_link_set_data(srv_link, mgr); + osmo_stream_srv_link_set_nodelay(srv_link, true); + osmo_stream_srv_link_set_port(srv_link, bind_port); + osmo_stream_srv_link_set_addrs(srv_link, + (const char **)g_cbc->config.sbcap.local_host, g_cbc->config.sbcap.num_local_host); - osmo_stream_srv_link_set_accept_cb(cbc->srv_link, sbcap_cbc_accept_cb); - rc = osmo_stream_srv_link_open(cbc->srv_link); - OSMO_ASSERT(rc == 0); + osmo_stream_srv_link_set_accept_cb(srv_link, sbcap_cbc_accept_cb); + rc = osmo_stream_srv_link_open(srv_link); + if (rc < 0) { + osmo_stream_srv_link_destroy(srv_link); + talloc_free(mgr); + return -EIO; + } + mgr->srv_link = srv_link; LOGP(DSBcAP, LOGL_NOTICE, "Listening for SBc-AP at %s\n", - osmo_stream_srv_link_get_sockname(cbc->srv_link)); + osmo_stream_srv_link_get_sockname(mgr->srv_link)); - return cbc; + return 0; }
View file
osmo-cbc_0.3.0.50.5661.202207250002.tar.gz/src/sbcap_msg.c -> osmo-cbc_0.3.0.55.5044.202207260002.tar.gz/src/sbcap_msg.c
Changed
@@ -84,7 +84,6 @@ const struct smscb_message *smscb = &cbcmsg->msg; SBcAP_SBC_AP_PDU_t *pdu; SBcAP_Write_Replace_Warning_Request_IEs_t *ie; - uint16_t ie_warning_type; unsigned int i; uint8_t *ptr; #if 0 @@ -150,17 +149,15 @@ if (smscb->is_etws) { /* Warning Type, 3GPP TS 36.413 sec 9.2.1.50: */ - ie_warning_type = smscb->etws.warning_type; - if (smscb->etws.user_alert) - ie_warning_type |= 0x0100; - if (smscb->etws.popup_on_display) - ie_warning_type |= 0x0080; /* static const long asn_VAL_8_SBcAP_id_Warning_Type = 18; */ ie = sbcap_alloc_Write_Replace_Warning_Request_IE(18, SBcAP_Criticality_ignore, SBcAP_Write_Replace_Warning_Request_IEs__value_PR_Warning_Type); - ie->value.choice.Warning_Type.buf = MALLOC(sizeof(ie_warning_type)); - ie->value.choice.Warning_Type.size = sizeof(ie_warning_type); - memcpy(ie->value.choice.Warning_Type.buf, &ie_warning_type, sizeof(ie_warning_type)); + ie->value.choice.Warning_Type.buf = MALLOC(2); + ie->value.choice.Warning_Type.size = 2; + ie->value.choice.Warning_Type.buf0 = ((smscb->etws.warning_type & 0x7f) << 1); + if (smscb->etws.user_alert) + ie->value.choice.Warning_Type.buf0 |= 0x01; + ie->value.choice.Warning_Type.buf1 = (smscb->etws.popup_on_display) ? 0x80 : 0x0; ASN_SEQUENCE_ADD(as_pdu, ie); /* Warning Security Information, 3GPP TS 36.413 sec 9.2.1.51: */
View file
osmo-cbc_0.3.0.50.5661.202207250002.tar.gz/src/smscb_message_fsm.c -> osmo-cbc_0.3.0.55.5044.202207260002.tar.gz/src/smscb_message_fsm.c
Changed
@@ -287,19 +287,19 @@ { switch (fi->T) { case T_WAIT_WRITE_ACK: - /* onexit will take care of notifying the user */ + /* onleave will take care of notifying the user */ osmo_fsm_inst_state_chg(fi, SMSCB_S_ACTIVE, 0, 0); break; case T_WAIT_REPLACE_ACK: - /* onexit will take care of notifying the user */ + /* onleave will take care of notifying the user */ osmo_fsm_inst_state_chg(fi, SMSCB_S_ACTIVE, 0, 0); break; case T_WAIT_STATUS_ACK: - /* onexit will take care of notifying the user */ + /* onleave will take care of notifying the user */ osmo_fsm_inst_state_chg(fi, SMSCB_S_ACTIVE, 0, 0); break; case T_WAIT_DELETE_ACK: - /* onexit will take care of notifying the user */ + /* onleave will take care of notifying the user */ osmo_fsm_inst_state_chg(fi, SMSCB_S_DELETED, 0, 0); break; default:
View file
osmo-cbc_0.3.0.50.5661.202207250002.tar.gz/tests/sbcap/sbcap_test.c -> osmo-cbc_0.3.0.55.5044.202207260002.tar.gz/tests/sbcap/sbcap_test.c
Changed
@@ -14,7 +14,7 @@ struct msgb *msg; SBcAP_SBC_AP_PDU_t *pdu; SBcAP_Write_Replace_Warning_Request_IEs_t *ie; - uint16_t ie_warning_type = 0x01; + uint8_t ie_warning_type2 = {(0x01 << 1) | 0x01, 0x80}; uint8_t ie_dcs = 2; uint8_t ie_warning_sec_info50 = {0x30, 0x40, 0x12, 0x23, 0x45}; uint8_t ie_warning_msg_contentSBCAP_WARN_MSG_CONTENTS_IE_MAX_LEN = {0x30, 0x40, 0x12, 0x23, 0x45}; @@ -68,8 +68,6 @@ SBcAP_Write_Replace_Warning_Request_IEs__value_PR_Warning_Type); ie->value.choice.Warning_Type.buf = MALLOC(sizeof(ie_warning_type)); ie->value.choice.Warning_Type.size = sizeof(ie_warning_type); - ie_warning_type |= 0x0100; - ie_warning_type |= 0x0080; memcpy(ie->value.choice.Warning_Type.buf, &ie_warning_type, sizeof(ie_warning_type)); ASN_SEQUENCE_ADD(as_pdu, ie);
View file
osmo-cbc_0.3.0.50.5661.202207250002.tar.gz/tests/sbcap/sbcap_test.ok -> osmo-cbc_0.3.0.55.5044.202207260002.tar.gz/tests/sbcap/sbcap_test.ok
Changed
@@ -1,5 +1,5 @@ ==== test_asn1c_enc ==== -Encoded message: 00 00 00 76 00 00 08 00 05 00 02 ab 01 00 0b 00 02 ab cd 00 0a 00 02 00 1e 00 07 00 02 00 59 00 12 40 02 81 01 00 11 40 32 30 40 12 23 45 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 03 40 01 02 00 10 40 16 00 13 30 40 12 23 45 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +Encoded message: 00 00 00 76 00 00 08 00 05 00 02 ab 01 00 0b 00 02 ab cd 00 0a 00 02 00 1e 00 07 00 02 00 59 00 12 40 02 03 80 00 11 40 32 30 40 12 23 45 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 03 40 01 02 00 10 40 16 00 13 30 40 12 23 45 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ==== test_asn1c_dec ==== Decoding message: 20 00 00 14 00 00 03 00 05 00 02 00 2b 00 0b 00 02 41 70 00 01 00 01 00 Decoded message successfully
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
.