Exemple #1
0
def updateMessageFromSecurityContext(s1apMsg, requestType):
    global IMSI
    nasMsgKeys = s1apMsg['NAS-MESSAGE'].keys()

    procedure_code, matched = icu.getKeyValueFromDict(s1apMsg, 'procedureCode')
    if matched and procedure_code == 13:  # uplink nas
        if s1apMsg.get('NAS-MESSAGE', None) != None:
            if 'message_authentication_code' in nasMsgKeys:
                s1apMsg['NAS-MESSAGE']['message_authentication_code'] = 0
            if 'sequence_number' in nasMsgKeys:
                s1apMsg['NAS-MESSAGE']['sequence_number'] = S1APCTXDATA[IMSI][
                    'SEC_CXT']['UPLINK_COUNT']
            if 'nas_key_set_identifier_detach_request' in nasMsgKeys:
                if 'nas_key_set_identifier_detach_request_value' in s1apMsg[
                        'NAS-MESSAGE'][
                            'nas_key_set_identifier_detach_request'].keys():
                    s1apMsg['NAS-MESSAGE'][
                        'nas_key_set_identifier_detach_request'][
                            'nas_key_set_identifier_detach_request_value'] = S1APCTXDATA[
                                IMSI]['SEC_CXT']['KSI']

    elif matched and procedure_code == 12:  #Init ue - detach and service req
        if s1apMsg.get('NAS-MESSAGE', None) != None:
            if 'message_authentication_code' in nasMsgKeys:
                s1apMsg['NAS-MESSAGE']['message_authentication_code'] = 0
            elif 'message_authentication_code_short' in nasMsgKeys:
                s1apMsg['NAS-MESSAGE']['message_authentication_code_short'] = 0
            if 'sequence_number' in nasMsgKeys:
                s1apMsg['NAS-MESSAGE']['sequence_number'] = S1APCTXDATA[IMSI][
                    'SEC_CXT']['UPLINK_COUNT']
            elif 'ksi_sequence_number' in nasMsgKeys:
                if 'nas_key_set_identifier_service_req' in s1apMsg[
                        'NAS-MESSAGE']['ksi_sequence_number'].keys():
                    s1apMsg['NAS-MESSAGE']['ksi_sequence_number'][
                        'nas_key_set_identifier_service_req'] = S1APCTXDATA[
                            IMSI]['SEC_CXT']['KSI']
                if 'sequence_number_service_req' in s1apMsg['NAS-MESSAGE'][
                        'ksi_sequence_number'].keys():
                    s1apMsg['NAS-MESSAGE']['ksi_sequence_number'][
                        'sequence_number_service_req'] = S1APCTXDATA[IMSI][
                            'SEC_CXT']['UPLINK_COUNT']
            if 'nas_key_set_identifier_detach_request' in nasMsgKeys:
                if 'nas_key_set_identifier_detach_request_value' in s1apMsg[
                        'NAS-MESSAGE'][
                            'nas_key_set_identifier_detach_request'].keys():
                    s1apMsg['NAS-MESSAGE'][
                        'nas_key_set_identifier_detach_request'][
                            'nas_key_set_identifier_detach_request_value'] = S1APCTXDATA[
                                IMSI]['SEC_CXT']['KSI']

    if requestType == mt.tau_request.name:
        icu.updateKeyValueInDict(
            s1apMsg, "nas_key_set_identifier", S1APCTXDATA[IMSI][
                mt.attach_request.name]['nas_key_set_identifier'])
Exemple #2
0
def sendS6aMsg(requestType,msgData,userName,ieUpdateValDict=None):
    global IMSI
    
    igniteLogger.logger.info(f"Diameter message Type : {requestType}")
    if requestType == mt.update_location_response.name:
        response = requests.get(url["s1ap_ctx_data_url"])
        if response.json()!={} and response.json().get(IMSI,None)!=None:
            s1ap_data = response.json()[IMSI]
            icu.updateKeyValueInDict(msgData,"service-selection",s1ap_data[mt.esm_information_response.name]["apn"]) 
    updateMessageFromContextData(requestType,msgData)
    if ieUpdateValDict != None:
        icu.setValueFromTC(msgData,ieUpdateValDict)
    setContextData(requestType,msgData)
    igniteLogger.logger.info(f"Data to be sent : {msgData}")
    send_response = requests.post(url=url["send_url"], json=[msgData,S6ACTXDATA,"diameter"])
    igniteLogger.logger.info(f"URL response for send diameter data: {str(send_response)}")
Exemple #3
0
def updateMessageFromContextData(requestType, gtpMsg):
    global IMSI
    seq_count = 0

    message_type, message_type_present = icu.getKeyValueFromDict(
        gtpMsg, "message_type")

    if gtpMessageDict[message_type] in gtpInitialMessagesList:
        seq_count += 1
        icu.updateKeyValueInDict(gtpMsg, "sequence_number", seq_count)
    else:
        message_type = gtpRespReqDict[requestType]
        icu.updateKeyValueInDict(
            gtpMsg, "sequence_number",
            S11CTXDATA[IMSI][message_type]["sequence_number"])
    icu.updateKeyValueInDict(
        gtpMsg, "teid",
        S11CTXDATA[IMSI][mt.create_session_request.name]["teid_key"])
    )
    s1.sendS1ap('esm_information_response',
                uplinknastransport_esm_information_response, enbues1ap_id,
                nas_esm_information_response)

    igniteLogger.logger.info(
        "\n---------------------------------------\nHSS receives ULR from MME\n---------------------------------------"
    )
    ulr = ds.receiveS6aMsg()
    hop_to_hop_identifier = icu.getKeyValueFromDict(ulr,
                                                    "hop-by-hop-identifier")[0]

    igniteLogger.logger.info(
        "\n---------------------------------------\nHSS sends ULA to MME\n---------------------------------------"
    )
    icu.updateKeyValueInDict(msg_data_ula, "hop-by-hop-identifier",
                             hop_to_hop_identifier)
    ds.sendS6aMsg('update_location_response', msg_data_ula, imsi)

    clr_flag = True

    igniteLogger.logger.info(
        "\n---------------------------------------\nCreate Session Request received from MME\n---------------------------------------"
    )
    cs_req = gs.receiveGtp()
    icu.validateProtocolIE(cs_req, 'apn', 'apn1')
    icu.validateProtocolIE(cs_req, 'pdn_type', 1)

    igniteLogger.logger.info(
        "\n---------------------------------------\nSend Create Session Response to MME\n---------------------------------------"
    )
    gs.sendGtp('create_session_response', create_session_response,
Exemple #5
0
    )
    s1.sendS1ap('esm_information_response',
                uplinknastransport_esm_information_response, enbues1ap_id,
                nas_esm_information_response)

    igniteLogger.logger.info(
        "\n---------------------------------------\nHSS receives ULR from MME\n---------------------------------------"
    )
    ulr = ds.receiveS6aMsg()
    hop_to_hop_identifier = icu.getKeyValueFromDict(ulr,
                                                    "hop-by-hop-identifier")[0]

    igniteLogger.logger.info(
        "\n---------------------------------------\nHSS sends ULA to MME\n---------------------------------------"
    )
    icu.updateKeyValueInDict(msg_data_ula, "hop-by-hop-identifier",
                             hop_to_hop_identifier)
    ds.sendS6aMsg('update_location_response', msg_data_ula, imsi)

    clr_flag = True

    igniteLogger.logger.info(
        "\n---------------------------------------\nCreate Session Request received from MME\n---------------------------------------"
    )
    cs_req = gs.receiveGtp()
    icu.validateProtocolIE(cs_req, 'apn', 'apn1')
    icu.validateProtocolIE(cs_req, 'pdn_type', 1)

    igniteLogger.logger.info(
        "\n---------------------------------------\nSend Create Session Response to MME\n---------------------------------------"
    )
    gs.sendGtp('create_session_response', create_session_response,
Exemple #6
0
def updateMessageFromContextData(s1apMsg,requestType):
    global IMSI

    if requestType==mt.detach_request.name:
        nu.setGuti(S1APCTXDATA[IMSI][mt.attach_accept.name]["guti_list"],s1apMsg)

    if S1APCTXDATA[IMSI].get(mt.service_request.name,None)!=None:
        icu.updateKeyValueInDict(s1apMsg, "ENB-UE-S1AP-ID", S1APCTXDATA[IMSI][mt.service_request.name]["enb_ue_s1ap_id"])
    else:
        icu.updateKeyValueInDict(s1apMsg, "ENB-UE-S1AP-ID", S1APCTXDATA[IMSI][mt.attach_request.name]["enb_ue_s1ap_id"])

    if S1APCTXDATA[IMSI].get(mt.initial_context_setup_request.name,None)!=None:
        icu.updateKeyValueInDict(s1apMsg, "MME-UE-S1AP-ID", S1APCTXDATA[IMSI][mt.initial_context_setup_request.name]["mme_ue_s1ap_id"])
    elif S1APCTXDATA[IMSI].get(mt.identity_request.name,None)!=None:
        icu.updateKeyValueInDict(s1apMsg, "MME-UE-S1AP-ID", S1APCTXDATA[IMSI][mt.identity_request.name]["mme_ue_s1ap_id"])
    elif S1APCTXDATA[IMSI].get(mt.authentication_request.name,None)!=None:
        icu.updateKeyValueInDict(s1apMsg, "MME-UE-S1AP-ID", S1APCTXDATA[IMSI][mt.authentication_request.name]["mme_ue_s1ap_id"])
    elif S1APCTXDATA[IMSI].get(mt.ue_context_release_command.name,None)!=None:
        icu.updateKeyValueInDict(s1apMsg, "MME-UE-S1AP-ID", S1APCTXDATA[IMSI][mt.ue_context_release_command.name]["mme_ue_s1ap_id"])
Exemple #7
0
def sendS1ap(requestType,s1apData,enbUeS1apId,nasData={},imsi=None,ieUpdateValDict=None):

    global SERFLAG
    global TIMEOUTFLAG
    global IMSI

    igniteLogger.logger.info(f"s1ap message type : {requestType}")
    s1apData["NAS-MESSAGE"] = nasData
    count=0
    if enbUeS1apId !=None:
        if requestType == mt.attach_request.name:
            icu.updateKeyValueInDict(s1apData, "ENB-UE-S1AP-ID", enbUeS1apId)
            nu.setImsi(imsi,nasData)
            if imsi ==None:
                S1APCTXDATA[enbUeS1apId]={}
            else:
                if S1APCTXDATA.get(IMSI,None)==None:
                    IMSI=imsi
                    S1APCTXDATA[IMSI]={}
                    S1APCTXDATA[IMSI][requestType]={'imsi':str(imsi)}

        elif requestType == mt.identity_response.name:
            IMSI=imsi
            nu.setImsi(imsi,nasData)
            if S1APCTXDATA.get(enbUeS1apId,None)!=None:
                S1APCTXDATA[IMSI]=S1APCTXDATA[enbUeS1apId].copy()
                del S1APCTXDATA[enbUeS1apId]
                S1APCTXDATA[IMSI][requestType]={'imsi':str(imsi)}
            updateMessageFromContextData(s1apData,requestType)
        elif requestType == mt.attach_request_guti.name:
            icu.updateKeyValueInDict(s1apData, "ENB-UE-S1AP-ID", enbUeS1apId)
            S1APCTXDATA[enbUeS1apId]={}
            if imsi!=None:
                nu.setGuti(imsi,s1apData)
            else:
                nu.setGuti(S1APCTXDATA[IMSI][mt.attach_accept.name]["guti_list"],s1apData)
                
        elif requestType==mt.service_request.name:
            SERFLAG=True
            icu.updateKeyValueInDict(s1apData, "ENB-UE-S1AP-ID", enbUeS1apId)
            icu.updateKeyValueInDict(s1apData,"m-TMSI", icu.formatHex(S1APCTXDATA[IMSI][mt.attach_accept.name]["m_tmsi"]))
            icu.updateKeyValueInDict(s1apData,"mMEC", '0'+str(S1APCTXDATA[IMSI][mt.attach_accept.name]["mme_code"]))
 
        else:
            if requestType == mt.initial_context_setup_response.name:
                if count == 0:
                    gtp_teid=icu.generateUniqueId('gTP-TEID')
                    S1APCTXDATA[IMSI]["gTP_TEID"]=gtp_teid
                    icu.updateKeyValueInDict(s1apData, "gTP-TEID", gtp_teid)
                    count+=1
                else:
                    gtp_teid=S1APCTXDATA[IMSI]["gTP_TEID"]
                    gtp_teid=icu.icrementGtpTeid(gtp_teid)
                    S1APCTXDATA[IMSI]["gTP_TEID"]=gtp_teid
                    icu.updateKeyValueInDict(s1apData, "gTP-TEID", gtp_teid)
                    count+=1
                icu.updateKeyValueInDict(s1apData, "transportLayerAddress",transportLayerAddressUpdate())

            elif requestType==mt.authentication_response.name:
                TIMEOUTFLAG=False

            elif requestType==mt.ue_context_release_complete.name:
                SERFLAG=False

            updateMessageFromContextData(s1apData,requestType)
            
    if ieUpdateValDict != None:
        icu.setValueFromTC(s1apData,ieUpdateValDict)
    setContextData(s1apData,requestType)
    
    igniteLogger.logger.info(f"s1ap data send : {s1apData}")
    send_response = requests.post(url["send_url"], json=[s1apData,S1APCTXDATA,"s1ap"])
    igniteLogger.logger.info(f"URL response for send s1ap data : {str(send_response)}")
Exemple #8
0
    )
    s1.sendS1ap('esm_information_response',
                uplinknastransport_esm_information_response, enbues1ap_id,
                nas_esm_information_response)

    igniteLogger.logger.info(
        "\n---------------------------------------\nHSS receives ULR from MME\n---------------------------------------"
    )
    ulr = ds.receiveS6aMsg()
    hop_to_hop_identifier = icu.getKeyValueFromDict(ulr,
                                                    "hop-by-hop-identifier")[0]

    igniteLogger.logger.info(
        "\n---------------------------------------\nHSS sends ULA to MME\n---------------------------------------"
    )
    icu.updateKeyValueInDict(msg_data_ula, "hop-by-hop-identifier",
                             hop_to_hop_identifier)
    ds.sendS6aMsg('update_location_response', msg_data_ula, imsi)
    served_party_ip_address = icu.getKeyValueFromDict(
        msg_data_ula, "served-party-ip-address")[0]

    clr_flag = True

    igniteLogger.logger.info(
        "\n---------------------------------------\nCreate Session Request received from MME\n---------------------------------------"
    )
    cs_req = gs.receiveGtp()
    icu.validateProtocolIE(cs_req, 'apn', 'apn1')
    icu.validateProtocolIE(cs_req, 'pdn_type', 1)
    icu.validateProtocolIE(cs_req, 'prefix_and_ipv4address',
                           served_party_ip_address)
Exemple #9
0
def sendS1ap(requestType,s1apData,enbUeS1apId,nasData={},imsi=None,ieUpdateValDict=None):

    global SERFLAG
    global TIMEOUTFLAG
    global IMSI

    igniteLogger.logger.info(f"s1ap message type : {requestType}")
    s1apData["NAS-MESSAGE"] = nasData
    count=0
    if enbUeS1apId !=None:
        if requestType == mt.attach_request.name:
            icu.updateKeyValueInDict(s1apData, "ENB-UE-S1AP-ID", enbUeS1apId)
            nu.setImsi(imsi,nasData)
            if imsi ==None:
                S1APCTXDATA[enbUeS1apId]={}
            else:
                if S1APCTXDATA.get(IMSI,None)==None:
                    IMSI=imsi
                    S1APCTXDATA[IMSI]={}
                    S1APCTXDATA[IMSI][requestType]={'imsi':str(imsi)}

        elif requestType == mt.identity_response.name:
            IMSI=imsi
            nu.setImsi(imsi,nasData)
            if S1APCTXDATA.get(enbUeS1apId,None)!=None:
                S1APCTXDATA[IMSI]=S1APCTXDATA[enbUeS1apId].copy()
                del S1APCTXDATA[enbUeS1apId]
                S1APCTXDATA[IMSI][requestType]={'imsi':str(imsi)}
            updateMessageFromContextData(s1apData,requestType)
        elif requestType == mt.attach_request_guti.name:
            icu.updateKeyValueInDict(s1apData, "ENB-UE-S1AP-ID", enbUeS1apId)
            S1APCTXDATA[enbUeS1apId]={}
            if imsi!=None:
                nu.setGuti(imsi,s1apData)
            else:
                nu.setGuti(S1APCTXDATA[IMSI][mt.attach_accept.name]["guti_list"],s1apData)

        elif requestType==mt.service_request.name:
            SERFLAG=True
            icu.updateKeyValueInDict(s1apData, "ENB-UE-S1AP-ID", enbUeS1apId)
            icu.updateKeyValueInDict(s1apData,"m-TMSI", icu.formatHex(S1APCTXDATA[IMSI][mt.attach_accept.name]["m_tmsi"]))
            icu.updateKeyValueInDict(s1apData,"mMEC", '0'+str(S1APCTXDATA[IMSI][mt.attach_accept.name]["mme_code"]))

        else:
            if requestType == mt.initial_context_setup_response.name:
                if count == 0:
                    gtp_teid=icu.generateUniqueId('gTP-TEID')
                    S1APCTXDATA[IMSI]["gTP_TEID"]=gtp_teid
                    icu.updateKeyValueInDict(s1apData, "gTP-TEID", gtp_teid)
                    count+=1
                else:
                    gtp_teid=S1APCTXDATA[IMSI]["gTP_TEID"]
                    gtp_teid=icu.icrementGtpTeid(gtp_teid)
                    S1APCTXDATA[IMSI]["gTP_TEID"]=gtp_teid
                    icu.updateKeyValueInDict(s1apData, "gTP-TEID", gtp_teid)
                    count+=1
                icu.updateKeyValueInDict(s1apData, "transportLayerAddress",transportLayerAddressUpdate())

            elif requestType == mt.handover_request_acknowledge.name:
                gtp_teid=icu.generateUniqueId('gTP-TEID')
                gtp_teid_1=icu.generateUniqueId('gTP-TEID')
                S1APCTXDATA[IMSI]["gTP_TEID_2"]=gtp_teid
                icu.updateKeyValueInDict(s1apData, "gTP-TEID", gtp_teid)
                icu.updateKeyValueInDict(s1apData, "transportLayerAddress",transportLayerAddressUpdate())
                icu.updateKeyValueInDict(s1apData, "dL-transportLayerAddress",transportLayerAddressUpdate())
                icu.updateKeyValueInDict(s1apData, "gTP-TEID", gtp_teid_1)

            elif requestType == mt.erab_modification_indication.name:
                tl_address=transportLayerAddressUpdate()
                generateIeValueForErabModInd(s1apData,tl_address,GTP_TEID_LIST)
                S1APCTXDATA[IMSI]["gTP_TEID"]=GTP_TEID_LIST
            
            elif requestType==mt.authentication_response.name:
                TIMEOUTFLAG=False

            elif requestType==mt.ue_context_release_complete.name:
                SERFLAG=False

            updateMessageFromContextData(s1apData,requestType)

    if ieUpdateValDict != None:
        icu.setValueFromTC(s1apData,ieUpdateValDict)
    setContextData(s1apData,requestType)

    igniteLogger.logger.info(f"s1ap data send : {s1apData}")
    if requestType in [mt.s1_setup_request_target.name,mt.handover_request_acknowledge.name,mt.handover_notify.name]:
        send_url = "http://"+str(config_file["s1ap_target"]["ignite_ip"])+":"+str(config_file["s1ap_target"]["tc_port"])+"/sendMessagesToProxy"
        send_response = requests.post(url["send_url"], json=[None,S1APCTXDATA,"s1ap"])
    else:
        send_url = url["send_url"]

    send_response = requests.post(send_url, json=[s1apData,S1APCTXDATA,"s1ap"])
    igniteLogger.logger.info(f"URL response for send s1ap data : {str(send_response)}")
Exemple #10
0
    )
    s1.sendS1ap('esm_information_response',
                uplinknastransport_esm_information_response, enbues1ap_id,
                nas_esm_information_response)

    igniteLogger.logger.info(
        "\n---------------------------------------\nHSS receives ULR from MME\n---------------------------------------"
    )
    ulr = ds.receiveS6aMsg()
    hop_to_hop_identifier = icu.getKeyValueFromDict(ulr,
                                                    "hop-by-hop-identifier")[0]

    igniteLogger.logger.info(
        "\n---------------------------------------\nHSS sends ULA to MME\n---------------------------------------"
    )
    icu.updateKeyValueInDict(msg_data_ula, "hop-by-hop-identifier",
                             hop_to_hop_identifier)
    ds.sendS6aMsg('update_location_response', msg_data_ula, imsi)

    clr_flag = True

    igniteLogger.logger.info(
        "\n---------------------------------------\nCreate Session Request received from MME\n---------------------------------------"
    )
    cs_req = gs.receiveGtp()
    icu.validateProtocolIE(cs_req, 'apn', 'apn1')
    icu.validateProtocolIE(cs_req, 'pdn_type', 1)

    igniteLogger.logger.info(
        "\n---------------------------------------\nSend Create Session Response to MME\n---------------------------------------"
    )
    gs.sendGtp('create_session_response', create_session_response,