示例#1
0
 def init_idents(self,
                 ind_gummei=None,
                 ind_plmn=None,
                 ind_gid=None,
                 ind_mmec=None):
     #
     # initializing indexes for the MMEd instance
     if ind_gummei is not None and ind_gummei != self._ind_gummei:
         self._ind_gummei = ind_gummei
         self._log('WNG', 'changing MME GUMMEI index')
     if ind_plmn is not None and ind_plmn != self._ind_plmn:
         self._ind_plmn = ind_plmn
         self._log('WNG', 'changing MME PLMN index')
     if ind_gid is not None and ind_gid != self._ind_gid:
         self._ind_gid = ind_gid
         self._log('WNG', 'changing MME  index')
     if ind_mmec is not None and ind_mmec != self._ind_mmec:
         self._ind_mmec = ind_mmec
         self._log('WNG', 'changing MME  index')
     #
     # selecting the right identifier indexed and setting the right value
     # for the MMEd instance
     if self._ind_gummei >= len(self.ConfigS1['ServedGUMMEIs']):
         gummei = self.ConfigS1['ServedGUMMEIs'][0]
         self._log('WNG', 'invalid MME GUMMEI index')
     else:
         gummei = self.ConfigS1['ServedGUMMEIs'][self._ind_gummei]
     #
     if self._ind_plmn >= len(gummei['servedPLMNs']):
         self.MME_PLMN_BUF = gummei['servedPLMNs'][0]
         self._log('WNG', 'invalid MME PLMN index')
     else:
         self.MME_PLMN_BUF = gummei['servedPLMNs'][self._ind_plmn]
     plmn = PLMN()
     plmn.map(self.MME_PLMN_BUF)
     self.MME_PLMN = plmn.get_mccmnc()
     #
     if self._ind_gid >= len(gummei['servedGroupIDs']):
         self.MME_GID_BUF = gummei['servedGroupIDs'][0]
         self._log('WNG', 'invalid MME Group ID index')
     else:
         self.MME_GID_BUF = gummei['servedGroupIDs'][self._ind_gid]
     self.MME_GID = unpack('!H', self.MME_GID_BUF)[0]
     #
     if self._ind_mmec >= len(gummei['servedMMECs']):
         self.MME_MMEC_BUF = gummei['servedMMECs'][0]
         self._log('WNG', 'invalid MME Group ID index')
     else:
         self.MME_MMEC_BUF = gummei['servedMMECs'][self._ind_mmec]
     self.MME_MMEC = ord(self.MME_MMEC_BUF)
     #
     self.MME_GUMMEI = '{0}.{1}.{2}.{3}'.format(plmn.get_mcc(),
                                                plmn.get_mnc(),
                                                hexlify(self.MME_GID_BUF),
                                                hexlify(self.MME_MMEC_BUF))
示例#2
0
 def handle_s1setup(self, sk, pdu):
     # get protocolIEs' values
     protIEs = pdu[1]['value'][1]['protocolIEs']
     # get the eNB Global ID
     plmn_id, enb_id = None, None
     for protIE in protIEs:
         if protIE['id'] == 59:
             enb_id_bitstr = protIE['value'][1]['eNB-ID'][1]
             plmn_id_octstr = protIE['value'][1]['pLMNidentity']
             # convert to readable values:
             # 1) enb id
             if enb_id_bitstr[1] == 20:
                 # macroENB-ID
                 enb_id = '%.5x' % enb_id_bitstr[0]
             elif enb_id_bitstr[1] == 28:
                 # homeENB-ID
                 enb_id = '%.7x' % enb_id_bitstr[0]
             # 2) plmn id
             plmn_id = PLMN()
             plmn_id.map(plmn_id_octstr)
             plmn_id = plmn_id.get_mccmnc()
     #
     if plmn_id and enb_id:
         enb_gid = (plmn_id, enb_id)
         # create / reset the eNB handler instance
         ret = self.create_enb_handler(enb_gid, sk)
         if not ret:
             # eNB not allowed
             self.send_enb_err(sk, cause=('misc', 'unknown-PLMN'))
             self._log(
                 'WNG',
                 '[eNB: {0}] eNB not allowed, closing S1AP stream'.format(
                     enb_gid))
             sk.close()
             return
         #
         self._log('INF',
                   '[eNB: {0}] S1AP stream established'.format(enb_gid))
         # process the PDU in the context of the eNB handler
         #'''
         try:
             ret_pdu = self.ENB[enb_gid].process_pdu(pdu)
         except Exception as err:
             self._exc = sys.exc_info()
             self._log(
                 'ERR',
                 'something went wrong in the ENBmgr code: {0}'.format(err))
             print('ERROR: something went wrong in the ENBmgr code:\n{0}'.
                   format(err))
             traceback.print_tb(self._exc[2])
         else:
             self.add_enb(enb_gid)
             for pdu in ret_pdu:
                 self.send_enb(sk, pdu)
示例#3
0
文件: MME.py 项目: ewa/libmich
 def init_idents(self, ind_gummei=None, ind_plmn=None, ind_gid=None, ind_mmec=None):
     #
     # initializing indexes for the MMEd instance
     if ind_gummei is not None and ind_gummei != self._ind_gummei:
         self._ind_gummei = ind_gummei
         self._log('WNG', 'changing MME GUMMEI index')
     if ind_plmn is not None and ind_plmn != self._ind_plmn:
         self._ind_plmn = ind_plmn
         self._log('WNG', 'changing MME PLMN index')
     if ind_gid is not None and ind_gid != self._ind_gid:
         self._ind_gid = ind_gid
         self._log('WNG', 'changing MME  index')
     if ind_mmec is not None and ind_mmec != self._ind_mmec:
         self._ind_mmec = ind_mmec
         self._log('WNG', 'changing MME  index')
     #
     # selecting the right identifier indexed and setting the right value for the MMEd instance
     if self._ind_gummei >= len(self.ConfigS1['ServedGUMMEIs']):
         gummei = self.ConfigS1['ServedGUMMEIs'][0]
         self._log('WNG', 'invalid MME GUMMEI index')
     else:
         gummei = self.ConfigS1['ServedGUMMEIs'][self._ind_gummei]
     #
     if self._ind_plmn >= len(gummei['servedPLMNs']):
         self.MME_PLMN_BUF = gummei['servedPLMNs'][0]
         self._log('WNG', 'invalid MME PLMN index')
     else:
         self.MME_PLMN_BUF = gummei['servedPLMNs'][self._ind_plmn]
     plmn = PLMN()
     plmn.map(self.MME_PLMN_BUF)
     self.MME_PLMN = plmn.get_mccmnc()
     #
     if self._ind_gid >= len(gummei['servedGroupIDs']):
         self.MME_GID_BUF = gummei['servedGroupIDs'][0]
         self._log('WNG', 'invalid MME Group ID index')
     else:
         self.MME_GID_BUF = gummei['servedGroupIDs'][self._ind_gid]
     self.MME_GID = unpack('!H', self.MME_GID_BUF)[0]
     #
     if self._ind_mmec >= len(gummei['servedMMECs']):
         self.MME_MMEC_BUF = gummei['servedMMECs'][0]
         self._log('WNG', 'invalid MME Group ID index')
     else:
         self.MME_MMEC_BUF = gummei['servedMMECs'][self._ind_mmec]
     self.MME_MMEC = ord(self.MME_MMEC_BUF)
     #
     self.MME_GUMMEI = '{0}.{1}.{2}.{3}'.format(plmn.get_mcc(),
                                                plmn.get_mnc(),
                                                hexlify(self.MME_GID_BUF),
                                                hexlify(self.MME_MMEC_BUF))
示例#4
0
文件: MME.py 项目: ewa/libmich
 def handle_s1setup(self, sk, pdu):
     # get protocolIEs' values
     protIEs = pdu[1]['value'][1]['protocolIEs']
     # get the eNB Global ID
     plmn_id, enb_id = None, None
     for protIE in protIEs:
         if protIE['id'] == 59:
             enb_id_bitstr = protIE['value'][1]['eNB-ID'][1]
             plmn_id_octstr = protIE['value'][1]['pLMNidentity']
             # convert to readable values:
             # 1) enb id
             if enb_id_bitstr[1] == 20:
                 # macroENB-ID
                 enb_id = '%.5x' % enb_id_bitstr[0]
             elif enb_id_bitstr[1] == 28:
                 # homeENB-ID
                 enb_id = '%.7x' % enb_id_bitstr[0]
             # 2) plmn id
             plmn_id = PLMN()
             plmn_id.map(plmn_id_octstr)
             plmn_id = plmn_id.get_mccmnc()
     #
     if plmn_id and enb_id:
         enb_gid = (plmn_id, enb_id)
         # create / reset the eNB handler instance
         ret = self.create_enb_handler(enb_gid, sk)
         if not ret:
             # eNB not allowed
             self.send_enb_err(sk, cause=('misc', 'unknown-PLMN'))
             self._log('WNG', '[eNB: {0}] eNB not allowed, closing S1AP stream'.format(enb_gid))
             sk.close()
             return
         #
         self._log('INF', '[eNB: {0}] S1AP stream established'.format(enb_gid))
         # process the PDU in the context of the eNB handler
         #'''
         try:
             ret_pdu = self.ENB[enb_gid].process_pdu(pdu)
         except Exception as err:
             self._exc = sys.exc_info()
             self._log('ERR', 'something went wrong in the ENBmgr code: {0}'.format(err))
             print('ERROR: something went wrong in the ENBmgr code:\n{0}'.format(err))
             traceback.print_tb(self._exc[2])
         else:
             self.add_enb(enb_gid)
             for pdu in ret_pdu:
                 self.send_enb(sk, pdu)