diff --git a/.golangci.yml b/.golangci.yml index dfa1685b..f5292dd9 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -239,18 +239,18 @@ linters-settings: linters: enable: - gofmt - - govet - - errcheck - - staticcheck - - unused - - gosimple - - structcheck + # - govet + # - errcheck + # - staticcheck + # - unused + # - gosimple + # - structcheck - varcheck - ineffassign - - deadcode + # - deadcode - typecheck # Additional - - lll + # - lll - godox #- gomnd #- goconst @@ -258,16 +258,16 @@ linters: # - maligned # - nestif # - gomodguard - - nakedret + # - nakedret - gci - misspell - gofumpt - whitespace - - unconvert + # - unconvert - predeclared - noctx - dogsled - - bodyclose + # - bodyclose - asciicheck #- stylecheck # - unparam diff --git a/amf.go b/amf.go index 32682a1b..a2eff3e1 100644 --- a/amf.go +++ b/amf.go @@ -10,11 +10,10 @@ import ( "fmt" "os" - "github.com/sirupsen/logrus" - "github.com/urfave/cli" - "github.com/omec-project/amf/logger" "github.com/omec-project/amf/service" + "github.com/sirupsen/logrus" + "github.com/urfave/cli" ) var AMF = &service.AMF{} diff --git a/amf_test.go b/amf_test.go index 15e09c3b..a7a30134 100644 --- a/amf_test.go +++ b/amf_test.go @@ -120,11 +120,11 @@ func TestUpdateConfig(t *testing.T) { func TestRegisterNF(t *testing.T) { // Save current function and restore at the end: origRegisterNFInstance := consumer.SendRegisterNFInstance - //origSearchNFInstances := consumer.SendSearchNFInstances + // origSearchNFInstances := consumer.SendSearchNFInstances origUpdateNFInstance := consumer.SendUpdateNFInstance defer func() { consumer.SendRegisterNFInstance = origRegisterNFInstance - //consumer.SendSearchNFInstances = origSearchNFInstances + // consumer.SendSearchNFInstances = origSearchNFInstances consumer.SendUpdateNFInstance = origUpdateNFInstance }() fmt.Printf("test case TestRegisterNF \n") diff --git a/consumer/am_policy.go b/consumer/am_policy.go index 86d2f5c6..bc478a96 100644 --- a/consumer/am_policy.go +++ b/consumer/am_policy.go @@ -82,7 +82,8 @@ func AMPolicyControlCreate(ue *amf_context.AmfUe, anType models.AccessType) (*mo } func AMPolicyControlUpdate(ue *amf_context.AmfUe, updateRequest models.PolicyAssociationUpdateRequest) ( - problemDetails *models.ProblemDetails, err error) { + problemDetails *models.ProblemDetails, err error, +) { configuration := Npcf_AMPolicy.NewConfiguration() configuration.SetBasePath(ue.PcfUri) client := Npcf_AMPolicy.NewAPIClient(configuration) diff --git a/consumer/communication.go b/consumer/communication.go index 03731f99..80b6db05 100644 --- a/consumer/communication.go +++ b/consumer/communication.go @@ -21,7 +21,8 @@ import ( func BuildUeContextCreateData(ue *amf_context.AmfUe, targetRanId models.NgRanTargetId, sourceToTargetData models.N2InfoContent, pduSessionList []models.N2SmInformation, - n2NotifyUri string, ngapCause *models.NgApCause) models.UeContextCreateData { + n2NotifyUri string, ngapCause *models.NgApCause, +) models.UeContextCreateData { var ueContextCreateData models.UeContextCreateData ueContext := BuildUeContextModel(ue) @@ -121,7 +122,8 @@ func buildAmPolicyReqTriggers(triggers []models.RequestTrigger) (amPolicyReqTrig } func CreateUEContextRequest(ue *amf_context.AmfUe, ueContextCreateData models.UeContextCreateData) ( - ueContextCreatedData *models.UeContextCreatedData, problemDetails *models.ProblemDetails, err error) { + ueContextCreatedData *models.UeContextCreatedData, problemDetails *models.ProblemDetails, err error, +) { configuration := Namf_Communication.NewConfiguration() configuration.SetBasePath(ue.TargetAmfUri) client := Namf_Communication.NewAPIClient(configuration) @@ -150,7 +152,8 @@ func CreateUEContextRequest(ue *amf_context.AmfUe, ueContextCreateData models.Ue } func ReleaseUEContextRequest(ue *amf_context.AmfUe, ngapCause models.NgApCause) ( - problemDetails *models.ProblemDetails, err error) { + problemDetails *models.ProblemDetails, err error, +) { configuration := Namf_Communication.NewConfiguration() configuration.SetBasePath(ue.TargetAmfUri) client := Namf_Communication.NewAPIClient(configuration) @@ -192,7 +195,8 @@ func ReleaseUEContextRequest(ue *amf_context.AmfUe, ngapCause models.NgApCause) func UEContextTransferRequest( ue *amf_context.AmfUe, accessType models.AccessType, transferReason models.TransferReason) ( - ueContextTransferRspData *models.UeContextTransferRspData, problemDetails *models.ProblemDetails, err error) { + ueContextTransferRspData *models.UeContextTransferRspData, problemDetails *models.ProblemDetails, err error, +) { configuration := Namf_Communication.NewConfiguration() configuration.SetBasePath(ue.TargetAmfUri) client := Namf_Communication.NewAPIClient(configuration) @@ -241,7 +245,8 @@ func UEContextTransferRequest( // This operation is called "RegistrationCompleteNotify" at TS 23.502 func RegistrationStatusUpdate(ue *amf_context.AmfUe, request models.UeRegStatusUpdateReqData) ( - regStatusTransferComplete bool, problemDetails *models.ProblemDetails, err error) { + regStatusTransferComplete bool, problemDetails *models.ProblemDetails, err error, +) { configuration := Namf_Communication.NewConfiguration() configuration.SetBasePath(ue.TargetAmfUri) client := Namf_Communication.NewAPIClient(configuration) @@ -249,8 +254,7 @@ func RegistrationStatusUpdate(ue *amf_context.AmfUe, request models.UeRegStatusU ctx, cancel := context.WithTimeout(context.TODO(), 30*time.Second) defer cancel() ueContextId := fmt.Sprintf("5g-guti-%s", ue.Guti) - res, httpResp, localErr := - client.IndividualUeContextDocumentApi.RegistrationStatusUpdate(ctx, ueContextId, request) + res, httpResp, localErr := client.IndividualUeContextDocumentApi.RegistrationStatusUpdate(ctx, ueContextId, request) if localErr == nil { regStatusTransferComplete = res.RegStatusTransferComplete } else if httpResp != nil { diff --git a/consumer/nf_discovery.go b/consumer/nf_discovery.go index 63a60476..837d90a9 100644 --- a/consumer/nf_discovery.go +++ b/consumer/nf_discovery.go @@ -10,18 +10,17 @@ import ( "fmt" "net/http" - nrf_cache "github.com/omec-project/nrf/nrfcache" - amf_context "github.com/omec-project/amf/context" "github.com/omec-project/amf/logger" "github.com/omec-project/amf/util" + nrf_cache "github.com/omec-project/nrf/nrfcache" "github.com/omec-project/openapi/Nnrf_NFDiscovery" "github.com/omec-project/openapi/models" ) func SendSearchNFInstances(nrfUri string, targetNfType, requestNfType models.NfType, - param *Nnrf_NFDiscovery.SearchNFInstancesParamOpts) (models.SearchResult, error) { - + param *Nnrf_NFDiscovery.SearchNFInstancesParamOpts, +) (models.SearchResult, error) { if amf_context.AMF_Self().EnableNrfCaching { return nrf_cache.SearchNFInstances(nrfUri, targetNfType, requestNfType, param) } else { @@ -30,7 +29,8 @@ func SendSearchNFInstances(nrfUri string, targetNfType, requestNfType models.NfT } func SendNfDiscoveryToNrf(nrfUri string, targetNfType, requestNfType models.NfType, - param *Nnrf_NFDiscovery.SearchNFInstancesParamOpts) (models.SearchResult, error) { + param *Nnrf_NFDiscovery.SearchNFInstancesParamOpts, +) (models.SearchResult, error) { // Set client and set url configuration := Nnrf_NFDiscovery.NewConfiguration() configuration.SetBasePath(nrfUri) @@ -70,7 +70,8 @@ func SendNfDiscoveryToNrf(nrfUri string, targetNfType, requestNfType models.NfTy } func SearchUdmSdmInstance(ue *amf_context.AmfUe, nrfUri string, targetNfType, requestNfType models.NfType, - param *Nnrf_NFDiscovery.SearchNFInstancesParamOpts) error { + param *Nnrf_NFDiscovery.SearchNFInstancesParamOpts, +) error { resp, localErr := SendSearchNFInstances(nrfUri, targetNfType, requestNfType, param) if localErr != nil { return localErr @@ -95,7 +96,8 @@ func SearchUdmSdmInstance(ue *amf_context.AmfUe, nrfUri string, targetNfType, re } func SearchNssfNSSelectionInstance(ue *amf_context.AmfUe, nrfUri string, targetNfType, requestNfType models.NfType, - param *Nnrf_NFDiscovery.SearchNFInstancesParamOpts) error { + param *Nnrf_NFDiscovery.SearchNFInstancesParamOpts, +) error { resp, localErr := SendSearchNFInstances(nrfUri, targetNfType, requestNfType, param) if localErr != nil { return localErr @@ -118,7 +120,8 @@ func SearchNssfNSSelectionInstance(ue *amf_context.AmfUe, nrfUri string, targetN } func SearchAmfCommunicationInstance(ue *amf_context.AmfUe, nrfUri string, targetNfType, - requestNfType models.NfType, param *Nnrf_NFDiscovery.SearchNFInstancesParamOpts) (err error) { + requestNfType models.NfType, param *Nnrf_NFDiscovery.SearchNFInstancesParamOpts, +) (err error) { resp, localErr := SendSearchNFInstances(nrfUri, targetNfType, requestNfType, param) if localErr != nil { err = localErr diff --git a/consumer/nf_mangement.go b/consumer/nf_mangement.go index f0f26dc7..b601fa97 100644 --- a/consumer/nf_mangement.go +++ b/consumer/nf_mangement.go @@ -70,13 +70,13 @@ func BuildNFInstance(context *amf_context.AMFContext) (profile models.NfProfile, NotificationType: models.NotificationType_N1_MESSAGES, N1MessageClass: models.N1MessageClass__5_GMM, } - profile.DefaultNotificationSubscriptions = - append(profile.DefaultNotificationSubscriptions, defaultNotificationSubscription) + profile.DefaultNotificationSubscriptions = append(profile.DefaultNotificationSubscriptions, defaultNotificationSubscription) return profile, err } var SendRegisterNFInstance = func(nrfUri, nfInstanceId string, profile models.NfProfile) ( - prof models.NfProfile, resouceNrfUri string, retrieveNfInstanceId string, err error) { + prof models.NfProfile, resouceNrfUri string, retrieveNfInstanceId string, err error, +) { // Set client and set url configuration := Nnrf_NFManagement.NewConfiguration() configuration.SetBasePath(nrfUri) diff --git a/consumer/nsselection.go b/consumer/nsselection.go index 844d8e23..29e85df2 100644 --- a/consumer/nsselection.go +++ b/consumer/nsselection.go @@ -12,7 +12,6 @@ import ( "time" "github.com/antihax/optional" - amf_context "github.com/omec-project/amf/context" "github.com/omec-project/amf/logger" "github.com/omec-project/openapi" @@ -21,7 +20,8 @@ import ( ) func NSSelectionGetForRegistration(ue *amf_context.AmfUe, requestedNssai []models.MappingOfSnssai) ( - *models.ProblemDetails, error) { + *models.ProblemDetails, error, +) { configuration := Nnssf_NSSelection.NewConfiguration() configuration.SetBasePath(ue.NssfUri) client := Nnssf_NSSelection.NewAPIClient(configuration) @@ -71,7 +71,8 @@ func NSSelectionGetForRegistration(ue *amf_context.AmfUe, requestedNssai []model } func NSSelectionGetForPduSession(ue *amf_context.AmfUe, snssai models.Snssai) ( - *models.AuthorizedNetworkSliceInfo, *models.ProblemDetails, error) { + *models.AuthorizedNetworkSliceInfo, *models.ProblemDetails, error, +) { configuration := Nnssf_NSSelection.NewConfiguration() configuration.SetBasePath(ue.NssfUri) client := Nnssf_NSSelection.NewAPIClient(configuration) diff --git a/consumer/sm_context.go b/consumer/sm_context.go index 622efcc9..33dc70e9 100644 --- a/consumer/sm_context.go +++ b/consumer/sm_context.go @@ -15,7 +15,6 @@ import ( "time" "github.com/antihax/optional" - amf_context "github.com/omec-project/amf/context" "github.com/omec-project/amf/util" "github.com/omec-project/nas/nasMessage" @@ -37,7 +36,7 @@ func getServingSmfIndex(smfNum int) (servingSmfIndex int) { func setAltSmfProfile(smCtxt *amf_context.SmContext) error { ignoreSmfId := smCtxt.SmfID() var altSmfInst []models.NfProfile - //iterate over nf instances to ignore failed NF + // iterate over nf instances to ignore failed NF for _, inst := range smCtxt.SmfProfiles { if inst.NfInstanceId != ignoreSmfId { altSmfInst = append(altSmfInst, inst) @@ -56,7 +55,6 @@ func setAltSmfProfile(smCtxt *amf_context.SmContext) error { } func refreshSmfProfiles(ue *amf_context.AmfUe, smCtxt *amf_context.SmContext, ignoreSmfId string) *[]models.NfProfile { - nrfUri := ue.ServingAMF().NrfUri param := Nnrf_NFDiscovery.SearchNFInstancesParamOpts{ ServiceNames: optional.NewInterface([]models.ServiceName{models.ServiceName_NSMF_PDUSESSION}), @@ -70,7 +68,7 @@ func refreshSmfProfiles(ue *amf_context.AmfUe, smCtxt *amf_context.SmContext, ig } var altSmfInst []models.NfProfile - //iterate over nf instances to ignore failed NF + // iterate over nf instances to ignore failed NF for _, inst := range result.NfInstances { if inst.NfInstanceId != ignoreSmfId { altSmfInst = append(altSmfInst, inst) @@ -84,7 +82,8 @@ func SelectSmf( anType models.AccessType, pduSessionID int32, snssai models.Snssai, - dnn string) (*amf_context.SmContext, uint8, error) { + dnn string, +) (*amf_context.SmContext, uint8, error) { var smfUri string ue.GmmLog.Infof("Select SMF [snssai: %+v, dnn: %+v]", snssai, dnn) @@ -169,7 +168,8 @@ func SelectSmf( func SendCreateSmContextRequest(ue *amf_context.AmfUe, smContext *amf_context.SmContext, requestType *models.RequestType, nasPdu []byte) ( response *models.PostSmContextsResponse, smContextRef string, errorResponse *models.PostSmContextsErrorResponse, - problemDetail *models.ProblemDetails, err1 error) { + problemDetail *models.ProblemDetails, err1 error, +) { smContextCreateData := buildCreateSmContextRequest(ue, smContext, nil) postSmContextsRequest := models.PostSmContextsRequest{ @@ -184,8 +184,7 @@ func SendCreateSmContextRequest(ue *amf_context.AmfUe, smContext *amf_context.Sm ctx, cancel := context.WithTimeout(context.TODO(), 30*time.Second) defer cancel() - postSmContextReponse, httpResponse, err := - client.SMContextsCollectionApi.PostSmContexts(ctx, postSmContextsRequest) + postSmContextReponse, httpResponse, err := client.SMContextsCollectionApi.PostSmContexts(ctx, postSmContextsRequest) if err == nil { response = &postSmContextReponse @@ -210,7 +209,8 @@ func SendCreateSmContextRequest(ue *amf_context.AmfUe, smContext *amf_context.Sm } func buildCreateSmContextRequest(ue *amf_context.AmfUe, smContext *amf_context.SmContext, - requestType *models.RequestType) (smContextCreateData models.SmContextCreateData) { + requestType *models.RequestType, +) (smContextCreateData models.SmContextCreateData) { context := amf_context.AMF_Self() smContextCreateData.Supi = ue.Supi smContextCreateData.UnauthenticatedSupi = ue.UnauthenticatedSupi @@ -222,7 +222,7 @@ func buildCreateSmContextRequest(ue *amf_context.AmfUe, smContext *amf_context.S smContextCreateData.Dnn = smContext.Dnn() smContextCreateData.ServingNfId = context.NfId smContextCreateData.Guami = &context.ServedGuamiList[0] - //take seving networking plmn from userlocation.Tai + // take seving networking plmn from userlocation.Tai if ue.Tai.PlmnId != nil { smContextCreateData.ServingNetwork = ue.Tai.PlmnId } else { @@ -268,7 +268,8 @@ func buildCreateSmContextRequest(ue *amf_context.AmfUe, smContext *amf_context.S func SendUpdateSmContextActivateUpCnxState( ue *amf_context.AmfUe, smContext *amf_context.SmContext, accessType models.AccessType) ( - *models.UpdateSmContextResponse, *models.UpdateSmContextErrorResponse, *models.ProblemDetails, error) { + *models.UpdateSmContextResponse, *models.UpdateSmContextErrorResponse, *models.ProblemDetails, error, +) { updateData := models.SmContextUpdateData{} updateData.UpCnxState = models.UpCnxState_ACTIVATING if !amf_context.CompareUserLocation(ue.Location, smContext.UserLocation()) { @@ -287,7 +288,8 @@ func SendUpdateSmContextActivateUpCnxState( func SendUpdateSmContextDeactivateUpCnxState(ue *amf_context.AmfUe, smContext *amf_context.SmContext, cause amf_context.CauseAll) ( - *models.UpdateSmContextResponse, *models.UpdateSmContextErrorResponse, *models.ProblemDetails, error) { + *models.UpdateSmContextResponse, *models.UpdateSmContextErrorResponse, *models.ProblemDetails, error, +) { updateData := models.SmContextUpdateData{} updateData.UpCnxState = models.UpCnxState_DEACTIVATED updateData.UeLocation = &ue.Location @@ -305,7 +307,8 @@ func SendUpdateSmContextDeactivateUpCnxState(ue *amf_context.AmfUe, func SendUpdateSmContextChangeAccessType(ue *amf_context.AmfUe, smContext *amf_context.SmContext, anTypeCanBeChanged bool) ( - *models.UpdateSmContextResponse, *models.UpdateSmContextErrorResponse, *models.ProblemDetails, error) { + *models.UpdateSmContextResponse, *models.UpdateSmContextErrorResponse, *models.ProblemDetails, error, +) { updateData := models.SmContextUpdateData{} updateData.AnTypeCanBeChanged = anTypeCanBeChanged return SendUpdateSmContextRequest(smContext, updateData, nil, nil) @@ -313,7 +316,8 @@ func SendUpdateSmContextChangeAccessType(ue *amf_context.AmfUe, func SendUpdateSmContextN2Info( ue *amf_context.AmfUe, smContext *amf_context.SmContext, n2SmType models.N2SmInfoType, N2SmInfo []byte) ( - *models.UpdateSmContextResponse, *models.UpdateSmContextErrorResponse, *models.ProblemDetails, error) { + *models.UpdateSmContextResponse, *models.UpdateSmContextErrorResponse, *models.ProblemDetails, error, +) { updateData := models.SmContextUpdateData{} updateData.N2SmInfoType = n2SmType updateData.N2SmInfo = new(models.RefToBinaryData) @@ -324,7 +328,8 @@ func SendUpdateSmContextN2Info( func SendUpdateSmContextXnHandover( ue *amf_context.AmfUe, smContext *amf_context.SmContext, n2SmType models.N2SmInfoType, N2SmInfo []byte) ( - *models.UpdateSmContextResponse, *models.UpdateSmContextErrorResponse, *models.ProblemDetails, error) { + *models.UpdateSmContextResponse, *models.UpdateSmContextErrorResponse, *models.ProblemDetails, error, +) { updateData := models.SmContextUpdateData{} if n2SmType != "" { updateData.N2SmInfoType = n2SmType @@ -345,7 +350,8 @@ func SendUpdateSmContextXnHandover( func SendUpdateSmContextXnHandoverFailed( ue *amf_context.AmfUe, smContext *amf_context.SmContext, n2SmType models.N2SmInfoType, N2SmInfo []byte) ( - *models.UpdateSmContextResponse, *models.UpdateSmContextErrorResponse, *models.ProblemDetails, error) { + *models.UpdateSmContextResponse, *models.UpdateSmContextErrorResponse, *models.ProblemDetails, error, +) { updateData := models.SmContextUpdateData{} if n2SmType != "" { updateData.N2SmInfoType = n2SmType @@ -361,7 +367,8 @@ func SendUpdateSmContextN2HandoverPreparing( smContext *amf_context.SmContext, n2SmType models.N2SmInfoType, N2SmInfo []byte, amfid string, targetId *models.NgRanTargetId) ( - *models.UpdateSmContextResponse, *models.UpdateSmContextErrorResponse, *models.ProblemDetails, error) { + *models.UpdateSmContextResponse, *models.UpdateSmContextErrorResponse, *models.ProblemDetails, error, +) { updateData := models.SmContextUpdateData{} if n2SmType != "" { updateData.N2SmInfoType = n2SmType @@ -379,7 +386,8 @@ func SendUpdateSmContextN2HandoverPreparing( func SendUpdateSmContextN2HandoverPrepared( ue *amf_context.AmfUe, smContext *amf_context.SmContext, n2SmType models.N2SmInfoType, N2SmInfo []byte) ( - *models.UpdateSmContextResponse, *models.UpdateSmContextErrorResponse, *models.ProblemDetails, error) { + *models.UpdateSmContextResponse, *models.UpdateSmContextErrorResponse, *models.ProblemDetails, error, +) { updateData := models.SmContextUpdateData{} if n2SmType != "" { updateData.N2SmInfoType = n2SmType @@ -392,7 +400,8 @@ func SendUpdateSmContextN2HandoverPrepared( func SendUpdateSmContextN2HandoverComplete( ue *amf_context.AmfUe, smContext *amf_context.SmContext, amfid string, guami *models.Guami) ( - *models.UpdateSmContextResponse, *models.UpdateSmContextErrorResponse, *models.ProblemDetails, error) { + *models.UpdateSmContextResponse, *models.UpdateSmContextErrorResponse, *models.ProblemDetails, error, +) { updateData := models.SmContextUpdateData{} updateData.HoState = models.HoState_COMPLETED if amfid != "" { @@ -412,7 +421,8 @@ func SendUpdateSmContextN2HandoverComplete( func SendUpdateSmContextN2HandoverCanceled(ue *amf_context.AmfUe, smContext *amf_context.SmContext, cause amf_context.CauseAll) ( - *models.UpdateSmContextResponse, *models.UpdateSmContextErrorResponse, *models.ProblemDetails, error) { + *models.UpdateSmContextResponse, *models.UpdateSmContextErrorResponse, *models.ProblemDetails, error, +) { updateData := models.SmContextUpdateData{} updateData.HoState = models.HoState_CANCELLED if cause.Cause != nil { @@ -429,7 +439,8 @@ func SendUpdateSmContextN2HandoverCanceled(ue *amf_context.AmfUe, func SendUpdateSmContextHandoverBetweenAccessType( ue *amf_context.AmfUe, smContext *amf_context.SmContext, targetAccessType models.AccessType, N1SmMsg []byte) ( - *models.UpdateSmContextResponse, *models.UpdateSmContextErrorResponse, *models.ProblemDetails, error) { + *models.UpdateSmContextResponse, *models.UpdateSmContextErrorResponse, *models.ProblemDetails, error, +) { updateData := models.SmContextUpdateData{} updateData.AnType = targetAccessType if N1SmMsg != nil { @@ -441,7 +452,8 @@ func SendUpdateSmContextHandoverBetweenAccessType( func SendUpdateSmContextHandoverBetweenAMF( ue *amf_context.AmfUe, smContext *amf_context.SmContext, amfid string, guami *models.Guami, activate bool) ( - *models.UpdateSmContextResponse, *models.UpdateSmContextErrorResponse, *models.ProblemDetails, error) { + *models.UpdateSmContextResponse, *models.UpdateSmContextErrorResponse, *models.ProblemDetails, error, +) { updateData := models.SmContextUpdateData{} updateData.ServingNfId = amfid updateData.ServingNetwork = guami.PlmnId @@ -463,7 +475,8 @@ func SendUpdateSmContextHandoverBetweenAMF( func SendUpdateSmContextRequest(smContext *amf_context.SmContext, updateData models.SmContextUpdateData, n1Msg []byte, n2Info []byte) ( response *models.UpdateSmContextResponse, errorResponse *models.UpdateSmContextErrorResponse, - problemDetail *models.ProblemDetails, err1 error) { + problemDetail *models.ProblemDetails, err1 error, +) { configuration := Nsmf_PDUSession.NewConfiguration() configuration.SetBasePath(smContext.SmfUri()) client := Nsmf_PDUSession.NewAPIClient(configuration) @@ -476,11 +489,9 @@ func SendUpdateSmContextRequest(smContext *amf_context.SmContext, updateSmContextRequest.BinaryDataN1SmMessage = n1Msg updateSmContextRequest.BinaryDataN2SmInformation = n2Info - updateSmContextReponse, httpResponse, err := - client.IndividualSMContextApi.UpdateSmContext(ctx, smContext.SmContextRef(), - updateSmContextRequest) - - //retry on alternate SMF + updateSmContextReponse, httpResponse, err := client.IndividualSMContextApi.UpdateSmContext(ctx, smContext.SmContextRef(), + updateSmContextRequest) + // retry on alternate SMF if err != nil { if errProfile := setAltSmfProfile(smContext); errProfile == nil { configuration := Nsmf_PDUSession.NewConfiguration() @@ -490,9 +501,8 @@ func SendUpdateSmContextRequest(smContext *amf_context.SmContext, ctx, cancel := context.WithTimeout(context.TODO(), 30*time.Second) defer cancel() - updateSmContextReponse, httpResponse, err = - client.IndividualSMContextApi.UpdateSmContext(ctx, smContext.SmContextRef(), - updateSmContextRequest) + updateSmContextReponse, httpResponse, err = client.IndividualSMContextApi.UpdateSmContext(ctx, smContext.SmContextRef(), + updateSmContextRequest) } } @@ -521,7 +531,8 @@ func SendUpdateSmContextRequest(smContext *amf_context.SmContext, func SendReleaseSmContextRequest(ue *amf_context.AmfUe, smContext *amf_context.SmContext, cause *amf_context.CauseAll, n2SmInfoType models.N2SmInfoType, - n2Info []byte) (detail *models.ProblemDetails, err error) { + n2Info []byte, +) (detail *models.ProblemDetails, err error) { configuration := Nsmf_PDUSession.NewConfiguration() configuration.SetBasePath(smContext.SmfUri()) client := Nsmf_PDUSession.NewAPIClient(configuration) @@ -550,7 +561,8 @@ func SendReleaseSmContextRequest(ue *amf_context.AmfUe, smContext *amf_context.S func buildReleaseSmContextRequest( ue *amf_context.AmfUe, cause *amf_context.CauseAll, n2SmInfoType models.N2SmInfoType, n2Info []byte) ( - releaseData models.SmContextReleaseData) { + releaseData models.SmContextReleaseData, +) { if cause != nil { if cause.Cause != nil { releaseData.Cause = *cause.Cause diff --git a/consumer/subscriber_data_management.go b/consumer/subscriber_data_management.go index 747fc0ac..f0782e0b 100644 --- a/consumer/subscriber_data_management.go +++ b/consumer/subscriber_data_management.go @@ -11,7 +11,6 @@ import ( "time" "github.com/antihax/optional" - amf_context "github.com/omec-project/amf/context" "github.com/omec-project/openapi" "github.com/omec-project/openapi/Nudm_SubscriberDataManagement" @@ -76,8 +75,7 @@ func SDMGetSmfSelectData(ue *amf_context.AmfUe) (problemDetails *models.ProblemD } ctx, cancel := context.WithTimeout(context.TODO(), 30*time.Second) defer cancel() - data, httpResp, localErr := - client.SMFSelectionSubscriptionDataRetrievalApi.GetSmfSelectData(ctx, ue.Supi, ¶mOpt) + data, httpResp, localErr := client.SMFSelectionSubscriptionDataRetrievalApi.GetSmfSelectData(ctx, ue.Supi, ¶mOpt) if localErr == nil { ue.SmfSelectionData = &data } else if httpResp != nil { @@ -101,8 +99,7 @@ func SDMGetUeContextInSmfData(ue *amf_context.AmfUe) (problemDetails *models.Pro ctx, cancel := context.WithTimeout(context.TODO(), 30*time.Second) defer cancel() - data, httpResp, localErr := - client.UEContextInSMFDataRetrievalApi.GetUeContextInSmfData(ctx, ue.Supi, nil) + data, httpResp, localErr := client.UEContextInSMFDataRetrievalApi.GetUeContextInSmfData(ctx, ue.Supi, nil) if localErr == nil { ue.UeContextInSmfData = &data } else if httpResp != nil { @@ -158,8 +155,7 @@ func SDMGetSliceSelectionSubscriptionData(ue *amf_context.AmfUe) (problemDetails } ctx, cancel := context.WithTimeout(context.TODO(), 30*time.Second) defer cancel() - nssai, httpResp, localErr := - client.SliceSelectionSubscriptionDataRetrievalApi.GetNssai(ctx, ue.Supi, ¶mOpt) + nssai, httpResp, localErr := client.SliceSelectionSubscriptionDataRetrievalApi.GetNssai(ctx, ue.Supi, ¶mOpt) if localErr == nil { for _, defaultSnssai := range nssai.DefaultSingleNssais { subscribedSnssai := models.SubscribedSnssai{ diff --git a/consumer/ue_authentication.go b/consumer/ue_authentication.go index 2be92dd5..eda7a672 100644 --- a/consumer/ue_authentication.go +++ b/consumer/ue_authentication.go @@ -15,7 +15,6 @@ import ( "time" "github.com/antihax/optional" - amf_context "github.com/omec-project/amf/context" "github.com/omec-project/amf/logger" "github.com/omec-project/nas/nasType" @@ -25,7 +24,8 @@ import ( ) func SendUEAuthenticationAuthenticateRequest(ue *amf_context.AmfUe, - resynchronizationInfo *models.ResynchronizationInfo) (*models.UeAuthenticationCtx, *models.ProblemDetails, error) { + resynchronizationInfo *models.ResynchronizationInfo, +) (*models.UeAuthenticationCtx, *models.ProblemDetails, error) { configuration := Nausf_UEAuthentication.NewConfiguration() configuration.SetBasePath(ue.AusfUri) @@ -34,7 +34,7 @@ func SendUEAuthenticationAuthenticateRequest(ue *amf_context.AmfUe, amfSelf := amf_context.AMF_Self() servedGuami := amfSelf.ServedGuamiList[0] var plmnId *models.PlmnId - //take ServingNetwork plmn from UserLocation.Tai if received + // take ServingNetwork plmn from UserLocation.Tai if received if ue.Tai.PlmnId != nil { plmnId = ue.Tai.PlmnId } else { @@ -70,7 +70,8 @@ func SendUEAuthenticationAuthenticateRequest(ue *amf_context.AmfUe, } func SendAuth5gAkaConfirmRequest(ue *amf_context.AmfUe, resStar string) ( - *models.ConfirmationDataResponse, *models.ProblemDetails, error) { + *models.ConfirmationDataResponse, *models.ProblemDetails, error, +) { var ausfUri string if confirmUri, err := url.Parse(ue.AuthenticationCtx.Links["link"].Href); err != nil { return nil, nil, err @@ -110,7 +111,8 @@ func SendAuth5gAkaConfirmRequest(ue *amf_context.AmfUe, resStar string) ( } func SendEapAuthConfirmRequest(ue *amf_context.AmfUe, eapMsg nasType.EAPMessage) ( - response *models.EapSession, problemDetails *models.ProblemDetails, err1 error) { + response *models.EapSession, problemDetails *models.ProblemDetails, err1 error, +) { confirmUri, err := url.Parse(ue.AuthenticationCtx.Links["link"].Href) if err != nil { logger.ConsumerLog.Errorf("url Parse failed: %+v", err) diff --git a/consumer/ue_context_management.go b/consumer/ue_context_management.go index 3db92c3d..91ec07d5 100644 --- a/consumer/ue_context_management.go +++ b/consumer/ue_context_management.go @@ -17,7 +17,8 @@ import ( ) func UeCmRegistration(ue *amf_context.AmfUe, accessType models.AccessType, initialRegistrationInd bool) ( - *models.ProblemDetails, error) { + *models.ProblemDetails, error, +) { configuration := Nudm_UEContextManagement.NewConfiguration() configuration.SetBasePath(ue.NudmUECMUri) client := Nudm_UEContextManagement.NewAPIClient(configuration) @@ -59,8 +60,7 @@ func UeCmRegistration(ue *amf_context.AmfUe, accessType models.AccessType, initi ctx, cancel := context.WithTimeout(context.TODO(), 30*time.Second) defer cancel() - _, httpResp, localErr := - client.AMFRegistrationForNon3GPPAccessApi.Register(ctx, ue.Supi, registrationData) + _, httpResp, localErr := client.AMFRegistrationForNon3GPPAccessApi.Register(ctx, ue.Supi, registrationData) if localErr == nil { return nil, nil } else if httpResp != nil { diff --git a/context/amf_ran.go b/context/amf_ran.go index 67cd4fe8..76aa3c09 100644 --- a/context/amf_ran.go +++ b/context/amf_ran.go @@ -35,12 +35,12 @@ type AmfRan struct { RanId *models.GlobalRanNodeId Name string AnType models.AccessType - GnbIp string `json:"-"` //TODO to be removed + GnbIp string `json:"-"` // TODO to be removed GnbId string // RanId in string format, i.e.,mcc:mnc:gnbid /* socket Connect*/ Conn net.Conn `json:"-"` /* Supported TA List */ - SupportedTAList []SupportedTAI //TODO SupportedTaList store and recover from DB + SupportedTAList []SupportedTAI // TODO SupportedTaList store and recover from DB /* RAN UE List */ RanUeList []*RanUe `json:"-"` // RanUeNgapId as key @@ -65,10 +65,14 @@ func NewSupportedTAIList() []SupportedTAI { } func (ran *AmfRan) Remove() { - //send nf(gnb) status notification - gnbStatus := mi.MetricEvent{EventType: mi.CNfStatusEvt, - NfStatusData: mi.CNfStatus{NfType: mi.NfTypeGnb, - NfStatus: mi.NfStatusDisconnected, NfName: ran.GnbId}} + // send nf(gnb) status notification + gnbStatus := mi.MetricEvent{ + EventType: mi.CNfStatusEvt, + NfStatusData: mi.CNfStatus{ + NfType: mi.NfTypeGnb, + NfStatus: mi.NfStatusDisconnected, NfName: ran.GnbId, + }, + } metrics.StatWriter.PublishNfStatusEvent(gnbStatus) ran.SetRanStats(RanDisconnected) @@ -148,7 +152,7 @@ func (ran *AmfRan) SetRanId(ranNodeId *ngapType.GlobalRANNodeID) { ran.AnType = models.AccessType__3_GPP_ACCESS } - //Setting RanId in String format with ":" seperation of each field + // Setting RanId in String format with ":" separation of each field if ranId.PlmnId != nil { ran.GnbId = ranId.PlmnId.Mcc + ":" + ranId.PlmnId.Mnc + ":" } diff --git a/context/amf_ue.go b/context/amf_ue.go index d6f835b2..18e7b9b2 100644 --- a/context/amf_ue.go +++ b/context/amf_ue.go @@ -20,8 +20,6 @@ import ( "sync" "time" - "github.com/sirupsen/logrus" - "github.com/omec-project/UeauCommon" "github.com/omec-project/amf/logger" "github.com/omec-project/amf/metrics" @@ -34,6 +32,7 @@ import ( "github.com/omec-project/nas/security" "github.com/omec-project/ngap/ngapType" "github.com/omec-project/openapi/models" + "github.com/sirupsen/logrus" ) type OnGoingProcedure string @@ -67,7 +66,7 @@ const ( ) type AmfUe struct { - //Mutex sync.Mutex `json:"mutex,omitempty" yaml:"mutex" bson:"mutex,omitempty"` + // Mutex sync.Mutex `json:"mutex,omitempty" yaml:"mutex" bson:"mutex,omitempty"` Mutex sync.Mutex `json:"-"` /* the AMF which serving this AmfUe now */ servingAMF *AMFContext `json:"servingAMF,omitempty"` // never nil @@ -169,8 +168,8 @@ type AmfUe struct { Kn3iwf []uint8 `json:"kn3iwf,omitempty"` // 32 byte NH []uint8 `json:"nh,omitempty"` // 32 byte NCC uint8 `json:"ncc,omitempty"` // 0..7 - //ULCount security.Count `json:"ulCount,omitempty" yaml:"ulCount" bson:"ulCount,omitempty"` - //DLCount security.Count `json:"dlCount,omitempty" yaml:"dlCount" bson:"dlCount,omitempty"` + // ULCount security.Count `json:"ulCount,omitempty" yaml:"ulCount" bson:"ulCount,omitempty"` + // DLCount security.Count `json:"dlCount,omitempty" yaml:"dlCount" bson:"dlCount,omitempty"` ULCount security.Count `json:"-"` DLCount security.Count `json:"-"` CipheringAlg uint8 `json:"cipheringAlg,omitempty"` @@ -202,17 +201,17 @@ type AmfUe struct { T3512Value int `json:"t3512Value,omitempty"` // default 54 min Non3gppDeregistrationTimerValue int `json:"non3gppDeregistrationTimerValue,omitempty"` // default 54 min - //AmfInstanceName and Ip + // AmfInstanceName and Ip AmfInstanceName string `json:"amfInstanceName,omitempty"` AmfInstanceIp string `json:"amfInstanceIp,omitempty"` - //EventChannel chan OnGoing - //EventChannel *EventChannel `json:"eventChannel,omitempty" yaml:"eventChannel" bson:"eventChannel,omitempty"` + // EventChannel chan OnGoing + // EventChannel *EventChannel `json:"eventChannel,omitempty" yaml:"eventChannel" bson:"eventChannel,omitempty"` EventChannel *EventChannel `json:"-"` // logger - //NASLog *logrus.Entry `json:"nasLog,omitempty" yaml:"nasLog" bson:"nasLog,omitempty"` - //GmmLog *logrus.Entry `json:"gmmLog,omitempty" yaml:"gmmLog" bson:"gmmLog,omitempty"` - //TxLog *logrus.Entry `json:"txLog,omitempty" yaml:"txLog" bson:"txLog,omitempty"` - //ProducerLog *logrus.Entry `json:"producerLog,omitempty" yaml:"producerLog" bson:"producerLog,omitempty"` + // NASLog *logrus.Entry `json:"nasLog,omitempty" yaml:"nasLog" bson:"nasLog,omitempty"` + // GmmLog *logrus.Entry `json:"gmmLog,omitempty" yaml:"gmmLog" bson:"gmmLog,omitempty"` + // TxLog *logrus.Entry `json:"txLog,omitempty" yaml:"txLog" bson:"txLog,omitempty"` + // ProducerLog *logrus.Entry `json:"producerLog,omitempty" yaml:"producerLog" bson:"producerLog,omitempty"` NASLog *logrus.Entry `json:"-"` GmmLog *logrus.Entry `json:"-"` TxLog *logrus.Entry `json:"-"` @@ -252,7 +251,6 @@ func (ue *AmfUe) MarshalJSON() ([]byte, error) { *n1n2MsgVal.Request.JsonData.N2InfoContainer = *ue.N1N2Message.Request.JsonData.N2InfoContainer } } - } ue.SmContextList.Range(func(key, val interface{}) bool { @@ -322,9 +320,8 @@ func (ue *AmfUe) UnmarshalJSON(data []byte) error { ue.RanUe[index].AmfUeNgapId = aux.AmfUeNgapId ue.RanUe[index].Log = logger.NgapLog.WithField(logger.FieldAmfUeNgapID, fmt.Sprintf("AMF_UE_NGAP_ID:%d", ue.RanUe[index].AmfUeNgapId)) if ran != nil { - //ran.RanUeList = append(ran.RanUeList, ue.RanUe[index]) + // ran.RanUeList = append(ran.RanUeList, ue.RanUe[index]) ue.RanUe[index].Ran = ran - } } for key, val := range aux.SmCtxList { @@ -349,8 +346,7 @@ const ( NasMessage ) -type InterfaceMsg interface { -} +type InterfaceMsg interface{} /*type InterfaceMsg struct { AnType models.AccessType @@ -464,7 +460,7 @@ func (ue *AmfUe) init() { ue.ReleaseCause = make(map[models.AccessType]*CauseAll) ue.AmfInstanceName = os.Getenv("HOSTNAME") ue.AmfInstanceIp = os.Getenv("POD_IP") - //ue.TransientInfo = make(chan AmfUeTransientInfo, 10) + // ue.TransientInfo = make(chan AmfUeTransientInfo, 10) } func (ue *AmfUe) ServingAMF() *AMFContext { @@ -489,7 +485,7 @@ func (ue *AmfUe) Remove() { } } - //tmsiGenerator.FreeID(int64(ue.Tmsi)) + // tmsiGenerator.FreeID(int64(ue.Tmsi)) AMF_Self().Drsm.ReleaseInt32ID(ue.Tmsi) if len(ue.Supi) > 0 { @@ -773,16 +769,15 @@ func (ue *AmfUe) ClearRegistrationRequestData(accessType models.AccessType) { // this method called when we are reusing the same uecontext during the registration procedure func (ue *AmfUe) ClearRegistrationData() { - //Allowed Nssai should be cleared first as it is a new Registration + // Allowed Nssai should be cleared first as it is a new Registration ue.SubscribedNssai = nil ue.AllowedNssai = make(map[models.AccessType][]models.AllowedSnssai) ue.SubscriptionDataValid = false - //Clearing SMContextList locally + // Clearing SMContextList locally ue.SmContextList.Range(func(key, _ interface{}) bool { ue.SmContextList.Delete(key) return true }) - } func (ue *AmfUe) SetOnGoing(anType models.AccessType, onGoing *OnGoing) { @@ -1026,12 +1021,11 @@ func (ue *AmfUe) NewEventChannel() (tx *EventChannel) { Event: make(chan string, 10), AmfUe: ue, } - //tx.Message <- msg + // tx.Message <- msg return tx } func getPublishUeCtxtInfoOp(state fsm.StateType) mi.SubscriberOp { - switch state { case Deregistered: return mi.SubsOpDel @@ -1055,7 +1049,7 @@ func (ueContext *AmfUe) PublishUeCtxtInfo() { op := getPublishUeCtxtInfoOp(ueContext.State[models.AccessType__3_GPP_ACCESS].Current()) kafkaSmCtxt := mi.CoreSubscriber{} - //Populate kafka sm ctxt struct + // Populate kafka sm ctxt struct kafkaSmCtxt.Imsi = ueContext.Supi kafkaSmCtxt.AmfId = ueContext.servingAMF.NfId kafkaSmCtxt.Guti = ueContext.Guti @@ -1071,6 +1065,6 @@ func (ueContext *AmfUe) PublishUeCtxtInfo() { ueState := ueContext.GetCmInfo() kafkaSmCtxt.UeState = string(ueState[0].CmState) - //Send to stream + // Send to stream metrics.GetWriter().PublishUeCtxtEvent(kafkaSmCtxt, op) } diff --git a/context/common_function.go b/context/common_function.go index a0ccb30f..b082abf8 100644 --- a/context/common_function.go +++ b/context/common_function.go @@ -9,7 +9,6 @@ import ( "reflect" "github.com/mohae/deepcopy" - "github.com/omec-project/amf/logger" "github.com/omec-project/openapi/models" ) diff --git a/context/context.go b/context/context.go index 02a00e1f..fbd0d135 100644 --- a/context/context.go +++ b/context/context.go @@ -27,9 +27,9 @@ import ( var ( amfContext = AMFContext{} - //tmsiGenerator *idgenerator.IDGenerator = nil - //amfUeNGAPIDGenerator *idgenerator.IDGenerator = nil - //amfStatusSubscriptionIDGenerator *idgenerator.IDGenerator = nil + // tmsiGenerator *idgenerator.IDGenerator = nil + // amfUeNGAPIDGenerator *idgenerator.IDGenerator = nil + // amfStatusSubscriptionIDGenerator *idgenerator.IDGenerator = nil mutex sync.Mutex ) @@ -43,9 +43,9 @@ func init() { AMF_Self().PlmnSupportList = make([]factory.PlmnSupportItem, 0, MaxNumOfPLMNs) AMF_Self().NfService = make(map[models.ServiceName]models.NfService) AMF_Self().NetworkName.Full = "free5GC" - //tmsiGenerator = idgenerator.NewGenerator(1, math.MaxInt32) - //amfStatusSubscriptionIDGenerator = idgenerator.NewGenerator(1, math.MaxInt32) - //amfUeNGAPIDGenerator = idgenerator.NewGenerator(1, MaxValueOfAmfUeNgapId) + // tmsiGenerator = idgenerator.NewGenerator(1, math.MaxInt32) + // amfStatusSubscriptionIDGenerator = idgenerator.NewGenerator(1, math.MaxInt32) + // amfUeNGAPIDGenerator = idgenerator.NewGenerator(1, MaxValueOfAmfUeNgapId) } type AMFContext struct { @@ -112,7 +112,7 @@ func NewPlmnSupportItem() (item factory.PlmnSupportItem) { } func (context *AMFContext) TmsiAllocate() int32 { - //val, err := AllocateUniqueID(&tmsiGenerator, "tmsi") + // val, err := AllocateUniqueID(&tmsiGenerator, "tmsi") val, err := context.Drsm.AllocateInt32ID() if err != nil { logger.ContextLog.Errorf("Allocate TMSI error: %+v", err) @@ -123,7 +123,7 @@ func (context *AMFContext) TmsiAllocate() int32 { } func (context *AMFContext) AllocateAmfUeNgapID() (int64, error) { - //val, err := AllocateUniqueID(&amfUeNGAPIDGenerator, "amfUeNgapID") + // val, err := AllocateUniqueID(&amfUeNGAPIDGenerator, "amfUeNgapID") val, err := context.Drsm.AllocateInt32ID() if err != nil { logger.ContextLog.Errorf("Allocate NgapID error: %+v", err) @@ -147,7 +147,7 @@ func (context *AMFContext) ReAllocateGutiToUe(ue *AmfUe) { servedGuami := context.ServedGuamiList[0] context.Drsm.ReleaseInt32ID(ue.Tmsi) - //tmsiGenerator.FreeID(int64(ue.Tmsi)) + // tmsiGenerator.FreeID(int64(ue.Tmsi)) ue.Tmsi = context.TmsiAllocate() @@ -181,7 +181,7 @@ func (context *AMFContext) AllocateRegistrationArea(ue *AmfUe, anType models.Acc } func (context *AMFContext) NewAMFStatusSubscription(subscriptionData models.SubscriptionData) (subscriptionID string) { - //id, err := amfStatusSubscriptionIDGenerator.Allocate() + // id, err := amfStatusSubscriptionIDGenerator.Allocate() id, err := context.Drsm.AllocateInt32ID() if err != nil { logger.ContextLog.Errorf("Allocate subscriptionID error: %+v", err) @@ -208,7 +208,7 @@ func (context *AMFContext) DeleteAMFStatusSubscription(subscriptionID string) { if id, err := strconv.ParseInt(subscriptionID, 10, 64); err != nil { logger.ContextLog.Error(err) } else { - //amfStatusSubscriptionIDGenerator.FreeID(id) + // amfStatusSubscriptionIDGenerator.FreeID(id) context.Drsm.ReleaseInt32ID(int32(id)) } } diff --git a/context/db.go b/context/db.go index fb2d2b8a..22512ebf 100644 --- a/context/db.go +++ b/context/db.go @@ -13,11 +13,10 @@ import ( "github.com/omec-project/MongoDBLibrary" "github.com/omec-project/amf/factory" - "github.com/omec-project/idgenerator" - "go.mongodb.org/mongo-driver/bson" - "github.com/omec-project/amf/logger" + "github.com/omec-project/idgenerator" "github.com/omec-project/openapi/models" + "go.mongodb.org/mongo-driver/bson" ) var dbMutex sync.Mutex @@ -33,12 +32,14 @@ type CustomFieldsAmfUe struct { RanId string `json:"ranId"` } -var Namespace = os.Getenv("POD_NAMESPACE") -var AmfUeDataColl = "amf.data.amfState" +var ( + Namespace = os.Getenv("POD_NAMESPACE") + AmfUeDataColl = "amf.data.amfState" +) func AllocateUniqueID(generator **idgenerator.IDGenerator, idName string) (int64, error) { - //Use MongoDB increment field to generate new offset. - //generate ids between offset to 8192 above offset. + // Use MongoDB increment field to generate new offset. + // generate ids between offset to 8192 above offset. dbMutex.Lock() defer dbMutex.Unlock() if *generator == nil { @@ -190,11 +191,11 @@ func DbFetchRanUeByRanUeNgapID(ranUeNgapID int64, ran *AmfRan) *RanUe { return nil } - //Check if some parallel procedure has already - //fetched AmfUe and stored the RanUE in context. - //If so, then return the stored RanUE - //else return RanUE from newly fetched AmfUe - //and store in context + // Check if some parallel procedure has already + // fetched AmfUe and stored the RanUE in context. + // If so, then return the stored RanUE + // else return RanUE from newly fetched AmfUe + // and store in context ranUe := ran.RanUeFindByRanUeNgapIDLocal(ranUeNgapID) if ranUe != nil { return ranUe @@ -212,11 +213,11 @@ func DbFetchRanUeByAmfUeNgapID(amfUeNgapID int64) *RanUe { return nil } - //Check if some parallel procedure has already - //fetched AmfUe and stored the RanUE in context. - //If so, then return the stored RanUE - //else return RanUE from newly fetched AmfUe - //and store in context + // Check if some parallel procedure has already + // fetched AmfUe and stored the RanUE in context. + // If so, then return the stored RanUE + // else return RanUE from newly fetched AmfUe + // and store in context ranUe := self.RanUeFindByAmfUeNgapIDLocal(amfUeNgapID) if ranUe != nil { return ranUe @@ -237,9 +238,9 @@ func DbFetchUeByGuti(guti string) (ue *AmfUe, ok bool) { ok = true } - //Check if some parallel procedure has already - //fetched AmfUe. If so, then return the same. - //else return newly fetched AmfUe and store in context + // Check if some parallel procedure has already + // fetched AmfUe. If so, then return the same. + // else return newly fetched AmfUe and store in context if amfUe, ret := self.AmfUeFindByGutiLocal(guti); ret { logger.ContextLog.Infoln("FindByGuti : found by local", guti) ue = amfUe @@ -261,9 +262,9 @@ func DbFetchUeBySupi(supi string) (ue *AmfUe, ok bool) { } else { ok = true } - //Check if some parallel procedure has already - //fetched AmfUe. If so, then return the same. - //else return newly fetched AmfUe and store in context + // Check if some parallel procedure has already + // fetched AmfUe. If so, then return the same. + // else return newly fetched AmfUe and store in context if amfUe, ret := self.AmfUeFindBySupiLocal(supi); ret { logger.ContextLog.Infoln("FindBySupi : found by local", supi) ue = amfUe diff --git a/context/ran_ue.go b/context/ran_ue.go index 6894babe..bb02b830 100644 --- a/context/ran_ue.go +++ b/context/ran_ue.go @@ -14,12 +14,11 @@ import ( "time" "github.com/mohae/deepcopy" - "github.com/sirupsen/logrus" - "github.com/omec-project/amf/logger" "github.com/omec-project/ngap/ngapConvert" "github.com/omec-project/ngap/ngapType" "github.com/omec-project/openapi/models" + "github.com/sirupsen/logrus" ) type RelAction int @@ -106,7 +105,7 @@ func (ranUe *RanUe) Remove() error { } self := AMF_Self() self.RanUePool.Delete(ranUe.AmfUeNgapId) - //amfUeNGAPIDGenerator.FreeID(ranUe.AmfUeNgapId) + // amfUeNGAPIDGenerator.FreeID(ranUe.AmfUeNgapId) self.Drsm.ReleaseInt32ID(int32(ranUe.AmfUeNgapId)) return nil } diff --git a/context/sm_context.go b/context/sm_context.go index 9d5b0cdb..f01cd262 100644 --- a/context/sm_context.go +++ b/context/sm_context.go @@ -33,7 +33,7 @@ type SmContext struct { HSmfIDVal string VSmfIDVal string - //status of pdusession + // status of pdusession PduSessionInactiveVal bool // for duplicate pdu session id handling diff --git a/context/timer.go b/context/timer.go index 02a8713a..450269f3 100644 --- a/context/timer.go +++ b/context/timer.go @@ -24,7 +24,8 @@ type Timer struct { // parameter expireTimes to tell the user that the current expireTimes. func NewTimer(d time.Duration, maxRetryTimes int, expiredFunc func(expireTimes int32), - cancelFunc func()) *Timer { + cancelFunc func(), +) *Timer { t := &Timer{} atomic.StoreInt32(&t.expireTimes, 0) atomic.StoreInt32(&t.maxRetryTimes, int32(maxRetryTimes)) diff --git a/context/transaction.go b/context/transaction.go index c306d496..de776d7e 100644 --- a/context/transaction.go +++ b/context/transaction.go @@ -35,6 +35,7 @@ func (tx *EventChannel) UpdateConfigHandler(handler func(s1, s2, s3 string, msg tx.AmfUe.TxLog.Infof("updated confighandler") tx.ConfigHandler = handler } + func (tx *EventChannel) Start() { for { select { diff --git a/factory/config.go b/factory/config.go index 25bfca17..ba942d8b 100644 --- a/factory/config.go +++ b/factory/config.go @@ -75,7 +75,7 @@ type Configuration struct { T3560 TimerValue `yaml:"t3560"` T3565 TimerValue `yaml:"t3565"` - //Maintain TaiList per slice + // Maintain TaiList per slice SliceTaiList map[string][]models.Tai `yaml:"sliceTaiList,omitempty"` EnableSctpLb bool `yaml:"enableSctpLb"` EnableDbStore bool `yaml:"enableDBStore"` diff --git a/factory/factory.go b/factory/factory.go index a471bc01..3e4e1fa7 100644 --- a/factory/factory.go +++ b/factory/factory.go @@ -16,9 +16,8 @@ import ( "os" "reflect" - "gopkg.in/yaml.v2" - "github.com/omec-project/amf/logger" + "gopkg.in/yaml.v2" ) var AmfConfig Config @@ -47,7 +46,7 @@ func UpdateAmfConfig(f string) error { if yamlErr := yaml.Unmarshal(content, &amfConfig); yamlErr != nil { return yamlErr } - //Checking which config has been changed + // Checking which config has been changed if reflect.DeepEqual(AmfConfig.Configuration.AmfName, amfConfig.Configuration.AmfName) == false { logger.CfgLog.Infoln("updated AMF Name is changed to ", amfConfig.Configuration.AmfName) } diff --git a/gmm/handler.go b/gmm/handler.go index 37b2814e..7a36ac75 100644 --- a/gmm/handler.go +++ b/gmm/handler.go @@ -20,11 +20,10 @@ import ( "github.com/antihax/optional" "github.com/mitchellh/mapstructure" "github.com/mohae/deepcopy" - "github.com/omec-project/amf/logger" - "github.com/omec-project/amf/consumer" "github.com/omec-project/amf/context" gmm_message "github.com/omec-project/amf/gmm/message" + "github.com/omec-project/amf/logger" ngap_message "github.com/omec-project/amf/ngap/message" "github.com/omec-project/amf/producer/callback" "github.com/omec-project/amf/util" @@ -41,7 +40,8 @@ import ( ) func HandleULNASTransport(ue *context.AmfUe, anType models.AccessType, - ulNasTransport *nasMessage.ULNASTransport) error { + ulNasTransport *nasMessage.ULNASTransport, +) error { ue.GmmLog.Infoln("Handle UL NAS Transport") if ue.MacFailed { @@ -80,7 +80,8 @@ func HandleULNASTransport(ue *context.AmfUe, anType models.AccessType, } func transport5GSMMessage(ue *context.AmfUe, anType models.AccessType, - ulNasTransport *nasMessage.ULNASTransport) error { + ulNasTransport *nasMessage.ULNASTransport, +) error { var pduSessionID int32 ue.GmmLog.Info("Transport 5GSM Message to SMF") @@ -232,8 +233,7 @@ func transport5GSMMessage(ue *context.AmfUe, anType models.AccessType, gmm_message.SendDLNASTransport(ue.RanUe[anType], nasMessage.PayloadContainerTypeN1SMInfo, smMessage, pduSessionID, cause, nil, 0) } else { - _, smContextRef, errResponse, problemDetail, err := - consumer.SendCreateSmContextRequest(ue, newSmContext, nil, smMessage) + _, smContextRef, errResponse, problemDetail, err := consumer.SendCreateSmContextRequest(ue, newSmContext, nil, smMessage) if err != nil { ue.GmmLog.Errorf("CreateSmContextRequest Error: %+v", err) return nil @@ -292,7 +292,8 @@ func forward5GSMMessageToSMF( accessType models.AccessType, pduSessionID int32, smContext *context.SmContext, - smMessage []byte) error { + smMessage []byte, +) error { smContextUpdateData := models.SmContextUpdateData{ N1SmMsg: &models.RefToBinaryData{ ContentId: "N1SmMsg", @@ -370,7 +371,8 @@ func forward5GSMMessageToSMF( // Handle cleartext IEs of Registration Request, which cleattext IEs defined in TS 24.501 4.4.6 func HandleRegistrationRequest(ue *context.AmfUe, anType models.AccessType, procedureCode int64, - registrationRequest *nasMessage.RegistrationRequest) error { + registrationRequest *nasMessage.RegistrationRequest, +) error { var guamiFromUeGuti models.Guami amfSelf := context.AMF_Self() @@ -1274,10 +1276,8 @@ func handleRequestedNssai(ue *context.AmfUe, anType models.AccessType) error { } if !reflect.DeepEqual(*guami.PlmnId, targetAmfPlmnId) { - searchTargetAmfQueryParam.TargetPlmnList = - optional.NewInterface(util.MarshToJsonString([]models.PlmnId{targetAmfPlmnId})) - searchTargetAmfQueryParam.RequesterPlmnList = - optional.NewInterface(util.MarshToJsonString([]models.PlmnId{*guami.PlmnId})) + searchTargetAmfQueryParam.TargetPlmnList = optional.NewInterface(util.MarshToJsonString([]models.PlmnId{targetAmfPlmnId})) + searchTargetAmfQueryParam.RequesterPlmnList = optional.NewInterface(util.MarshToJsonString([]models.PlmnId{*guami.PlmnId})) } searchTargetAmfQueryParam.AmfRegionId = optional.NewString(targetAmfSetToken[2]) @@ -1482,7 +1482,8 @@ func HandleNotificationResponse(ue *context.AmfUe, notificationResponse *nasMess } func HandleConfigurationUpdateComplete(ue *context.AmfUe, - configurationUpdateComplete *nasMessage.ConfigurationUpdateComplete) error { + configurationUpdateComplete *nasMessage.ConfigurationUpdateComplete, +) error { ue.GmmLog.Info("Handle Configuration Update Complete") if ue.MacFailed { @@ -1554,10 +1555,9 @@ func AuthenticationProcedure(ue *context.AmfUe, accessType models.AccessType) (b } func NetworkInitiatedDeregistrationProcedure(ue *context.AmfUe, accessType models.AccessType) (err error) { - anType := util.AnTypeToNas(accessType) if ue.CmConnect(accessType) && ue.State[accessType].Is(context.Registered) { - //setting reregistration required flag to true + // setting reregistration required flag to true gmm_message.SendDeregistrationRequest(ue.RanUe[accessType], anType, true, 0) } else { SetDeregisteredState(ue, anType) @@ -1601,7 +1601,7 @@ func NetworkInitiatedDeregistrationProcedure(ue *context.AmfUe, accessType model } } } - //if ue is not connected mode, removing UE Context + // if ue is not connected mode, removing UE Context if !ue.State[accessType].Is(context.Registered) { if ue.CmConnect(accessType) { ngap_message.SendUEContextReleaseCommand(ue.RanUe[models.AccessType__3_GPP_ACCESS], @@ -1616,32 +1616,30 @@ func NetworkInitiatedDeregistrationProcedure(ue *context.AmfUe, accessType model // TODO: to be implemented func HandleUeSliceInfoDelete(ue *context.AmfUe, accessType models.AccessType, nssai models.Snssai) (err error) { - - //TODO send configuration update to update allowed nssai list with re-registration required to UE + // TODO send configuration update to update allowed nssai list with re-registration required to UE // so that pdu session sync up happen in registration procedure when UE triggers this procedure - //gmm_message.SendConfigurationUpdateCommand(ue, models.AccessType__3_GPP_ACCESS, nil) + // gmm_message.SendConfigurationUpdateCommand(ue, models.AccessType__3_GPP_ACCESS, nil) - //we are doing local cleanup for now, below code will be deprecated when we support + // we are doing local cleanup for now, below code will be deprecated when we support // Configuration Update ue.SmContextList.Range(func(key, value interface{}) bool { smContext := value.(*context.SmContext) if smContext.Snssai().Sst == int32(nssai.Sst) && smContext.Snssai().Sd == nssai.Sd { logger.GmmLog.Infof("Deleted Slice [sst: %v, sd: %v]matched with smcontext, sending Release SMContext Request to SMF", smContext.Snssai().Sst, smContext.Snssai().Sd) - //send smcontext release request + // send smcontext release request problemDetail, err := consumer.SendReleaseSmContextRequest(ue, smContext, nil, "", nil) if problemDetail != nil { ue.GmmLog.Errorf("Release SmContext Failed Problem[%+v]", problemDetail) } else if err != nil { ue.GmmLog.Errorf("Release SmContext Error[%v]", err.Error()) } - } return true }) var allowedList []models.AllowedSnssai - //update Allowed Nssai List + // update Allowed Nssai List for _, slice := range ue.AllowedNssai[accessType] { if slice.AllowedSnssai.Sst != nssai.Sst && slice.AllowedSnssai.Sd != nssai.Sd { allowedList = append(allowedList, slice) @@ -1654,13 +1652,12 @@ func HandleUeSliceInfoDelete(ue *context.AmfUe, accessType models.AccessType, ns // TODO: to be implemented func HandleUeSliceInfoAdd(ue *context.AmfUe, accessType models.AccessType, nssai models.Snssai) (err error) { - - //TODO send configuration update to update allowed nssai list with re-registration required to UE + // TODO send configuration update to update allowed nssai list with re-registration required to UE // so that pdu session sync up happen in registration procedure when UE triggers this procedure - //gmm_message.SendConfigurationUpdateCommand(ue, models.AccessType__3_GPP_ACCESS, nil) + // gmm_message.SendConfigurationUpdateCommand(ue, models.AccessType__3_GPP_ACCESS, nil) var allowedList []models.AllowedSnssai - //update Allowed Nssai List + // update Allowed Nssai List for _, slice := range ue.AllowedNssai[accessType] { if slice.AllowedSnssai.Sst != nssai.Sst && slice.AllowedSnssai.Sd != nssai.Sd { allowedList = append(allowedList, slice) @@ -1677,7 +1674,8 @@ func HandleUeSliceInfoAdd(ue *context.AmfUe, accessType models.AccessType, nssai // TS 24501 5.6.1 func HandleServiceRequest(ue *context.AmfUe, anType models.AccessType, - serviceRequest *nasMessage.ServiceRequest) error { + serviceRequest *nasMessage.ServiceRequest, +) error { if ue == nil { return fmt.Errorf("AmfUe is nil") } @@ -1766,7 +1764,7 @@ func HandleServiceRequest(ue *context.AmfUe, anType models.AccessType, return nil } - //TODO: workaround to send service accept in ICSR + // TODO: workaround to send service accept in ICSR ue.RanUe[anType].UeContextRequest = true if serviceType == nasMessage.ServiceTypeSignalling { err := sendServiceAccept(ue, anType, ctxList, suList, nil, nil, nil, nil) @@ -2008,7 +2006,8 @@ func HandleServiceRequest(ue *context.AmfUe, anType models.AccessType, func sendServiceAccept(ue *context.AmfUe, anType models.AccessType, ctxList ngapType.PDUSessionResourceSetupListCxtReq, suList ngapType.PDUSessionResourceSetupListSUReq, pDUSessionStatus *[16]bool, - reactivationResult *[16]bool, errPduSessionId, errCause []uint8) error { + reactivationResult *[16]bool, errPduSessionId, errCause []uint8, +) error { if ue.RanUe[anType].UeContextRequest { // update Kgnb/Kn3iwf ue.UpdateSecurityContext(anType) @@ -2038,7 +2037,8 @@ func sendServiceAccept(ue *context.AmfUe, anType models.AccessType, ctxList ngap // TS 24.501 5.4.1 func HandleAuthenticationResponse(ue *context.AmfUe, accessType models.AccessType, - authenticationResponse *nasMessage.AuthenticationResponse) error { + authenticationResponse *nasMessage.AuthenticationResponse, +) error { ue.GmmLog.Info("Handle Authentication Response") if ue.T3560 != nil { @@ -2163,7 +2163,8 @@ func HandleAuthenticationResponse(ue *context.AmfUe, accessType models.AccessTyp } func HandleAuthenticationFailure(ue *context.AmfUe, anType models.AccessType, - authenticationFailure *nasMessage.AuthenticationFailure) error { + authenticationFailure *nasMessage.AuthenticationFailure, +) error { ue.GmmLog.Info("Handle Authentication Failure") if ue.T3560 != nil { @@ -2238,7 +2239,8 @@ func HandleAuthenticationFailure(ue *context.AmfUe, anType models.AccessType, } func HandleRegistrationComplete(ue *context.AmfUe, accessType models.AccessType, - registrationComplete *nasMessage.RegistrationComplete) error { + registrationComplete *nasMessage.RegistrationComplete, +) error { ue.GmmLog.Info("Handle Registration Complete") if ue.T3550 != nil { @@ -2270,7 +2272,8 @@ func HandleRegistrationComplete(ue *context.AmfUe, accessType models.AccessType, // TS 33.501 6.7.2 func HandleSecurityModeComplete(ue *context.AmfUe, anType models.AccessType, procedureCode int64, - securityModeComplete *nasMessage.SecurityModeComplete) error { + securityModeComplete *nasMessage.SecurityModeComplete, +) error { ue.GmmLog.Info("Handle Security Mode Complete") if ue.MacFailed { @@ -2322,7 +2325,8 @@ func HandleSecurityModeComplete(ue *context.AmfUe, anType models.AccessType, pro } func HandleSecurityModeReject(ue *context.AmfUe, anType models.AccessType, - securityModeReject *nasMessage.SecurityModeReject) error { + securityModeReject *nasMessage.SecurityModeReject, +) error { ue.GmmLog.Info("Handle Security Mode Reject") if ue.T3560 != nil { @@ -2344,7 +2348,8 @@ func HandleSecurityModeReject(ue *context.AmfUe, anType models.AccessType, // TS 23.502 4.2.2.3 func HandleDeregistrationRequest(ue *context.AmfUe, anType models.AccessType, - deregistrationRequest *nasMessage.DeregistrationRequestUEOriginatingDeregistration) error { + deregistrationRequest *nasMessage.DeregistrationRequestUEOriginatingDeregistration, +) error { ue.GmmLog.Info("Handle Deregistration Request(UE Originating)") targetDeregistrationAccessType := deregistrationRequest.GetAccessType() @@ -2435,7 +2440,8 @@ func HandleDeregistrationRequest(ue *context.AmfUe, anType models.AccessType, // TS 23.502 4.2.2.3 func HandleDeregistrationAccept(ue *context.AmfUe, anType models.AccessType, - deregistrationAccept *nasMessage.DeregistrationAcceptUETerminatedDeregistration) error { + deregistrationAccept *nasMessage.DeregistrationAcceptUETerminatedDeregistration, +) error { ue.GmmLog.Info("Handle Deregistration Accept(UE Terminated)") if ue.T3522 != nil { diff --git a/gmm/message/build.go b/gmm/message/build.go index a7289641..4af31308 100644 --- a/gmm/message/build.go +++ b/gmm/message/build.go @@ -11,7 +11,6 @@ import ( "encoding/hex" "github.com/mitchellh/mapstructure" - "github.com/omec-project/amf/context" "github.com/omec-project/amf/factory" "github.com/omec-project/amf/logger" @@ -24,7 +23,8 @@ import ( ) func BuildDLNASTransport(ue *context.AmfUe, payloadContainerType uint8, nasPdu []byte, - pduSessionId uint8, cause *uint8, backoffTimerUint *uint8, backoffTimer uint8) ([]byte, error) { + pduSessionId uint8, cause *uint8, backoffTimerUint *uint8, backoffTimer uint8, +) ([]byte, error) { m := nas.NewMessage() m.GmmMessage = nas.NewGmmMessage() m.GmmHeader.SetMessageType(nas.MsgTypeDLNASTransport) @@ -135,8 +135,7 @@ func BuildAuthenticationRequest(ue *context.AmfUe) ([]byte, error) { if err != nil { return nil, err } - authenticationRequest.AuthenticationParameterRAND = - nasType.NewAuthenticationParameterRAND(nasMessage.AuthenticationRequestAuthenticationParameterRANDType) + authenticationRequest.AuthenticationParameterRAND = nasType.NewAuthenticationParameterRAND(nasMessage.AuthenticationRequestAuthenticationParameterRANDType) copy(tmpArray[:], rand[0:16]) authenticationRequest.AuthenticationParameterRAND.SetRANDValue(tmpArray) @@ -144,8 +143,7 @@ func BuildAuthenticationRequest(ue *context.AmfUe) ([]byte, error) { if err != nil { return nil, err } - authenticationRequest.AuthenticationParameterAUTN = - nasType.NewAuthenticationParameterAUTN(nasMessage.AuthenticationRequestAuthenticationParameterAUTNType) + authenticationRequest.AuthenticationParameterAUTN = nasType.NewAuthenticationParameterAUTN(nasMessage.AuthenticationRequestAuthenticationParameterAUTNType) authenticationRequest.AuthenticationParameterAUTN.SetLen(uint8(len(autn))) copy(tmpArray[:], autn[0:16]) authenticationRequest.AuthenticationParameterAUTN.SetAUTN(tmpArray) @@ -166,7 +164,8 @@ func BuildAuthenticationRequest(ue *context.AmfUe) ([]byte, error) { } func BuildServiceAccept(ue *context.AmfUe, pDUSessionStatus *[16]bool, - reactivationResult *[16]bool, errPduSessionId, errCause []uint8) ([]byte, error) { + reactivationResult *[16]bool, errPduSessionId, errCause []uint8, +) ([]byte, error) { m := nas.NewMessage() m.GmmMessage = nas.NewGmmMessage() m.GmmHeader.SetMessageType(nas.MsgTypeServiceAccept) @@ -351,8 +350,7 @@ func BuildSecurityModeCommand(ue *context.AmfUe, eapSuccess bool, eapMessage str securityModeCommand.IMEISVRequest.SetIMEISVRequestValue(nasMessage.IMEISVRequested) } - securityModeCommand.Additional5GSecurityInformation = - nasType.NewAdditional5GSecurityInformation(nasMessage.SecurityModeCommandAdditional5GSecurityInformationType) + securityModeCommand.Additional5GSecurityInformation = nasType.NewAdditional5GSecurityInformation(nasMessage.SecurityModeCommandAdditional5GSecurityInformationType) securityModeCommand.Additional5GSecurityInformation.SetLen(1) if ue.RetransmissionOfInitialNASMsg { securityModeCommand.Additional5GSecurityInformation.SetRINMR(1) @@ -396,7 +394,8 @@ func BuildSecurityModeCommand(ue *context.AmfUe, eapSuccess bool, eapMessage str // T3346 timer are not supported func BuildDeregistrationRequest(ue *context.RanUe, accessType uint8, reRegistrationRequired bool, - cause5GMM uint8) ([]byte, error) { + cause5GMM uint8, +) ([]byte, error) { m := nas.NewMessage() m.GmmMessage = nas.NewGmmMessage() m.GmmHeader.SetMessageType(nas.MsgTypeDeregistrationRequestUETerminatedDeregistration) @@ -453,7 +452,8 @@ func BuildRegistrationAccept( anType models.AccessType, pDUSessionStatus *[16]bool, reactivationResult *[16]bool, - errPduSessionId, errCause []uint8) ([]byte, error) { + errPduSessionId, errCause []uint8, +) ([]byte, error) { m := nas.NewMessage() m.GmmMessage = nas.NewGmmMessage() m.GmmHeader.SetMessageType(nas.MsgTypeRegistrationAccept) @@ -541,8 +541,7 @@ func BuildRegistrationAccept( */ // 5gs network feature support if factory.AmfConfig.Configuration.Get5gsNwFeatSuppEnable() { - registrationAccept.NetworkFeatureSupport5GS = - nasType.NewNetworkFeatureSupport5GS(nasMessage.RegistrationAcceptNetworkFeatureSupport5GSType) + registrationAccept.NetworkFeatureSupport5GS = nasType.NewNetworkFeatureSupport5GS(nasMessage.RegistrationAcceptNetworkFeatureSupport5GSType) registrationAccept.NetworkFeatureSupport5GS.SetLen(2) if anType == models.AccessType__3_GPP_ACCESS { registrationAccept.SetIMSVoPS3GPP(factory.AmfConfig.Configuration.Get5gsNwFeatSuppImsVoPS()) @@ -564,8 +563,7 @@ func BuildRegistrationAccept( } if reactivationResult != nil { - registrationAccept.PDUSessionReactivationResult = - nasType.NewPDUSessionReactivationResult(nasMessage.RegistrationAcceptPDUSessionReactivationResultType) + registrationAccept.PDUSessionReactivationResult = nasType.NewPDUSessionReactivationResult(nasMessage.RegistrationAcceptPDUSessionReactivationResultType) registrationAccept.PDUSessionReactivationResult.SetLen(2) registrationAccept.PDUSessionReactivationResult.Buffer = nasConvert.PSIToBuf(*reactivationResult) } @@ -590,8 +588,7 @@ func BuildRegistrationAccept( } if ue.NetworkSlicingSubscriptionChanged { - registrationAccept.NetworkSlicingIndication = - nasType.NewNetworkSlicingIndication(nasMessage.RegistrationAcceptNetworkSlicingIndicationType) + registrationAccept.NetworkSlicingIndication = nasType.NewNetworkSlicingIndication(nasMessage.RegistrationAcceptNetworkSlicingIndicationType) registrationAccept.NetworkSlicingIndication.SetNSSCI(1) registrationAccept.NetworkSlicingIndication.SetDCNI(0) ue.NetworkSlicingSubscriptionChanged = false // reset the value @@ -614,8 +611,7 @@ func BuildRegistrationAccept( }*/ if anType == models.AccessType_NON_3_GPP_ACCESS { - registrationAccept.Non3GppDeregistrationTimerValue = - nasType.NewNon3GppDeregistrationTimerValue(nasMessage.RegistrationAcceptNon3GppDeregistrationTimerValueType) + registrationAccept.Non3GppDeregistrationTimerValue = nasType.NewNon3GppDeregistrationTimerValue(nasMessage.RegistrationAcceptNon3GppDeregistrationTimerValueType) registrationAccept.Non3GppDeregistrationTimerValue.SetLen(1) timerValue := nasConvert.GPRSTimer2ToNas(ue.Non3gppDeregistrationTimerValue) registrationAccept.Non3GppDeregistrationTimerValue.SetGPRSTimer2Value(timerValue) @@ -630,8 +626,7 @@ func BuildRegistrationAccept( }*/ if ue.UESpecificDRX != nasMessage.DRXValueNotSpecified { - registrationAccept.NegotiatedDRXParameters = - nasType.NewNegotiatedDRXParameters(nasMessage.RegistrationAcceptNegotiatedDRXParametersType) + registrationAccept.NegotiatedDRXParameters = nasType.NewNegotiatedDRXParameters(nasMessage.RegistrationAcceptNegotiatedDRXParametersType) registrationAccept.NegotiatedDRXParameters.SetLen(1) registrationAccept.NegotiatedDRXParameters.SetDRXValue(ue.UESpecificDRX) } @@ -676,7 +671,8 @@ func BuildStatus5GMM(cause uint8) ([]byte, error) { } func BuildConfigurationUpdateCommand(ue *context.AmfUe, anType models.AccessType, - networkSlicingIndication *nasType.NetworkSlicingIndication) ([]byte, error) { + networkSlicingIndication *nasType.NetworkSlicingIndication, +) ([]byte, error) { m := nas.NewMessage() m.GmmMessage = nas.NewGmmMessage() m.GmmHeader.SetMessageType(nas.MsgTypeConfigurationUpdateCommand) @@ -688,14 +684,12 @@ func BuildConfigurationUpdateCommand(ue *context.AmfUe, anType models.AccessType configurationUpdateCommand.SetMessageType(nas.MsgTypeConfigurationUpdateCommand) if ue.ConfigurationUpdateIndication.Octet != 0 { - configurationUpdateCommand.ConfigurationUpdateIndication = - nasType.NewConfigurationUpdateIndication(nasMessage.ConfigurationUpdateCommandConfigurationUpdateIndicationType) + configurationUpdateCommand.ConfigurationUpdateIndication = nasType.NewConfigurationUpdateIndication(nasMessage.ConfigurationUpdateCommandConfigurationUpdateIndicationType) configurationUpdateCommand.ConfigurationUpdateIndication = &ue.ConfigurationUpdateIndication } if networkSlicingIndication != nil { - configurationUpdateCommand.NetworkSlicingIndication = - nasType.NewNetworkSlicingIndication(nasMessage.ConfigurationUpdateCommandNetworkSlicingIndicationType) + configurationUpdateCommand.NetworkSlicingIndication = nasType.NewNetworkSlicingIndication(nasMessage.ConfigurationUpdateCommandNetworkSlicingIndicationType) configurationUpdateCommand.NetworkSlicingIndication = networkSlicingIndication } @@ -713,8 +707,7 @@ func BuildConfigurationUpdateCommand(ue *context.AmfUe, anType models.AccessType } if len(ue.AllowedNssai[anType]) > 0 { - configurationUpdateCommand.AllowedNSSAI = - nasType.NewAllowedNSSAI(nasMessage.ConfigurationUpdateCommandAllowedNSSAIType) + configurationUpdateCommand.AllowedNSSAI = nasType.NewAllowedNSSAI(nasMessage.ConfigurationUpdateCommandAllowedNSSAIType) var buf []uint8 for _, allowedSnssai := range ue.AllowedNssai[anType] { buf = append(buf, nasConvert.SnssaiToNas(*allowedSnssai.AllowedSnssai)...) @@ -724,8 +717,7 @@ func BuildConfigurationUpdateCommand(ue *context.AmfUe, anType models.AccessType } if len(ue.ConfiguredNssai) > 0 { - configurationUpdateCommand.ConfiguredNSSAI = - nasType.NewConfiguredNSSAI(nasMessage.ConfigurationUpdateCommandConfiguredNSSAIType) + configurationUpdateCommand.ConfiguredNSSAI = nasType.NewConfiguredNSSAI(nasMessage.ConfigurationUpdateCommandConfiguredNSSAIType) var buf []uint8 for _, snssai := range ue.ConfiguredNssai { buf = append(buf, nasConvert.SnssaiToNas(*snssai.ConfiguredSnssai)...) @@ -746,8 +738,7 @@ func BuildConfigurationUpdateCommand(ue *context.AmfUe, anType models.AccessType // TODO: UniversalTimeAndLocalTimeZone if anType == models.AccessType__3_GPP_ACCESS && ue.AmPolicyAssociation != nil && ue.AmPolicyAssociation.ServAreaRes != nil { - configurationUpdateCommand.ServiceAreaList = - nasType.NewServiceAreaList(nasMessage.ConfigurationUpdateCommandServiceAreaListType) + configurationUpdateCommand.ServiceAreaList = nasType.NewServiceAreaList(nasMessage.ConfigurationUpdateCommandServiceAreaListType) partialServiceAreaList := nasConvert.PartialServiceAreaListToNas(ue.PlmnId, *ue.AmPolicyAssociation.ServAreaRes) configurationUpdateCommand.ServiceAreaList.SetLen(uint8(len(partialServiceAreaList))) configurationUpdateCommand.ServiceAreaList.SetPartialServiceAreaList(partialServiceAreaList) @@ -769,22 +760,19 @@ func BuildConfigurationUpdateCommand(ue *context.AmfUe, anType models.AccessType if ue.TimeZone != "" { localTimeZone := nasConvert.LocalTimeZoneToNas(ue.TimeZone) localTimeZone.SetIei(nasMessage.ConfigurationUpdateCommandLocalTimeZoneType) - configurationUpdateCommand.LocalTimeZone = - nasType.NewLocalTimeZone(nasMessage.ConfigurationUpdateCommandLocalTimeZoneType) + configurationUpdateCommand.LocalTimeZone = nasType.NewLocalTimeZone(nasMessage.ConfigurationUpdateCommandLocalTimeZoneType) configurationUpdateCommand.LocalTimeZone = &localTimeZone } if ue.TimeZone != "" { daylightSavingTime := nasConvert.DaylightSavingTimeToNas(ue.TimeZone) daylightSavingTime.SetIei(nasMessage.ConfigurationUpdateCommandNetworkDaylightSavingTimeType) - configurationUpdateCommand.NetworkDaylightSavingTime = - nasType.NewNetworkDaylightSavingTime(nasMessage.ConfigurationUpdateCommandNetworkDaylightSavingTimeType) + configurationUpdateCommand.NetworkDaylightSavingTime = nasType.NewNetworkDaylightSavingTime(nasMessage.ConfigurationUpdateCommandNetworkDaylightSavingTimeType) configurationUpdateCommand.NetworkDaylightSavingTime = &daylightSavingTime } if len(ue.LadnInfo) > 0 { - configurationUpdateCommand.LADNInformation = - nasType.NewLADNInformation(nasMessage.ConfigurationUpdateCommandLADNInformationType) + configurationUpdateCommand.LADNInformation = nasType.NewLADNInformation(nasMessage.ConfigurationUpdateCommandLADNInformationType) var buf []uint8 for _, ladn := range ue.LadnInfo { ladnNas := nasConvert.LadnToNas(ladn.Dnn, ladn.TaiLists) diff --git a/gmm/message/send.go b/gmm/message/send.go index d2e47735..59aff687 100644 --- a/gmm/message/send.go +++ b/gmm/message/send.go @@ -19,7 +19,8 @@ import ( // backOffTimerUint = 7 means backoffTimer is null func SendDLNASTransport(ue *context.RanUe, payloadContainerType uint8, nasPdu []byte, - pduSessionId int32, cause uint8, backOffTimerUint *uint8, backOffTimer uint8) { + pduSessionId int32, cause uint8, backOffTimerUint *uint8, backOffTimer uint8, +) { ue.AmfUe.GmmLog.Info("Send DL NAS Transport") var causePtr *uint8 if cause != 0 { @@ -104,7 +105,8 @@ func SendAuthenticationRequest(ue *context.RanUe) { } func SendServiceAccept(ue *context.RanUe, pDUSessionStatus *[16]bool, reactivationResult *[16]bool, - errPduSessionId, errCause []uint8) { + errPduSessionId, errCause []uint8, +) { ue.AmfUe.GmmLog.Info("Send Service Accept") nasMsg, err := BuildServiceAccept(ue.AmfUe, pDUSessionStatus, reactivationResult, errPduSessionId, errCause) @@ -116,7 +118,8 @@ func SendServiceAccept(ue *context.RanUe, pDUSessionStatus *[16]bool, reactivati } func SendConfigurationUpdateCommand(amfUe *context.AmfUe, accessType models.AccessType, - networkSlicingIndication *nasType.NetworkSlicingIndication) { + networkSlicingIndication *nasType.NetworkSlicingIndication, +) { amfUe.GmmLog.Info("Configuration Update Command") nasMsg, err := BuildConfigurationUpdateCommand(amfUe, accessType, networkSlicingIndication) @@ -208,7 +211,7 @@ func SendSecurityModeCommand(ue *context.RanUe, eapSuccess bool, eapMessage stri func SendDeregistrationRequest(ue *context.RanUe, accessType uint8, reRegistrationRequired bool, cause5GMM uint8) { ue.AmfUe.GmmLog.Info("Send Deregistration Request") - //setting accesstype + // setting accesstype ue.AmfUe.DeregistrationTargetAccessType = accessType nasMsg, err := BuildDeregistrationRequest(ue, accessType, reRegistrationRequired, cause5GMM) @@ -264,7 +267,8 @@ func SendRegistrationAccept( pDUSessionStatus *[16]bool, reactivationResult *[16]bool, errPduSessionId, errCause []uint8, - pduSessionResourceSetupList *ngapType.PDUSessionResourceSetupListCxtReq) { + pduSessionResourceSetupList *ngapType.PDUSessionResourceSetupListCxtReq, +) { ue.GmmLog.Info("Send Registration Accept") nasMsg, err := BuildRegistrationAccept(ue, anType, pDUSessionStatus, reactivationResult, errPduSessionId, errCause) diff --git a/gmm/mock_gmm.go b/gmm/mock_gmm.go index cca9959c..f60b5d11 100644 --- a/gmm/mock_gmm.go +++ b/gmm/mock_gmm.go @@ -11,12 +11,14 @@ import ( "github.com/omec-project/fsm" ) -var MockRegisteredCallCount uint32 = 0 -var MockDeregisteredInitiatedCallCount uint32 = 0 -var MockContextSetupCallCount uint32 = 0 -var MockDeRegisteredCallCount uint32 = 0 -var MockSecurityModeCallCount uint32 = 0 -var MockAuthenticationCallCount uint32 = 0 +var ( + MockRegisteredCallCount uint32 = 0 + MockDeregisteredInitiatedCallCount uint32 = 0 + MockContextSetupCallCount uint32 = 0 + MockDeRegisteredCallCount uint32 = 0 + MockSecurityModeCallCount uint32 = 0 + MockAuthenticationCallCount uint32 = 0 +) var mockCallbacks = fsm.Callbacks{ context.Deregistered: MockDeRegistered, diff --git a/gmm/sm.go b/gmm/sm.go index a923e7a4..2c38bbd2 100644 --- a/gmm/sm.go +++ b/gmm/sm.go @@ -76,7 +76,7 @@ func Registered(state *fsm.State, event fsm.EventType, args fsm.ArgsType) { accessType := args[ArgAccessType].(models.AccessType) amfUe.ClearRegistrationRequestData(accessType) amfUe.GmmLog.Debugln("EntryEvent at GMM State[Registered]") - //store context in DB. Registration procedure is complete. + // store context in DB. Registration procedure is complete. amfUe.PublishUeCtxtInfo() context.StoreContextInDB(amfUe) case GmmMessageEvent: @@ -300,7 +300,7 @@ func SecurityMode(state *fsm.State, event fsm.EventType, args fsm.ArgsType) { logger.GmmLog.Errorln(err) } case nas.MsgTypeRegistrationRequest: - //Sending AbortEvent to ongoing procedure + // Sending AbortEvent to ongoing procedure err := GmmFSM.SendEvent(state, SecurityModeAbortEvent, fsm.ArgsType{ ArgAmfUe: amfUe, ArgAccessType: accessType, diff --git a/httpcallback/router.go b/httpcallback/router.go index 3b657b2c..2b26dd07 100644 --- a/httpcallback/router.go +++ b/httpcallback/router.go @@ -10,10 +10,9 @@ import ( "strings" "github.com/gin-gonic/gin" - "github.com/sirupsen/logrus" - "github.com/omec-project/amf/logger" "github.com/omec-project/logger_util" + "github.com/sirupsen/logrus" ) var HttpLog *logrus.Entry diff --git a/metrics/kafka.go b/metrics/kafka.go index 9b853640..790f5390 100644 --- a/metrics/kafka.go +++ b/metrics/kafka.go @@ -23,7 +23,6 @@ type Writer struct { var StatWriter Writer func InitialiseKafkaStream(config *factory.Configuration) error { - brokerUrl := "sd-core-kafka-headless:9092" topicName := "sdcore-data-source-amf" @@ -53,7 +52,6 @@ func InitialiseKafkaStream(config *factory.Configuration) error { } func GetWriter() Writer { - return StatWriter } @@ -64,9 +62,10 @@ func (writer Writer) SendMessage(message []byte) error { } func (writer Writer) PublishUeCtxtEvent(ctxt mi.CoreSubscriber, op mi.SubscriberOp) error { - - smKafkaEvt := mi.MetricEvent{EventType: mi.CSubscriberEvt, - SubscriberData: mi.CoreSubscriberData{Subscriber: ctxt, Operation: op}} + smKafkaEvt := mi.MetricEvent{ + EventType: mi.CSubscriberEvt, + SubscriberData: mi.CoreSubscriberData{Subscriber: ctxt, Operation: op}, + } if msg, err := json.Marshal(smKafkaEvt); err != nil { logger.KafkaLog.Errorf("publishing ue context event error [%v] ", err.Error()) return err @@ -99,7 +98,6 @@ func PublishMsgEvent(msgType mi.AmfMsgType) error { */ func (writer Writer) PublishNfStatusEvent(msgEvent mi.MetricEvent) error { - if msg, err := json.Marshal(msgEvent); err != nil { return err } else { diff --git a/nas/handler.go b/nas/handler.go index 7bdc1555..162dfb64 100644 --- a/nas/handler.go +++ b/nas/handler.go @@ -98,7 +98,6 @@ func HandleNAS(ue *context.RanUe, procedureCode int64, nasPdu []byte) { if err := Dispatch(ue.AmfUe, ue.Ran.AnType, procedureCode, msg); err != nil { ue.AmfUe.NASLog.Errorf("Handle NAS Error: %v", err) } - } func DispatchMsg(amfUe *context.AmfUe, transInfo context.NasMsg) { diff --git a/nas/nas_security/security.go b/nas/nas_security/security.go index 2dfdd659..99ce37ff 100644 --- a/nas/nas_security/security.go +++ b/nas/nas_security/security.go @@ -141,7 +141,7 @@ func FetchUeContextWithMobileIdentity(payload []byte) *context.AmfUe { mobileIdentity5GSContents := msg.RegistrationRequest.MobileIdentity5GS.GetMobileIdentity5GSContents() if nasMessage.MobileIdentity5GSType5gGuti == nasConvert.GetTypeOfIdentity(mobileIdentity5GSContents[0]) { _, guti = nasConvert.GutiToString(mobileIdentity5GSContents) - logger.CommLog.Debugf("Guti received in Registraion Request Message: %v", guti) + logger.CommLog.Debugf("Guti received in Registration Request Message: %v", guti) } else if nasMessage.MobileIdentity5GSTypeSuci == nasConvert.GetTypeOfIdentity(mobileIdentity5GSContents[0]) { suci, _ := nasConvert.SuciToString(mobileIdentity5GSContents) /* UeContext found based on SUCI which means context is exist in Network(AMF) but not diff --git a/ngap/dispatcher.go b/ngap/dispatcher.go index 55a996aa..c1039184 100644 --- a/ngap/dispatcher.go +++ b/ngap/dispatcher.go @@ -8,14 +8,12 @@ package ngap import ( + "fmt" "net" "os" "reflect" "git.cs.nctu.edu.tw/calee/sctp" - - "fmt" - "github.com/omec-project/amf/context" "github.com/omec-project/amf/logger" "github.com/omec-project/amf/metrics" @@ -99,7 +97,7 @@ func DispatchLb(sctplbMsg *sdcoreAmfServer.SctplbMessage, Amf2RanMsgChan chan *s /* uecontext is found, submit the message to transaction queue*/ if ranUe != nil && ranUe.AmfUe != nil { ranUe.AmfUe.SetEventChannel(NgapMsgHandler) - //ranUe.AmfUe.TxLog.Infof("Uecontext found. queuing ngap message to uechannel") + // ranUe.AmfUe.TxLog.Infof("Uecontext found. queuing ngap message to uechannel") ranUe.AmfUe.EventChannel.UpdateNgapHandler(NgapMsgHandler) ngapMsg := context.NgapMsg{ Ran: ran, @@ -160,7 +158,6 @@ func NgapMsgHandler(ue *context.AmfUe, msg context.NgapMsg) { } func DispatchNgapMsg(ran *context.AmfRan, pdu *ngapType.NGAPPDU, sctplbMsg *sdcoreAmfServer.SctplbMessage) { - switch pdu.Present { case ngapType.NGAPPDUPresentInitiatingMessage: initiatingMessage := pdu.InitiatingMessage @@ -296,7 +293,7 @@ func HandleSCTPNotification(conn net.Conn, notification sctp.Notification) { return } - //Removing Stale Connections in AmfRanPool + // Removing Stale Connections in AmfRanPool amfSelf.AmfRanPool.Range(func(key, value interface{}) bool { amfRan := value.(*context.AmfRan) @@ -332,7 +329,6 @@ func HandleSCTPNotification(conn net.Conn, notification sctp.Notification) { } func HandleSCTPNotificationLb(gnbId string) { - logger.NgapLog.Infof("Handle SCTP Notification[GnbId: %+v]", gnbId) amfSelf := context.AMF_Self() @@ -342,7 +338,7 @@ func HandleSCTPNotificationLb(gnbId string) { return } - //Removing Stale Connections in AmfRanPool + // Removing Stale Connections in AmfRanPool amfSelf.AmfRanPool.Range(func(key, value interface{}) bool { amfRan := value.(*context.AmfRan) diff --git a/ngap/handler.go b/ngap/handler.go index ae99090a..8373f9d3 100644 --- a/ngap/handler.go +++ b/ngap/handler.go @@ -75,7 +75,6 @@ func FetchRanUeContext(ran *context.AmfRan, message *ngapType.NGAPPDU) (*context fiveGSTMSI = ie.Value.FiveGSTMSI ran.Log.Trace("Decode IE 5G-S-TMSI") } - } ranUe = ran.RanUeFindByRanUeNgapID(rANUENGAPID.Value) if ranUe == nil { @@ -99,7 +98,6 @@ func FetchRanUeContext(ran *context.AmfRan, message *ngapType.NGAPPDU) (*context // Described in TS 23.502 4.2.2.2.2 step 4 (without UDSF deployment) if amfUe, ok := amfSelf.AmfUeFindByGuti(guti); ok { - ranUe, err = ran.NewRanUe(rANUENGAPID.Value) if err != nil { ran.Log.Errorf("NewRanUe Error: %+v", err) @@ -434,7 +432,6 @@ func FetchRanUeContext(ran *context.AmfRan, message *ngapType.NGAPPDU) (*context } } ranUe = context.AMF_Self().RanUeFindByAmfUeNgapID(aMFUENGAPID.Value) - } case ngapType.NGAPPDUPresentUnsuccessfulOutcome: unsuccessfulOutcome := message.UnsuccessfulOutcome @@ -637,15 +634,18 @@ func HandleNGSetupRequest(ran *context.AmfRan, message *ngapType.NGAPPDU) { if cause.Present == ngapType.CausePresentNothing { ngap_message.SendNGSetupResponse(ran) - //send nf(gnb) status notification - gnbStatus := mi.MetricEvent{EventType: mi.CNfStatusEvt, - NfStatusData: mi.CNfStatus{NfType: mi.NfTypeGnb, - NfStatus: mi.NfStatusConnected, NfName: ran.GnbId}} + // send nf(gnb) status notification + gnbStatus := mi.MetricEvent{ + EventType: mi.CNfStatusEvt, + NfStatusData: mi.CNfStatus{ + NfType: mi.NfTypeGnb, + NfStatus: mi.NfStatusConnected, NfName: ran.GnbId, + }, + } metrics.StatWriter.PublishNfStatusEvent(gnbStatus) } else { ngap_message.SendNGSetupFailure(ran, cause) } - } func HandleUplinkNasTransport(ran *context.AmfRan, message *ngapType.NGAPPDU) { @@ -1087,7 +1087,7 @@ func HandleUEContextReleaseComplete(ran *context.AmfRan, message *ngapType.NGAPP ran.Log.Errorln(err.Error()) } - //Valid Security is not exist for this UE then only delete AMfUe Context + // Valid Security is not exist for this UE then only delete AMfUe Context if !amfUe.SecurityContextAvailable { ran.Log.Infof("Valid Security is not exist for the UE[%s], so deleting AmfUe Context", amfUe.Supi) amfUe.PublishUeCtxtInfo() @@ -1724,7 +1724,7 @@ func HandlePDUSessionResourceSetupResponse(ran *context.AmfRan, message *ngapTyp } } - //store context in DB. PDU Establishment is complete. + // store context in DB. PDU Establishment is complete. amfUe.PublishUeCtxtInfo() context.StoreContextInDB(amfUe) } @@ -1998,8 +1998,7 @@ func HandlePDUSessionResourceNotify(ran *context.AmfRan, message *ngapType.NGAPP var nasPdu []byte if n1Msg != nil { pduSessionId := uint8(pduSessionID) - nasPdu, err = - gmm_message.BuildDLNASTransport(amfUe, nasMessage.PayloadContainerTypeN1SMInfo, n1Msg, pduSessionId, nil, nil, 0) + nasPdu, err = gmm_message.BuildDLNASTransport(amfUe, nasMessage.PayloadContainerTypeN1SMInfo, n1Msg, pduSessionId, nil, nil, 0) if err != nil { ranUe.Log.Warnf("GMM Message build DL NAS Transport filaed: %v", err) } @@ -4712,7 +4711,8 @@ func buildCriticalityDiagnostics( triggeringMessage *aper.Enumerated, procedureCriticality *aper.Enumerated, iesCriticalityDiagnostics *ngapType.CriticalityDiagnosticsIEList) ( - criticalityDiagnostics ngapType.CriticalityDiagnostics) { + criticalityDiagnostics ngapType.CriticalityDiagnostics, +) { if procedureCode != nil { criticalityDiagnostics.ProcedureCode = new(ngapType.ProcedureCode) criticalityDiagnostics.ProcedureCode.Value = *procedureCode @@ -4736,7 +4736,8 @@ func buildCriticalityDiagnostics( } func buildCriticalityDiagnosticsIEItem(ieCriticality aper.Enumerated, ieID int64, typeOfErr aper.Enumerated) ( - item ngapType.CriticalityDiagnosticsIEItem) { + item ngapType.CriticalityDiagnosticsIEItem, +) { item = ngapType.CriticalityDiagnosticsIEItem{ IECriticality: ngapType.Criticality{ Value: ieCriticality, diff --git a/ngap/message/build.go b/ngap/message/build.go index be7270d5..e265abf5 100644 --- a/ngap/message/build.go +++ b/ngap/message/build.go @@ -29,7 +29,6 @@ func IncrementNGAPMsgCount(pdu ngapType.NGAPPDU) { "out", "", "") - } else if pdu.SuccessfulOutcome != nil { metrics.IncrementNgapMsgStats(context.AMF_Self().NfId, ngapmsgtypes.NgapMsg[pdu.SuccessfulOutcome.ProcedureCode.Value], @@ -46,7 +45,8 @@ func IncrementNGAPMsgCount(pdu ngapType.NGAPPDU) { } func BuildPDUSessionResourceReleaseCommand(ue *context.RanUe, nasPdu []byte, - pduSessionResourceReleasedList ngapType.PDUSessionResourceToReleaseListRelCmd) ([]byte, error) { + pduSessionResourceReleasedList ngapType.PDUSessionResourceToReleaseListRelCmd, +) ([]byte, error) { var pdu ngapType.NGAPPDU pdu.Present = ngapType.NGAPPDUPresentInitiatingMessage pdu.InitiatingMessage = new(ngapType.InitiatingMessage) @@ -220,7 +220,8 @@ func BuildNGSetupFailure(cause ngapType.Cause) ([]byte, error) { } func BuildNGReset( - cause ngapType.Cause, partOfNGInterface *ngapType.UEAssociatedLogicalNGConnectionList) ([]byte, error) { + cause ngapType.Cause, partOfNGInterface *ngapType.UEAssociatedLogicalNGConnectionList, +) ([]byte, error) { var pdu ngapType.NGAPPDU logger.NgapLog.Trace("Build NG Reset message") @@ -273,7 +274,8 @@ func BuildNGReset( } func BuildNGResetAcknowledge(partOfNGInterface *ngapType.UEAssociatedLogicalNGConnectionList, - criticalityDiagnostics *ngapType.CriticalityDiagnostics) ([]byte, error) { + criticalityDiagnostics *ngapType.CriticalityDiagnostics, +) ([]byte, error) { var pdu ngapType.NGAPPDU pdu.Present = ngapType.NGAPPDUPresentSuccessfulOutcome @@ -320,8 +322,7 @@ func BuildNGResetAcknowledge(partOfNGInterface *ngapType.UEAssociatedLogicalNGCo "[Build NG Reset Ack] (pair %d) RanUeNgapID[%d]", i, uEAssociatedLogicalNGConnectionItem.RANUENGAPID) } - uEAssociatedLogicalNGConnectionList.List = - append(uEAssociatedLogicalNGConnectionList.List, uEAssociatedLogicalNGConnectionItem) + uEAssociatedLogicalNGConnectionList.List = append(uEAssociatedLogicalNGConnectionList.List, uEAssociatedLogicalNGConnectionItem) } nGResetAcknowledgeIEs.List = append(nGResetAcknowledgeIEs.List, ie) @@ -345,7 +346,8 @@ func BuildNGResetAcknowledge(partOfNGInterface *ngapType.UEAssociatedLogicalNGCo } func BuildDownlinkNasTransport(ue *context.RanUe, nasPdu []byte, - mobilityRestrictionList *ngapType.MobilityRestrictionList) ([]byte, error) { + mobilityRestrictionList *ngapType.MobilityRestrictionList, +) ([]byte, error) { var pdu ngapType.NGAPPDU pdu.Present = ngapType.NGAPPDUPresentInitiatingMessage @@ -434,7 +436,8 @@ func BuildDownlinkNasTransport(ue *context.RanUe, nasPdu []byte, } func BuildUEContextReleaseCommand( - ue *context.RanUe, causePresent int, cause aper.Enumerated) ([]byte, error) { + ue *context.RanUe, causePresent int, cause aper.Enumerated, +) ([]byte, error) { var pdu ngapType.NGAPPDU pdu.Present = ngapType.NGAPPDUPresentInitiatingMessage @@ -512,7 +515,8 @@ func BuildUEContextReleaseCommand( } func BuildErrorIndication(amfUeNgapId, ranUeNgapId *int64, cause *ngapType.Cause, - criticalityDiagnostics *ngapType.CriticalityDiagnostics) ([]byte, error) { + criticalityDiagnostics *ngapType.CriticalityDiagnostics, +) ([]byte, error) { var pdu ngapType.NGAPPDU pdu.Present = ngapType.NGAPPDUPresentInitiatingMessage @@ -633,7 +637,8 @@ func BuildUERadioCapabilityCheckRequest(ue *context.RanUe) ([]byte, error) { } func BuildHandoverCancelAcknowledge( - ue *context.RanUe, criticalityDiagnostics *ngapType.CriticalityDiagnostics) ([]byte, error) { + ue *context.RanUe, criticalityDiagnostics *ngapType.CriticalityDiagnostics, +) ([]byte, error) { var pdu ngapType.NGAPPDU pdu.Present = ngapType.NGAPPDUPresentSuccessfulOutcome pdu.SuccessfulOutcome = new(ngapType.SuccessfulOutcome) @@ -691,7 +696,8 @@ func BuildHandoverCancelAcknowledge( // nasPDU: from nas layer // pduSessionResourceSetupRequestList: provided by AMF, and transfer data is from SMF func BuildPDUSessionResourceSetupRequest(ue *context.RanUe, nasPdu []byte, - pduSessionResourceSetupRequestList ngapType.PDUSessionResourceSetupListSUReq) ([]byte, error) { + pduSessionResourceSetupRequestList ngapType.PDUSessionResourceSetupListSUReq, +) ([]byte, error) { // TODO: Ran Paging Priority (optional) var pdu ngapType.NGAPPDU @@ -777,7 +783,8 @@ func BuildPDUSessionResourceModifyConfirm( ue *context.RanUe, pduSessionResourceModifyConfirmList ngapType.PDUSessionResourceModifyListModCfm, pduSessionResourceFailedToModifyList ngapType.PDUSessionResourceFailedToModifyListModCfm, - criticalityDiagnostics *ngapType.CriticalityDiagnostics) ([]byte, error) { + criticalityDiagnostics *ngapType.CriticalityDiagnostics, +) ([]byte, error) { var pdu ngapType.NGAPPDU pdu.Present = ngapType.NGAPPDUPresentSuccessfulOutcome pdu.SuccessfulOutcome = new(ngapType.SuccessfulOutcome) @@ -850,7 +857,8 @@ func BuildPDUSessionResourceModifyConfirm( // pduSessionResourceModifyRequestList: from SMF func BuildPDUSessionResourceModifyRequest(ue *context.RanUe, - pduSessionResourceModifyRequestList ngapType.PDUSessionResourceModifyListModReq) ([]byte, error) { + pduSessionResourceModifyRequestList ngapType.PDUSessionResourceModifyListModReq, +) ([]byte, error) { // TODO: Ran Paging Priority (optional) var pdu ngapType.NGAPPDU @@ -912,7 +920,8 @@ func BuildInitialContextSetupRequest( pduSessionResourceSetupRequestList *ngapType.PDUSessionResourceSetupListCxtReq, rrcInactiveTransitionReportRequest *ngapType.RRCInactiveTransitionReportRequest, coreNetworkAssistanceInfo *ngapType.CoreNetworkAssistanceInformation, - emergencyFallbackIndicator *ngapType.EmergencyFallbackIndicator) ([]byte, error) { + emergencyFallbackIndicator *ngapType.EmergencyFallbackIndicator, +) ([]byte, error) { // Old AMF: new amf should get old amf's amf name // rrcInactiveTransitionReportRequest: configured by amf @@ -1081,8 +1090,7 @@ func BuildInitialContextSetupRequest( nrEncryptionAlgorighm[0] |= amfUe.UESecurityCapability.GetEA1_128_5G() << 7 nrEncryptionAlgorighm[0] |= amfUe.UESecurityCapability.GetEA2_128_5G() << 6 nrEncryptionAlgorighm[0] |= amfUe.UESecurityCapability.GetEA3_128_5G() << 5 - ueSecurityCapabilities.NRencryptionAlgorithms.Value = - ngapConvert.ByteToBitString(nrEncryptionAlgorighm, 16) + ueSecurityCapabilities.NRencryptionAlgorithms.Value = ngapConvert.ByteToBitString(nrEncryptionAlgorighm, 16) nrIntegrityAlgorithm := []byte{0x00, 0x00} @@ -1090,17 +1098,14 @@ func BuildInitialContextSetupRequest( nrIntegrityAlgorithm[0] |= amfUe.UESecurityCapability.GetIA2_128_5G() << 6 nrIntegrityAlgorithm[0] |= amfUe.UESecurityCapability.GetIA3_128_5G() << 5 - ueSecurityCapabilities.NRintegrityProtectionAlgorithms.Value = - ngapConvert.ByteToBitString(nrIntegrityAlgorithm, 16) + ueSecurityCapabilities.NRintegrityProtectionAlgorithms.Value = ngapConvert.ByteToBitString(nrIntegrityAlgorithm, 16) // only support NR algorithms eutraEncryptionAlgorithm := []byte{0x00, 0x00} - ueSecurityCapabilities.EUTRAencryptionAlgorithms.Value = - ngapConvert.ByteToBitString(eutraEncryptionAlgorithm, 16) + ueSecurityCapabilities.EUTRAencryptionAlgorithms.Value = ngapConvert.ByteToBitString(eutraEncryptionAlgorithm, 16) eutraIntegrityAlgorithm := []byte{0x00, 0x00} - ueSecurityCapabilities.EUTRAintegrityProtectionAlgorithms.Value = - ngapConvert.ByteToBitString(eutraIntegrityAlgorithm, 16) + ueSecurityCapabilities.EUTRAintegrityProtectionAlgorithms.Value = ngapConvert.ByteToBitString(eutraIntegrityAlgorithm, 16) initialContextSetupRequestIEs.List = append(initialContextSetupRequestIEs.List, ie) @@ -1249,15 +1254,13 @@ func BuildInitialContextSetupRequest( uERadioCapabilityForPaging := ie.Value.UERadioCapabilityForPaging var err error if amfUe.UeRadioCapabilityForPaging.NR != "" { - uERadioCapabilityForPaging.UERadioCapabilityForPagingOfNR.Value, err = - hex.DecodeString(amfUe.UeRadioCapabilityForPaging.NR) + uERadioCapabilityForPaging.UERadioCapabilityForPagingOfNR.Value, err = hex.DecodeString(amfUe.UeRadioCapabilityForPaging.NR) if err != nil { logger.NgapLog.Errorf("[Build Error] DecodeString amfUe.UeRadioCapabilityForPaging.NR error: %+v", err) } } if amfUe.UeRadioCapabilityForPaging.EUTRA != "" { - uERadioCapabilityForPaging.UERadioCapabilityForPagingOfEUTRA.Value, err = - hex.DecodeString(amfUe.UeRadioCapabilityForPaging.EUTRA) + uERadioCapabilityForPaging.UERadioCapabilityForPagingOfEUTRA.Value, err = hex.DecodeString(amfUe.UeRadioCapabilityForPaging.EUTRA) if err != nil { logger.NgapLog.Errorf("[Build Error] DecodeString amfUe.UeRadioCapabilityForPaging.NR error: %+v", err) } @@ -1276,7 +1279,8 @@ func BuildUEContextModificationRequest( rrcInactiveTransitionReportRequest *ngapType.RRCInactiveTransitionReportRequest, coreNetworkAssistanceInfo *ngapType.CoreNetworkAssistanceInformation, mobilityRestrictionList *ngapType.MobilityRestrictionList, - emergencyFallbackIndicator *ngapType.EmergencyFallbackIndicator) ([]byte, error) { + emergencyFallbackIndicator *ngapType.EmergencyFallbackIndicator, +) ([]byte, error) { // accessType indicate amfUe send this msg for which accessType // oldAmfUeNgapID: if amf allocate a new amf ue ngap id to amfUe, the caller should // update the context by itself, and pass the old AmfUeNgapID to this function @@ -1429,7 +1433,8 @@ func BuildHandoverCommand( pduSessionResourceHandoverList ngapType.PDUSessionResourceHandoverList, pduSessionResourceToReleaseList ngapType.PDUSessionResourceToReleaseListHOCmd, container ngapType.TargetToSourceTransparentContainer, - criticalityDiagnostics *ngapType.CriticalityDiagnostics) ([]byte, error) { + criticalityDiagnostics *ngapType.CriticalityDiagnostics, +) ([]byte, error) { var pdu ngapType.NGAPPDU pdu.Present = ngapType.NGAPPDUPresentSuccessfulOutcome pdu.SuccessfulOutcome = new(ngapType.SuccessfulOutcome) @@ -1535,7 +1540,8 @@ func BuildHandoverCommand( } func BuildHandoverPreparationFailure(sourceUe *context.RanUe, cause ngapType.Cause, - criticalityDiagnostics *ngapType.CriticalityDiagnostics) ([]byte, error) { + criticalityDiagnostics *ngapType.CriticalityDiagnostics, +) ([]byte, error) { // cause = initiate the Handover Cancel procedure with the appropriate value for the Cause IE. // criticalityDiagnostics = criticalityDiagonstics IE in receiver node's error indication @@ -1615,7 +1621,8 @@ a Nsmf_PDUSession_CreateSMContext Response(N2 SM Information (PDU Session ID, ca // set nsci to true, otherwise set to false func BuildHandoverRequest(ue *context.RanUe, cause ngapType.Cause, pduSessionResourceSetupListHOReq ngapType.PDUSessionResourceSetupListHOReq, - sourceToTargetTransparentContainer ngapType.SourceToTargetTransparentContainer, nsci bool) ([]byte, error) { + sourceToTargetTransparentContainer ngapType.SourceToTargetTransparentContainer, nsci bool, +) ([]byte, error) { amfSelf := context.AMF_Self() amfUe := ue.AmfUe if amfUe == nil { @@ -1703,17 +1710,14 @@ func BuildHandoverRequest(ue *context.RanUe, cause ngapType.Cause, nrIntegrityAlgorithm[0] |= amfUe.UESecurityCapability.GetIA1_128_5G() << 7 nrIntegrityAlgorithm[0] |= amfUe.UESecurityCapability.GetIA2_128_5G() << 6 nrIntegrityAlgorithm[0] |= amfUe.UESecurityCapability.GetIA3_128_5G() << 5 - ueSecurityCapabilities.NRintegrityProtectionAlgorithms.Value = - ngapConvert.ByteToBitString(nrIntegrityAlgorithm, 16) + ueSecurityCapabilities.NRintegrityProtectionAlgorithms.Value = ngapConvert.ByteToBitString(nrIntegrityAlgorithm, 16) // only support NR algorithms eutraEncryptionAlgorithm := []byte{0x00, 0x00} - ueSecurityCapabilities.EUTRAencryptionAlgorithms.Value = - ngapConvert.ByteToBitString(eutraEncryptionAlgorithm, 16) + ueSecurityCapabilities.EUTRAencryptionAlgorithms.Value = ngapConvert.ByteToBitString(eutraEncryptionAlgorithm, 16) eutraIntegrityAlgorithm := []byte{0x00, 0x00} - ueSecurityCapabilities.EUTRAintegrityProtectionAlgorithms.Value = - ngapConvert.ByteToBitString(eutraIntegrityAlgorithm, 16) + ueSecurityCapabilities.EUTRAintegrityProtectionAlgorithms.Value = ngapConvert.ByteToBitString(eutraIntegrityAlgorithm, 16) handoverRequestIEs.List = append(handoverRequestIEs.List, ie) @@ -1840,7 +1844,8 @@ func BuildPathSwitchRequestAcknowledge( newSecurityContextIndicator bool, coreNetworkAssistanceInformation *ngapType.CoreNetworkAssistanceInformation, rrcInactiveTransitionReportRequest *ngapType.RRCInactiveTransitionReportRequest, - criticalityDiagnostics *ngapType.CriticalityDiagnostics) ([]byte, error) { + criticalityDiagnostics *ngapType.CriticalityDiagnostics, +) ([]byte, error) { amfSelf := context.AMF_Self() var pdu ngapType.NGAPPDU @@ -1899,17 +1904,14 @@ func BuildPathSwitchRequestAcknowledge( nrIntegrityAlgorithm[0] |= ue.AmfUe.UESecurityCapability.GetIA1_128_5G() << 7 nrIntegrityAlgorithm[0] |= ue.AmfUe.UESecurityCapability.GetIA2_128_5G() << 6 nrIntegrityAlgorithm[0] |= ue.AmfUe.UESecurityCapability.GetIA3_128_5G() << 5 - ueSecurityCapabilities.NRintegrityProtectionAlgorithms.Value = - ngapConvert.ByteToBitString(nrIntegrityAlgorithm, 16) + ueSecurityCapabilities.NRintegrityProtectionAlgorithms.Value = ngapConvert.ByteToBitString(nrIntegrityAlgorithm, 16) // only support NR algorithms eutraEncryptionAlgorithm := []byte{0x00, 0x00} - ueSecurityCapabilities.EUTRAencryptionAlgorithms.Value = - ngapConvert.ByteToBitString(eutraEncryptionAlgorithm, 16) + ueSecurityCapabilities.EUTRAencryptionAlgorithms.Value = ngapConvert.ByteToBitString(eutraEncryptionAlgorithm, 16) eutraIntegrityAlgorithm := []byte{0x00, 0x00} - ueSecurityCapabilities.EUTRAintegrityProtectionAlgorithms.Value = - ngapConvert.ByteToBitString(eutraIntegrityAlgorithm, 16) + ueSecurityCapabilities.EUTRAintegrityProtectionAlgorithms.Value = ngapConvert.ByteToBitString(eutraIntegrityAlgorithm, 16) pathSwitchRequestAckIEs.List = append(pathSwitchRequestAckIEs.List, ie) @@ -2013,7 +2015,8 @@ func BuildPathSwitchRequestFailure( amfUeNgapId, ranUeNgapId int64, pduSessionResourceReleasedList *ngapType.PDUSessionResourceReleasedListPSFail, - criticalityDiagnostics *ngapType.CriticalityDiagnostics) ([]byte, error) { + criticalityDiagnostics *ngapType.CriticalityDiagnostics, +) ([]byte, error) { var pdu ngapType.NGAPPDU pdu.Present = ngapType.NGAPPDUPresentUnsuccessfulOutcome pdu.UnsuccessfulOutcome = new(ngapType.UnsuccessfulOutcome) @@ -2075,7 +2078,8 @@ func BuildPathSwitchRequestFailure( } func BuildDownlinkRanStatusTransfer(ue *context.RanUe, - ranStatusTransferTransparentContainer ngapType.RANStatusTransferTransparentContainer) ([]byte, error) { + ranStatusTransferTransparentContainer ngapType.RANStatusTransferTransparentContainer, +) ([]byte, error) { // ranStatusTransferTransparentContainer from Uplink Ran Configuration Transfer var pdu ngapType.NGAPPDU @@ -2140,7 +2144,8 @@ func BuildDownlinkRanStatusTransfer(ue *context.RanUe, // NG-RAN node(s) via 3GPP access. // more paging policy with 3gpp/non-3gpp access is described in TS 23.501 5.6.8 func BuildPaging( - ue *context.AmfUe, pagingPriority *ngapType.PagingPriority, pagingOriginNon3GPP bool) ([]byte, error) { + ue *context.AmfUe, pagingPriority *ngapType.PagingPriority, pagingOriginNon3GPP bool, +) ([]byte, error) { // TODO: Paging DRX (optional) var pdu ngapType.NGAPPDU @@ -2237,16 +2242,14 @@ func BuildPaging( ie.Value.UERadioCapabilityForPaging = new(ngapType.UERadioCapabilityForPaging) uERadioCapabilityForPaging := ie.Value.UERadioCapabilityForPaging if ue.UeRadioCapabilityForPaging.NR != "" { - uERadioCapabilityForPaging.UERadioCapabilityForPagingOfNR.Value, err = - hex.DecodeString(ue.UeRadioCapabilityForPaging.NR) + uERadioCapabilityForPaging.UERadioCapabilityForPagingOfNR.Value, err = hex.DecodeString(ue.UeRadioCapabilityForPaging.NR) if err != nil { logger.NgapLog.Errorf( "[Build Error] DecodeString ue.UeRadioCapabilityForPaging.NR error: %+v", err) } } if ue.UeRadioCapabilityForPaging.EUTRA != "" { - uERadioCapabilityForPaging.UERadioCapabilityForPagingOfEUTRA.Value, err = - hex.DecodeString(ue.UeRadioCapabilityForPaging.EUTRA) + uERadioCapabilityForPaging.UERadioCapabilityForPagingOfEUTRA.Value, err = hex.DecodeString(ue.UeRadioCapabilityForPaging.EUTRA) if err != nil { logger.NgapLog.Errorf("[Build Error] DecodeString ue.UeRadioCapabilityForPaging.EUTRA error: %+v", err) } @@ -2263,8 +2266,7 @@ func BuildPaging( ie.Value.AssistanceDataForPaging = new(ngapType.AssistanceDataForPaging) assistanceDataForPaging := ie.Value.AssistanceDataForPaging - assistanceDataForPaging.AssistanceDataForRecommendedCells = - new(ngapType.AssistanceDataForRecommendedCells) + assistanceDataForPaging.AssistanceDataForRecommendedCells = new(ngapType.AssistanceDataForRecommendedCells) recommendedCellList := &assistanceDataForPaging. AssistanceDataForRecommendedCells.RecommendedCellsForPaging.RecommendedCellList @@ -2282,8 +2284,7 @@ func BuildPaging( recommendedCellItem.NGRANCGI.EUTRACGI = new(ngapType.EUTRACGI) eutraCGI := recommendedCellItem.NGRANCGI.EUTRACGI eutraCGI.PLMNIdentity = ngapConvert.PlmnIdToNgap(*recommendedCell.NgRanCGI.EUTRACGI.PlmnId) - eutraCGI.EUTRACellIdentity.Value = - ngapConvert.HexToBitString(recommendedCell.NgRanCGI.EUTRACGI.EutraCellId, 28) + eutraCGI.EUTRACellIdentity.Value = ngapConvert.HexToBitString(recommendedCell.NgRanCGI.EUTRACGI.EutraCellId, 28) } if recommendedCell.TimeStayedInCell != nil { @@ -2317,7 +2318,8 @@ func BuildPaging( // ngapMessage: initial UE Message to reroute // allowedNSSAI: provided by AMF, and AMF get it from NSSF (4.2.2.2.3 step 4b) func BuildRerouteNasRequest(ue *context.AmfUe, anType models.AccessType, amfUeNgapID *int64, - ngapMessage []byte, allowedNSSAI *ngapType.AllowedNSSAI) ([]byte, error) { + ngapMessage []byte, allowedNSSAI *ngapType.AllowedNSSAI, +) ([]byte, error) { var pdu ngapType.NGAPPDU pdu.Present = ngapType.NGAPPDUPresentInitiatingMessage @@ -2409,7 +2411,8 @@ func BuildRerouteNasRequest(ue *context.AmfUe, anType models.AccessType, amfUeNg } func BuildRanConfigurationUpdateAcknowledge( - criticalityDiagnostics *ngapType.CriticalityDiagnostics) ([]byte, error) { + criticalityDiagnostics *ngapType.CriticalityDiagnostics, +) ([]byte, error) { // criticality ->from received node when received node can't comprehend the IE or missing IE var pdu ngapType.NGAPPDU @@ -2442,7 +2445,8 @@ func BuildRanConfigurationUpdateAcknowledge( } func BuildRanConfigurationUpdateFailure( - cause ngapType.Cause, criticalityDiagnostics *ngapType.CriticalityDiagnostics) ([]byte, error) { + cause ngapType.Cause, criticalityDiagnostics *ngapType.CriticalityDiagnostics, +) ([]byte, error) { // criticality ->from received node when received node can't comprehend the IE or missing IE // If the AMF cannot accept the update, // it shall respond with a RAN CONFIGURATION UPDATE FAILURE message and appropriate cause value. @@ -2544,7 +2548,8 @@ func BuildAMFStatusIndication(unavailableGUAMIList ngapType.UnavailableGUAMIList func BuildOverloadStart( amfOverloadResponse *ngapType.OverloadResponse, amfTrafficLoadReductionIndication int64, - overloadStartNSSAIList *ngapType.OverloadStartNSSAIList) ([]byte, error) { + overloadStartNSSAIList *ngapType.OverloadStartNSSAIList, +) ([]byte, error) { var pdu ngapType.NGAPPDU pdu.Present = ngapType.NGAPPDUPresentInitiatingMessage pdu.InitiatingMessage = new(ngapType.InitiatingMessage) @@ -2612,7 +2617,8 @@ func BuildOverloadStop() ([]byte, error) { } func BuildDownlinkRanConfigurationTransfer( - sONConfigurationTransfer *ngapType.SONConfigurationTransfer) ([]byte, error) { + sONConfigurationTransfer *ngapType.SONConfigurationTransfer, +) ([]byte, error) { // sONConfigurationTransfer = sONConfigurationTransfer from uplink Ran Configuration Transfer var pdu ngapType.NGAPPDU @@ -2645,7 +2651,8 @@ func BuildDownlinkRanConfigurationTransfer( } func BuildDownlinkNonUEAssociatedNRPPATransport( - ue *context.RanUe, nRPPaPDU ngapType.NRPPaPDU) ([]byte, error) { + ue *context.RanUe, nRPPaPDU ngapType.NRPPaPDU, +) ([]byte, error) { // NRPPa PDU is by pass // NRPPa PDU is from LMF define in 4.13.5.6 @@ -2658,8 +2665,7 @@ func BuildDownlinkNonUEAssociatedNRPPATransport( initiatingMessage.Criticality.Value = ngapType.CriticalityPresentIgnore initiatingMessage.Value.Present = ngapType.InitiatingMessagePresentDownlinkNonUEAssociatedNRPPaTransport - initiatingMessage.Value.DownlinkNonUEAssociatedNRPPaTransport = - new(ngapType.DownlinkNonUEAssociatedNRPPaTransport) + initiatingMessage.Value.DownlinkNonUEAssociatedNRPPaTransport = new(ngapType.DownlinkNonUEAssociatedNRPPaTransport) downlinkNonUEAssociatedNRPPaTransport := initiatingMessage.Value.DownlinkNonUEAssociatedNRPPaTransport downlinkNonUEAssociatedNRPPaTransportIEs := &downlinkNonUEAssociatedNRPPaTransport.ProtocolIEs @@ -2798,7 +2804,8 @@ func BuildLocationReportingControl( ue *context.RanUe, AOIList *ngapType.AreaOfInterestList, LocationReportingReferenceIDToBeCancelled int64, - eventType ngapType.EventType) ([]byte, error) { + eventType ngapType.EventType, +) ([]byte, error) { var pdu ngapType.NGAPPDU pdu.Present = ngapType.NGAPPDUPresentInitiatingMessage @@ -2863,10 +2870,8 @@ func BuildLocationReportingControl( // location reference ID to be Cancelled [Conditional] if locationReportingRequestType.EventType.Value == ngapType.EventTypePresentStopUePresenceInAreaOfInterest { - locationReportingRequestType.LocationReportingReferenceIDToBeCancelled = - new(ngapType.LocationReportingReferenceID) - locationReportingRequestType.LocationReportingReferenceIDToBeCancelled.Value = - LocationReportingReferenceIDToBeCancelled + locationReportingRequestType.LocationReportingReferenceIDToBeCancelled = new(ngapType.LocationReportingReferenceID) + locationReportingRequestType.LocationReportingReferenceIDToBeCancelled.Value = LocationReportingReferenceIDToBeCancelled } locationReportingControlIEs.List = append(locationReportingControlIEs.List, ie) @@ -2921,7 +2926,8 @@ func BuildUETNLABindingReleaseRequest(ue *context.RanUe) ([]byte, error) { // Weight Factor associated with each of the TNL association within the AMF func BuildAMFConfigurationUpdate(tNLassociationUsage ngapType.TNLAssociationUsage, - tNLAddressWeightFactor ngapType.TNLAddressWeightFactor) ([]byte, error) { + tNLAddressWeightFactor ngapType.TNLAddressWeightFactor, +) ([]byte, error) { amfSelf := context.AMF_Self() var pdu ngapType.NGAPPDU @@ -2994,8 +3000,7 @@ func BuildAMFConfigurationUpdate(tNLassociationUsage ngapType.TNLAssociationUsag for _, snssai := range plmnItem.SNssaiList { sliceSupportItem := ngapType.SliceSupportItem{} sliceSupportItem.SNSSAI = ngapConvert.SNssaiToNgap(snssai) - pLMNSupportItem.SliceSupportList.List = - append(pLMNSupportItem.SliceSupportList.List, sliceSupportItem) + pLMNSupportItem.SliceSupportList.List = append(pLMNSupportItem.SliceSupportList.List, sliceSupportItem) } pLMNSupportList.List = append(pLMNSupportList.List, pLMNSupportItem) } @@ -3013,12 +3018,9 @@ func BuildAMFConfigurationUpdate(tNLassociationUsage ngapType.TNLAssociationUsag // AMFTNLAssociationToAddItem in AMFTNLAssociationToAddList aMFTNLAssociationToAddItem := ngapType.AMFTNLAssociationToAddItem{} - aMFTNLAssociationToAddItem.AMFTNLAssociationAddress.Present = - ngapType.CPTransportLayerInformationPresentEndpointIPAddress - aMFTNLAssociationToAddItem.AMFTNLAssociationAddress.EndpointIPAddress = - new(ngapType.TransportLayerAddress) - *aMFTNLAssociationToAddItem.AMFTNLAssociationAddress.EndpointIPAddress = - ngapConvert.IPAddressToNgap(amfSelf.RegisterIPv4, amfSelf.HttpIPv6Address) + aMFTNLAssociationToAddItem.AMFTNLAssociationAddress.Present = ngapType.CPTransportLayerInformationPresentEndpointIPAddress + aMFTNLAssociationToAddItem.AMFTNLAssociationAddress.EndpointIPAddress = new(ngapType.TransportLayerAddress) + *aMFTNLAssociationToAddItem.AMFTNLAssociationAddress.EndpointIPAddress = ngapConvert.IPAddressToNgap(amfSelf.RegisterIPv4, amfSelf.HttpIPv6Address) // AMF TNL Association Usage[optional] if aMFTNLAssociationToAddItem.TNLAssociationUsage != nil { @@ -3043,12 +3045,9 @@ func BuildAMFConfigurationUpdate(tNLassociationUsage ngapType.TNLAssociationUsag // AMFTNLAssociationToRemoveItem aMFTNLAssociationToRemoveItem := ngapType.AMFTNLAssociationToRemoveItem{} - aMFTNLAssociationToRemoveItem.AMFTNLAssociationAddress.Present = - ngapType.CPTransportLayerInformationPresentEndpointIPAddress - aMFTNLAssociationToRemoveItem.AMFTNLAssociationAddress.EndpointIPAddress = - new(ngapType.TransportLayerAddress) - *aMFTNLAssociationToRemoveItem.AMFTNLAssociationAddress.EndpointIPAddress = - ngapConvert.IPAddressToNgap(amfSelf.RegisterIPv4, amfSelf.HttpIPv6Address) + aMFTNLAssociationToRemoveItem.AMFTNLAssociationAddress.Present = ngapType.CPTransportLayerInformationPresentEndpointIPAddress + aMFTNLAssociationToRemoveItem.AMFTNLAssociationAddress.EndpointIPAddress = new(ngapType.TransportLayerAddress) + *aMFTNLAssociationToRemoveItem.AMFTNLAssociationAddress.EndpointIPAddress = ngapConvert.IPAddressToNgap(amfSelf.RegisterIPv4, amfSelf.HttpIPv6Address) aMFTNLAssociationToRemoveList.List = append(aMFTNLAssociationToRemoveList.List, aMFTNLAssociationToRemoveItem) aMFConfigurationUpdateIEs.List = append(aMFConfigurationUpdateIEs.List, ie) @@ -3064,12 +3063,9 @@ func BuildAMFConfigurationUpdate(tNLassociationUsage ngapType.TNLAssociationUsag // AMFTNLAssociationAddress in AMFTNLAssociationtoUpdateItem aMFTNLAssociationToUpdateItem := ngapType.AMFTNLAssociationToUpdateItem{} - aMFTNLAssociationToUpdateItem.AMFTNLAssociationAddress.Present = - ngapType.CPTransportLayerInformationPresentEndpointIPAddress - aMFTNLAssociationToUpdateItem.AMFTNLAssociationAddress.EndpointIPAddress = - new(ngapType.TransportLayerAddress) - *aMFTNLAssociationToUpdateItem.AMFTNLAssociationAddress.EndpointIPAddress = - ngapConvert.IPAddressToNgap(amfSelf.RegisterIPv4, amfSelf.HttpIPv6Address) + aMFTNLAssociationToUpdateItem.AMFTNLAssociationAddress.Present = ngapType.CPTransportLayerInformationPresentEndpointIPAddress + aMFTNLAssociationToUpdateItem.AMFTNLAssociationAddress.EndpointIPAddress = new(ngapType.TransportLayerAddress) + *aMFTNLAssociationToUpdateItem.AMFTNLAssociationAddress.EndpointIPAddress = ngapConvert.IPAddressToNgap(amfSelf.RegisterIPv4, amfSelf.HttpIPv6Address) // TNLAssociationUsage in AMFTNLAssociationtoUpdateItem [optional] if aMFTNLAssociationToUpdateItem.TNLAssociationUsage != nil { diff --git a/ngap/message/forward_ie.go b/ngap/message/forward_ie.go index 25bf815b..7406a580 100644 --- a/ngap/message/forward_ie.go +++ b/ngap/message/forward_ie.go @@ -16,7 +16,8 @@ import ( ) func AppendPDUSessionResourceSetupListSUReq(list *ngapType.PDUSessionResourceSetupListSUReq, - pduSessionId int32, snssai models.Snssai, nasPDU []byte, transfer []byte) { + pduSessionId int32, snssai models.Snssai, nasPDU []byte, transfer []byte, +) { var item ngapType.PDUSessionResourceSetupItemSUReq item.PDUSessionID.Value = int64(pduSessionId) item.SNSSAI = ngapConvert.SNssaiToNgap(snssai) @@ -29,7 +30,8 @@ func AppendPDUSessionResourceSetupListSUReq(list *ngapType.PDUSessionResourceSet } func AppendPDUSessionResourceSetupListHOReq(list *ngapType.PDUSessionResourceSetupListHOReq, - pduSessionId int32, snssai models.Snssai, transfer []byte) { + pduSessionId int32, snssai models.Snssai, transfer []byte, +) { var item ngapType.PDUSessionResourceSetupItemHOReq item.PDUSessionID.Value = int64(pduSessionId) item.SNSSAI = ngapConvert.SNssaiToNgap(snssai) @@ -38,7 +40,8 @@ func AppendPDUSessionResourceSetupListHOReq(list *ngapType.PDUSessionResourceSet } func AppendPDUSessionResourceSetupListCxtReq(list *ngapType.PDUSessionResourceSetupListCxtReq, - pduSessionId int32, snssai models.Snssai, nasPDU []byte, transfer []byte) { + pduSessionId int32, snssai models.Snssai, nasPDU []byte, transfer []byte, +) { var item ngapType.PDUSessionResourceSetupItemCxtReq item.PDUSessionID.Value = int64(pduSessionId) item.SNSSAI = ngapConvert.SNssaiToNgap(snssai) @@ -51,7 +54,8 @@ func AppendPDUSessionResourceSetupListCxtReq(list *ngapType.PDUSessionResourceSe } func AppendPDUSessionResourceModifyListModReq(list *ngapType.PDUSessionResourceModifyListModReq, - pduSessionId int32, nasPDU []byte, transfer []byte) { + pduSessionId int32, nasPDU []byte, transfer []byte, +) { var item ngapType.PDUSessionResourceModifyItemModReq item.PDUSessionID.Value = int64(pduSessionId) item.PDUSessionResourceModifyRequestTransfer = transfer @@ -63,7 +67,8 @@ func AppendPDUSessionResourceModifyListModReq(list *ngapType.PDUSessionResourceM } func AppendPDUSessionResourceModifyListModCfm(list *ngapType.PDUSessionResourceModifyListModCfm, - pduSessionId int64, transfer []byte) { + pduSessionId int64, transfer []byte, +) { var item ngapType.PDUSessionResourceModifyItemModCfm item.PDUSessionID.Value = pduSessionId item.PDUSessionResourceModifyConfirmTransfer = transfer @@ -71,7 +76,8 @@ func AppendPDUSessionResourceModifyListModCfm(list *ngapType.PDUSessionResourceM } func AppendPDUSessionResourceFailedToModifyListModCfm(list *ngapType.PDUSessionResourceFailedToModifyListModCfm, - pduSessionId int64, transfer []byte) { + pduSessionId int64, transfer []byte, +) { var item ngapType.PDUSessionResourceFailedToModifyItemModCfm item.PDUSessionID.Value = pduSessionId item.PDUSessionResourceModifyIndicationUnsuccessfulTransfer = transfer @@ -79,7 +85,8 @@ func AppendPDUSessionResourceFailedToModifyListModCfm(list *ngapType.PDUSessionR } func AppendPDUSessionResourceToReleaseListRelCmd(list *ngapType.PDUSessionResourceToReleaseListRelCmd, - pduSessionId int32, transfer []byte) { + pduSessionId int32, transfer []byte, +) { var item ngapType.PDUSessionResourceToReleaseItemRelCmd item.PDUSessionID.Value = int64(pduSessionId) item.PDUSessionResourceReleaseCommandTransfer = transfer diff --git a/ngap/message/send.go b/ngap/message/send.go index 4b2e3890..5893508a 100644 --- a/ngap/message/send.go +++ b/ngap/message/send.go @@ -63,7 +63,6 @@ func SendToRan(ran *context.AmfRan, packet []byte) { ran.Log.Debugf("Write %d bytes", n) } } - } func SendToRanUe(ue *context.RanUe, packet []byte) { @@ -131,7 +130,8 @@ func SendNGSetupFailure(ran *context.AmfRan, cause ngapType.Cause) { // partOfNGInterface: if reset type is "reset all", set it to nil TS 38.413 9.2.6.11 func SendNGReset(ran *context.AmfRan, cause ngapType.Cause, - partOfNGInterface *ngapType.UEAssociatedLogicalNGConnectionList) { + partOfNGInterface *ngapType.UEAssociatedLogicalNGConnectionList, +) { ran.Log.Info("Send NG Reset") pkt, err := BuildNGReset(cause, partOfNGInterface) @@ -143,7 +143,8 @@ func SendNGReset(ran *context.AmfRan, cause ngapType.Cause, } func SendNGResetAcknowledge(ran *context.AmfRan, partOfNGInterface *ngapType.UEAssociatedLogicalNGConnectionList, - criticalityDiagnostics *ngapType.CriticalityDiagnostics) { + criticalityDiagnostics *ngapType.CriticalityDiagnostics, +) { ran.Log.Info("Send NG Reset Acknowledge") if partOfNGInterface != nil && len(partOfNGInterface.List) == 0 { @@ -160,7 +161,8 @@ func SendNGResetAcknowledge(ran *context.AmfRan, partOfNGInterface *ngapType.UEA } func SendDownlinkNasTransport(ue *context.RanUe, nasPdu []byte, - mobilityRestrictionList *ngapType.MobilityRestrictionList) { + mobilityRestrictionList *ngapType.MobilityRestrictionList, +) { if ue == nil { logger.NgapLog.Error("RanUe is nil") return @@ -181,7 +183,8 @@ func SendDownlinkNasTransport(ue *context.RanUe, nasPdu []byte, } func SendPDUSessionResourceReleaseCommand(ue *context.RanUe, nasPdu []byte, - pduSessionResourceReleasedList ngapType.PDUSessionResourceToReleaseListRelCmd) { + pduSessionResourceReleasedList ngapType.PDUSessionResourceToReleaseListRelCmd, +) { if ue == nil { logger.NgapLog.Error("RanUe is nil") return @@ -223,7 +226,8 @@ func SendUEContextReleaseCommand(ue *context.RanUe, action context.RelAction, ca } func SendErrorIndication(ran *context.AmfRan, amfUeNgapId, ranUeNgapId *int64, cause *ngapType.Cause, - criticalityDiagnostics *ngapType.CriticalityDiagnostics) { + criticalityDiagnostics *ngapType.CriticalityDiagnostics, +) { if ran == nil { logger.NgapLog.Error("Ran is nil") return @@ -274,7 +278,8 @@ func SendHandoverCancelAcknowledge(ue *context.RanUe, criticalityDiagnostics *ng // nasPDU: from nas layer // pduSessionResourceSetupRequestList: provided by AMF, and transfer data is from SMF func SendPDUSessionResourceSetupRequest(ue *context.RanUe, nasPdu []byte, - pduSessionResourceSetupRequestList ngapType.PDUSessionResourceSetupListSUReq) { + pduSessionResourceSetupRequestList ngapType.PDUSessionResourceSetupListSUReq, +) { if ue == nil { logger.NgapLog.Error("RanUe is nil") return @@ -301,7 +306,8 @@ func SendPDUSessionResourceModifyConfirm( ue *context.RanUe, pduSessionResourceModifyConfirmList ngapType.PDUSessionResourceModifyListModCfm, pduSessionResourceFailedToModifyList ngapType.PDUSessionResourceFailedToModifyListModCfm, - criticalityDiagnostics *ngapType.CriticalityDiagnostics) { + criticalityDiagnostics *ngapType.CriticalityDiagnostics, +) { if ue == nil { logger.NgapLog.Error("RanUe is nil") return @@ -330,7 +336,8 @@ func SendPDUSessionResourceModifyConfirm( // pduSessionResourceModifyRequestList: from SMF func SendPDUSessionResourceModifyRequest(ue *context.RanUe, - pduSessionResourceModifyRequestList ngapType.PDUSessionResourceModifyListModReq) { + pduSessionResourceModifyRequestList ngapType.PDUSessionResourceModifyListModReq, +) { if ue == nil { logger.NgapLog.Error("RanUe is nil") return @@ -358,7 +365,8 @@ func SendInitialContextSetupRequest( pduSessionResourceSetupRequestList *ngapType.PDUSessionResourceSetupListCxtReq, rrcInactiveTransitionReportRequest *ngapType.RRCInactiveTransitionReportRequest, coreNetworkAssistanceInfo *ngapType.CoreNetworkAssistanceInformation, - emergencyFallbackIndicator *ngapType.EmergencyFallbackIndicator) { + emergencyFallbackIndicator *ngapType.EmergencyFallbackIndicator, +) { if amfUe == nil { logger.NgapLog.Error("AmfUe is nil") return @@ -390,7 +398,8 @@ func SendUEContextModificationRequest( rrcInactiveTransitionReportRequest *ngapType.RRCInactiveTransitionReportRequest, coreNetworkAssistanceInfo *ngapType.CoreNetworkAssistanceInformation, mobilityRestrictionList *ngapType.MobilityRestrictionList, - emergencyFallbackIndicator *ngapType.EmergencyFallbackIndicator) { + emergencyFallbackIndicator *ngapType.EmergencyFallbackIndicator, +) { if amfUe == nil { logger.NgapLog.Error("AmfUe is nil") return @@ -416,7 +425,8 @@ func SendHandoverCommand( pduSessionResourceHandoverList ngapType.PDUSessionResourceHandoverList, pduSessionResourceToReleaseList ngapType.PDUSessionResourceToReleaseListHOCmd, container ngapType.TargetToSourceTransparentContainer, - criticalityDiagnostics *ngapType.CriticalityDiagnostics) { + criticalityDiagnostics *ngapType.CriticalityDiagnostics, +) { if sourceUe == nil { logger.NgapLog.Error("SourceUe is nil") return @@ -447,7 +457,8 @@ func SendHandoverCommand( // criticalityDiagnostics = criticalityDiagonstics IE in receiver node's error indication // when received node can't comprehend the IE or missing IE func SendHandoverPreparationFailure(sourceUe *context.RanUe, cause ngapType.Cause, - criticalityDiagnostics *ngapType.CriticalityDiagnostics) { + criticalityDiagnostics *ngapType.CriticalityDiagnostics, +) { if sourceUe == nil { logger.NgapLog.Error("SourceUe is nil") return @@ -480,7 +491,8 @@ a Nsmf_PDUSession_CreateSMContext Response(N2 SM Information (PDU Session ID, ca // N2 handover in same AMF func SendHandoverRequest(sourceUe *context.RanUe, targetRan *context.AmfRan, cause ngapType.Cause, pduSessionResourceSetupListHOReq ngapType.PDUSessionResourceSetupListHOReq, - sourceToTargetTransparentContainer ngapType.SourceToTargetTransparentContainer, nsci bool) { + sourceToTargetTransparentContainer ngapType.SourceToTargetTransparentContainer, nsci bool, +) { if sourceUe == nil { logger.NgapLog.Error("sourceUe is nil") return @@ -549,7 +561,8 @@ func SendPathSwitchRequestAcknowledge( newSecurityContextIndicator bool, coreNetworkAssistanceInformation *ngapType.CoreNetworkAssistanceInformation, rrcInactiveTransitionReportRequest *ngapType.RRCInactiveTransitionReportRequest, - criticalityDiagnostics *ngapType.CriticalityDiagnostics) { + criticalityDiagnostics *ngapType.CriticalityDiagnostics, +) { if ue == nil { logger.NgapLog.Error("RanUe is nil") return @@ -584,7 +597,8 @@ func SendPathSwitchRequestFailure( amfUeNgapId, ranUeNgapId int64, pduSessionResourceReleasedList *ngapType.PDUSessionResourceReleasedListPSFail, - criticalityDiagnostics *ngapType.CriticalityDiagnostics) { + criticalityDiagnostics *ngapType.CriticalityDiagnostics, +) { ran.Log.Info("Send Path Switch Request Failure") if pduSessionResourceReleasedList != nil && len(pduSessionResourceReleasedList.List) > context.MaxNumOfPDUSessions { @@ -692,7 +706,8 @@ func SendPaging(ue *context.AmfUe, ngapBuf []byte) { // ngapMessage: initial UE Message to reroute // allowedNSSAI: provided by AMF, and AMF get it from NSSF (4.2.2.2.3 step 4b) func SendRerouteNasRequest(ue *context.AmfUe, anType models.AccessType, amfUeNgapID *int64, ngapMessage []byte, - allowedNSSAI *ngapType.AllowedNSSAI) { + allowedNSSAI *ngapType.AllowedNSSAI, +) { if ue == nil { logger.NgapLog.Error("AmfUe is nil") return @@ -715,7 +730,8 @@ func SendRerouteNasRequest(ue *context.AmfUe, anType models.AccessType, amfUeNga // criticality ->from received node when received node can't comprehend the IE or missing IE func SendRanConfigurationUpdateAcknowledge( - ran *context.AmfRan, criticalityDiagnostics *ngapType.CriticalityDiagnostics) { + ran *context.AmfRan, criticalityDiagnostics *ngapType.CriticalityDiagnostics, +) { if ran == nil { logger.NgapLog.Error("Ran is nil") return @@ -735,7 +751,8 @@ func SendRanConfigurationUpdateAcknowledge( // If the AMF cannot accept the update, // it shall respond with a RAN CONFIGURATION UPDATE FAILURE message and appropriate cause value. func SendRanConfigurationUpdateFailure(ran *context.AmfRan, cause ngapType.Cause, - criticalityDiagnostics *ngapType.CriticalityDiagnostics) { + criticalityDiagnostics *ngapType.CriticalityDiagnostics, +) { if ran == nil { logger.NgapLog.Error("Ran is nil") return @@ -787,7 +804,8 @@ func SendOverloadStart( ran *context.AmfRan, amfOverloadResponse *ngapType.OverloadResponse, amfTrafficLoadReductionIndication int64, - overloadStartNSSAIList *ngapType.OverloadStartNSSAIList) { + overloadStartNSSAIList *ngapType.OverloadStartNSSAIList, +) { if ran == nil { logger.NgapLog.Error("Ran is nil") return @@ -906,7 +924,8 @@ func SendLocationReportingControl( ue *context.RanUe, AOIList *ngapType.AreaOfInterestList, LocationReportingReferenceIDToBeCancelled int64, - eventType ngapType.EventType) { + eventType ngapType.EventType, +) { if ue == nil { logger.NgapLog.Error("RanUe is nil") return @@ -952,7 +971,8 @@ func SendUETNLABindingReleaseRequest(ue *context.RanUe) { // Weight Factor associated with each of the TNL association within the AMF func SendAMFConfigurationUpdate(ran *context.AmfRan, usage ngapType.TNLAssociationUsage, - weightfactor ngapType.TNLAddressWeightFactor) { + weightfactor ngapType.TNLAddressWeightFactor, +) { if ran == nil { logger.NgapLog.Error("Ran is nil") return diff --git a/ngap/ngap_test.go b/ngap/ngap_test.go index ee7940f1..28b52d5d 100644 --- a/ngap/ngap_test.go +++ b/ngap/ngap_test.go @@ -8,11 +8,10 @@ import ( "testing" "time" - ngaputil "github.com/omec-project/amf/ngap/util" - "github.com/omec-project/amf/context" "github.com/omec-project/amf/factory" "github.com/omec-project/amf/ngap" + ngaputil "github.com/omec-project/amf/ngap/util" "github.com/omec-project/amf/util" ) @@ -58,7 +57,6 @@ func TestHandleNGSetupRequest(t *testing.T) { conn := &ngaputil.TestConn{} for _, test := range testTable { testNGSetupReq, err := ngaputil.GetNGSetupRequest(test.gnbId, test.bitLength, test.gnbName, test.tac) - if err != nil { t.Log("Failed to to create NGSetupRequest") return diff --git a/ngap/service/service.go b/ngap/service/service.go index 7c4caefe..6a13d402 100644 --- a/ngap/service/service.go +++ b/ngap/service/service.go @@ -14,7 +14,6 @@ import ( "syscall" "git.cs.nctu.edu.tw/calee/sctp" - "github.com/omec-project/amf/logger" "github.com/omec-project/ngap" ) diff --git a/ngap/util/ngap_util.go b/ngap/util/ngap_util.go index 7e10fb97..acb69cae 100644 --- a/ngap/util/ngap_util.go +++ b/ngap/util/ngap_util.go @@ -32,8 +32,7 @@ type TestConn struct { Data []byte } -type TestConnAddr struct { -} +type TestConnAddr struct{} func (tca TestConnAddr) Network() (a string) { return } func (tca TestConnAddr) String() (a string) { return } @@ -76,7 +75,6 @@ func GetNGSetupRequest(gnbId []byte, bitlength uint64, name, tac string) ([]byte // BuildNGSetupRequest forms and returns a new NGAPPDU struct value for // NGSetupRequest populated with default values. func BuildNGSetupRequest() (pdu ngapType.NGAPPDU) { - pdu.Present = ngapType.NGAPPDUPresentInitiatingMessage pdu.InitiatingMessage = new(ngapType.InitiatingMessage) diff --git a/producer/callback.go b/producer/callback.go index fc14425e..595973d8 100644 --- a/producer/callback.go +++ b/producer/callback.go @@ -12,10 +12,7 @@ import ( "strconv" "strings" - nrf_cache "github.com/omec-project/nrf/nrfcache" - "github.com/mohae/deepcopy" - "github.com/omec-project/amf/consumer" "github.com/omec-project/amf/context" amf_context "github.com/omec-project/amf/context" @@ -28,6 +25,7 @@ import ( "github.com/omec-project/nas/nasConvert" "github.com/omec-project/nas/nasMessage" "github.com/omec-project/ngap/ngapType" + nrf_cache "github.com/omec-project/nrf/nrfcache" "github.com/omec-project/openapi/models" ) @@ -82,7 +80,7 @@ func HandleSmContextStatusNotify(request *http_wrapper.Request) *http_wrapper.Re ue.EventChannel.UpdateSbiHandler(SmContextHandler) ue.EventChannel.SubmitMessage(sbiMsg) msg := <-sbiMsg.Result - //problemDetails := SmContextStatusNotifyProcedure(guti, int32(pduSessionID), smContextStatusNotification) + // problemDetails := SmContextStatusNotifyProcedure(guti, int32(pduSessionID), smContextStatusNotification) if msg.ProblemDetails != nil { return http_wrapper.NewResponse(int(msg.ProblemDetails.(*models.ProblemDetails).Status), nil, msg.ProblemDetails.(*models.ProblemDetails)) } else { @@ -91,7 +89,8 @@ func HandleSmContextStatusNotify(request *http_wrapper.Request) *http_wrapper.Re } func SmContextStatusNotifyProcedure(guti string, pduSessionID int32, - smContextStatusNotification models.SmContextStatusNotification) *models.ProblemDetails { + smContextStatusNotification models.SmContextStatusNotification, +) *models.ProblemDetails { amfSelf := context.AMF_Self() ue, ok := amfSelf.AmfUeFindByGuti(guti) @@ -230,7 +229,7 @@ func HandleAmPolicyControlUpdateNotifyUpdate(request *http_wrapper.Request) *htt ue.EventChannel.UpdateSbiHandler(SmContextHandler) ue.EventChannel.SubmitMessage(sbiMsg) msg := <-sbiMsg.Result - //problemDetails := AmPolicyControlUpdateNotifyUpdateProcedure(polAssoID, policyUpdate) + // problemDetails := AmPolicyControlUpdateNotifyUpdateProcedure(polAssoID, policyUpdate) if msg.ProblemDetails != nil { return http_wrapper.NewResponse(int(msg.ProblemDetails.(*models.ProblemDetails).Status), nil, msg.ProblemDetails.(*models.ProblemDetails)) @@ -240,7 +239,8 @@ func HandleAmPolicyControlUpdateNotifyUpdate(request *http_wrapper.Request) *htt } func AmPolicyControlUpdateNotifyUpdateProcedure(polAssoID string, - policyUpdate models.PolicyUpdate) *models.ProblemDetails { + policyUpdate models.PolicyUpdate, +) *models.ProblemDetails { amfSelf := context.AMF_Self() ue, ok := amfSelf.AmfUeFindByPolicyAssociationID(polAssoID) @@ -332,7 +332,7 @@ func HandleAmPolicyControlUpdateNotifyTerminate(request *http_wrapper.Request) * ue.EventChannel.SubmitMessage(sbiMsg) msg := <-sbiMsg.Result - //problemDetails := AmPolicyControlUpdateNotifyTerminateProcedure(polAssoID, terminationNotification) + // problemDetails := AmPolicyControlUpdateNotifyTerminateProcedure(polAssoID, terminationNotification) if msg.ProblemDetails != nil { return http_wrapper.NewResponse(int(msg.ProblemDetails.(*models.ProblemDetails).Status), nil, msg.ProblemDetails.(*models.ProblemDetails)) } else { @@ -341,7 +341,8 @@ func HandleAmPolicyControlUpdateNotifyTerminate(request *http_wrapper.Request) * } func AmPolicyControlUpdateNotifyTerminateProcedure(polAssoID string, - terminationNotification models.TerminationNotification) *models.ProblemDetails { + terminationNotification models.TerminationNotification, +) *models.ProblemDetails { amfSelf := context.AMF_Self() ue, ok := amfSelf.AmfUeFindByPolicyAssociationID(polAssoID) @@ -466,7 +467,7 @@ func NfSubscriptionStatusNotifyProcedure(notificationData models.NotificationDat } nfInstanceId := notificationData.NfInstanceUri[strings.LastIndex(notificationData.NfInstanceUri, "/")+1:] - logger.ProducerLog.Infof("Recieved Subscription Status Notification from NRF: %v", notificationData.Event) + logger.ProducerLog.Infof("Received Subscription Status Notification from NRF: %v", notificationData.Event) // If nrf caching is enabled, go ahead and delete the entry from the cache. // This will force the amf to do nf discovery and get the updated nf profile from the nrf. if notificationData.Event == models.NotificationEventType_DEREGISTERED { diff --git a/producer/callback/n1n2message.go b/producer/callback/n1n2message.go index 26388ffb..e7f8c7a5 100644 --- a/producer/callback/n1n2message.go +++ b/producer/callback/n1n2message.go @@ -9,12 +9,11 @@ import ( "context" "strconv" - "github.com/sirupsen/logrus" - amf_context "github.com/omec-project/amf/context" "github.com/omec-project/amf/logger" "github.com/omec-project/openapi/Namf_Communication" "github.com/omec-project/openapi/models" + "github.com/sirupsen/logrus" ) var HttpLog *logrus.Entry @@ -54,7 +53,8 @@ func SendN1N2TransferFailureNotification(ue *amf_context.AmfUe, cause models.N1N } func SendN1MessageNotify(ue *amf_context.AmfUe, n1class models.N1MessageClass, n1Msg []byte, - registerContext *models.RegistrationContextContainer) { + registerContext *models.RegistrationContextContainer, +) { ue.N1N2MessageSubscription.Range(func(key, value interface{}) bool { subscriptionID := key.(int64) subscription := value.(models.UeN1N2InfoSubscriptionCreateData) @@ -91,7 +91,8 @@ func SendN1MessageNotify(ue *amf_context.AmfUe, n1class models.N1MessageClass, n // TS 29.518 5.2.2.3.5.2 func SendN1MessageNotifyAtAMFReAllocation( - ue *amf_context.AmfUe, n1Msg []byte, registerContext *models.RegistrationContextContainer) { + ue *amf_context.AmfUe, n1Msg []byte, registerContext *models.RegistrationContextContainer, +) { configuration := Namf_Communication.NewConfiguration() client := Namf_Communication.NewAPIClient(configuration) diff --git a/producer/event_exposure.go b/producer/event_exposure.go index 715e3370..60de2da7 100644 --- a/producer/event_exposure.go +++ b/producer/event_exposure.go @@ -35,7 +35,8 @@ func HandleCreateAMFEventSubscription(request *http_wrapper.Request) *http_wrapp // TODO: handle event filter func CreateAMFEventSubscriptionProcedure(createEventSubscription models.AmfCreateEventSubscription) ( - *models.AmfCreatedEventSubscription, *models.ProblemDetails) { + *models.AmfCreatedEventSubscription, *models.ProblemDetails, +) { amfSelf := context.AMF_Self() createdEventSubscription := &models.AmfCreatedEventSubscription{} @@ -249,7 +250,8 @@ func HandleModifyAMFEventSubscription(request *http_wrapper.Request) *http_wrapp func ModifyAMFEventSubscriptionProcedure( subscriptionID string, modifySubscriptionRequest models.ModifySubscriptionRequest) ( - *models.AmfUpdatedEventSubscription, *models.ProblemDetails) { + *models.AmfUpdatedEventSubscription, *models.ProblemDetails, +) { amfSelf := context.AMF_Self() contextSubscription, ok := amfSelf.FindEventSubscription(subscriptionID) @@ -317,7 +319,8 @@ func subReports(ue *context.AmfUe, subscriptionId string) { // DO NOT handle AmfEventType_PRESENCE_IN_AOI_REPORT and AmfEventType_UES_IN_AREA_REPORT(about area) func NewAmfEventReport(ue *context.AmfUe, Type models.AmfEventType, subscriptionId string) ( - report models.AmfEventReport, ok bool) { + report models.AmfEventReport, ok bool, +) { ueSubscription, ok := ue.EventSubscriptionsInfo[subscriptionId] if !ok { return report, ok diff --git a/producer/location_info.go b/producer/location_info.go index a669da83..e4182829 100644 --- a/producer/location_info.go +++ b/producer/location_info.go @@ -55,7 +55,7 @@ func HandleProvideLocationInfoRequest(request *http_wrapper.Request) *http_wrapp if msg.RespData != nil { provideLocInfo = msg.RespData.(*models.ProvideLocInfo) } - //provideLocInfo, problemDetails := ProvideLocationInfoProcedure(requestLocInfo, ueContextID) + // provideLocInfo, problemDetails := ProvideLocationInfoProcedure(requestLocInfo, ueContextID) if msg.ProblemDetails != nil { return http_wrapper.NewResponse(int(msg.ProblemDetails.(*models.ProblemDetails).Status), nil, msg.ProblemDetails.(*models.ProblemDetails)) } else { @@ -64,7 +64,8 @@ func HandleProvideLocationInfoRequest(request *http_wrapper.Request) *http_wrapp } func ProvideLocationInfoProcedure(requestLocInfo models.RequestLocInfo, ueContextID string) ( - *models.ProvideLocInfo, *models.ProblemDetails) { + *models.ProvideLocInfo, *models.ProblemDetails, +) { amfSelf := context.AMF_Self() ue, ok := amfSelf.AmfUeFindByUeContextID(ueContextID) diff --git a/producer/mt.go b/producer/mt.go index dd19c98e..94dc696d 100644 --- a/producer/mt.go +++ b/producer/mt.go @@ -56,7 +56,7 @@ func HandleProvideDomainSelectionInfoRequest(request *http_wrapper.Request) *htt if msg.RespData != nil { ueContextInfo = msg.RespData.(*models.UeContextInfo) } - //ueContextInfo, problemDetails := ProvideDomainSelectionInfoProcedure(ueContextID, + // ueContextInfo, problemDetails := ProvideDomainSelectionInfoProcedure(ueContextID, // infoClassQuery, supportedFeaturesQuery) if msg.ProblemDetails != nil { return http_wrapper.NewResponse(int(msg.ProblemDetails.(models.ProblemDetails).Status), nil, msg.ProblemDetails.(models.ProblemDetails)) @@ -66,7 +66,8 @@ func HandleProvideDomainSelectionInfoRequest(request *http_wrapper.Request) *htt } func ProvideDomainSelectionInfoProcedure(ueContextID string, infoClassQuery string, supportedFeaturesQuery string) ( - *models.UeContextInfo, *models.ProblemDetails) { + *models.UeContextInfo, *models.ProblemDetails, +) { amfSelf := context.AMF_Self() ue, ok := amfSelf.AmfUeFindByUeContextID(ueContextID) diff --git a/producer/n1n2message.go b/producer/n1n2message.go index 6b4853a8..634c417a 100644 --- a/producer/n1n2message.go +++ b/producer/n1n2message.go @@ -120,7 +120,8 @@ func N1N2MessageTransferProcedure(ueContextID string, reqUri string, n1n2MessageTransferRequest models.N1N2MessageTransferRequest) ( n1n2MessageTransferRspData *models.N1N2MessageTransferRspData, locationHeader string, problemDetails *models.ProblemDetails, - transferErr *models.N1N2MessageTransferError) { + transferErr *models.N1N2MessageTransferError, +) { var ( requestData *models.N1N2MessageTransferReqData = n1n2MessageTransferRequest.JsonData n2Info []byte = n1n2MessageTransferRequest.BinaryDataN2Information @@ -268,7 +269,7 @@ func N1N2MessageTransferProcedure(ueContextID string, reqUri string, } n1n2MessageTransferRspData = new(models.N1N2MessageTransferRspData) n1n2MessageTransferRspData.Cause = models.N1N2MessageTransferCause_N1_N2_TRANSFER_INITIATED - //context.StoreContextInDB(ue) + // context.StoreContextInDB(ue) return n1n2MessageTransferRspData, "", nil, nil case models.NgapIeType_PDU_RES_MOD_REQ: ue.ProducerLog.Debugln("AMF Transfer NGAP PDU Session Resource Modify Request from SMF") @@ -277,7 +278,7 @@ func N1N2MessageTransferProcedure(ueContextID string, reqUri string, ngap_message.SendPDUSessionResourceModifyRequest(ue.RanUe[anType], list) n1n2MessageTransferRspData = new(models.N1N2MessageTransferRspData) n1n2MessageTransferRspData.Cause = models.N1N2MessageTransferCause_N1_N2_TRANSFER_INITIATED - //context.StoreContextInDB(ue) + // context.StoreContextInDB(ue) return n1n2MessageTransferRspData, "", nil, nil case models.NgapIeType_PDU_RES_REL_CMD: ue.ProducerLog.Debugln("AMF Transfer NGAP PDU Session Resource Release Command from SMF") @@ -286,7 +287,7 @@ func N1N2MessageTransferProcedure(ueContextID string, reqUri string, ngap_message.SendPDUSessionResourceReleaseCommand(ue.RanUe[anType], nasPdu, list) n1n2MessageTransferRspData = new(models.N1N2MessageTransferRspData) n1n2MessageTransferRspData.Cause = models.N1N2MessageTransferCause_N1_N2_TRANSFER_INITIATED - //context.StoreContextInDB(ue) + // context.StoreContextInDB(ue) return n1n2MessageTransferRspData, "", nil, nil default: ue.ProducerLog.Errorf("NGAP IE Type[%s] is not supported for SmInfo", smInfo.N2InfoContent.NgapIeType) @@ -453,7 +454,7 @@ func HandleN1N2MessageTransferStatusRequest(request *http_wrapper.Request) *http n1n2MessageRspData = msg.RespData.(*models.N1N2MessageTransferCause) } - //status, problemDetails := N1N2MessageTransferStatusProcedure(ueContextID, reqUri) + // status, problemDetails := N1N2MessageTransferStatusProcedure(ueContextID, reqUri) if msg.ProblemDetails != nil { return http_wrapper.NewResponse(int(msg.ProblemDetails.(*models.ProblemDetails).Status), nil, msg.ProblemDetails.(*models.ProblemDetails)) } else { @@ -462,7 +463,8 @@ func HandleN1N2MessageTransferStatusRequest(request *http_wrapper.Request) *http } func N1N2MessageTransferStatusProcedure(ueContextID string, reqUri string) (models.N1N2MessageTransferCause, - *models.ProblemDetails) { + *models.ProblemDetails, +) { amfSelf := context.AMF_Self() ue, ok := amfSelf.AmfUeFindByUeContextID(ueContextID) @@ -516,7 +518,7 @@ func HandleN1N2MessageSubscirbeRequest(request *http_wrapper.Request) *http_wrap if msg.RespData != nil { n1n2MessageRspData = msg.RespData.(*models.UeN1N2InfoSubscriptionCreateData) } - //ueN1N2InfoSubscriptionCreatedData, problemDetails := N1N2MessageSubscribeProcedure(ueContextID, ueN1N2InfoSubscriptionCreateData) + // ueN1N2InfoSubscriptionCreatedData, problemDetails := N1N2MessageSubscribeProcedure(ueContextID, ueN1N2InfoSubscriptionCreateData) if msg.ProblemDetails != nil { return http_wrapper.NewResponse(int(msg.ProblemDetails.(*models.ProblemDetails).Status), nil, msg.ProblemDetails.(*models.ProblemDetails)) } else { @@ -526,7 +528,8 @@ func HandleN1N2MessageSubscirbeRequest(request *http_wrapper.Request) *http_wrap func N1N2MessageSubscribeProcedure(ueContextID string, ueN1N2InfoSubscriptionCreateData models.UeN1N2InfoSubscriptionCreateData) ( - *models.UeN1N2InfoSubscriptionCreatedData, *models.ProblemDetails) { + *models.UeN1N2InfoSubscriptionCreatedData, *models.ProblemDetails, +) { amfSelf := context.AMF_Self() ue, ok := amfSelf.AmfUeFindByUeContextID(ueContextID) diff --git a/producer/subscription.go b/producer/subscription.go index 9c8214ae..11b24643 100644 --- a/producer/subscription.go +++ b/producer/subscription.go @@ -33,7 +33,8 @@ func HandleAMFStatusChangeSubscribeRequest(request *http_wrapper.Request) *http_ } func AMFStatusChangeSubscribeProcedure(subscriptionDataReq models.SubscriptionData) ( - subscriptionDataRsp models.SubscriptionData, locationHeader string, problemDetails *models.ProblemDetails) { + subscriptionDataRsp models.SubscriptionData, locationHeader string, problemDetails *models.ProblemDetails, +) { amfSelf := context.AMF_Self() for _, guami := range subscriptionDataReq.GuamiList { @@ -105,7 +106,8 @@ func HandleAMFStatusChangeSubscribeModify(request *http_wrapper.Request) *http_w } func AMFStatusChangeSubscribeModifyProcedure(subscriptionID string, subscriptionData models.SubscriptionData) ( - *models.SubscriptionData, *models.ProblemDetails) { + *models.SubscriptionData, *models.ProblemDetails, +) { amfSelf := context.AMF_Self() if currentSubscriptionData, ok := amfSelf.FindAMFStatusSubscription(subscriptionID); !ok { diff --git a/producer/ue_context.go b/producer/ue_context.go index 62b4ca80..a21a9f69 100644 --- a/producer/ue_context.go +++ b/producer/ue_context.go @@ -73,7 +73,7 @@ func HandleCreateUEContextRequest(request *http_wrapper.Request) *http_wrapper.R if msg.TransferErr != nil { ueContextCreateErr = msg.TransferErr.(*models.UeContextCreateError) } - //createUeContextResponse, ueContextCreateError := CreateUEContextProcedure(ueContextID, createUeContextRequest) + // createUeContextResponse, ueContextCreateError := CreateUEContextProcedure(ueContextID, createUeContextRequest) if ueContextCreateErr != nil { return http_wrapper.NewResponse(int(ueContextCreateErr.Error.Status), nil, ueContextCreateErr) } else { @@ -82,7 +82,8 @@ func HandleCreateUEContextRequest(request *http_wrapper.Request) *http_wrapper.R } func CreateUEContextProcedure(ueContextID string, createUeContextRequest models.CreateUeContextRequest) ( - *models.CreateUeContextResponse, *models.UeContextCreateError) { + *models.CreateUeContextResponse, *models.UeContextCreateError, +) { amfSelf := context.AMF_Self() ueContextCreateData := createUeContextRequest.JsonData @@ -205,7 +206,7 @@ func HandleReleaseUEContextRequest(request *http_wrapper.Request) *http_wrapper. ue.EventChannel.SubmitMessage(sbiMsg) msg := <-sbiMsg.Result - //problemDetails := ReleaseUEContextProcedure(ueContextID, ueContextRelease) + // problemDetails := ReleaseUEContextProcedure(ueContextID, ueContextRelease) if msg.ProblemDetails != nil { return http_wrapper.NewResponse(int(msg.ProblemDetails.(*models.ProblemDetails).Status), nil, msg.ProblemDetails.(*models.ProblemDetails)) } else { @@ -280,7 +281,7 @@ func HandleUEContextTransferRequest(request *http_wrapper.Request) *http_wrapper ueContextTransferResponse = msg.RespData.(*models.UeContextTransferResponse) } - //ueContextTransferResponse, problemDetails := UEContextTransferProcedure(ueContextID, ueContextTransferRequest) + // ueContextTransferResponse, problemDetails := UEContextTransferProcedure(ueContextID, ueContextTransferRequest) if msg.ProblemDetails != nil { return http_wrapper.NewResponse(int(msg.ProblemDetails.(*models.ProblemDetails).Status), nil, msg.ProblemDetails.(*models.ProblemDetails)) } else { @@ -289,7 +290,8 @@ func HandleUEContextTransferRequest(request *http_wrapper.Request) *http_wrapper } func UEContextTransferProcedure(ueContextID string, ueContextTransferRequest models.UeContextTransferRequest) ( - *models.UeContextTransferResponse, *models.ProblemDetails) { + *models.UeContextTransferResponse, *models.ProblemDetails, +) { amfSelf := context.AMF_Self() if ueContextTransferRequest.JsonData == nil { @@ -501,7 +503,7 @@ func HandleAssignEbiDataRequest(request *http_wrapper.Request) *http_wrapper.Res amfSelf := context.AMF_Self() - //assignedEbiData, assignEbiError, problemDetails := AssignEbiDataProcedure(ueContextID, assignEbiData) + // assignedEbiData, assignEbiError, problemDetails := AssignEbiDataProcedure(ueContextID, assignEbiData) ue, ok := amfSelf.AmfUeFindByUeContextID(ueContextID) if !ok { problemDetails := &models.ProblemDetails{ @@ -538,7 +540,8 @@ func HandleAssignEbiDataRequest(request *http_wrapper.Request) *http_wrapper.Res } func AssignEbiDataProcedure(ueContextID string, assignEbiData models.AssignEbiData) ( - *models.AssignedEbiData, *models.AssignEbiError, *models.ProblemDetails) { + *models.AssignedEbiData, *models.AssignEbiError, *models.ProblemDetails, +) { amfSelf := context.AMF_Self() ue, ok := amfSelf.AmfUeFindByUeContextID(ueContextID) @@ -591,7 +594,7 @@ func HandleRegistrationStatusUpdateRequest(request *http_wrapper.Request) *http_ if msg.RespData != nil { ueRegStatusUpdateRspData = msg.RespData.(*models.UeRegStatusUpdateRspData) } - //ueRegStatusUpdateRspData, problemDetails := RegistrationStatusUpdateProcedure(ueContextID, ueRegStatusUpdateReqData) + // ueRegStatusUpdateRspData, problemDetails := RegistrationStatusUpdateProcedure(ueContextID, ueRegStatusUpdateReqData) if msg.ProblemDetails != nil { return http_wrapper.NewResponse(int(msg.ProblemDetails.(*models.ProblemDetails).Status), nil, msg.ProblemDetails.(*models.ProblemDetails)) } else { @@ -600,7 +603,8 @@ func HandleRegistrationStatusUpdateRequest(request *http_wrapper.Request) *http_ } func RegistrationStatusUpdateProcedure(ueContextID string, ueRegStatusUpdateReqData models.UeRegStatusUpdateReqData) ( - *models.UeRegStatusUpdateRspData, *models.ProblemDetails) { + *models.UeRegStatusUpdateRspData, *models.ProblemDetails, +) { amfSelf := context.AMF_Self() // ueContextID must be a 5g GUTI (TS 29.518 6.1.3.2.4.5.1) diff --git a/service/amf_server.go b/service/amf_server.go index c037c4ea..b3f04a2d 100644 --- a/service/amf_server.go +++ b/service/amf_server.go @@ -63,10 +63,14 @@ func (s *Server) HandleMessage(srv sdcoreAmfServer.NgapService_HandleMessageServ log.Printf("RanID: %v for GnbId: %v", ran.RanID(), req.GnbId) rsp.GnbId = req.GnbId - //send nf(gnb) status notification - gnbStatus := mi.MetricEvent{EventType: mi.CNfStatusEvt, - NfStatusData: mi.CNfStatus{NfType: mi.NfTypeGnb, - NfStatus: mi.NfStatusConnected, NfName: req.GnbId}} + // send nf(gnb) status notification + gnbStatus := mi.MetricEvent{ + EventType: mi.CNfStatusEvt, + NfStatusData: mi.CNfStatus{ + NfType: mi.NfTypeGnb, + NfStatus: mi.NfStatusConnected, NfName: req.GnbId, + }, + } metrics.StatWriter.PublishNfStatusEvent(gnbStatus) } } @@ -77,17 +81,25 @@ func (s *Server) HandleMessage(srv sdcoreAmfServer.NgapService_HandleMessageServ } else if req.Msgtype == sdcoreAmfServer.MsgType_GNB_DISC { log.Println("GNB disconnected") ngap.HandleSCTPNotificationLb(req.GnbId) - //send nf(gnb) status notification - gnbStatus := mi.MetricEvent{EventType: mi.CNfStatusEvt, - NfStatusData: mi.CNfStatus{NfType: mi.NfTypeGnb, - NfStatus: mi.NfStatusDisconnected, NfName: req.GnbId}} + // send nf(gnb) status notification + gnbStatus := mi.MetricEvent{ + EventType: mi.CNfStatusEvt, + NfStatusData: mi.CNfStatus{ + NfType: mi.NfTypeGnb, + NfStatus: mi.NfStatusDisconnected, NfName: req.GnbId, + }, + } metrics.StatWriter.PublishNfStatusEvent(gnbStatus) } else if req.Msgtype == sdcoreAmfServer.MsgType_GNB_CONN { log.Println("New GNB Connected ") - //send nf(gnb) status notification - gnbStatus := mi.MetricEvent{EventType: mi.CNfStatusEvt, - NfStatusData: mi.CNfStatus{NfType: mi.NfTypeGnb, - NfStatus: mi.NfStatusConnected, NfName: req.GnbId}} + // send nf(gnb) status notification + gnbStatus := mi.MetricEvent{ + EventType: mi.CNfStatusEvt, + NfStatusData: mi.CNfStatus{ + NfType: mi.NfTypeGnb, + NfStatus: mi.NfStatusConnected, NfName: req.GnbId, + }, + } metrics.StatWriter.PublishNfStatusEvent(gnbStatus) } else { ngap.DispatchLb(req, Amf2RanMsgChan) @@ -98,7 +110,6 @@ func (s *Server) HandleMessage(srv sdcoreAmfServer.NgapService_HandleMessageServ } func StartGrpcServer(port int) { - endpt := fmt.Sprintf(":%d", port) fmt.Println("Listen - ", endpt) lis, err := net.Listen("tcp", endpt) diff --git a/service/init.go b/service/init.go index af82f4f0..89f8fb8e 100644 --- a/service/init.go +++ b/service/init.go @@ -11,7 +11,7 @@ import ( "bufio" "fmt" "net/http" - _ "net/http/pprof" //Using package only for invoking initialization. + _ "net/http/pprof" // Using package only for invoking initialization. "os" "os/exec" "os/signal" @@ -20,13 +20,8 @@ import ( "syscall" "time" - nrf_cache "github.com/omec-project/nrf/nrfcache" - - "github.com/gin-contrib/cors" - "github.com/sirupsen/logrus" - "github.com/urfave/cli" - "github.com/fsnotify/fsnotify" + "github.com/gin-contrib/cors" "github.com/omec-project/amf/communication" "github.com/omec-project/amf/consumer" "github.com/omec-project/amf/context" @@ -53,10 +48,13 @@ import ( "github.com/omec-project/logger_util" nasLogger "github.com/omec-project/nas/logger" ngapLogger "github.com/omec-project/ngap/logger" + nrf_cache "github.com/omec-project/nrf/nrfcache" "github.com/omec-project/openapi/models" "github.com/omec-project/path_util" pathUtilLogger "github.com/omec-project/path_util/logger" + "github.com/sirupsen/logrus" "github.com/spf13/viper" + "github.com/urfave/cli" ) type AMF struct{} @@ -118,7 +116,7 @@ func (amf *AMF) Initialize(c *cli.Context) error { amf.setLogLevel() - //Initiating a server for profiling + // Initiating a server for profiling if factory.AmfConfig.Configuration.DebugProfilePort != 0 { addr := fmt.Sprintf(":%d", factory.AmfConfig.Configuration.DebugProfilePort) go func() { @@ -153,7 +151,7 @@ func (amf *AMF) Initialize(c *cli.Context) error { } else { go func() { logger.GrpcLog.Infoln("Reading Amf Configuration from Helm") - //sending true to the channel for sending NFRegistration to NRF + // sending true to the channel for sending NFRegistration to NRF RocUpdateConfigChannel <- true }() } @@ -487,7 +485,7 @@ func (amf *AMF) StartKeepAliveTimer(nfProfile models.NfProfile) { nfProfile.HeartBeatTimer = 60 } logger.InitLog.Infof("Started KeepAlive Timer: %v sec", nfProfile.HeartBeatTimer) - //AfterFunc starts timer and waits for KeepAliveTimer to elapse and then calls amf.UpdateNF function + // AfterFunc starts timer and waits for KeepAliveTimer to elapse and then calls amf.UpdateNF function KeepAliveTimer = time.AfterFunc(time.Duration(nfProfile.HeartBeatTimer)*time.Second, amf.UpdateNF) } @@ -507,7 +505,7 @@ func (amf *AMF) BuildAndSendRegisterNFInstance() (models.NfProfile, error) { return profile, err } initLog.Infof("Pcf Profile Registering to NRF: %v", profile) - //Indefinite attempt to register until success + // Indefinite attempt to register until success profile, _, self.NfId, err = consumer.SendRegisterNFInstance(self.NrfUri, self.NfId, profile) return profile, err } @@ -520,7 +518,7 @@ func (amf *AMF) UpdateNF() { initLog.Warnf("KeepAlive timer has been stopped.") return } - //setting default value 30 sec + // setting default value 30 sec var heartBeatTimer int32 = 60 pitem := models.PatchItem{ Op: "replace", @@ -532,10 +530,10 @@ func (amf *AMF) UpdateNF() { nfProfile, problemDetails, err := consumer.SendUpdateNFInstance(patchItem) if problemDetails != nil { initLog.Errorf("AMF update to NRF ProblemDetails[%v]", problemDetails) - //5xx response from NRF, 404 Not Found, 400 Bad Request + // 5xx response from NRF, 404 Not Found, 400 Bad Request if (problemDetails.Status/100) == 5 || problemDetails.Status == 404 || problemDetails.Status == 400 { - //register with NRF full profile + // register with NRF full profile nfProfile, err = amf.BuildAndSendRegisterNFInstance() } } else if err != nil { @@ -548,7 +546,7 @@ func (amf *AMF) UpdateNF() { heartBeatTimer = nfProfile.HeartBeatTimer } logger.InitLog.Debugf("Restarted KeepAlive Timer: %v sec", heartBeatTimer) - //restart timer with received HeartBeatTimer value + // restart timer with received HeartBeatTimer value KeepAliveTimer = time.AfterFunc(time.Duration(heartBeatTimer)*time.Second, amf.UpdateNF) } @@ -563,16 +561,13 @@ func (amf *AMF) UpdateAmfConfiguration(plmn factory.PlmnSupportItem, taiList []m if nssai_r == nssai { found = true if opType == protos.OpType_SLICE_DELETE { - factory.AmfConfig.Configuration.PlmnSupportList[plmnindex].SNssaiList = - append(factory.AmfConfig.Configuration.PlmnSupportList[plmnindex].SNssaiList[:i], p.SNssaiList[i+1:]...) + factory.AmfConfig.Configuration.PlmnSupportList[plmnindex].SNssaiList = append(factory.AmfConfig.Configuration.PlmnSupportList[plmnindex].SNssaiList[:i], p.SNssaiList[i+1:]...) if len(factory.AmfConfig.Configuration.PlmnSupportList[plmnindex].SNssaiList) == 0 { - factory.AmfConfig.Configuration.PlmnSupportList = - append(factory.AmfConfig.Configuration.PlmnSupportList[:plmnindex], - factory.AmfConfig.Configuration.PlmnSupportList[plmnindex+1:]...) + factory.AmfConfig.Configuration.PlmnSupportList = append(factory.AmfConfig.Configuration.PlmnSupportList[:plmnindex], + factory.AmfConfig.Configuration.PlmnSupportList[plmnindex+1:]...) - factory.AmfConfig.Configuration.ServedGumaiList = - append(factory.AmfConfig.Configuration.ServedGumaiList[:plmnindex], - factory.AmfConfig.Configuration.ServedGumaiList[plmnindex+1:]...) + factory.AmfConfig.Configuration.ServedGumaiList = append(factory.AmfConfig.Configuration.ServedGumaiList[:plmnindex], + factory.AmfConfig.Configuration.ServedGumaiList[plmnindex+1:]...) } } break @@ -581,29 +576,26 @@ func (amf *AMF) UpdateAmfConfiguration(plmn factory.PlmnSupportItem, taiList []m if !found && opType != protos.OpType_SLICE_DELETE { logger.GrpcLog.Infof("plmn found but slice not found in AMF Configuration") - factory.AmfConfig.Configuration.PlmnSupportList[plmnindex].SNssaiList = - append(factory.AmfConfig.Configuration.PlmnSupportList[plmnindex].SNssaiList, nssai_r) + factory.AmfConfig.Configuration.PlmnSupportList[plmnindex].SNssaiList = append(factory.AmfConfig.Configuration.PlmnSupportList[plmnindex].SNssaiList, nssai_r) } break } } - var guami = models.Guami{PlmnId: &plmn.PlmnId, AmfId: "cafe00"} + guami := models.Guami{PlmnId: &plmn.PlmnId, AmfId: "cafe00"} if !plmnFound && opType != protos.OpType_SLICE_DELETE { - factory.AmfConfig.Configuration.PlmnSupportList = - append(factory.AmfConfig.Configuration.PlmnSupportList, plmn) - factory.AmfConfig.Configuration.ServedGumaiList = - append(factory.AmfConfig.Configuration.ServedGumaiList, guami) + factory.AmfConfig.Configuration.PlmnSupportList = append(factory.AmfConfig.Configuration.PlmnSupportList, plmn) + factory.AmfConfig.Configuration.ServedGumaiList = append(factory.AmfConfig.Configuration.ServedGumaiList, guami) } logger.GrpcLog.Infof("SupportedPlmnLIst: %v, SupportGuamiLIst: %v received fromRoc\n", plmn, guami) logger.GrpcLog.Infof("SupportedPlmnLIst: %v, SupportGuamiLIst: %v in AMF\n", factory.AmfConfig.Configuration.PlmnSupportList, factory.AmfConfig.Configuration.ServedGumaiList) - //same plmn received but Tacs in gnb updated + // same plmn received but Tacs in gnb updated nssai_r := plmn.SNssaiList[0] slice := strconv.FormatInt(int64(nssai_r.Sst), 10) + nssai_r.Sd delete(factory.AmfConfig.Configuration.SliceTaiList, slice) if opType != protos.OpType_SLICE_DELETE { - //maintaining slice level tai List + // maintaining slice level tai List if factory.AmfConfig.Configuration.SliceTaiList == nil { factory.AmfConfig.Configuration.SliceTaiList = make(map[string][]models.Tai) } @@ -620,11 +612,11 @@ func (amf *AMF) UpdateSupportedTaiList() { for _, slice := range factory.AmfConfig.Configuration.SliceTaiList { for _, tai := range slice { logger.GrpcLog.Infoln("Tai list present in Slice", tai, factory.AmfConfig.Configuration.SupportTAIList) - factory.AmfConfig.Configuration.SupportTAIList = - append(factory.AmfConfig.Configuration.SupportTAIList, tai) + factory.AmfConfig.Configuration.SupportTAIList = append(factory.AmfConfig.Configuration.SupportTAIList, tai) } } } + func (amf *AMF) UpdateConfig(commChannel chan *protos.NetworkSliceResponse) bool { for rsp := range commChannel { logger.GrpcLog.Infof("Received updateConfig in the amf app : %v", rsp) @@ -642,7 +634,7 @@ func (amf *AMF) UpdateConfig(commChannel chan *protos.NetworkSliceResponse) bool snssai.Sst = int32(val) snssai.Sd = ns.Nssai.Sd } - //inform connected UEs with update slices + // inform connected UEs with update slices if len(ns.DeletedImsis) > 0 { HandleImsiDeleteFromNetworkSlice(ns) } @@ -680,13 +672,12 @@ func (amf *AMF) UpdateConfig(commChannel chan *protos.NetworkSliceResponse) bool } else { logger.GrpcLog.Infoln("Plmn not present in the message ") } - } } // end of network slice for loop - //Update PlmnSupportList/ServedGuamiList/ServedTAIList in Amf Config - //factory.AmfConfig.Configuration.ServedGumaiList = nil - //factory.AmfConfig.Configuration.PlmnSupportList = nil + // Update PlmnSupportList/ServedGuamiList/ServedTAIList in Amf Config + // factory.AmfConfig.Configuration.ServedGumaiList = nil + // factory.AmfConfig.Configuration.PlmnSupportList = nil if len(factory.AmfConfig.Configuration.ServedGumaiList) > 0 { RocUpdateConfigChannel <- true } @@ -695,7 +686,7 @@ func (amf *AMF) UpdateConfig(commChannel chan *protos.NetworkSliceResponse) bool } func (amf *AMF) SendNFProfileUpdateToNrf() { - //for rocUpdateConfig := range RocUpdateConfigChannel { + // for rocUpdateConfig := range RocUpdateConfigChannel { for rocUpdateConfig := range RocUpdateConfigChannel { if rocUpdateConfig { self := context.AMF_Self() @@ -713,7 +704,7 @@ func (amf *AMF) SendNFProfileUpdateToNrf() { if prof, _, nfId, err := consumer.SendRegisterNFInstance(self.NrfUri, self.NfId, profile); err != nil { logger.CfgLog.Warnf("Send Register NF Instance with updated profile failed: %+v", err) } else { - //stop keepAliveTimer if its running and start the timer + // stop keepAliveTimer if its running and start the timer amf.StartKeepAliveTimer(prof) self.NfId = nfId logger.CfgLog.Infof("Sent Register NF Instance with updated profile") @@ -781,7 +772,7 @@ func HandleImsiDeleteFromNetworkSlice(slice *protos.NetworkSlice) { logger.CfgLog.Infof("the UE [%v] is not Registered with the 5G-Core", supi) continue } - //publish the event to ue channel + // publish the event to ue channel configMsg := context.ConfigMsg{ Supi: supi, Msg: slice, @@ -806,7 +797,7 @@ func HandleImsiAddInNetworkSlice(slice *protos.NetworkSlice) { logger.CfgLog.Infof("the UE [%v] is not Registered with the 5G-Core", supi) continue } - //publish the event to ue channel + // publish the event to ue channel configMsg := context.ConfigMsg{ Supi: supi, Msg: slice, diff --git a/util/convert.go b/util/convert.go index 64eef1c3..ce8c0437 100644 --- a/util/convert.go +++ b/util/convert.go @@ -42,7 +42,6 @@ func SeperateAmfId(amfid string) (regionId, setId, ptrId string, err error) { regionId = amfid[:2] byteArray, err1 := hex.DecodeString(amfid[2:]) if err1 != nil { - err = err1 return } diff --git a/util/init_context.go b/util/init_context.go index f9b92f49..6c81f246 100644 --- a/util/init_context.go +++ b/util/init_context.go @@ -11,14 +11,13 @@ import ( "time" "github.com/google/uuid" - "github.com/omec-project/util/drsm" - "github.com/omec-project/amf/context" "github.com/omec-project/amf/factory" "github.com/omec-project/amf/logger" "github.com/omec-project/amf/metrics" "github.com/omec-project/nas/security" "github.com/omec-project/openapi/models" + "github.com/omec-project/util/drsm" ) func InitDrsm() (drsm.DrsmInterface, error) { diff --git a/util/mock.drsm.go b/util/mock.drsm.go index 9ac3d0c8..db901b8f 100644 --- a/util/mock.drsm.go +++ b/util/mock.drsm.go @@ -20,13 +20,12 @@ type MockDrsmInterface interface { DeleteIpPool(poolName string) error DeletePod(string) } -type MockDrsm struct { -} +type MockDrsm struct{} func MockDrsmInit() (drsm.DrsmInterface, error) { - //db := drsm.DbInfo{"mongodb://mongodb", "amf"} - //podId := drsm.PodId{"amf-instance1", "1.1.1.1"} - //opt := &drsm.Options{ResIdSize: 24, Mode: drsm.ResourceClient} + // db := drsm.DbInfo{"mongodb://mongodb", "amf"} + // podId := drsm.PodId{"amf-instance1", "1.1.1.1"} + // opt := &drsm.Options{ResIdSize: 24, Mode: drsm.ResourceClient} d := &MockDrsm{} return d, nil } diff --git a/util/search_nf_service.go b/util/search_nf_service.go index 7a0bdcd5..fb53806a 100644 --- a/util/search_nf_service.go +++ b/util/search_nf_service.go @@ -12,7 +12,8 @@ import ( ) func SearchNFServiceUri(nfProfile models.NfProfile, serviceName models.ServiceName, - nfServiceStatus models.NfServiceStatus) (nfUri string) { + nfServiceStatus models.NfServiceStatus, +) (nfUri string) { if nfProfile.NfServices != nil { for _, service := range *nfProfile.NfServices { if service.ServiceName == serviceName && service.NfServiceStatus == nfServiceStatus {