def get_load(self): try: with self.bts as b: load = b.get_load(self.DEFAULT_BTS_ID) # If we weren't able to read any channel load # the transceiver is not running if sum(load.values()) == 0: raise BSSError("TRX not running") return load except Exception: exc_type, exc_value, exc_trace = sys.exc_info() raise BSSError("%s: %s" % (exc_type, exc_value)).with_traceback(exc_trace)
def set_short_name(self, short_name): """Set beacon short name""" try: return self.openbts.update_config("GSM.Identity.ShortName", short_name) except Exception: exc_type, exc_value, exc_trace = sys.exc_info() raise BSSError("%s: %s" % (exc_type, exc_value)).with_traceback(exc_trace)
def get_camped_subscribers(self, access_period=0, auth=1): try: return self.openbts.tmsis(access_period, auth) except Exception: exc_type, exc_value, exc_trace = sys.exc_info() raise BSSError("%s: %s" % (exc_type, exc_value)).with_traceback(exc_trace)
def get_timer(self, timer): try: res = self.openbts.read_config("GSM.Timer.T%s" % str(timer)) return res.data['value'] except Exception: exc_type, exc_value, exc_trace = sys.exc_info() raise BSSError("%s: %s" % (exc_type, exc_value)).with_traceback(exc_trace)
def get_subscribers(self, imsi=None): """Get subscribers, filter by IMSI if it's specified.""" try: return self.sip_auth_serve.get_subscribers(imsi=imsi) except Exception: exc_type, exc_value, exc_trace = sys.exc_info() raise BSSError("%s: %s" % (exc_type, exc_value)).with_traceback(exc_trace)
def get_timer(self, timer): try: return self.__get('timer.' + timer) except Exception: exc_type, exc_value, exc_trace = sys.exc_info() raise BSSError("%s: %s" % (exc_type, exc_value)).with_traceback(exc_trace)
def add_subscriber_to_hlr(self, imsi, number, ip, port): """Adds a subscriber to the system.""" try: return self.sip_auth_serve.create_subscriber(imsi, number, ip, port) except Exception: exc_type, exc_value, exc_trace = sys.exc_info() raise BSSError("%s: %s" % (exc_type, exc_value)).with_traceback(exc_trace)
def set_mnc(self, mnc): """Set MNC""" try: return self.openbts.update_config("GSM.Identity.MNC", mnc) except Exception: exc_type, exc_value, exc_trace = sys.exc_info() raise BSSError("%s: %s" % (exc_type, exc_value)).with_traceback(exc_trace)
def get_arfcn_c0(self): try: res = self.openbts.read_config("GSM.Radio.C0") return res.data['value'] except Exception: exc_type, exc_value, exc_trace = sys.exc_info() raise BSSError("%s: %s" % (exc_type, exc_value)).with_traceback(exc_trace)
def get_available_arfcns(self): try: res = self.openbts.read_config("GSM.Radio.C0") return res.data['validValues'].split(",") except Exception: exc_type, exc_value, exc_trace = sys.exc_info() raise BSSError("%s: %s" % (exc_type, exc_value)).with_traceback(exc_trace)
def get_open_registration(self): try: res = self.openbts.read_config("Control.LUR.OpenRegistration") return res.data['value'] except Exception: exc_type, exc_value, exc_trace = sys.exc_info() raise BSSError("%s: %s" % (exc_type, exc_value)).with_traceback(exc_trace)
def get_load(self): try: tower_load = self.openbts.get_load() return { 'sdcch_load': tower_load['sdcch_load'], 'sdcch_available': tower_load['sdcch_available'], 'tchf_load': tower_load['tchf_load'], 'tchf_available': tower_load['tchf_available'], 'pch_active': tower_load['pch_active'], 'pch_total': tower_load['pch_total'], 'agch_active': tower_load['agch_active'], 'agch_pending': tower_load['agch_pending'], 'gprs_current_pdchs': tower_load['gprs_current_pdchs'], 'gprs_utilization_percentage': (tower_load['gprs_utilization_percentage']), } except Exception: exc_type, exc_value, exc_trace = sys.exc_info() raise BSSError("%s: %s" % (exc_type, exc_value)).with_traceback(exc_trace)
def get_short_name(self): try: res = self.openbts.read_config("GSM.Identity.ShortName") return res.data['value'] except Exception: exc_type, exc_value, exc_trace = sys.exc_info() raise BSSError("%s: %s" % (exc_type, exc_value)).with_traceback(exc_trace)
def set_arfcn_c0(self, arfcn): """Set the ARFCN of the first carrier.""" try: return self.openbts.update_config("GSM.Radio.C0", arfcn) except Exception: exc_type, exc_value, exc_trace = sys.exc_info() raise BSSError("%s: %s" % (exc_type, exc_value)).with_traceback(exc_trace)
def set_band(self, band): """Set the GSM band""" try: return self.openbts.update_config("GSM.Radio.Band", band) except Exception: exc_type, exc_value, exc_trace = sys.exc_info() raise BSSError("%s: %s" % (exc_type, exc_value)).with_traceback(exc_trace)
def get_band(self): try: with self.bts as b: return b.show(self.DEFAULT_BTS_ID)['band'] except Exception: exc_type, exc_value, exc_trace = sys.exc_info() raise BSSError("%s: %s" % (exc_type, exc_value)).with_traceback(exc_trace)
def get_short_name(self): try: with self.network as n: return n.show()['short_name'] except Exception: exc_type, exc_value, exc_trace = sys.exc_info() raise BSSError("%s: %s" % (exc_type, exc_value)).with_traceback(exc_trace)
def set_timer(self, timer, value): """Set a particular BTS timer. The only timer in use currently is T3212""" try: return self.openbts.update_config("GSM.Timer.T%s" % str(timer), value) except Exception: exc_type, exc_value, exc_trace = sys.exc_info() raise BSSError("%s: %s" % (exc_type, exc_value)).with_traceback(exc_trace)
def set_open_registration(self, expression): """Set a regular expression matching IMSIs that can camp to the network""" try: return self.openbts.update_config("Control.LUR.OpenRegistration", expression) except Exception: exc_type, exc_value, exc_trace = sys.exc_info() raise BSSError("%s: %s" % (exc_type, exc_value)).with_traceback(exc_trace)
def get_available_bands(self): try: with self.bts as b: return b.get_available_bands() except Exception: exc_type, exc_value, exc_trace = sys.exc_info() raise BSSError("%s: %s" % (exc_type, exc_value)).with_traceback(exc_trace)
def set_band(self, band): """Set the GSM band of default BTS""" try: with self.bts as b: return b.set_band(self.DEFAULT_BTS_ID, band) except Exception: exc_type, exc_value, exc_trace = sys.exc_info() raise BSSError("%s: %s" % (exc_type, exc_value)).with_traceback(exc_trace)
def delete_subscriber_from_hlr(self, imsi): """Removes a subscriber from the system.""" try: return self.sip_auth_serve.delete_subscriber(imsi) except InvalidRequestError: raise SubscriberNotFound(imsi) except Exception: exc_type, exc_value, exc_trace = sys.exc_info() raise BSSError("%s: %s" % (exc_type, exc_value)).with_traceback(exc_trace)
def set_short_name(self, short_name): """Set beacon short name""" try: with self.network as n: return n.set_short_name(short_name) except Exception: exc_type, exc_value, exc_trace = sys.exc_info() raise BSSError("%s: %s" % (exc_type, exc_value)).with_traceback(exc_trace)
def set_mcc(self, mcc): """Set MCC""" try: with self.network as n: return n.set_mcc(mcc) except Exception: exc_type, exc_value, exc_trace = sys.exc_info() raise BSSError("%s: %s" % (exc_type, exc_value)).with_traceback(exc_trace)
def get_arfcn_c0(self): try: with self.trx as t: return t.show(self.DEFAULT_BTS_ID, self.DEFAULT_TRX_ID)['arfcn'] except Exception: exc_type, exc_value, exc_trace = sys.exc_info() raise BSSError("%s: %s" % (exc_type, exc_value)).with_traceback(exc_trace)
def get_available_arfcns(self): """Returns a list of available ARFCNs for the default BTS""" try: with self.bts as b: return b.get_available_arfcns(self.DEFAULT_BTS_ID) except Exception: exc_type, exc_value, exc_trace = sys.exc_info() raise BSSError("%s: %s" % (exc_type, exc_value)).with_traceback(exc_trace)
def set_arfcn_c0(self, arfcn): """Set the ARFCN of the first carrier.""" try: with self.trx as t: return t.set_arfcn(self.DEFAULT_BTS_ID, self.DEFAULT_TRX_ID, arfcn) except Exception: exc_type, exc_value, exc_trace = sys.exc_info() raise BSSError("%s: %s" % (exc_type, exc_value)).with_traceback(exc_trace)
def get_noise(self): try: tower_noise = self.openbts.get_noise() return { 'noise_rssi_db': tower_noise['noise_rssi_db'], 'noise_ms_rssi_target_db': ( tower_noise['noise_ms_rssi_target_db']), } except Exception: exc_type, exc_value, exc_trace = sys.exc_info() raise BSSError("%s: %s" % (exc_type, exc_value)).with_traceback(exc_trace)
def get_band(self): # as per github.com/endaga/openbts/GSM/GSMConfig.cpp:gsmInit() # valid keys are: 850,900,1800,1900 # let's convert those to CCM standard names (e.g., GSM900) try: res = self.openbts.read_config("GSM.Radio.Band") #convert to CCM standard return "GSM" + str(res.data['value']) except Exception: exc_type, exc_value, exc_trace = sys.exc_info() raise BSSError("%s: %s" % (exc_type, exc_value)).with_traceback(exc_trace)
def is_authed(self, imsi): """Returns True if the subscriber is provisioned In openbts, a user is provisioned once an extension is assigned """ try: return len(self.get_numbers_from_imsi(imsi)) > 0 except InvalidRequestError: return False except Exception: exc_type, exc_value, exc_trace = sys.exc_info() raise BSSError("%s: %s" % (exc_type, exc_value)).with_traceback(exc_trace)