├── testdata ├── GmmMessage │ ├── MaxStatus5GMM │ ├── MinStatus5GMM │ ├── MaxIdentityRequest │ ├── MaxNotification │ ├── MinIdentityRequest │ ├── MinNotification │ ├── MaxSecurityModeReject │ ├── MinIdentityResponse │ ├── MinSecurityModeReject │ ├── MaxConfigurationUpdateComplete │ ├── MinAuthenticationReject │ ├── MinConfigurationUpdateComplete │ ├── MinNotificationResponse │ ├── MinAuthenticationResult │ ├── MinDLNASTransport │ ├── MinRegistrationReject │ ├── MinServiceReject │ ├── MinSecurityModeComplete │ ├── MinServiceAccept │ ├── MaxAuthenticationFailure │ ├── MinAuthenticationFailure │ ├── MinServiceRequest │ ├── MaxDeregistrationAcceptUEOriginatingDeregistration │ ├── MaxDeregistrationAcceptUETerminatedDeregistration │ ├── MinDeregistrationAcceptUEOriginatingDeregistration │ ├── MinDeregistrationAcceptUETerminatedDeregistration │ ├── MinRegistrationComplete │ ├── MinAuthenticationResponse │ ├── MaxDeregistrationRequestUETerminatedDeregistration │ ├── MinDeregistrationRequestUEOriginatingDeregistration │ ├── MinDeregistrationRequestUETerminatedDeregistration │ ├── MaxNotificationResponse │ ├── MinAuthenticationRequest │ ├── MaxDLNASTransport │ ├── MaxServiceAccept │ ├── MaxServiceReject │ ├── MaxServiceRequest │ ├── MaxULNASTransport │ ├── MinULNASTransport │ ├── MaxIdentityResponse │ ├── MaxAuthenticationReject │ ├── MaxAuthenticationResult │ ├── MaxRegistrationAccept │ ├── MaxRegistrationComplete │ ├── MaxRegistrationReject │ ├── MaxRegistrationRequest │ ├── MaxSecurityModeCommand │ ├── MaxSecurityModeComplete │ ├── MinRegistrationAccept │ ├── MinRegistrationRequest │ ├── MinSecurityModeCommand │ ├── MaxAuthenticationRequest │ ├── MaxAuthenticationResponse │ ├── MaxConfigurationUpdateCommand │ ├── MinConfigurationUpdateCommand │ └── MaxDeregistrationRequestUEOriginatingDeregistration ├── fuzz │ ├── FuzzNAS │ │ ├── caf81e9797b19c76 │ │ ├── ci0007 │ │ ├── ci0046 │ │ ├── b1840368c24e1f33 │ │ ├── c6324368e0060948 │ │ ├── ci0266 │ │ ├── ci0006 │ │ ├── ci0047 │ │ ├── 9dec38182a836be7 │ │ ├── ci0087 │ │ ├── ci0000 │ │ ├── ci0246 │ │ ├── ci0247 │ │ ├── ci0529 │ │ ├── ci0267 │ │ ├── ci0045 │ │ ├── ci0159 │ │ ├── ci0207 │ │ ├── ci0265 │ │ ├── ci0299 │ │ ├── ci0088 │ │ ├── ci0001 │ │ ├── ci0245 │ │ ├── ci0248 │ │ ├── ci0530 │ │ ├── ci0086 │ │ ├── ci0369 │ │ ├── ci0463 │ │ ├── ci0044 │ │ ├── ci0158 │ │ ├── ci0206 │ │ ├── ci0129 │ │ ├── ci0250 │ │ ├── ci0464 │ │ ├── ci0316 │ │ ├── ci0264 │ │ ├── ci0298 │ │ ├── ci0128 │ │ ├── ci0177 │ │ ├── ci0524 │ │ ├── ci0085 │ │ ├── ci0249 │ │ ├── ci0263 │ │ ├── ci0297 │ │ ├── ci0389 │ │ ├── ci0368 │ │ ├── ci0051 │ │ ├── ci0176 │ │ ├── ci0003 │ │ ├── ci0027 │ │ ├── ci0236 │ │ ├── ci0523 │ │ ├── ci0084 │ │ ├── ci0004 │ │ ├── ci0028 │ │ ├── ci0388 │ │ ├── ci0009 │ │ ├── ci0367 │ │ ├── ci0528 │ │ ├── ci0556 │ │ ├── ci0002 │ │ ├── ci0026 │ │ ├── ci0050 │ │ ├── ci0130 │ │ ├── ci0235 │ │ ├── ci0336 │ │ ├── ci0370 │ │ ├── ci0390 │ │ ├── ci0542 │ │ ├── ci0005 │ │ ├── ci0029 │ │ ├── ci0008 │ │ ├── ci0317 │ │ ├── ci0337 │ │ ├── ci0527 │ │ ├── ci0555 │ │ ├── ci0315 │ │ ├── ci0541 │ │ ├── ci0131 │ │ ├── ci0335 │ │ ├── ci0371 │ │ ├── ci0391 │ │ ├── ci0318 │ │ ├── ci0338 │ │ ├── ci0314 │ │ ├── ci0010 │ │ ├── ci0022 │ │ ├── ci0034 │ │ ├── ci0433 │ │ ├── ci0533 │ │ ├── ci0537 │ │ ├── ci0557 │ │ ├── ci0011 │ │ ├── ci0023 │ │ ├── ci0035 │ │ ├── ci0434 │ │ ├── ci0534 │ │ ├── ci0538 │ │ └── ci0558 │ ├── FuzzGmmMessageDecode │ │ ├── caf81e9797b19c76 │ │ ├── b1840368c24e1f33 │ │ ├── c6324368e0060948 │ │ ├── msgNotification │ │ ├── msgStatus5GMM │ │ ├── msgIdentityRequest │ │ ├── msgSecurityModeReject │ │ ├── msgConfigurationUpdateComplete │ │ ├── msgIdentityResponse │ │ ├── 9dec38182a836be7 │ │ ├── msgNotificationResponse │ │ ├── msgAuthenticationReject │ │ ├── msgDeregistrationAcceptUEOriginatingDeregistration │ │ ├── msgDeregistrationAcceptUETerminatedDeregistration │ │ ├── msgAuthenticationResult │ │ ├── msgDLNASTransport │ │ ├── msgDeregistrationRequestUETerminatedDeregistration │ │ ├── msgServiceReject │ │ ├── msgDeregistrationRequestUEOriginatingDeregistration │ │ ├── msgRegistrationReject │ │ ├── msgSecurityModeComplete │ │ ├── msgULNASTransport │ │ ├── msgAuthenticationFailure │ │ ├── msgServiceAccept │ │ ├── msgRegistrationComplete │ │ ├── msgServiceRequest │ │ ├── msgAuthenticationResponse │ │ ├── msgSecurityModeCommand │ │ ├── msgAuthenticationRequest │ │ ├── msgConfigurationUpdateCommand │ │ ├── msgRegistrationRequest │ │ └── msgRegistrationAccept │ └── FuzzGsmMessageDecode │ │ ├── caf81e9797b19c76 │ │ ├── b1840368c24e1f33 │ │ ├── c6324368e0060948 │ │ ├── msgStatus5GSM │ │ ├── 9dec38182a836be7 │ │ ├── msgPDUSessionReleaseReject │ │ ├── msgPDUSessionModificationComplete │ │ ├── msgPDUSessionReleaseComplete │ │ ├── msgPDUSessionReleaseRequest │ │ ├── msgPDUSessionModificationCommandReject │ │ ├── msgPDUSessionAuthenticationCommand │ │ ├── msgPDUSessionAuthenticationComplete │ │ ├── msgPDUSessionAuthenticationResult │ │ ├── msgPDUSessionModificationReject │ │ ├── msgPDUSessionReleaseCommand │ │ ├── msgPDUSessionEstablishmentRequest │ │ ├── msgPDUSessionEstablishmentReject │ │ ├── msgPDUSessionModificationRequest │ │ ├── msgPDUSessionModificationCommand │ │ └── msgPDUSessionEstablishmentAccept └── GsmMessage │ ├── MaxStatus5GSM │ ├── MinStatus5GSM │ ├── MaxPDUSessionReleaseCommand │ ├── MaxPDUSessionReleaseComplete │ ├── MaxPDUSessionReleaseReject │ ├── MaxPDUSessionReleaseRequest │ ├── MinPDUSessionReleaseCommand │ ├── MinPDUSessionReleaseComplete │ ├── MinPDUSessionReleaseReject │ ├── MinPDUSessionReleaseRequest │ ├── MaxPDUSessionAuthenticationResult │ ├── MaxPDUSessionEstablishmentAccept │ ├── MaxPDUSessionEstablishmentReject │ ├── MaxPDUSessionEstablishmentRequest │ ├── MaxPDUSessionModificationCommand │ ├── MaxPDUSessionModificationComplete │ ├── MaxPDUSessionModificationReject │ ├── MaxPDUSessionModificationRequest │ ├── MinPDUSessionAuthenticationResult │ ├── MinPDUSessionEstablishmentAccept │ ├── MinPDUSessionEstablishmentReject │ ├── MinPDUSessionEstablishmentRequest │ ├── MinPDUSessionModificationCommand │ ├── MinPDUSessionModificationComplete │ ├── MinPDUSessionModificationReject │ ├── MinPDUSessionModificationRequest │ ├── MaxPDUSessionAuthenticationCommand │ ├── MaxPDUSessionAuthenticationComplete │ ├── MinPDUSessionAuthenticationCommand │ ├── MinPDUSessionAuthenticationComplete │ ├── MaxPDUSessionModificationCommandReject │ └── MinPDUSessionModificationCommandReject ├── nasMessage ├── comm_nasMessage_test.go └── NAS_EPD.go ├── CHANGELOG.md ├── .gitignore ├── nasType ├── NAS_Plain5GSNASMessage.go ├── comm_nasType_test.go ├── NAS_Plain5GSNASMessage_test.go ├── comm_util.go ├── NAS_PTI.go ├── NAS_Non3GppNwPolicies.go ├── NAS_SequenceNumber.go ├── NAS_PDUSessionID.go ├── NAS_EPSBearerContextStatus.go ├── NAS_MessageAuthenticationCode.go ├── NAS_STATUSMessageIdentity5GMM.go ├── NAS_STATUSMessageIdentity5GSM.go ├── NAS_NotificationMessageIdentity.go ├── NAS_ServiceAcceptMessageIdentity.go ├── NAS_ServiceRejectMessageIdentity.go ├── NAS_DLNASTRANSPORTMessageIdentity.go ├── NAS_ServiceRequestMessageIdentity.go ├── NAS_ULNASTRANSPORTMessageIdentity.go ├── NAS_CongestionReattemptIndicator5GSM.go ├── NAS_IdentityRequestMessageIdentity.go ├── NAS_SpareHalfOctetAndIdentityType_test.go ├── NAS_IdentityResponseMessageIdentity.go ├── NAS_MessageAuthenticationCode_test.go ├── NAS_SpareHalfOctetAndAccessType.go ├── NAS_ExtendedProtocolDiscriminator_test.go ├── NAS_RegistrationAcceptMessageIdentity.go ├── NAS_RegistrationRejectMessageIdentity.go ├── NAS_SecurityModeRejectMessageIdentity.go ├── NAS_RegistrationRequestMessageIdentity.go ├── NAS_SecurityModeCommandMessageIdentity.go ├── NAS_AuthenticationRejectMessageIdentity.go ├── NAS_AuthenticationResultMessageIdentity.go ├── NAS_DeregistrationAcceptMessageIdentity.go ├── NAS_NotificationResponseMessageIdentity.go ├── NAS_RegistrationCompleteMessageIdentity.go ├── NAS_SecurityModeCompleteMessageIdentity.go ├── NAS_AuthenticationFailureMessageIdentity.go ├── NAS_AuthenticationRequestMessageIdentity.go ├── NAS_Cause5GMM.go ├── NAS_Cause5GSM.go ├── NAS_DLNASTRANSPORTMessageIdentity_test.go ├── NAS_DeregistrationRequestMessageIdentity.go ├── NAS_IdentityRequestMessageIdentity_test.go ├── NAS_SpareHalfOctetAndIdentityType.go ├── NAS_AuthenticationResponseMessageIdentity.go ├── NAS_IdentityResponseMessageIdentity_test.go ├── NAS_NotificationMessageIdentity_test.go ├── NAS_PDUSESSIONRELEASEREJECTMessageIdentity.go ├── NAS_PDUSESSIONRELEASECOMMANDMessageIdentity.go ├── NAS_PDUSESSIONRELEASEREQUESTMessageIdentity.go ├── NAS_ExtendedProtocolDiscriminator.go ├── NAS_PDUSESSIONRELEASECOMPLETEMessageIdentity.go ├── NAS_AuthenticationRequestMessageIdentity_test.go ├── NAS_LocalTimeZone.go ├── NAS_SpareHalfOctetAndPayloadContainerType_test.go ├── NAS_ConfigurationUpdateCommandMessageIdentity.go ├── NAS_AuthenticationRejectMessageIdentity_test.go ├── NAS_AuthenticationResponseMessageIdentity_test.go ├── NAS_AuthenticationResultMessageIdentity_test.go ├── NAS_ConfigurationUpdateCompleteMessageIdentity.go ├── NAS_PDUSESSIONMODIFICATIONREJECTMessageIdentity.go ├── NAS_PDUSESSIONESTABLISHMENTACCEPTMessageIdentity.go ├── NAS_PDUSESSIONESTABLISHMENTREJECTMessageIdentity.go ├── NAS_PDUSESSIONMODIFICATIONCOMMANDMessageIdentity.go ├── NAS_PDUSESSIONMODIFICATIONREQUESTMessageIdentity.go ├── NAS_NotificationResponseMessageIdentity_test.go ├── NAS_DeregistrationAcceptMessageIdentity_test.go ├── NAS_PDUSESSIONAUTHENTICATIONRESULTMessageIdentity.go ├── NAS_PDUSESSIONESTABLISHMENTREQUESTMessageIdentity.go ├── NAS_PDUSESSIONMODIFICATIONCOMPLETEMessageIdentity.go ├── NAS_DeregistrationRequestMessageIdentity_test.go ├── NAS_PDUSESSIONAUTHENTICATIONCOMMANDMessageIdentity.go ├── NAS_ConfigurationUpdateCommandMessageIdentity_test.go ├── NAS_ConfigurationUpdateCompleteMessageIdentity_test.go ├── NAS_PDUSESSIONAUTHENTICATIONCOMPLETEMessageIdentity.go ├── NAS_OldPDUSessionID.go ├── NAS_SpareHalfOctetAndPayloadContainerType.go ├── NAS_SMSIndication.go ├── NAS_MICOIndication.go ├── NAS_PDUSESSIONMODIFICATIONCOMMANDREJECTMessageIdentity.go ├── NAS_PDUSESSIONMODIFICATIONREJECTMessageIdentity_test.go ├── NAS_PDUSESSIONESTABLISHMENTACCEPTMessageIdentity_test.go ├── NAS_PDUSESSIONESTABLISHMENTREJECTMessageIdentity_test.go ├── NAS_PDUSESSIONMODIFICATIONCOMMANDMessageIdentity_test.go ├── NAS_PDUSESSIONMODIFICATIONREQUESTMessageIdentity_test.go ├── NAS_PDUSESSIONAUTHENTICATIONRESULTMessageIdentity_test.go ├── NAS_PDUSESSIONESTABLISHMENTREQUESTMessageIdentity_test.go ├── NAS_PDUSESSIONMODIFICATIONCOMPLETEMessageIdentity_test.go ├── NAS_RequestType.go ├── NAS_PduSessionID2Value.go ├── NAS_PDUSESSIONAUTHENTICATIONCOMMANDMessageIdentity_test.go ├── NAS_SpareHalfOctetAndSecurityHeaderType_test.go ├── NAS_PDUSESSIONAUTHENTICATIONCOMPLETEMessageIdentity_test.go ├── NAS_PTI_test.go ├── NAS_IMEISVRequest.go ├── NAS_PDUSESSIONMODIFICATIONCOMMANDREJECTMessageIdentity_test.go ├── NAS_ServiceTypeAndNgksi_test.go ├── NAS_SpareHalfOctetAndNgksi_test.go ├── NAS_ABBA.go ├── NAS_T3346Value.go ├── NAS_T3502Value.go ├── NAS_NSSAIInclusionMode.go ├── NAS_AuthenticationParameterRAND.go ├── NAS_AlwaysonPDUSessionRequested.go ├── NAS_AlwaysonPDUSessionIndication.go ├── NAS_EAPMessage.go ├── NAS_SSCMode.go ├── NAS_SequenceNumber_test.go ├── NAS_RQTimerValue.go └── NAS_UesUsageSetting.go ├── internal └── tools │ ├── generator │ ├── cmd │ │ └── cmd.go │ └── writer.go │ ├── generator_sub.go │ └── extract.py ├── nasConvert ├── UESecurityCapability.go ├── PDUSessionReactivationResultErrorCause.go ├── PSI.go ├── Ladn.go ├── GPRSTimer2.go ├── AmfId.go ├── GPRSTimer3.go ├── SpareHalfOctetAndNgKsi.go ├── ServiceAreaList.go ├── PDUSessionType.go └── TaiList.go ├── uePolicyContainer ├── NAS_UePolicyDeliveryServiceMsgType.go ├── UePolicyContainer_UEPolicyPartType.go └── UePolicyContainer_ManageUEPolicyComplete.go ├── .github └── workflows │ └── go.yml ├── generate.sh ├── go.mod ├── security ├── counter_test.go ├── counter.go └── parameters.go └── logger └── logger.go /testdata/GmmMessage/MaxStatus5GMM: -------------------------------------------------------------------------------- 1 | ~d -------------------------------------------------------------------------------- /testdata/GmmMessage/MinStatus5GMM: -------------------------------------------------------------------------------- 1 | ~d -------------------------------------------------------------------------------- /testdata/GmmMessage/MaxIdentityRequest: -------------------------------------------------------------------------------- 1 | ~[ -------------------------------------------------------------------------------- /testdata/GmmMessage/MaxNotification: -------------------------------------------------------------------------------- 1 | ~e -------------------------------------------------------------------------------- /testdata/GmmMessage/MinIdentityRequest: -------------------------------------------------------------------------------- 1 | ~[ -------------------------------------------------------------------------------- /testdata/GmmMessage/MinNotification: -------------------------------------------------------------------------------- 1 | ~e -------------------------------------------------------------------------------- /testdata/GmmMessage/MaxSecurityModeReject: -------------------------------------------------------------------------------- 1 | ~_ -------------------------------------------------------------------------------- /testdata/GmmMessage/MinIdentityResponse: -------------------------------------------------------------------------------- 1 | ~\ -------------------------------------------------------------------------------- /testdata/GmmMessage/MinSecurityModeReject: -------------------------------------------------------------------------------- 1 | ~_ -------------------------------------------------------------------------------- /testdata/GmmMessage/MaxConfigurationUpdateComplete: -------------------------------------------------------------------------------- 1 | ~U -------------------------------------------------------------------------------- /testdata/GmmMessage/MinAuthenticationReject: -------------------------------------------------------------------------------- 1 | ~Xx -------------------------------------------------------------------------------- /testdata/GmmMessage/MinConfigurationUpdateComplete: -------------------------------------------------------------------------------- 1 | ~U -------------------------------------------------------------------------------- /testdata/GmmMessage/MinNotificationResponse: -------------------------------------------------------------------------------- 1 | ~fP -------------------------------------------------------------------------------- /testdata/GmmMessage/MinAuthenticationResult: -------------------------------------------------------------------------------- 1 | ~Z8 -------------------------------------------------------------------------------- /testdata/GmmMessage/MinDLNASTransport: -------------------------------------------------------------------------------- 1 | ~h$X7 -------------------------------------------------------------------------------- /testdata/GmmMessage/MinRegistrationReject: -------------------------------------------------------------------------------- 1 | ~D_x -------------------------------------------------------------------------------- /testdata/GmmMessage/MinServiceReject: -------------------------------------------------------------------------------- 1 | ~MP_x -------------------------------------------------------------------------------- /nasMessage/comm_nasMessage_test.go: -------------------------------------------------------------------------------- 1 | package nasMessage_test 2 | -------------------------------------------------------------------------------- /testdata/GmmMessage/MinSecurityModeComplete: -------------------------------------------------------------------------------- 1 | ~^w q -------------------------------------------------------------------------------- /testdata/GmmMessage/MinServiceAccept: -------------------------------------------------------------------------------- 1 | ~NP&rx -------------------------------------------------------------------------------- /testdata/GmmMessage/MaxAuthenticationFailure: -------------------------------------------------------------------------------- 1 | ~Y0 2 | -------------------------------------------------------------------------------- /testdata/GmmMessage/MinAuthenticationFailure: -------------------------------------------------------------------------------- 1 | ~Y0 2 | -------------------------------------------------------------------------------- /testdata/GmmMessage/MinServiceRequest: -------------------------------------------------------------------------------- 1 | ~L@P%q -------------------------------------------------------------------------------- /testdata/GmmMessage/MaxDeregistrationAcceptUEOriginatingDeregistration: -------------------------------------------------------------------------------- 1 | ~F -------------------------------------------------------------------------------- /testdata/GmmMessage/MaxDeregistrationAcceptUETerminatedDeregistration: -------------------------------------------------------------------------------- 1 | ~H -------------------------------------------------------------------------------- /testdata/GmmMessage/MinDeregistrationAcceptUEOriginatingDeregistration: -------------------------------------------------------------------------------- 1 | ~F -------------------------------------------------------------------------------- /testdata/GmmMessage/MinDeregistrationAcceptUETerminatedDeregistration: -------------------------------------------------------------------------------- 1 | ~H -------------------------------------------------------------------------------- /testdata/GmmMessage/MinRegistrationComplete: -------------------------------------------------------------------------------- 1 | ~Cs 2 |  -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/caf81e9797b19c76: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("") 3 | -------------------------------------------------------------------------------- /testdata/GmmMessage/MinAuthenticationResponse: -------------------------------------------------------------------------------- 1 | ~W- 2 | x -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0007: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x00\x43") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0046: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x00\x46") 3 | -------------------------------------------------------------------------------- /testdata/GmmMessage/MaxDeregistrationRequestUETerminatedDeregistration: -------------------------------------------------------------------------------- 1 | ~GX_ -------------------------------------------------------------------------------- /testdata/GmmMessage/MinDeregistrationRequestUEOriginatingDeregistration: -------------------------------------------------------------------------------- 1 | ~E -------------------------------------------------------------------------------- /testdata/GmmMessage/MinDeregistrationRequestUETerminatedDeregistration: -------------------------------------------------------------------------------- 1 | ~GX_ -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/b1840368c24e1f33: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("~0^w00") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/c6324368e0060948: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("~0B00!00") 3 | -------------------------------------------------------------------------------- /testdata/GmmMessage/MaxNotificationResponse: -------------------------------------------------------------------------------- 1 | ~fP  2 |  -------------------------------------------------------------------------------- /testdata/fuzz/FuzzGmmMessageDecode/caf81e9797b19c76: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzGsmMessageDecode/caf81e9797b19c76: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzGmmMessageDecode/b1840368c24e1f33: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("~0^w00") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzGsmMessageDecode/b1840368c24e1f33: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("~0^w00") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0266: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x00\x4e\x50\x02\x00\x04") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzGmmMessageDecode/c6324368e0060948: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("~0B00!00") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzGsmMessageDecode/c6324368e0060948: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("~0B00!00") 3 | -------------------------------------------------------------------------------- /testdata/GmmMessage/MinAuthenticationRequest: -------------------------------------------------------------------------------- 1 | ~V! 2 |   3 | x -------------------------------------------------------------------------------- /testdata/fuzz/FuzzGmmMessageDecode/msgNotification: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x00\x65\x00") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzGmmMessageDecode/msgStatus5GMM: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x00\x64\x00") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzGsmMessageDecode/msgStatus5GSM: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x2e\x00\x00\xd6\x00") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0006: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x02\x00\x00\x00\x00\x00\x7e\x00\x43") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0047: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x02\x00\x00\x00\x00\x00\x7e\x00\x46") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzGmmMessageDecode/msgIdentityRequest: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x00\x5b\x00") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzGmmMessageDecode/msgSecurityModeReject: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x00\x5f\x00") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/9dec38182a836be7: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("~0g0\x00\n0000000000\"000000000") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0087: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x00\x4e\x50\x02\x00\x04\x26\x02\x00\x00") 3 | -------------------------------------------------------------------------------- /testdata/GsmMessage/MaxStatus5GSM: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/free5gc/nas/HEAD/testdata/GsmMessage/MaxStatus5GSM -------------------------------------------------------------------------------- /testdata/GsmMessage/MinStatus5GSM: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/free5gc/nas/HEAD/testdata/GsmMessage/MinStatus5GSM -------------------------------------------------------------------------------- /testdata/fuzz/FuzzGmmMessageDecode/msgConfigurationUpdateComplete: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x00\x55") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzGmmMessageDecode/msgIdentityResponse: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x00\x5c\x00\x01\x00") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0000: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x00\x5d\x02\x00\x02\x80\x20\xe1\x36\x01\x02") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0246: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x00\x67\x01\x00\x04\x2e\x0a\x00\xd1\x12\x0a") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzGmmMessageDecode/9dec38182a836be7: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("~0g0\x00\n0000000000\"000000000") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzGsmMessageDecode/9dec38182a836be7: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("~0g0\x00\n0000000000\"000000000") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0247: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x00\x68\x01\x00\x05\x2e\x0a\x00\xd3\x24\x12\x0a") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0529: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x00\x68\x01\x00\x05\x2e\x0a\x00\xc3\x43\x12\x0a") 3 | -------------------------------------------------------------------------------- /testdata/GmmMessage/MaxDLNASTransport: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/free5gc/nas/HEAD/testdata/GmmMessage/MaxDLNASTransport -------------------------------------------------------------------------------- /testdata/GmmMessage/MaxServiceAccept: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/free5gc/nas/HEAD/testdata/GmmMessage/MaxServiceAccept -------------------------------------------------------------------------------- /testdata/GmmMessage/MaxServiceReject: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/free5gc/nas/HEAD/testdata/GmmMessage/MaxServiceReject -------------------------------------------------------------------------------- /testdata/GmmMessage/MaxServiceRequest: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/free5gc/nas/HEAD/testdata/GmmMessage/MaxServiceRequest -------------------------------------------------------------------------------- /testdata/GmmMessage/MaxULNASTransport: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/free5gc/nas/HEAD/testdata/GmmMessage/MaxULNASTransport -------------------------------------------------------------------------------- /testdata/GmmMessage/MinULNASTransport: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/free5gc/nas/HEAD/testdata/GmmMessage/MinULNASTransport -------------------------------------------------------------------------------- /testdata/fuzz/FuzzGmmMessageDecode/msgNotificationResponse: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x00\x66\x50\x02\x00\x01") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0267: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x02\x00\x00\x00\x00\x00\x7e\x00\x4e\x50\x02\x00\x04") 3 | -------------------------------------------------------------------------------- /testdata/GmmMessage/MaxIdentityResponse: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/free5gc/nas/HEAD/testdata/GmmMessage/MaxIdentityResponse -------------------------------------------------------------------------------- /testdata/GmmMessage/MaxAuthenticationReject: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/free5gc/nas/HEAD/testdata/GmmMessage/MaxAuthenticationReject -------------------------------------------------------------------------------- /testdata/GmmMessage/MaxAuthenticationResult: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/free5gc/nas/HEAD/testdata/GmmMessage/MaxAuthenticationResult -------------------------------------------------------------------------------- /testdata/GmmMessage/MaxRegistrationAccept: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/free5gc/nas/HEAD/testdata/GmmMessage/MaxRegistrationAccept -------------------------------------------------------------------------------- /testdata/GmmMessage/MaxRegistrationComplete: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/free5gc/nas/HEAD/testdata/GmmMessage/MaxRegistrationComplete -------------------------------------------------------------------------------- /testdata/GmmMessage/MaxRegistrationReject: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/free5gc/nas/HEAD/testdata/GmmMessage/MaxRegistrationReject -------------------------------------------------------------------------------- /testdata/GmmMessage/MaxRegistrationRequest: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/free5gc/nas/HEAD/testdata/GmmMessage/MaxRegistrationRequest -------------------------------------------------------------------------------- /testdata/GmmMessage/MaxSecurityModeCommand: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/free5gc/nas/HEAD/testdata/GmmMessage/MaxSecurityModeCommand -------------------------------------------------------------------------------- /testdata/GmmMessage/MaxSecurityModeComplete: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/free5gc/nas/HEAD/testdata/GmmMessage/MaxSecurityModeComplete -------------------------------------------------------------------------------- /testdata/GmmMessage/MinRegistrationAccept: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/free5gc/nas/HEAD/testdata/GmmMessage/MinRegistrationAccept -------------------------------------------------------------------------------- /testdata/GmmMessage/MinRegistrationRequest: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/free5gc/nas/HEAD/testdata/GmmMessage/MinRegistrationRequest -------------------------------------------------------------------------------- /testdata/GmmMessage/MinSecurityModeCommand: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/free5gc/nas/HEAD/testdata/GmmMessage/MinSecurityModeCommand -------------------------------------------------------------------------------- /testdata/fuzz/FuzzGmmMessageDecode/msgAuthenticationReject: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x00\x58\x78\x00\x04\x00\x01\x02\x03") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzGmmMessageDecode/msgDeregistrationAcceptUEOriginatingDeregistration: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x00\x46") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzGmmMessageDecode/msgDeregistrationAcceptUETerminatedDeregistration: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x00\x48") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzGsmMessageDecode/msgPDUSessionReleaseReject: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x2e\x00\x00\xd2\x00\x7b\x00\x01\x00") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0045: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x00\x45\x41\x00\x0b\xf2\x02\xf8\x39\xca\xfe\x00\x00\x00\x00\x01") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0159: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x00\x45\x01\x00\x0b\xf2\x02\xf8\x39\xca\xfe\x00\x00\x00\x00\x01") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0207: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x00\x45\x09\x00\x0b\xf2\x02\xf8\x39\xca\xfe\x00\x00\x00\x00\x01") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0265: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x00\x4c\x20\x00\x07\x04\xfe\x00\x00\x00\x00\x01\x50\x02\x00\x04") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0299: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x00\x4c\x20\x00\x07\x04\xfe\x00\x00\x00\x00\x02\x50\x02\x00\x04") 3 | -------------------------------------------------------------------------------- /testdata/GmmMessage/MaxAuthenticationRequest: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/free5gc/nas/HEAD/testdata/GmmMessage/MaxAuthenticationRequest -------------------------------------------------------------------------------- /testdata/GmmMessage/MaxAuthenticationResponse: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/free5gc/nas/HEAD/testdata/GmmMessage/MaxAuthenticationResponse -------------------------------------------------------------------------------- /testdata/fuzz/FuzzGsmMessageDecode/msgPDUSessionModificationComplete: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x2e\x00\x00\xcc\x7b\x00\x01\x00") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzGsmMessageDecode/msgPDUSessionReleaseComplete: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x2e\x00\x00\xd4\x59\x00\x7b\x00\x01\x00") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzGsmMessageDecode/msgPDUSessionReleaseRequest: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x2e\x00\x00\xd1\x59\x00\x7b\x00\x01\x00") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0088: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x02\x00\x00\x00\x00\x00\x7e\x00\x4e\x50\x02\x00\x04\x26\x02\x00\x00") 3 | -------------------------------------------------------------------------------- /testdata/GsmMessage/MaxPDUSessionReleaseCommand: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/free5gc/nas/HEAD/testdata/GsmMessage/MaxPDUSessionReleaseCommand -------------------------------------------------------------------------------- /testdata/GsmMessage/MaxPDUSessionReleaseComplete: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/free5gc/nas/HEAD/testdata/GsmMessage/MaxPDUSessionReleaseComplete -------------------------------------------------------------------------------- /testdata/GsmMessage/MaxPDUSessionReleaseReject: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/free5gc/nas/HEAD/testdata/GsmMessage/MaxPDUSessionReleaseReject -------------------------------------------------------------------------------- /testdata/GsmMessage/MaxPDUSessionReleaseRequest: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/free5gc/nas/HEAD/testdata/GsmMessage/MaxPDUSessionReleaseRequest -------------------------------------------------------------------------------- /testdata/GsmMessage/MinPDUSessionReleaseCommand: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/free5gc/nas/HEAD/testdata/GsmMessage/MinPDUSessionReleaseCommand -------------------------------------------------------------------------------- /testdata/GsmMessage/MinPDUSessionReleaseComplete: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/free5gc/nas/HEAD/testdata/GsmMessage/MinPDUSessionReleaseComplete -------------------------------------------------------------------------------- /testdata/GsmMessage/MinPDUSessionReleaseReject: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/free5gc/nas/HEAD/testdata/GsmMessage/MinPDUSessionReleaseReject -------------------------------------------------------------------------------- /testdata/GsmMessage/MinPDUSessionReleaseRequest: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/free5gc/nas/HEAD/testdata/GsmMessage/MinPDUSessionReleaseRequest -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0001: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x03\x00\x00\x00\x00\x00\x7e\x00\x5d\x02\x00\x02\x80\x20\xe1\x36\x01\x02") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0245: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x02\x00\x00\x00\x00\x00\x7e\x00\x67\x01\x00\x04\x2e\x0a\x00\xd1\x12\x0a") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0248: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x02\x00\x00\x00\x00\x00\x7e\x00\x68\x01\x00\x05\x2e\x0a\x00\xd3\x24\x12\x0a") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0530: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x02\x00\x00\x00\x00\x00\x7e\x00\x68\x01\x00\x05\x2e\x0a\x00\xc3\x43\x12\x0a") 3 | -------------------------------------------------------------------------------- /testdata/GmmMessage/MaxConfigurationUpdateCommand: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/free5gc/nas/HEAD/testdata/GmmMessage/MaxConfigurationUpdateCommand -------------------------------------------------------------------------------- /testdata/GmmMessage/MinConfigurationUpdateCommand: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/free5gc/nas/HEAD/testdata/GmmMessage/MinConfigurationUpdateCommand -------------------------------------------------------------------------------- /testdata/fuzz/FuzzGsmMessageDecode/msgPDUSessionModificationCommandReject: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x2e\x00\x00\xcd\x00\x7b\x00\x01\x00") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0086: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x00\x4c\x10\x00\x07\x04\xfe\x00\x00\x00\x00\x01\x40\x02\x00\x04\x50\x02\x00\x04") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0369: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x00\x41\x03\x00\x0b\xf2\x02\xf8\x39\xca\xfe\x00\x00\x00\x00\x01\x50\x02\x00\x04") 3 | -------------------------------------------------------------------------------- /testdata/GsmMessage/MaxPDUSessionAuthenticationResult: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/free5gc/nas/HEAD/testdata/GsmMessage/MaxPDUSessionAuthenticationResult -------------------------------------------------------------------------------- /testdata/GsmMessage/MaxPDUSessionEstablishmentAccept: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/free5gc/nas/HEAD/testdata/GsmMessage/MaxPDUSessionEstablishmentAccept -------------------------------------------------------------------------------- /testdata/GsmMessage/MaxPDUSessionEstablishmentReject: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/free5gc/nas/HEAD/testdata/GsmMessage/MaxPDUSessionEstablishmentReject -------------------------------------------------------------------------------- /testdata/GsmMessage/MaxPDUSessionEstablishmentRequest: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/free5gc/nas/HEAD/testdata/GsmMessage/MaxPDUSessionEstablishmentRequest -------------------------------------------------------------------------------- /testdata/GsmMessage/MaxPDUSessionModificationCommand: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/free5gc/nas/HEAD/testdata/GsmMessage/MaxPDUSessionModificationCommand -------------------------------------------------------------------------------- /testdata/GsmMessage/MaxPDUSessionModificationComplete: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/free5gc/nas/HEAD/testdata/GsmMessage/MaxPDUSessionModificationComplete -------------------------------------------------------------------------------- /testdata/GsmMessage/MaxPDUSessionModificationReject: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/free5gc/nas/HEAD/testdata/GsmMessage/MaxPDUSessionModificationReject -------------------------------------------------------------------------------- /testdata/GsmMessage/MaxPDUSessionModificationRequest: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/free5gc/nas/HEAD/testdata/GsmMessage/MaxPDUSessionModificationRequest -------------------------------------------------------------------------------- /testdata/GsmMessage/MinPDUSessionAuthenticationResult: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/free5gc/nas/HEAD/testdata/GsmMessage/MinPDUSessionAuthenticationResult -------------------------------------------------------------------------------- /testdata/GsmMessage/MinPDUSessionEstablishmentAccept: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/free5gc/nas/HEAD/testdata/GsmMessage/MinPDUSessionEstablishmentAccept -------------------------------------------------------------------------------- /testdata/GsmMessage/MinPDUSessionEstablishmentReject: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/free5gc/nas/HEAD/testdata/GsmMessage/MinPDUSessionEstablishmentReject -------------------------------------------------------------------------------- /testdata/GsmMessage/MinPDUSessionEstablishmentRequest: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/free5gc/nas/HEAD/testdata/GsmMessage/MinPDUSessionEstablishmentRequest -------------------------------------------------------------------------------- /testdata/GsmMessage/MinPDUSessionModificationCommand: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/free5gc/nas/HEAD/testdata/GsmMessage/MinPDUSessionModificationCommand -------------------------------------------------------------------------------- /testdata/GsmMessage/MinPDUSessionModificationComplete: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/free5gc/nas/HEAD/testdata/GsmMessage/MinPDUSessionModificationComplete -------------------------------------------------------------------------------- /testdata/GsmMessage/MinPDUSessionModificationReject: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/free5gc/nas/HEAD/testdata/GsmMessage/MinPDUSessionModificationReject -------------------------------------------------------------------------------- /testdata/GsmMessage/MinPDUSessionModificationRequest: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/free5gc/nas/HEAD/testdata/GsmMessage/MinPDUSessionModificationRequest -------------------------------------------------------------------------------- /testdata/fuzz/FuzzGmmMessageDecode/msgAuthenticationResult: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x00\x5a\x00\x00\x04\x00\x01\x02\x03\x38\x02\x00\x01") 3 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Change Log 2 | --- 3 | 2020-03-xx-xx 4 | --- 5 | - Implemented enchacements: 6 | 7 | - Fixed bugs: 8 | 9 | - Closed issues: 10 | -------------------------------------------------------------------------------- /testdata/GsmMessage/MaxPDUSessionAuthenticationCommand: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/free5gc/nas/HEAD/testdata/GsmMessage/MaxPDUSessionAuthenticationCommand -------------------------------------------------------------------------------- /testdata/GsmMessage/MaxPDUSessionAuthenticationComplete: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/free5gc/nas/HEAD/testdata/GsmMessage/MaxPDUSessionAuthenticationComplete -------------------------------------------------------------------------------- /testdata/GsmMessage/MinPDUSessionAuthenticationCommand: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/free5gc/nas/HEAD/testdata/GsmMessage/MinPDUSessionAuthenticationCommand -------------------------------------------------------------------------------- /testdata/GsmMessage/MinPDUSessionAuthenticationComplete: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/free5gc/nas/HEAD/testdata/GsmMessage/MinPDUSessionAuthenticationComplete -------------------------------------------------------------------------------- /testdata/fuzz/FuzzGmmMessageDecode/msgDLNASTransport: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x00\x68\x00\x00\x01\x00\x12\x00\x24\x01\x00\x58\x00\x37\x01\x00") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzGmmMessageDecode/msgDeregistrationRequestUETerminatedDeregistration: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x00\x47\x00\x58\x00\x5f\x01\x00") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzGmmMessageDecode/msgServiceReject: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x00\x4d\x00\x50\x02\x00\x01\x5f\x01\x00\x78\x00\x04\x00\x01\x02\x03") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0463: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x00\x5d\x02\x00\x02\x80\x20\xe1\x36\x01\x02\x78\x00\x04\x03\xea\x00\x04\x38\x02\x00\x00") 3 | -------------------------------------------------------------------------------- /testdata/GsmMessage/MaxPDUSessionModificationCommandReject: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/free5gc/nas/HEAD/testdata/GsmMessage/MaxPDUSessionModificationCommandReject -------------------------------------------------------------------------------- /testdata/GsmMessage/MinPDUSessionModificationCommandReject: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/free5gc/nas/HEAD/testdata/GsmMessage/MinPDUSessionModificationCommandReject -------------------------------------------------------------------------------- /testdata/fuzz/FuzzGmmMessageDecode/msgDeregistrationRequestUEOriginatingDeregistration: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x00\x45\x00\x00\x04\x00\x01\x02\x03") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzGmmMessageDecode/msgRegistrationReject: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x00\x44\x00\x5f\x01\x00\x16\x01\x00\x78\x00\x04\x00\x01\x02\x03") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzGsmMessageDecode/msgPDUSessionAuthenticationCommand: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x2e\x00\x00\xc5\x00\x04\x00\x01\x02\x03\x7b\x00\x01\x00") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzGsmMessageDecode/msgPDUSessionAuthenticationComplete: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x2e\x00\x00\xc6\x00\x04\x00\x01\x02\x03\x7b\x00\x01\x00") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzGsmMessageDecode/msgPDUSessionAuthenticationResult: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x2e\x00\x00\xc7\x78\x00\x04\x00\x01\x02\x03\x7b\x00\x01\x00") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzGsmMessageDecode/msgPDUSessionModificationReject: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x2e\x00\x00\xca\x00\x37\x01\x00\x61\x01\x00\x7b\x00\x01\x00") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0044: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x02\x00\x00\x00\x00\x00\x7e\x00\x45\x41\x00\x0b\xf2\x02\xf8\x39\xca\xfe\x00\x00\x00\x00\x01") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0158: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x01\x00\x00\x00\x00\x00\x7e\x00\x45\x01\x00\x0b\xf2\x02\xf8\x39\xca\xfe\x00\x00\x00\x00\x01") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0206: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x01\x00\x00\x00\x00\x00\x7e\x00\x45\x09\x00\x0b\xf2\x02\xf8\x39\xca\xfe\x00\x00\x00\x00\x01") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzGmmMessageDecode/msgSecurityModeComplete: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x00\x5e\x77\x00\x09\x00\x01\x02\x03\x04\x05\x06\x07\x08\x71\x00\x01\x00") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzGmmMessageDecode/msgULNASTransport: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x00\x67\x00\x00\x01\x00\x12\x00\x59\x00\x80\x22\x01\x00\x25\x01\x00\x24\x01\x00") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzGmmMessageDecode/msgAuthenticationFailure: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x00\x59\x00\x30\x0e\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzGmmMessageDecode/msgServiceAccept: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x00\x4e\x50\x02\x00\x01\x26\x02\x00\x01\x72\x00\x02\x00\x01\x78\x00\x04\x00\x01\x02\x03") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0129: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x00\x41\x7a\x00\x0b\xf2\x02\xf8\x39\xca\xfe\x00\x00\x00\x00\x01\x10\x01\x07\x2e\x02\x80\x20\x40\x02\x00\x04") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0250: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x00\x67\x01\x00\x04\x2e\x0a\x00\xd4\x12\x0a\x82\x22\x04\x01\x01\x02\x03\x25\x09\x08\x69\x6e\x74\x65\x72\x6e\x65\x74") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0464: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x03\x00\x00\x00\x00\x00\x7e\x00\x5d\x02\x00\x02\x80\x20\xe1\x36\x01\x02\x78\x00\x04\x03\xea\x00\x04\x38\x02\x00\x00") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzGmmMessageDecode/msgRegistrationComplete: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x00\x43\x73\x00\x11\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzGsmMessageDecode/msgPDUSessionReleaseCommand: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x2e\x00\x00\xd3\x00\x37\x01\x00\x78\x00\x04\x00\x01\x02\x03\x61\x01\x00\x7b\x00\x01\x00") 3 | -------------------------------------------------------------------------------- /testdata/GmmMessage/MaxDeregistrationRequestUEOriginatingDeregistration: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/free5gc/nas/HEAD/testdata/GmmMessage/MaxDeregistrationRequestUEOriginatingDeregistration -------------------------------------------------------------------------------- /testdata/fuzz/FuzzGsmMessageDecode/msgPDUSessionEstablishmentRequest: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x2e\x00\x00\xc1\x00\x01\x90\xa0\x28\x01\x00\x55\x00\x01\xb0\x39\x01\x00\x7b\x00\x01\x00") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0316: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x00\x41\x0a\x00\x0b\xf2\x02\xf8\x39\xca\xfe\x00\x00\x00\x00\x01\x10\x01\x07\x2e\x02\x80\x20\x40\x02\x00\x04\x50\x02\x00\x04") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzGsmMessageDecode/msgPDUSessionEstablishmentReject: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x2e\x00\x00\xc3\x00\x37\x01\x00\xf0\x78\x00\x04\x00\x01\x02\x03\x61\x01\x00\x7b\x00\x01\x00") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0264: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x00\x4c\x20\x00\x07\x04\xfe\x00\x00\x00\x00\x01\x71\x00\x11\x7e\x00\x4c\x20\x00\x07\x04\xfe\x00\x00\x00\x00\x01\x50\x02\x00\x04") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0298: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x00\x4c\x20\x00\x07\x04\xfe\x00\x00\x00\x00\x02\x71\x00\x11\x7e\x00\x4c\x20\x00\x07\x04\xfe\x00\x00\x00\x00\x02\x50\x02\x00\x04") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzGmmMessageDecode/msgServiceRequest: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x00\x4c\x00\x00\x07\x00\x01\x02\x03\x04\x05\x06\x40\x02\x00\x01\x50\x02\x00\x01\x25\x02\x00\x01\x71\x00\x01\x00") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0128: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x02\x00\x00\x00\x00\x00\x7e\x00\x41\x7a\x00\x0b\xf2\x02\xf8\x39\xca\xfe\x00\x00\x00\x00\x01\x10\x01\x07\x2e\x02\x80\x20\x40\x02\x00\x04") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0177: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x00\x5e\x77\x00\x09\x15\x11\x00\x00\x00\x00\x00\x00\x00\x71\x00\x11\x7e\x00\x45\xf1\x00\x0b\xf2\x02\xf8\x39\xca\xfe\x00\x00\x00\x00\x01") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzGmmMessageDecode/msgAuthenticationResponse: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x00\x57\x2d\x10\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x78\x00\x04\x00\x01\x02\x03") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzGmmMessageDecode/msgSecurityModeCommand: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x00\x5d\x00\x00\x02\x00\x01\xe0\x57\x00\x36\x01\x00\x78\x00\x04\x00\x01\x02\x03\x38\x02\x00\x01\x19\x02\x00\x01") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0524: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x00\x67\x01\x00\x15\x2e\x0a\x00\xc1\xff\xff\x91\xa1\x7b\x00\x0a\x80\x00\x0a\x00\x00\x0d\x00\x00\x03\x00\x12\x0a\x81\x22\x04\x01\x01\x02\x03") 3 | -------------------------------------------------------------------------------- /nasMessage/NAS_EPD.go: -------------------------------------------------------------------------------- 1 | package nasMessage 2 | 3 | // EPD values identifies the L3 protocol 4 | const ( 5 | Epd5GSSessionManagementMessage uint8 = 0x2E 6 | Epd5GSMobilityManagementMessage uint8 = 0x7E 7 | ) 8 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0085: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x00\x4c\x10\x00\x07\x04\xfe\x00\x00\x00\x00\x01\x71\x00\x15\x7e\x00\x4c\x10\x00\x07\x04\xfe\x00\x00\x00\x00\x01\x40\x02\x00\x04\x50\x02\x00\x04") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0249: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x02\x00\x00\x00\x00\x00\x7e\x00\x67\x01\x00\x04\x2e\x0a\x00\xd4\x12\x0a\x82\x22\x04\x01\x01\x02\x03\x25\x09\x08\x69\x6e\x74\x65\x72\x6e\x65\x74") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0263: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x01\x00\x00\x00\x00\x00\x7e\x00\x4c\x20\x00\x07\x04\xfe\x00\x00\x00\x00\x01\x71\x00\x11\x7e\x00\x4c\x20\x00\x07\x04\xfe\x00\x00\x00\x00\x01\x50\x02\x00\x04") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0297: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x01\x00\x00\x00\x00\x00\x7e\x00\x4c\x20\x00\x07\x04\xfe\x00\x00\x00\x00\x02\x71\x00\x11\x7e\x00\x4c\x20\x00\x07\x04\xfe\x00\x00\x00\x00\x02\x50\x02\x00\x04") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0389: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x00\x5e\x77\x00\x09\x15\x11\x00\x00\x00\x00\x00\x00\x00\x71\x00\x15\x7e\x00\x41\x73\x00\x0b\xf2\x02\xf8\x39\xca\xfe\x00\x00\x00\x00\x01\x50\x02\x00\x04") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0368: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x00\x41\x03\x00\x0b\xf2\x02\xf8\x39\xca\xfe\x00\x00\x00\x00\x01\x71\x00\x15\x7e\x00\x41\x03\x00\x0b\xf2\x02\xf8\x39\xca\xfe\x00\x00\x00\x00\x01\x50\x02\x00\x04") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0051: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x00\x5e\x77\x00\x09\x15\x11\x00\x00\x00\x00\x00\x00\x00\x71\x00\x18\x7e\x00\x41\x79\x00\x0b\xf2\x02\xf8\x39\xca\xfe\x00\x00\x00\x00\x01\x10\x01\x07\x2e\x02\x80\x20") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0176: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x04\x00\x00\x00\x00\x00\x7e\x00\x5e\x77\x00\x09\x15\x11\x00\x00\x00\x00\x00\x00\x00\x71\x00\x11\x7e\x00\x45\xf1\x00\x0b\xf2\x02\xf8\x39\xca\xfe\x00\x00\x00\x00\x01") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0003: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x00\x5e\x77\x00\x09\x15\x11\x00\x00\x00\x00\x00\x00\x00\x71\x00\x19\x7e\x00\x41\x79\x00\x0c\x01\x02\xf8\x39\xf0\xff\x00\x00\x00\x00\x47\x78\x10\x01\x07\x2e\x02\x80\x20") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0027: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x00\x5e\x77\x00\x09\x15\x11\x00\x00\x00\x00\x00\x00\x00\x71\x00\x19\x7e\x00\x41\x79\x00\x0c\x01\x02\xf8\x39\xf0\xff\x00\x00\x00\x00\x47\x88\x10\x01\x07\x2e\x02\x80\x20") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0236: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x00\x5e\x77\x00\x09\x15\x11\x00\x00\x00\x00\x00\x00\x00\x71\x00\x19\x7e\x00\x41\x79\x00\x0c\x01\x02\xf8\x39\xf0\x00\x00\x00\x00\x00\x47\x78\x10\x01\x07\x2e\x02\x80\x20") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0523: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x02\x00\x00\x00\x00\x00\x7e\x00\x67\x01\x00\x15\x2e\x0a\x00\xc1\xff\xff\x91\xa1\x7b\x00\x0a\x80\x00\x0a\x00\x00\x0d\x00\x00\x03\x00\x12\x0a\x81\x22\x04\x01\x01\x02\x03") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0084: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x01\x00\x00\x00\x00\x00\x7e\x00\x4c\x10\x00\x07\x04\xfe\x00\x00\x00\x00\x01\x71\x00\x15\x7e\x00\x4c\x10\x00\x07\x04\xfe\x00\x00\x00\x00\x01\x40\x02\x00\x04\x50\x02\x00\x04") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0004: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x00\x42\x01\x01\x77\x00\x0b\xf2\x02\xf8\x39\xca\xfe\x00\x00\x00\x00\x01\x54\x07\x00\x02\xf8\x39\x00\x00\x01\x15\x0a\x04\x01\x01\x02\x03\x04\x01\x11\x22\x33\x5e\x01\x06\x16\x01\x2c") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0028: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x00\x42\x01\x01\x77\x00\x0b\xf2\x02\xf8\x39\xca\xfe\x00\x00\x00\x00\x02\x54\x07\x00\x02\xf8\x39\x00\x00\x01\x15\x0a\x04\x01\x01\x02\x03\x04\x01\x11\x22\x33\x5e\x01\x06\x16\x01\x2c") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0388: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x04\x00\x00\x00\x00\x00\x7e\x00\x5e\x77\x00\x09\x15\x11\x00\x00\x00\x00\x00\x00\x00\x71\x00\x15\x7e\x00\x41\x73\x00\x0b\xf2\x02\xf8\x39\xca\xfe\x00\x00\x00\x00\x01\x50\x02\x00\x04") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0009: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x00\x67\x01\x00\x15\x2e\x0a\x00\xc1\xff\xff\x91\xa1\x7b\x00\x0a\x80\x00\x0a\x00\x00\x0d\x00\x00\x03\x00\x12\x0a\x81\x22\x04\x01\x01\x02\x03\x25\x09\x08\x69\x6e\x74\x65\x72\x6e\x65\x74") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0367: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x01\x00\x00\x00\x00\x00\x7e\x00\x41\x03\x00\x0b\xf2\x02\xf8\x39\xca\xfe\x00\x00\x00\x00\x01\x71\x00\x15\x7e\x00\x41\x03\x00\x0b\xf2\x02\xf8\x39\xca\xfe\x00\x00\x00\x00\x01\x50\x02\x00\x04") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0528: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x00\x67\x01\x00\x15\x2e\x0a\x00\xc1\xff\xff\x91\xa1\x7b\x00\x0a\x80\x00\x0a\x00\x00\x0d\x00\x00\x03\x00\x12\x0a\x81\x22\x04\x01\x01\x02\x03\x25\x0a\x09\x69\x6e\x74\x65\x72\x6e\x65\x74\x32") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0556: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x00\x67\x01\x00\x15\x2e\x0b\x00\xc1\xff\xff\x91\xa1\x7b\x00\x0a\x80\x00\x0a\x00\x00\x0d\x00\x00\x03\x00\x12\x0b\x81\x22\x04\x01\x11\x22\x33\x25\x0a\x09\x69\x6e\x74\x65\x72\x6e\x65\x74\x32") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzGsmMessageDecode/msgPDUSessionModificationRequest: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x2e\x00\x00\xc9\x28\x01\x00\x59\x00\x55\x00\x01\xb0\x13\x00\x01\x7a\x00\x04\x00\x01\x02\x03\x79\x00\x03\x00\x01\x02\x75\x00\x04\x00\x01\x02\x03\x7b\x00\x01\x00") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0002: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x04\x00\x00\x00\x00\x00\x7e\x00\x5e\x77\x00\x09\x15\x11\x00\x00\x00\x00\x00\x00\x00\x71\x00\x19\x7e\x00\x41\x79\x00\x0c\x01\x02\xf8\x39\xf0\xff\x00\x00\x00\x00\x47\x78\x10\x01\x07\x2e\x02\x80\x20") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0026: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x04\x00\x00\x00\x00\x00\x7e\x00\x5e\x77\x00\x09\x15\x11\x00\x00\x00\x00\x00\x00\x00\x71\x00\x19\x7e\x00\x41\x79\x00\x0c\x01\x02\xf8\x39\xf0\xff\x00\x00\x00\x00\x47\x88\x10\x01\x07\x2e\x02\x80\x20") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0050: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x04\x00\x00\x00\x00\x00\x7e\x00\x5e\x77\x00\x09\x15\x11\x00\x00\x00\x00\x00\x00\x00\x71\x00\x18\x7e\x00\x41\x79\x00\x0b\xf2\x02\xf8\x39\xca\xfe\x00\x00\x00\x00\x01\x10\x01\x07\x2e\x02\x80\x20") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0130: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x00\x42\x01\x01\x77\x00\x0b\xf2\x02\xf8\x39\xca\xfe\x00\x00\x00\x00\x02\x54\x07\x00\x02\xf8\x39\x00\x00\x01\x15\x0a\x04\x01\x01\x02\x03\x04\x01\x11\x22\x33\x26\x02\x00\x00\x5e\x01\x06\x16\x01\x2c") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0235: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x04\x00\x00\x00\x00\x00\x7e\x00\x5e\x77\x00\x09\x15\x11\x00\x00\x00\x00\x00\x00\x00\x71\x00\x19\x7e\x00\x41\x79\x00\x0c\x01\x02\xf8\x39\xf0\x00\x00\x00\x00\x00\x47\x78\x10\x01\x07\x2e\x02\x80\x20") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0336: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x00\x5e\x77\x00\x09\x15\x11\x00\x00\x00\x00\x00\x00\x00\x71\x00\x20\x7e\x00\x41\x7a\x00\x0b\xf2\x02\xf8\x39\xca\xfe\x00\x00\x00\x00\x01\x10\x01\x07\x2e\x02\x80\x20\x40\x02\x00\x04\x50\x02\x00\x04") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0370: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x00\x42\x01\x01\x77\x00\x0b\xf2\x02\xf8\x39\xca\xfe\x00\x00\x00\x00\x02\x54\x07\x00\x02\xf8\x39\x00\x00\x01\x15\x0a\x04\x01\x01\x02\x03\x04\x01\x11\x22\x33\x50\x02\x00\x04\x5e\x01\x06\x16\x01\x2c") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0390: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x00\x42\x01\x01\x77\x00\x0b\xf2\x02\xf8\x39\xca\xfe\x00\x00\x00\x00\x03\x54\x07\x00\x02\xf8\x39\x00\x00\x01\x15\x0a\x04\x01\x01\x02\x03\x04\x01\x11\x22\x33\x50\x02\x00\x04\x5e\x01\x06\x16\x01\x2c") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0542: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x00\x5e\x77\x00\x09\x15\x11\x00\x00\x00\x00\x00\x00\x00\x71\x00\x1f\x7e\x00\x41\x79\x00\x0c\x01\x02\xf8\x39\xf0\xff\x00\x00\x00\x00\x47\x78\x10\x01\x07\x2e\x02\x80\x20\x2f\x04\x01\x01\x02\x03") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzGsmMessageDecode/msgPDUSessionModificationCommand: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x2e\x00\x00\xcb\x59\x00\x2a\x06\x00\x01\x02\x03\x04\x05\x56\x00\x80\x7a\x00\x04\x00\x01\x02\x03\x75\x00\x04\x00\x01\x02\x03\x79\x00\x03\x00\x01\x02\x7b\x00\x01\x00") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0005: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x02\x00\x00\x00\x00\x00\x7e\x00\x42\x01\x01\x77\x00\x0b\xf2\x02\xf8\x39\xca\xfe\x00\x00\x00\x00\x01\x54\x07\x00\x02\xf8\x39\x00\x00\x01\x15\x0a\x04\x01\x01\x02\x03\x04\x01\x11\x22\x33\x5e\x01\x06\x16\x01\x2c") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0029: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x02\x00\x00\x00\x00\x00\x7e\x00\x42\x01\x01\x77\x00\x0b\xf2\x02\xf8\x39\xca\xfe\x00\x00\x00\x00\x02\x54\x07\x00\x02\xf8\x39\x00\x00\x01\x15\x0a\x04\x01\x01\x02\x03\x04\x01\x11\x22\x33\x5e\x01\x06\x16\x01\x2c") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0008: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x02\x00\x00\x00\x00\x00\x7e\x00\x67\x01\x00\x15\x2e\x0a\x00\xc1\xff\xff\x91\xa1\x7b\x00\x0a\x80\x00\x0a\x00\x00\x0d\x00\x00\x03\x00\x12\x0a\x81\x22\x04\x01\x01\x02\x03\x25\x09\x08\x69\x6e\x74\x65\x72\x6e\x65\x74") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0317: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x00\x42\x01\x01\x77\x00\x0b\xf2\x02\xf8\x39\xca\xfe\x00\x00\x00\x00\x02\x54\x07\x00\x02\xf8\x39\x00\x00\x01\x15\x0a\x04\x01\x01\x02\x03\x04\x01\x11\x22\x33\x50\x02\x00\x04\x26\x02\x00\x00\x5e\x01\x06\x16\x01\x2c") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0337: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x00\x42\x01\x01\x77\x00\x0b\xf2\x02\xf8\x39\xca\xfe\x00\x00\x00\x00\x03\x54\x07\x00\x02\xf8\x39\x00\x00\x01\x15\x0a\x04\x01\x01\x02\x03\x04\x01\x11\x22\x33\x50\x02\x00\x04\x26\x02\x00\x00\x5e\x01\x06\x16\x01\x2c") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0527: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x02\x00\x00\x00\x00\x00\x7e\x00\x67\x01\x00\x15\x2e\x0a\x00\xc1\xff\xff\x91\xa1\x7b\x00\x0a\x80\x00\x0a\x00\x00\x0d\x00\x00\x03\x00\x12\x0a\x81\x22\x04\x01\x01\x02\x03\x25\x0a\x09\x69\x6e\x74\x65\x72\x6e\x65\x74\x32") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0555: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x02\x00\x00\x00\x00\x00\x7e\x00\x67\x01\x00\x15\x2e\x0b\x00\xc1\xff\xff\x91\xa1\x7b\x00\x0a\x80\x00\x0a\x00\x00\x0d\x00\x00\x03\x00\x12\x0b\x81\x22\x04\x01\x11\x22\x33\x25\x0a\x09\x69\x6e\x74\x65\x72\x6e\x65\x74\x32") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0315: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x00\x41\x0a\x00\x0b\xf2\x02\xf8\x39\xca\xfe\x00\x00\x00\x00\x01\x2e\x02\x80\x20\x71\x00\x20\x7e\x00\x41\x0a\x00\x0b\xf2\x02\xf8\x39\xca\xfe\x00\x00\x00\x00\x01\x10\x01\x07\x2e\x02\x80\x20\x40\x02\x00\x04\x50\x02\x00\x04") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0541: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x04\x00\x00\x00\x00\x00\x7e\x00\x5e\x77\x00\x09\x15\x11\x00\x00\x00\x00\x00\x00\x00\x71\x00\x1f\x7e\x00\x41\x79\x00\x0c\x01\x02\xf8\x39\xf0\xff\x00\x00\x00\x00\x47\x78\x10\x01\x07\x2e\x02\x80\x20\x2f\x04\x01\x01\x02\x03") 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Toolchain 2 | # Goland project folder 3 | .idea/ 4 | # Visual Studio Code 5 | .vscode/ 6 | # emacs/vim 7 | GPATH 8 | GRTAGS 9 | GTAGS 10 | TAGS 11 | tags 12 | cscope.* 13 | # mac 14 | .DS_Store 15 | 16 | support 17 | 18 | # NAS spec 19 | 24501-*.zip 20 | spec.csv 21 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzGmmMessageDecode/msgAuthenticationRequest: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x00\x56\x00\x02\x00\x01\x21\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x20\x10\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x78\x00\x04\x00\x01\x02\x03") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0131: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x02\x00\x00\x00\x00\x00\x7e\x00\x42\x01\x01\x77\x00\x0b\xf2\x02\xf8\x39\xca\xfe\x00\x00\x00\x00\x02\x54\x07\x00\x02\xf8\x39\x00\x00\x01\x15\x0a\x04\x01\x01\x02\x03\x04\x01\x11\x22\x33\x26\x02\x00\x00\x5e\x01\x06\x16\x01\x2c") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0335: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x04\x00\x00\x00\x00\x00\x7e\x00\x5e\x77\x00\x09\x15\x11\x00\x00\x00\x00\x00\x00\x00\x71\x00\x20\x7e\x00\x41\x7a\x00\x0b\xf2\x02\xf8\x39\xca\xfe\x00\x00\x00\x00\x01\x10\x01\x07\x2e\x02\x80\x20\x40\x02\x00\x04\x50\x02\x00\x04") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0371: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x02\x00\x00\x00\x00\x00\x7e\x00\x42\x01\x01\x77\x00\x0b\xf2\x02\xf8\x39\xca\xfe\x00\x00\x00\x00\x02\x54\x07\x00\x02\xf8\x39\x00\x00\x01\x15\x0a\x04\x01\x01\x02\x03\x04\x01\x11\x22\x33\x50\x02\x00\x04\x5e\x01\x06\x16\x01\x2c") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0391: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x02\x00\x00\x00\x00\x00\x7e\x00\x42\x01\x01\x77\x00\x0b\xf2\x02\xf8\x39\xca\xfe\x00\x00\x00\x00\x03\x54\x07\x00\x02\xf8\x39\x00\x00\x01\x15\x0a\x04\x01\x01\x02\x03\x04\x01\x11\x22\x33\x50\x02\x00\x04\x5e\x01\x06\x16\x01\x2c") 3 | -------------------------------------------------------------------------------- /nasType/NAS_Plain5GSNASMessage.go: -------------------------------------------------------------------------------- 1 | package nasType 2 | 3 | // Plain5GSNASMessage 9.9 4 | type Plain5GSNASMessage struct{} 5 | 6 | func NewPlain5GSNASMessage() (plain5GSNASMessage *Plain5GSNASMessage) { 7 | plain5GSNASMessage = &Plain5GSNASMessage{} 8 | return plain5GSNASMessage 9 | } 10 | -------------------------------------------------------------------------------- /nasType/comm_nasType_test.go: -------------------------------------------------------------------------------- 1 | package nasType_test 2 | 3 | type NasTypeIeiData struct { 4 | in uint8 5 | out uint8 6 | } 7 | 8 | type NasTypeLenuint8Data struct { 9 | in uint8 10 | out uint8 11 | } 12 | 13 | type NasTypeLenUint16Data struct { 14 | in uint16 15 | out uint16 16 | } 17 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0318: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x02\x00\x00\x00\x00\x00\x7e\x00\x42\x01\x01\x77\x00\x0b\xf2\x02\xf8\x39\xca\xfe\x00\x00\x00\x00\x02\x54\x07\x00\x02\xf8\x39\x00\x00\x01\x15\x0a\x04\x01\x01\x02\x03\x04\x01\x11\x22\x33\x50\x02\x00\x04\x26\x02\x00\x00\x5e\x01\x06\x16\x01\x2c") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0338: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x02\x00\x00\x00\x00\x00\x7e\x00\x42\x01\x01\x77\x00\x0b\xf2\x02\xf8\x39\xca\xfe\x00\x00\x00\x00\x03\x54\x07\x00\x02\xf8\x39\x00\x00\x01\x15\x0a\x04\x01\x01\x02\x03\x04\x01\x11\x22\x33\x50\x02\x00\x04\x26\x02\x00\x00\x5e\x01\x06\x16\x01\x2c") 3 | -------------------------------------------------------------------------------- /internal/tools/generator/cmd/cmd.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import "github.com/free5gc/nas/internal/tools/generator" 4 | 5 | func main() { 6 | generator.ParseSpecs() 7 | 8 | generator.GenerateNasMessage() 9 | 10 | generator.GenerateNasEncDec() 11 | 12 | generator.GenerateTestLarge() 13 | } 14 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0314: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x01\x00\x00\x00\x00\x00\x7e\x00\x41\x0a\x00\x0b\xf2\x02\xf8\x39\xca\xfe\x00\x00\x00\x00\x01\x2e\x02\x80\x20\x71\x00\x20\x7e\x00\x41\x0a\x00\x0b\xf2\x02\xf8\x39\xca\xfe\x00\x00\x00\x00\x01\x10\x01\x07\x2e\x02\x80\x20\x40\x02\x00\x04\x50\x02\x00\x04") 3 | -------------------------------------------------------------------------------- /nasType/NAS_Plain5GSNASMessage_test.go: -------------------------------------------------------------------------------- 1 | package nasType_test 2 | 3 | import ( 4 | "testing" 5 | 6 | "github.com/stretchr/testify/assert" 7 | 8 | "github.com/free5gc/nas/nasType" 9 | ) 10 | 11 | func TestNasTypeNewPlain5GSNASMessage(t *testing.T) { 12 | a := nasType.NewPlain5GSNASMessage() 13 | assert.NotNil(t, a) 14 | } 15 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzGsmMessageDecode/msgPDUSessionEstablishmentAccept: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x2e\x00\x00\xc2\x00\x00\x04\x00\x01\x02\x03\x06\x00\x01\x02\x03\x04\x05\x59\x00\x29\x05\x00\x01\x02\x03\x04\x56\x00\x22\x01\x00\x80\x75\x00\x04\x00\x01\x02\x03\x78\x00\x04\x00\x01\x02\x03\x79\x00\x03\x00\x01\x02\x7b\x00\x01\x00\x25\x01\x00") 3 | -------------------------------------------------------------------------------- /nasType/comm_util.go: -------------------------------------------------------------------------------- 1 | package nasType 2 | 3 | // GetBitMask number, pos is shift bit 4 | // >= lb 5 | // < up 6 | // TODO exception check 7 | func GetBitMask(ub uint8, lb uint8) (bitMask uint8) { 8 | // fmt.Println("%x", number) 9 | // fmt.Println("%x", 1< 2 { 10 | eea[0] = buf[2] << 1 11 | eia[0] = buf[3] << 1 12 | } 13 | return 14 | } 15 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzGmmMessageDecode/msgConfigurationUpdateCommand: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x00\x54\xd0\x77\x00\x0b\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x54\x07\x00\x01\x02\x03\x04\x05\x06\x15\x02\x00\x01\x27\x04\x00\x01\x02\x03\x43\x01\x00\x45\x01\x00\x46\x00\x47\x00\x01\x02\x03\x04\x05\x06\x49\x01\x00\x79\x00\x00\xb0\x90\x31\x02\x00\x01\x11\x02\x00\x01\x76\x00\x00\xf0") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0010: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x00\x68\x01\x00\x56\x2e\x0a\x00\xc2\x11\x00\x09\x01\x00\x06\x31\x31\x01\x01\xff\x09\x06\x01\x03\xe8\x01\x03\xe8\x29\x05\x01\x0a\x3c\x00\x32\x22\x04\x01\x01\x02\x03\x79\x00\x06\x09\x20\x41\x01\x01\x09\x7b\x00\x1b\x80\x00\x0d\x04\x08\x08\x08\x08\x00\x03\x10\x20\x01\x48\x60\x48\x60\x00\x00\x00\x00\x00\x00\x00\x00\x88\x88\x25\x09\x08\x69\x6e\x74\x65\x72\x6e\x65\x74\x12\x0a") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0022: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x00\x68\x01\x00\x56\x2e\x0a\x00\xc2\x11\x00\x09\x01\x00\x06\x31\x31\x01\x01\xff\x09\x06\x01\x03\xe8\x01\x03\xe8\x29\x05\x01\x0a\x3c\x00\x01\x22\x04\x01\x01\x02\x03\x79\x00\x06\x09\x20\x41\x01\x01\x09\x7b\x00\x1b\x80\x00\x0d\x04\x08\x08\x08\x08\x00\x03\x10\x20\x01\x48\x60\x48\x60\x00\x00\x00\x00\x00\x00\x00\x00\x88\x88\x25\x09\x08\x69\x6e\x74\x65\x72\x6e\x65\x74\x12\x0a") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0034: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x00\x68\x01\x00\x56\x2e\x0a\x00\xc2\x11\x00\x09\x01\x00\x06\x31\x31\x01\x01\xff\x05\x06\x01\x03\xe8\x01\x03\xe8\x29\x05\x01\x0a\x3c\x00\x02\x22\x04\x01\x01\x02\x03\x79\x00\x06\x05\x20\x41\x01\x01\x05\x7b\x00\x1b\x80\x00\x0d\x04\x08\x08\x08\x08\x00\x03\x10\x20\x01\x48\x60\x48\x60\x00\x00\x00\x00\x00\x00\x00\x00\x88\x88\x25\x09\x08\x69\x6e\x74\x65\x72\x6e\x65\x74\x12\x0a") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0433: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x00\x68\x01\x00\x56\x2e\x0a\x00\xc2\x11\x00\x09\x01\x00\x06\x31\x31\x01\x01\xff\x09\x06\x01\x03\xe8\x01\x03\xe8\x29\x05\x01\x0a\x3c\x00\x02\x22\x04\x01\x01\x02\x03\x79\x00\x06\x09\x20\x41\x01\x01\x09\x7b\x00\x1b\x80\x00\x0d\x04\x08\x08\x08\x08\x00\x03\x10\x20\x01\x48\x60\x48\x60\x00\x00\x00\x00\x00\x00\x00\x00\x88\x88\x25\x09\x08\x69\x6e\x74\x65\x72\x6e\x65\x74\x12\x0a") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0533: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x00\x68\x01\x00\x56\x2e\x0a\x00\xc2\x11\x00\x09\x01\x00\x06\x31\x31\x01\x01\xff\x09\x06\x01\x03\xe8\x01\x03\xe8\x29\x05\x01\x0a\x3c\x00\x03\x22\x04\x01\x01\x02\x03\x79\x00\x06\x09\x20\x41\x01\x01\x09\x7b\x00\x1b\x80\x00\x0d\x04\x08\x08\x08\x08\x00\x03\x10\x20\x01\x48\x60\x48\x60\x00\x00\x00\x00\x00\x00\x00\x00\x88\x88\x25\x09\x08\x69\x6e\x74\x65\x72\x6e\x65\x74\x12\x0a") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0537: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x00\x68\x01\x00\x56\x2e\x0a\x00\xc2\x11\x00\x09\x01\x00\x06\x31\x31\x01\x01\xff\x09\x06\x01\x03\xe8\x01\x03\xe8\x29\x05\x01\x0a\x3c\x00\x04\x22\x04\x01\x01\x02\x03\x79\x00\x06\x09\x20\x41\x01\x01\x09\x7b\x00\x1b\x80\x00\x0d\x04\x08\x08\x08\x08\x00\x03\x10\x20\x01\x48\x60\x48\x60\x00\x00\x00\x00\x00\x00\x00\x00\x88\x88\x25\x09\x08\x69\x6e\x74\x65\x72\x6e\x65\x74\x12\x0a") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0557: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x00\x68\x01\x00\x57\x2e\x0b\x00\xc2\x11\x00\x09\x01\x00\x06\x31\x31\x01\x01\xff\x09\x06\x01\x03\xe8\x01\x03\xe8\x29\x05\x01\x0a\x3e\x00\x01\x22\x04\x01\x11\x22\x33\x79\x00\x06\x09\x20\x41\x01\x01\x09\x7b\x00\x1b\x80\x00\x0d\x04\x08\x08\x08\x08\x00\x03\x10\x20\x01\x48\x60\x48\x60\x00\x00\x00\x00\x00\x00\x00\x00\x88\x88\x25\x0a\x09\x69\x6e\x74\x65\x72\x6e\x65\x74\x32\x12\x0b") 3 | -------------------------------------------------------------------------------- /nasConvert/PDUSessionReactivationResultErrorCause.go: -------------------------------------------------------------------------------- 1 | package nasConvert 2 | 3 | func PDUSessionReactivationResultErrorCauseToBuf(errPduSessionId, errCause []uint8) (buf []uint8) { 4 | if errPduSessionId == nil || len(errPduSessionId) != len(errCause) { 5 | return 6 | } 7 | for i := 0; i < len(errPduSessionId); i++ { 8 | buf = append(buf, errPduSessionId[i]) 9 | buf = append(buf, errCause[i]) 10 | } 11 | return 12 | } 13 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzGmmMessageDecode/msgRegistrationRequest: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x00\x41\x00\x00\x04\x00\x01\x02\x03\xc0\x10\x01\x00\x2e\x02\x00\x01\x2f\x02\x00\x01\x52\x00\x01\x02\x03\x04\x05\x17\x02\x00\x01\x40\x02\x00\x01\x50\x02\x00\x01\xb0\x2b\x01\x00\x77\x00\x0b\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x25\x02\x00\x01\x18\x01\x00\x51\x01\x00\x70\x00\x01\x00\x74\x00\x00\x7b\x00\x01\x00\x90\x53\x01\x00\x71\x00\x01\x00\x60\x02\x00\x01") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0011: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x02\x00\x00\x00\x00\x00\x7e\x00\x68\x01\x00\x56\x2e\x0a\x00\xc2\x11\x00\x09\x01\x00\x06\x31\x31\x01\x01\xff\x09\x06\x01\x03\xe8\x01\x03\xe8\x29\x05\x01\x0a\x3c\x00\x32\x22\x04\x01\x01\x02\x03\x79\x00\x06\x09\x20\x41\x01\x01\x09\x7b\x00\x1b\x80\x00\x0d\x04\x08\x08\x08\x08\x00\x03\x10\x20\x01\x48\x60\x48\x60\x00\x00\x00\x00\x00\x00\x00\x00\x88\x88\x25\x09\x08\x69\x6e\x74\x65\x72\x6e\x65\x74\x12\x0a") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0023: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x02\x00\x00\x00\x00\x00\x7e\x00\x68\x01\x00\x56\x2e\x0a\x00\xc2\x11\x00\x09\x01\x00\x06\x31\x31\x01\x01\xff\x09\x06\x01\x03\xe8\x01\x03\xe8\x29\x05\x01\x0a\x3c\x00\x01\x22\x04\x01\x01\x02\x03\x79\x00\x06\x09\x20\x41\x01\x01\x09\x7b\x00\x1b\x80\x00\x0d\x04\x08\x08\x08\x08\x00\x03\x10\x20\x01\x48\x60\x48\x60\x00\x00\x00\x00\x00\x00\x00\x00\x88\x88\x25\x09\x08\x69\x6e\x74\x65\x72\x6e\x65\x74\x12\x0a") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0035: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x02\x00\x00\x00\x00\x00\x7e\x00\x68\x01\x00\x56\x2e\x0a\x00\xc2\x11\x00\x09\x01\x00\x06\x31\x31\x01\x01\xff\x05\x06\x01\x03\xe8\x01\x03\xe8\x29\x05\x01\x0a\x3c\x00\x02\x22\x04\x01\x01\x02\x03\x79\x00\x06\x05\x20\x41\x01\x01\x05\x7b\x00\x1b\x80\x00\x0d\x04\x08\x08\x08\x08\x00\x03\x10\x20\x01\x48\x60\x48\x60\x00\x00\x00\x00\x00\x00\x00\x00\x88\x88\x25\x09\x08\x69\x6e\x74\x65\x72\x6e\x65\x74\x12\x0a") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0434: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x02\x00\x00\x00\x00\x00\x7e\x00\x68\x01\x00\x56\x2e\x0a\x00\xc2\x11\x00\x09\x01\x00\x06\x31\x31\x01\x01\xff\x09\x06\x01\x03\xe8\x01\x03\xe8\x29\x05\x01\x0a\x3c\x00\x02\x22\x04\x01\x01\x02\x03\x79\x00\x06\x09\x20\x41\x01\x01\x09\x7b\x00\x1b\x80\x00\x0d\x04\x08\x08\x08\x08\x00\x03\x10\x20\x01\x48\x60\x48\x60\x00\x00\x00\x00\x00\x00\x00\x00\x88\x88\x25\x09\x08\x69\x6e\x74\x65\x72\x6e\x65\x74\x12\x0a") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0534: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x02\x00\x00\x00\x00\x00\x7e\x00\x68\x01\x00\x56\x2e\x0a\x00\xc2\x11\x00\x09\x01\x00\x06\x31\x31\x01\x01\xff\x09\x06\x01\x03\xe8\x01\x03\xe8\x29\x05\x01\x0a\x3c\x00\x03\x22\x04\x01\x01\x02\x03\x79\x00\x06\x09\x20\x41\x01\x01\x09\x7b\x00\x1b\x80\x00\x0d\x04\x08\x08\x08\x08\x00\x03\x10\x20\x01\x48\x60\x48\x60\x00\x00\x00\x00\x00\x00\x00\x00\x88\x88\x25\x09\x08\x69\x6e\x74\x65\x72\x6e\x65\x74\x12\x0a") 3 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0538: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x02\x00\x00\x00\x00\x00\x7e\x00\x68\x01\x00\x56\x2e\x0a\x00\xc2\x11\x00\x09\x01\x00\x06\x31\x31\x01\x01\xff\x09\x06\x01\x03\xe8\x01\x03\xe8\x29\x05\x01\x0a\x3c\x00\x04\x22\x04\x01\x01\x02\x03\x79\x00\x06\x09\x20\x41\x01\x01\x09\x7b\x00\x1b\x80\x00\x0d\x04\x08\x08\x08\x08\x00\x03\x10\x20\x01\x48\x60\x48\x60\x00\x00\x00\x00\x00\x00\x00\x00\x88\x88\x25\x09\x08\x69\x6e\x74\x65\x72\x6e\x65\x74\x12\x0a") 3 | -------------------------------------------------------------------------------- /uePolicyContainer/NAS_UePolicyDeliveryServiceMsgType.go: -------------------------------------------------------------------------------- 1 | package uePolicyContainer 2 | 3 | // TS24.501 v17.7.1, D.6.1 4 | type UePolicyDeliveryServiceMsgType struct { 5 | Octet uint8 6 | } 7 | 8 | func (m *UePolicyDeliveryServiceMsgType) SetMessageIdentity(MessageIdentity uint8) { 9 | m.Octet = MessageIdentity 10 | } 11 | 12 | func (m *UePolicyDeliveryServiceMsgType) GetMessageIdentity(MessageIdentity uint8) uint8 { 13 | return m.Octet 14 | } 15 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzNAS/ci0558: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x02\x00\x00\x00\x00\x00\x7e\x00\x68\x01\x00\x57\x2e\x0b\x00\xc2\x11\x00\x09\x01\x00\x06\x31\x31\x01\x01\xff\x09\x06\x01\x03\xe8\x01\x03\xe8\x29\x05\x01\x0a\x3e\x00\x01\x22\x04\x01\x11\x22\x33\x79\x00\x06\x09\x20\x41\x01\x01\x09\x7b\x00\x1b\x80\x00\x0d\x04\x08\x08\x08\x08\x00\x03\x10\x20\x01\x48\x60\x48\x60\x00\x00\x00\x00\x00\x00\x00\x00\x88\x88\x25\x0a\x09\x69\x6e\x74\x65\x72\x6e\x65\x74\x32\x12\x0b") 3 | -------------------------------------------------------------------------------- /nasType/NAS_PTI.go: -------------------------------------------------------------------------------- 1 | package nasType 2 | 3 | // PTI 9.6 4 | // PTI Row, sBit, len = [0, 0], 8 , 8 5 | type PTI struct { 6 | Octet uint8 7 | } 8 | 9 | func NewPTI() (pTI *PTI) { 10 | pTI = &PTI{} 11 | return pTI 12 | } 13 | 14 | // PTI 9.6 15 | // PTI Row, sBit, len = [0, 0], 8 , 8 16 | func (a *PTI) GetPTI() (pTI uint8) { 17 | return a.Octet 18 | } 19 | 20 | // PTI 9.6 21 | // PTI Row, sBit, len = [0, 0], 8 , 8 22 | func (a *PTI) SetPTI(pTI uint8) { 23 | a.Octet = pTI 24 | } 25 | -------------------------------------------------------------------------------- /nasConvert/PSI.go: -------------------------------------------------------------------------------- 1 | package nasConvert 2 | 3 | func PSIToBooleanArray(buf []uint8) (array [16]bool) { 4 | if len(buf) < 2 { 5 | return 6 | } 7 | for i := uint8(0); i < 16; i++ { 8 | if (buf[i/8] & (1 << (i % 8))) > 0 { 9 | array[i] = true 10 | } 11 | } 12 | return 13 | } 14 | 15 | func PSIToBuf(array [16]bool) []uint8 { 16 | var buf [2]uint8 17 | for i := uint8(0); i < 16; i++ { 18 | if array[i] { 19 | buf[i/8] |= (1 << (i % 8)) 20 | } 21 | } 22 | return buf[:] 23 | } 24 | -------------------------------------------------------------------------------- /uePolicyContainer/UePolicyContainer_UEPolicyPartType.go: -------------------------------------------------------------------------------- 1 | package uePolicyContainer 2 | 3 | type UEPolicyPartType struct { 4 | Octet uint8 5 | } 6 | 7 | const ( 8 | UEPolicyPartType_URSP uint8 = 0x01 9 | UEPolicyPartType_ANDSP uint8 = 0x02 10 | UEPolicyPartType_V2XP uint8 = 0x03 11 | UEPolicyPartType_ProSeP uint8 = 0x04 12 | ) 13 | 14 | func (u *UEPolicyPartType) SetPartType(partType byte) { 15 | u.Octet = partType 16 | } 17 | 18 | func (u *UEPolicyPartType) GetPartType() byte { 19 | return u.Octet 20 | } 21 | -------------------------------------------------------------------------------- /.github/workflows/go.yml: -------------------------------------------------------------------------------- 1 | name: Go 2 | 3 | on: 4 | push: 5 | branches: [ main ] 6 | pull_request: 7 | 8 | jobs: 9 | build: 10 | runs-on: ubuntu-latest 11 | strategy: 12 | matrix: 13 | go: [ '1.24' ] 14 | steps: 15 | - uses: actions/checkout@v4 16 | 17 | - name: Set up Go 18 | uses: actions/setup-go@v5 19 | with: 20 | go-version: ${{ matrix.go }} 21 | 22 | - name: Build 23 | run: go build -v ./... 24 | 25 | - name: Test 26 | run: go test -v ./... 27 | -------------------------------------------------------------------------------- /nasType/NAS_Non3GppNwPolicies.go: -------------------------------------------------------------------------------- 1 | package nasType 2 | 3 | type Non3GppNwPolicies struct { 4 | Octet uint8 5 | } 6 | 7 | func NewNon3GppNwPolicies(iei uint8) (non3GppNwPolicies *Non3GppNwPolicies) { 8 | non3GppNwPolicies = &Non3GppNwPolicies{} 9 | non3GppNwPolicies.SetIei(iei) 10 | return non3GppNwPolicies 11 | } 12 | 13 | func (a *Non3GppNwPolicies) GetIei() (iei uint8) { 14 | return a.Octet & GetBitMask(8, 4) >> (4) 15 | } 16 | 17 | func (a *Non3GppNwPolicies) SetIei(iei uint8) { 18 | a.Octet = (a.Octet & 15) + ((iei & 15) << 4) 19 | } 20 | -------------------------------------------------------------------------------- /nasType/NAS_SequenceNumber.go: -------------------------------------------------------------------------------- 1 | package nasType 2 | 3 | // SequenceNumber 9.10 4 | // SQN Row, sBit, len = [0, 0], 8 , 8 5 | type SequenceNumber struct { 6 | Octet uint8 7 | } 8 | 9 | func NewSequenceNumber() (sequenceNumber *SequenceNumber) { 10 | sequenceNumber = &SequenceNumber{} 11 | return sequenceNumber 12 | } 13 | 14 | // SequenceNumber 9.10 15 | // SQN Row, sBit, len = [0, 0], 8 , 8 16 | func (a *SequenceNumber) GetSQN() (sQN uint8) { 17 | return a.Octet 18 | } 19 | 20 | // SequenceNumber 9.10 21 | // SQN Row, sBit, len = [0, 0], 8 , 8 22 | func (a *SequenceNumber) SetSQN(sQN uint8) { 23 | a.Octet = sQN 24 | } 25 | -------------------------------------------------------------------------------- /testdata/fuzz/FuzzGmmMessageDecode/msgRegistrationAccept: -------------------------------------------------------------------------------- 1 | go test fuzz v1 2 | []byte("\x7e\x00\x42\x01\x00\x77\x00\x0b\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x4a\x03\x00\x01\x02\x54\x07\x00\x01\x02\x03\x04\x05\x06\x15\x02\x00\x01\x11\x02\x00\x01\x31\x02\x00\x01\x21\x01\x00\x50\x02\x00\x01\x26\x02\x00\x01\x72\x00\x02\x00\x01\x79\x00\x09\x00\x01\x02\x03\x04\x05\x06\x07\x08\xb0\x90\x27\x04\x00\x01\x02\x03\x5e\x01\x00\x5d\x01\x00\x16\x01\x00\x34\x03\x00\x01\x02\x7a\x00\x04\x00\x01\x02\x03\x73\x00\x11\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x78\x00\x04\x00\x01\x02\x03\xa0\x76\x00\x00\x51\x01\x00\xd0\x60\x02\x00\x01") 3 | -------------------------------------------------------------------------------- /nasType/NAS_PDUSessionID.go: -------------------------------------------------------------------------------- 1 | package nasType 2 | 3 | // PDUSessionID 9.4 4 | // PDUSessionID Row, sBit, len = [0, 0], 8 , 8 5 | type PDUSessionID struct { 6 | Octet uint8 7 | } 8 | 9 | func NewPDUSessionID() (pDUSessionID *PDUSessionID) { 10 | pDUSessionID = &PDUSessionID{} 11 | return pDUSessionID 12 | } 13 | 14 | // PDUSessionID 9.4 15 | // PDUSessionID Row, sBit, len = [0, 0], 8 , 8 16 | func (a *PDUSessionID) GetPDUSessionID() (pDUSessionID uint8) { 17 | return a.Octet 18 | } 19 | 20 | // PDUSessionID 9.4 21 | // PDUSessionID Row, sBit, len = [0, 0], 8 , 8 22 | func (a *PDUSessionID) SetPDUSessionID(pDUSessionID uint8) { 23 | a.Octet = pDUSessionID 24 | } 25 | -------------------------------------------------------------------------------- /nasType/NAS_EPSBearerContextStatus.go: -------------------------------------------------------------------------------- 1 | package nasType 2 | 3 | type EPSBearerContextStatus struct { 4 | Iei uint8 5 | Len uint8 6 | Octet [2]uint8 7 | } 8 | 9 | func NewEPSBearerContextStatus(iei uint8) (ePSBearerContextStatus *EPSBearerContextStatus) { 10 | ePSBearerContextStatus = &EPSBearerContextStatus{} 11 | ePSBearerContextStatus.SetIei(iei) 12 | return ePSBearerContextStatus 13 | } 14 | 15 | func (a *EPSBearerContextStatus) GetIei() (iei uint8) { 16 | return a.Iei 17 | } 18 | 19 | func (a *EPSBearerContextStatus) SetIei(iei uint8) { 20 | a.Iei = iei 21 | } 22 | 23 | func (a *EPSBearerContextStatus) GetLen() (len uint8) { 24 | return a.Len 25 | } 26 | 27 | func (a *EPSBearerContextStatus) SetLen(len uint8) { 28 | a.Len = len 29 | } 30 | -------------------------------------------------------------------------------- /nasConvert/Ladn.go: -------------------------------------------------------------------------------- 1 | package nasConvert 2 | 3 | import ( 4 | "github.com/free5gc/openapi/models" 5 | ) 6 | 7 | func LadnToModels(buf []uint8) (dnnValues []string) { 8 | for bufOffset := 1; bufOffset < len(buf); { 9 | lenOfDnn := int(buf[bufOffset]) 10 | dnn := string(buf[bufOffset : bufOffset+lenOfDnn]) 11 | dnnValues = append(dnnValues, dnn) 12 | bufOffset += lenOfDnn 13 | } 14 | 15 | return 16 | } 17 | 18 | func LadnToNas(dnn string, taiLists []models.Tai) (ladnNas []uint8) { 19 | dnnNas := []byte(dnn) 20 | 21 | ladnNas = append(ladnNas, uint8(len(dnnNas))) 22 | ladnNas = append(ladnNas, dnnNas...) 23 | 24 | taiListNas := TaiListToNas(taiLists) 25 | ladnNas = append(ladnNas, uint8(len(taiListNas))) 26 | ladnNas = append(ladnNas, taiListNas...) 27 | return 28 | } 29 | -------------------------------------------------------------------------------- /generate.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | SPEC=24501-f70 4 | 5 | cd `dirname $0` 6 | 7 | if [ ! -f spec.csv ] ; then 8 | if [ ! -f ${SPEC}.zip ] ; then 9 | wget https://www.3gpp.org/ftp/Specs/archive/24_series/24.501/${SPEC}.zip 10 | fi 11 | if [ ! -f ${SPEC}.zip ] ; then 12 | echo "Download failed." 13 | exit 1 14 | fi 15 | python3 internal/tools/extract.py 16 | fi 17 | 18 | rm -rf testdata/GmmMessage testdata/GsmMessage 19 | mkdir -p testdata/GmmMessage testdata/GsmMessage 20 | rm -f testdata/fuzz/FuzzGmmMessageDecode/msg* testdata/fuzz/FuzzGsmMessageDecode/msg* 21 | ls nasMessage/*go | grep -v "_test" | grep -v "NAS_EPD" | grep -v "NAS_CommInfoIE" | xargs rm -f 22 | go run internal/tools/generator_sub.go 23 | go run internal/tools/generator/cmd/cmd.go 24 | -------------------------------------------------------------------------------- /nasType/NAS_MessageAuthenticationCode.go: -------------------------------------------------------------------------------- 1 | package nasType 2 | 3 | // MessageAuthenticationCode MAC 9.8 4 | // MAC Row, sBit, len = [0, 3], 8 , 32 5 | type MessageAuthenticationCode struct { 6 | Octet [4]uint8 7 | } 8 | 9 | func NewMessageAuthenticationCode() (messageAuthenticationCode *MessageAuthenticationCode) { 10 | messageAuthenticationCode = &MessageAuthenticationCode{} 11 | return messageAuthenticationCode 12 | } 13 | 14 | // MessageAuthenticationCode MAC 9.8 15 | // MAC Row, sBit, len = [0, 3], 8 , 32 16 | func (a *MessageAuthenticationCode) GetMAC() (mAC [4]uint8) { 17 | copy(mAC[:], a.Octet[0:4]) 18 | return mAC 19 | } 20 | 21 | // MessageAuthenticationCode MAC 9.8 22 | // MAC Row, sBit, len = [0, 3], 8 , 32 23 | func (a *MessageAuthenticationCode) SetMAC(mAC [4]uint8) { 24 | copy(a.Octet[0:4], mAC[:]) 25 | } 26 | -------------------------------------------------------------------------------- /nasType/NAS_STATUSMessageIdentity5GMM.go: -------------------------------------------------------------------------------- 1 | package nasType 2 | 3 | // STATUSMessageIdentity5GMM 9.7 4 | // MessageType Row, sBit, len = [0, 0], 8 , 8 5 | type STATUSMessageIdentity5GMM struct { 6 | Octet uint8 7 | } 8 | 9 | func NewSTATUSMessageIdentity5GMM() (sTATUSMessageIdentity5GMM *STATUSMessageIdentity5GMM) { 10 | sTATUSMessageIdentity5GMM = &STATUSMessageIdentity5GMM{} 11 | return sTATUSMessageIdentity5GMM 12 | } 13 | 14 | // STATUSMessageIdentity5GMM 9.7 15 | // MessageType Row, sBit, len = [0, 0], 8 , 8 16 | func (a *STATUSMessageIdentity5GMM) GetMessageType() (messageType uint8) { 17 | return a.Octet 18 | } 19 | 20 | // STATUSMessageIdentity5GMM 9.7 21 | // MessageType Row, sBit, len = [0, 0], 8 , 8 22 | func (a *STATUSMessageIdentity5GMM) SetMessageType(messageType uint8) { 23 | a.Octet = messageType 24 | } 25 | -------------------------------------------------------------------------------- /nasType/NAS_STATUSMessageIdentity5GSM.go: -------------------------------------------------------------------------------- 1 | package nasType 2 | 3 | // STATUSMessageIdentity5GSM 9.7 4 | // MessageType Row, sBit, len = [0, 0], 8 , 8 5 | type STATUSMessageIdentity5GSM struct { 6 | Octet uint8 7 | } 8 | 9 | func NewSTATUSMessageIdentity5GSM() (sTATUSMessageIdentity5GSM *STATUSMessageIdentity5GSM) { 10 | sTATUSMessageIdentity5GSM = &STATUSMessageIdentity5GSM{} 11 | return sTATUSMessageIdentity5GSM 12 | } 13 | 14 | // STATUSMessageIdentity5GSM 9.7 15 | // MessageType Row, sBit, len = [0, 0], 8 , 8 16 | func (a *STATUSMessageIdentity5GSM) GetMessageType() (messageType uint8) { 17 | return a.Octet 18 | } 19 | 20 | // STATUSMessageIdentity5GSM 9.7 21 | // MessageType Row, sBit, len = [0, 0], 8 , 8 22 | func (a *STATUSMessageIdentity5GSM) SetMessageType(messageType uint8) { 23 | a.Octet = messageType 24 | } 25 | -------------------------------------------------------------------------------- /nasType/NAS_NotificationMessageIdentity.go: -------------------------------------------------------------------------------- 1 | package nasType 2 | 3 | // NotificationMessageIdentity 9.7 4 | // MessageType Row, sBit, len = [0, 0], 8 , 8 5 | type NotificationMessageIdentity struct { 6 | Octet uint8 7 | } 8 | 9 | func NewNotificationMessageIdentity() (notificationMessageIdentity *NotificationMessageIdentity) { 10 | notificationMessageIdentity = &NotificationMessageIdentity{} 11 | return notificationMessageIdentity 12 | } 13 | 14 | // NotificationMessageIdentity 9.7 15 | // MessageType Row, sBit, len = [0, 0], 8 , 8 16 | func (a *NotificationMessageIdentity) GetMessageType() (messageType uint8) { 17 | return a.Octet 18 | } 19 | 20 | // NotificationMessageIdentity 9.7 21 | // MessageType Row, sBit, len = [0, 0], 8 , 8 22 | func (a *NotificationMessageIdentity) SetMessageType(messageType uint8) { 23 | a.Octet = messageType 24 | } 25 | -------------------------------------------------------------------------------- /nasType/NAS_ServiceAcceptMessageIdentity.go: -------------------------------------------------------------------------------- 1 | package nasType 2 | 3 | // ServiceAcceptMessageIdentity 9.7 4 | // MessageType Row, sBit, len = [0, 0], 8 , 8 5 | type ServiceAcceptMessageIdentity struct { 6 | Octet uint8 7 | } 8 | 9 | func NewServiceAcceptMessageIdentity() (serviceAcceptMessageIdentity *ServiceAcceptMessageIdentity) { 10 | serviceAcceptMessageIdentity = &ServiceAcceptMessageIdentity{} 11 | return serviceAcceptMessageIdentity 12 | } 13 | 14 | // ServiceAcceptMessageIdentity 9.7 15 | // MessageType Row, sBit, len = [0, 0], 8 , 8 16 | func (a *ServiceAcceptMessageIdentity) GetMessageType() (messageType uint8) { 17 | return a.Octet 18 | } 19 | 20 | // ServiceAcceptMessageIdentity 9.7 21 | // MessageType Row, sBit, len = [0, 0], 8 , 8 22 | func (a *ServiceAcceptMessageIdentity) SetMessageType(messageType uint8) { 23 | a.Octet = messageType 24 | } 25 | -------------------------------------------------------------------------------- /nasType/NAS_ServiceRejectMessageIdentity.go: -------------------------------------------------------------------------------- 1 | package nasType 2 | 3 | // ServiceRejectMessageIdentity 9.7 4 | // MessageType Row, sBit, len = [0, 0], 8 , 8 5 | type ServiceRejectMessageIdentity struct { 6 | Octet uint8 7 | } 8 | 9 | func NewServiceRejectMessageIdentity() (serviceRejectMessageIdentity *ServiceRejectMessageIdentity) { 10 | serviceRejectMessageIdentity = &ServiceRejectMessageIdentity{} 11 | return serviceRejectMessageIdentity 12 | } 13 | 14 | // ServiceRejectMessageIdentity 9.7 15 | // MessageType Row, sBit, len = [0, 0], 8 , 8 16 | func (a *ServiceRejectMessageIdentity) GetMessageType() (messageType uint8) { 17 | return a.Octet 18 | } 19 | 20 | // ServiceRejectMessageIdentity 9.7 21 | // MessageType Row, sBit, len = [0, 0], 8 , 8 22 | func (a *ServiceRejectMessageIdentity) SetMessageType(messageType uint8) { 23 | a.Octet = messageType 24 | } 25 | -------------------------------------------------------------------------------- /nasType/NAS_DLNASTRANSPORTMessageIdentity.go: -------------------------------------------------------------------------------- 1 | package nasType 2 | 3 | // DLNASTRANSPORTMessageIdentity 9.7 4 | // MessageType Row, sBit, len = [0, 0], 8 , 8 5 | type DLNASTRANSPORTMessageIdentity struct { 6 | Octet uint8 7 | } 8 | 9 | func NewDLNASTRANSPORTMessageIdentity() (dLNASTRANSPORTMessageIdentity *DLNASTRANSPORTMessageIdentity) { 10 | dLNASTRANSPORTMessageIdentity = &DLNASTRANSPORTMessageIdentity{} 11 | return dLNASTRANSPORTMessageIdentity 12 | } 13 | 14 | // DLNASTRANSPORTMessageIdentity 9.7 15 | // MessageType Row, sBit, len = [0, 0], 8 , 8 16 | func (a *DLNASTRANSPORTMessageIdentity) GetMessageType() (messageType uint8) { 17 | return a.Octet 18 | } 19 | 20 | // DLNASTRANSPORTMessageIdentity 9.7 21 | // MessageType Row, sBit, len = [0, 0], 8 , 8 22 | func (a *DLNASTRANSPORTMessageIdentity) SetMessageType(messageType uint8) { 23 | a.Octet = messageType 24 | } 25 | -------------------------------------------------------------------------------- /nasType/NAS_ServiceRequestMessageIdentity.go: -------------------------------------------------------------------------------- 1 | package nasType 2 | 3 | // ServiceRequestMessageIdentity 9.7 4 | // MessageType Row, sBit, len = [0, 0], 8 , 8 5 | type ServiceRequestMessageIdentity struct { 6 | Octet uint8 7 | } 8 | 9 | func NewServiceRequestMessageIdentity() (serviceRequestMessageIdentity *ServiceRequestMessageIdentity) { 10 | serviceRequestMessageIdentity = &ServiceRequestMessageIdentity{} 11 | return serviceRequestMessageIdentity 12 | } 13 | 14 | // ServiceRequestMessageIdentity 9.7 15 | // MessageType Row, sBit, len = [0, 0], 8 , 8 16 | func (a *ServiceRequestMessageIdentity) GetMessageType() (messageType uint8) { 17 | return a.Octet 18 | } 19 | 20 | // ServiceRequestMessageIdentity 9.7 21 | // MessageType Row, sBit, len = [0, 0], 8 , 8 22 | func (a *ServiceRequestMessageIdentity) SetMessageType(messageType uint8) { 23 | a.Octet = messageType 24 | } 25 | -------------------------------------------------------------------------------- /nasType/NAS_ULNASTRANSPORTMessageIdentity.go: -------------------------------------------------------------------------------- 1 | package nasType 2 | 3 | // ULNASTRANSPORTMessageIdentity 9.7 4 | // MessageType Row, sBit, len = [0, 0], 8 , 8 5 | type ULNASTRANSPORTMessageIdentity struct { 6 | Octet uint8 7 | } 8 | 9 | func NewULNASTRANSPORTMessageIdentity() (uLNASTRANSPORTMessageIdentity *ULNASTRANSPORTMessageIdentity) { 10 | uLNASTRANSPORTMessageIdentity = &ULNASTRANSPORTMessageIdentity{} 11 | return uLNASTRANSPORTMessageIdentity 12 | } 13 | 14 | // ULNASTRANSPORTMessageIdentity 9.7 15 | // MessageType Row, sBit, len = [0, 0], 8 , 8 16 | func (a *ULNASTRANSPORTMessageIdentity) GetMessageType() (messageType uint8) { 17 | return a.Octet 18 | } 19 | 20 | // ULNASTRANSPORTMessageIdentity 9.7 21 | // MessageType Row, sBit, len = [0, 0], 8 , 8 22 | func (a *ULNASTRANSPORTMessageIdentity) SetMessageType(messageType uint8) { 23 | a.Octet = messageType 24 | } 25 | -------------------------------------------------------------------------------- /nasType/NAS_CongestionReattemptIndicator5GSM.go: -------------------------------------------------------------------------------- 1 | package nasType 2 | 3 | type CongestionReattemptIndicator5GSM struct { 4 | Iei uint8 5 | Len uint8 6 | Octet uint8 7 | } 8 | 9 | func NewCongestionReattemptIndicator5GSM(iei uint8) (congestionReattemptIndicator5GSM *CongestionReattemptIndicator5GSM) { 10 | congestionReattemptIndicator5GSM = &CongestionReattemptIndicator5GSM{} 11 | congestionReattemptIndicator5GSM.SetIei(iei) 12 | return congestionReattemptIndicator5GSM 13 | } 14 | 15 | func (a *CongestionReattemptIndicator5GSM) GetIei() (iei uint8) { 16 | return a.Iei 17 | } 18 | 19 | func (a *CongestionReattemptIndicator5GSM) SetIei(iei uint8) { 20 | a.Iei = iei 21 | } 22 | 23 | func (a *CongestionReattemptIndicator5GSM) GetLen() (len uint8) { 24 | return a.Len 25 | } 26 | 27 | func (a *CongestionReattemptIndicator5GSM) SetLen(len uint8) { 28 | a.Len = len 29 | } 30 | -------------------------------------------------------------------------------- /nasConvert/GPRSTimer2.go: -------------------------------------------------------------------------------- 1 | package nasConvert 2 | 3 | import ( 4 | "github.com/free5gc/nas/logger" 5 | ) 6 | 7 | // TS 24.008 10.5.7.4, TS 24.501 9.11.2.4 8 | // the unit of timerValue is second 9 | func GPRSTimer2ToNas(timerValue int) (timerValueNas uint8) { 10 | timerValueNas = 0 11 | 12 | if timerValue <= 64 { 13 | if timerValue%2 != 0 { 14 | logger.ConvertLog.Error("timer Value is not multiples of 2 seconds") 15 | return 16 | } 17 | timerValueNas = uint8(timerValue / 2) 18 | } else { 19 | t := uint8(timerValue / 60) // t is multiples of 1 min 20 | if t <= 31 { 21 | timerValueNas = (timerValueNas | 0x20) + t 22 | } else { 23 | if t%6 != 0 { 24 | logger.ConvertLog.Error("timer Value is not multiples of decihours") 25 | return 26 | } 27 | t = t / 6 28 | timerValueNas = (timerValueNas | 0x40) + t 29 | } 30 | } 31 | 32 | return 33 | } 34 | -------------------------------------------------------------------------------- /nasType/NAS_IdentityRequestMessageIdentity.go: -------------------------------------------------------------------------------- 1 | package nasType 2 | 3 | // IdentityRequestMessageIdentity 9.7 4 | // MessageType Row, sBit, len = [0, 0], 8 , 8 5 | type IdentityRequestMessageIdentity struct { 6 | Octet uint8 7 | } 8 | 9 | func NewIdentityRequestMessageIdentity() (identityRequestMessageIdentity *IdentityRequestMessageIdentity) { 10 | identityRequestMessageIdentity = &IdentityRequestMessageIdentity{} 11 | return identityRequestMessageIdentity 12 | } 13 | 14 | // IdentityRequestMessageIdentity 9.7 15 | // MessageType Row, sBit, len = [0, 0], 8 , 8 16 | func (a *IdentityRequestMessageIdentity) GetMessageType() (messageType uint8) { 17 | return a.Octet 18 | } 19 | 20 | // IdentityRequestMessageIdentity 9.7 21 | // MessageType Row, sBit, len = [0, 0], 8 , 8 22 | func (a *IdentityRequestMessageIdentity) SetMessageType(messageType uint8) { 23 | a.Octet = messageType 24 | } 25 | -------------------------------------------------------------------------------- /nasType/NAS_SpareHalfOctetAndIdentityType_test.go: -------------------------------------------------------------------------------- 1 | package nasType_test 2 | 3 | import ( 4 | "testing" 5 | 6 | "github.com/stretchr/testify/assert" 7 | 8 | "github.com/free5gc/nas/nasType" 9 | ) 10 | 11 | type nasTypeIdentityTypeAndSpareHalfOctetData struct { 12 | in uint8 13 | out uint8 14 | } 15 | 16 | var nasTypeIdentityTypeAndSpareHalfOctetTable = []nasTypeIdentityTypeAndSpareHalfOctetData{ 17 | {0x07, 0x07}, 18 | } 19 | 20 | func TestNasTypeNewSpareHalfOctetAndIdentityType(t *testing.T) { 21 | a := nasType.NewSpareHalfOctetAndIdentityType() 22 | assert.NotNil(t, a) 23 | } 24 | 25 | func TestNasTypeIdentityTypeAndSpareHalfOctet(t *testing.T) { 26 | a := nasType.NewSpareHalfOctetAndIdentityType() 27 | for _, table := range nasTypeIdentityTypeAndSpareHalfOctetTable { 28 | a.SetTypeOfIdentity(table.in) 29 | assert.Equal(t, table.out, a.GetTypeOfIdentity()) 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /nasType/NAS_IdentityResponseMessageIdentity.go: -------------------------------------------------------------------------------- 1 | package nasType 2 | 3 | // IdentityResponseMessageIdentity 9.7 4 | // MessageType Row, sBit, len = [0, 0], 8 , 8 5 | type IdentityResponseMessageIdentity struct { 6 | Octet uint8 7 | } 8 | 9 | func NewIdentityResponseMessageIdentity() (identityResponseMessageIdentity *IdentityResponseMessageIdentity) { 10 | identityResponseMessageIdentity = &IdentityResponseMessageIdentity{} 11 | return identityResponseMessageIdentity 12 | } 13 | 14 | // IdentityResponseMessageIdentity 9.7 15 | // MessageType Row, sBit, len = [0, 0], 8 , 8 16 | func (a *IdentityResponseMessageIdentity) GetMessageType() (messageType uint8) { 17 | return a.Octet 18 | } 19 | 20 | // IdentityResponseMessageIdentity 9.7 21 | // MessageType Row, sBit, len = [0, 0], 8 , 8 22 | func (a *IdentityResponseMessageIdentity) SetMessageType(messageType uint8) { 23 | a.Octet = messageType 24 | } 25 | -------------------------------------------------------------------------------- /nasType/NAS_MessageAuthenticationCode_test.go: -------------------------------------------------------------------------------- 1 | package nasType_test 2 | 3 | import ( 4 | "testing" 5 | 6 | "github.com/stretchr/testify/assert" 7 | 8 | "github.com/free5gc/nas/nasType" 9 | ) 10 | 11 | type nasTypeMessageAuthenticationCodeMACData struct { 12 | in [4]uint8 13 | out [4]uint8 14 | } 15 | 16 | var nasTypeMessageAuthenticationCodeMACTable = []nasTypeMessageAuthenticationCodeMACData{ 17 | {[4]uint8{0xff, 0xff, 0xff, 0xff}, [4]uint8{0xff, 0xff, 0xff, 0xff}}, 18 | } 19 | 20 | func TestNasTypeNewMessageAuthenticationCode(t *testing.T) { 21 | a := nasType.NewMessageAuthenticationCode() 22 | assert.NotNil(t, a) 23 | } 24 | 25 | func TestNasTypeMessageAuthenticationCode(t *testing.T) { 26 | a := nasType.NewMessageAuthenticationCode() 27 | for _, table := range nasTypeMessageAuthenticationCodeMACTable { 28 | a.SetMAC(table.in) 29 | assert.Equal(t, table.out, a.GetMAC()) 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /go.mod: -------------------------------------------------------------------------------- 1 | module github.com/free5gc/nas 2 | 3 | go 1.24 4 | 5 | require ( 6 | github.com/aead/cmac v0.0.0-20160719120800-7af84192f0b1 7 | github.com/free5gc/openapi v1.2.2 8 | github.com/sirupsen/logrus v1.9.3 9 | github.com/smartystreets/goconvey v1.8.1 10 | github.com/stretchr/testify v1.9.0 11 | github.com/tim-ywliu/nested-logrus-formatter v1.3.2 12 | ) 13 | 14 | require ( 15 | github.com/davecgh/go-spew v1.1.1 // indirect 16 | github.com/golang-jwt/jwt/v5 v5.2.2 // indirect 17 | github.com/gopherjs/gopherjs v1.17.2 // indirect 18 | github.com/jtolds/gls v4.20.0+incompatible // indirect 19 | github.com/kr/pretty v0.1.0 // indirect 20 | github.com/pmezard/go-difflib v1.0.0 // indirect 21 | github.com/smarty/assertions v1.15.0 // indirect 22 | golang.org/x/sys v0.31.0 // indirect 23 | gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 // indirect 24 | gopkg.in/yaml.v3 v3.0.1 // indirect 25 | ) 26 | -------------------------------------------------------------------------------- /nasType/NAS_SpareHalfOctetAndAccessType.go: -------------------------------------------------------------------------------- 1 | package nasType 2 | 3 | // SpareHalfOctetAndAccessType 9.11.3.11 9.5 4 | // AccessType Row, sBit, len = [0, 0], 2 , 2 5 | type SpareHalfOctetAndAccessType struct { 6 | Octet uint8 7 | } 8 | 9 | func NewSpareHalfOctetAndAccessType() (spareHalfOctetAndAccessType *SpareHalfOctetAndAccessType) { 10 | spareHalfOctetAndAccessType = &SpareHalfOctetAndAccessType{} 11 | return spareHalfOctetAndAccessType 12 | } 13 | 14 | // SpareHalfOctetAndAccessType 9.11.3.11 9.5 15 | // AccessType Row, sBit, len = [0, 0], 2 , 2 16 | func (a *SpareHalfOctetAndAccessType) GetAccessType() (accessType uint8) { 17 | return a.Octet & GetBitMask(2, 0) 18 | } 19 | 20 | // SpareHalfOctetAndAccessType 9.11.3.11 9.5 21 | // AccessType Row, sBit, len = [0, 0], 2 , 2 22 | func (a *SpareHalfOctetAndAccessType) SetAccessType(accessType uint8) { 23 | a.Octet = (a.Octet & 252) + (accessType & 3) 24 | } 25 | -------------------------------------------------------------------------------- /nasType/NAS_ExtendedProtocolDiscriminator_test.go: -------------------------------------------------------------------------------- 1 | package nasType_test 2 | 3 | import ( 4 | "testing" 5 | 6 | "github.com/stretchr/testify/assert" 7 | 8 | "github.com/free5gc/nas/nasType" 9 | ) 10 | 11 | func TestNasTypeNewExtendedProtocolDiscriminatort(t *testing.T) { 12 | a := nasType.NewExtendedProtocolDiscriminator() 13 | assert.NotNil(t, a) 14 | } 15 | 16 | type nasTypeExtendedProtocolDiscriminatorData struct { 17 | in uint8 18 | out uint8 19 | } 20 | 21 | var nasTypeExtendedProtocolDiscriminatorTable = []nasTypeExtendedProtocolDiscriminatorData{ 22 | {2, 2}, 23 | } 24 | 25 | func TestNasTypeGetSetExtendedProtocolDiscriminator(t *testing.T) { 26 | a := nasType.NewExtendedProtocolDiscriminator() 27 | for _, table := range nasTypeExtendedProtocolDiscriminatorTable { 28 | a.SetExtendedProtocolDiscriminator(table.in) 29 | assert.Equal(t, table.out, a.GetExtendedProtocolDiscriminator()) 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /nasType/NAS_RegistrationAcceptMessageIdentity.go: -------------------------------------------------------------------------------- 1 | package nasType 2 | 3 | // RegistrationAcceptMessageIdentity 9.7 4 | // MessageType Row, sBit, len = [0, 0], 8 , 8 5 | type RegistrationAcceptMessageIdentity struct { 6 | Octet uint8 7 | } 8 | 9 | func NewRegistrationAcceptMessageIdentity() (registrationAcceptMessageIdentity *RegistrationAcceptMessageIdentity) { 10 | registrationAcceptMessageIdentity = &RegistrationAcceptMessageIdentity{} 11 | return registrationAcceptMessageIdentity 12 | } 13 | 14 | // RegistrationAcceptMessageIdentity 9.7 15 | // MessageType Row, sBit, len = [0, 0], 8 , 8 16 | func (a *RegistrationAcceptMessageIdentity) GetMessageType() (messageType uint8) { 17 | return a.Octet 18 | } 19 | 20 | // RegistrationAcceptMessageIdentity 9.7 21 | // MessageType Row, sBit, len = [0, 0], 8 , 8 22 | func (a *RegistrationAcceptMessageIdentity) SetMessageType(messageType uint8) { 23 | a.Octet = messageType 24 | } 25 | -------------------------------------------------------------------------------- /nasType/NAS_RegistrationRejectMessageIdentity.go: -------------------------------------------------------------------------------- 1 | package nasType 2 | 3 | // RegistrationRejectMessageIdentity 9.7 4 | // MessageType Row, sBit, len = [0, 0], 8 , 8 5 | type RegistrationRejectMessageIdentity struct { 6 | Octet uint8 7 | } 8 | 9 | func NewRegistrationRejectMessageIdentity() (registrationRejectMessageIdentity *RegistrationRejectMessageIdentity) { 10 | registrationRejectMessageIdentity = &RegistrationRejectMessageIdentity{} 11 | return registrationRejectMessageIdentity 12 | } 13 | 14 | // RegistrationRejectMessageIdentity 9.7 15 | // MessageType Row, sBit, len = [0, 0], 8 , 8 16 | func (a *RegistrationRejectMessageIdentity) GetMessageType() (messageType uint8) { 17 | return a.Octet 18 | } 19 | 20 | // RegistrationRejectMessageIdentity 9.7 21 | // MessageType Row, sBit, len = [0, 0], 8 , 8 22 | func (a *RegistrationRejectMessageIdentity) SetMessageType(messageType uint8) { 23 | a.Octet = messageType 24 | } 25 | -------------------------------------------------------------------------------- /nasType/NAS_SecurityModeRejectMessageIdentity.go: -------------------------------------------------------------------------------- 1 | package nasType 2 | 3 | // SecurityModeRejectMessageIdentity 9.6 4 | // MessageType Row, sBit, len = [0, 0], 8 , 8 5 | type SecurityModeRejectMessageIdentity struct { 6 | Octet uint8 7 | } 8 | 9 | func NewSecurityModeRejectMessageIdentity() (securityModeRejectMessageIdentity *SecurityModeRejectMessageIdentity) { 10 | securityModeRejectMessageIdentity = &SecurityModeRejectMessageIdentity{} 11 | return securityModeRejectMessageIdentity 12 | } 13 | 14 | // SecurityModeRejectMessageIdentity 9.6 15 | // MessageType Row, sBit, len = [0, 0], 8 , 8 16 | func (a *SecurityModeRejectMessageIdentity) GetMessageType() (messageType uint8) { 17 | return a.Octet 18 | } 19 | 20 | // SecurityModeRejectMessageIdentity 9.6 21 | // MessageType Row, sBit, len = [0, 0], 8 , 8 22 | func (a *SecurityModeRejectMessageIdentity) SetMessageType(messageType uint8) { 23 | a.Octet = messageType 24 | } 25 | -------------------------------------------------------------------------------- /nasType/NAS_RegistrationRequestMessageIdentity.go: -------------------------------------------------------------------------------- 1 | package nasType 2 | 3 | // RegistrationRequestMessageIdentity 9.7 4 | // MessageType Row, sBit, len = [0, 0], 8 , 8 5 | type RegistrationRequestMessageIdentity struct { 6 | Octet uint8 7 | } 8 | 9 | func NewRegistrationRequestMessageIdentity() (registrationRequestMessageIdentity *RegistrationRequestMessageIdentity) { 10 | registrationRequestMessageIdentity = &RegistrationRequestMessageIdentity{} 11 | return registrationRequestMessageIdentity 12 | } 13 | 14 | // RegistrationRequestMessageIdentity 9.7 15 | // MessageType Row, sBit, len = [0, 0], 8 , 8 16 | func (a *RegistrationRequestMessageIdentity) GetMessageType() (messageType uint8) { 17 | return a.Octet 18 | } 19 | 20 | // RegistrationRequestMessageIdentity 9.7 21 | // MessageType Row, sBit, len = [0, 0], 8 , 8 22 | func (a *RegistrationRequestMessageIdentity) SetMessageType(messageType uint8) { 23 | a.Octet = messageType 24 | } 25 | -------------------------------------------------------------------------------- /nasType/NAS_SecurityModeCommandMessageIdentity.go: -------------------------------------------------------------------------------- 1 | package nasType 2 | 3 | // SecurityModeCommandMessageIdentity 9.7 4 | // MessageType Row, sBit, len = [0, 0], 8 , 8 5 | type SecurityModeCommandMessageIdentity struct { 6 | Octet uint8 7 | } 8 | 9 | func NewSecurityModeCommandMessageIdentity() (securityModeCommandMessageIdentity *SecurityModeCommandMessageIdentity) { 10 | securityModeCommandMessageIdentity = &SecurityModeCommandMessageIdentity{} 11 | return securityModeCommandMessageIdentity 12 | } 13 | 14 | // SecurityModeCommandMessageIdentity 9.7 15 | // MessageType Row, sBit, len = [0, 0], 8 , 8 16 | func (a *SecurityModeCommandMessageIdentity) GetMessageType() (messageType uint8) { 17 | return a.Octet 18 | } 19 | 20 | // SecurityModeCommandMessageIdentity 9.7 21 | // MessageType Row, sBit, len = [0, 0], 8 , 8 22 | func (a *SecurityModeCommandMessageIdentity) SetMessageType(messageType uint8) { 23 | a.Octet = messageType 24 | } 25 | -------------------------------------------------------------------------------- /nasType/NAS_AuthenticationRejectMessageIdentity.go: -------------------------------------------------------------------------------- 1 | package nasType 2 | 3 | // AuthenticationRejectMessageIdentity 9.7 4 | // MessageType Row, sBit, len = [0, 0], 8 , 8 5 | type AuthenticationRejectMessageIdentity struct { 6 | Octet uint8 7 | } 8 | 9 | func NewAuthenticationRejectMessageIdentity() (authenticationRejectMessageIdentity *AuthenticationRejectMessageIdentity) { 10 | authenticationRejectMessageIdentity = &AuthenticationRejectMessageIdentity{} 11 | return authenticationRejectMessageIdentity 12 | } 13 | 14 | // AuthenticationRejectMessageIdentity 9.7 15 | // MessageType Row, sBit, len = [0, 0], 8 , 8 16 | func (a *AuthenticationRejectMessageIdentity) GetMessageType() (messageType uint8) { 17 | return a.Octet 18 | } 19 | 20 | // AuthenticationRejectMessageIdentity 9.7 21 | // MessageType Row, sBit, len = [0, 0], 8 , 8 22 | func (a *AuthenticationRejectMessageIdentity) SetMessageType(messageType uint8) { 23 | a.Octet = messageType 24 | } 25 | -------------------------------------------------------------------------------- /nasType/NAS_AuthenticationResultMessageIdentity.go: -------------------------------------------------------------------------------- 1 | package nasType 2 | 3 | // AuthenticationResultMessageIdentity 9.7 4 | // MessageType Row, sBit, len = [0, 0], 8 , 8 5 | type AuthenticationResultMessageIdentity struct { 6 | Octet uint8 7 | } 8 | 9 | func NewAuthenticationResultMessageIdentity() (authenticationResultMessageIdentity *AuthenticationResultMessageIdentity) { 10 | authenticationResultMessageIdentity = &AuthenticationResultMessageIdentity{} 11 | return authenticationResultMessageIdentity 12 | } 13 | 14 | // AuthenticationResultMessageIdentity 9.7 15 | // MessageType Row, sBit, len = [0, 0], 8 , 8 16 | func (a *AuthenticationResultMessageIdentity) GetMessageType() (messageType uint8) { 17 | return a.Octet 18 | } 19 | 20 | // AuthenticationResultMessageIdentity 9.7 21 | // MessageType Row, sBit, len = [0, 0], 8 , 8 22 | func (a *AuthenticationResultMessageIdentity) SetMessageType(messageType uint8) { 23 | a.Octet = messageType 24 | } 25 | -------------------------------------------------------------------------------- /nasType/NAS_DeregistrationAcceptMessageIdentity.go: -------------------------------------------------------------------------------- 1 | package nasType 2 | 3 | // DeregistrationAcceptMessageIdentity 9.7 4 | // MessageType Row, sBit, len = [0, 0], 8 , 8 5 | type DeregistrationAcceptMessageIdentity struct { 6 | Octet uint8 7 | } 8 | 9 | func NewDeregistrationAcceptMessageIdentity() (deregistrationAcceptMessageIdentity *DeregistrationAcceptMessageIdentity) { 10 | deregistrationAcceptMessageIdentity = &DeregistrationAcceptMessageIdentity{} 11 | return deregistrationAcceptMessageIdentity 12 | } 13 | 14 | // DeregistrationAcceptMessageIdentity 9.7 15 | // MessageType Row, sBit, len = [0, 0], 8 , 8 16 | func (a *DeregistrationAcceptMessageIdentity) GetMessageType() (messageType uint8) { 17 | return a.Octet 18 | } 19 | 20 | // DeregistrationAcceptMessageIdentity 9.7 21 | // MessageType Row, sBit, len = [0, 0], 8 , 8 22 | func (a *DeregistrationAcceptMessageIdentity) SetMessageType(messageType uint8) { 23 | a.Octet = messageType 24 | } 25 | -------------------------------------------------------------------------------- /nasType/NAS_NotificationResponseMessageIdentity.go: -------------------------------------------------------------------------------- 1 | package nasType 2 | 3 | // NotificationResponseMessageIdentity 9.7 4 | // MessageType Row, sBit, len = [0, 0], 8 , 8 5 | type NotificationResponseMessageIdentity struct { 6 | Octet uint8 7 | } 8 | 9 | func NewNotificationResponseMessageIdentity() (notificationResponseMessageIdentity *NotificationResponseMessageIdentity) { 10 | notificationResponseMessageIdentity = &NotificationResponseMessageIdentity{} 11 | return notificationResponseMessageIdentity 12 | } 13 | 14 | // NotificationResponseMessageIdentity 9.7 15 | // MessageType Row, sBit, len = [0, 0], 8 , 8 16 | func (a *NotificationResponseMessageIdentity) GetMessageType() (messageType uint8) { 17 | return a.Octet 18 | } 19 | 20 | // NotificationResponseMessageIdentity 9.7 21 | // MessageType Row, sBit, len = [0, 0], 8 , 8 22 | func (a *NotificationResponseMessageIdentity) SetMessageType(messageType uint8) { 23 | a.Octet = messageType 24 | } 25 | -------------------------------------------------------------------------------- /nasType/NAS_RegistrationCompleteMessageIdentity.go: -------------------------------------------------------------------------------- 1 | package nasType 2 | 3 | // RegistrationCompleteMessageIdentity 9.7 4 | // MessageType Row, sBit, len = [0, 0], 8 , 8 5 | type RegistrationCompleteMessageIdentity struct { 6 | Octet uint8 7 | } 8 | 9 | func NewRegistrationCompleteMessageIdentity() (registrationCompleteMessageIdentity *RegistrationCompleteMessageIdentity) { 10 | registrationCompleteMessageIdentity = &RegistrationCompleteMessageIdentity{} 11 | return registrationCompleteMessageIdentity 12 | } 13 | 14 | // RegistrationCompleteMessageIdentity 9.7 15 | // MessageType Row, sBit, len = [0, 0], 8 , 8 16 | func (a *RegistrationCompleteMessageIdentity) GetMessageType() (messageType uint8) { 17 | return a.Octet 18 | } 19 | 20 | // RegistrationCompleteMessageIdentity 9.7 21 | // MessageType Row, sBit, len = [0, 0], 8 , 8 22 | func (a *RegistrationCompleteMessageIdentity) SetMessageType(messageType uint8) { 23 | a.Octet = messageType 24 | } 25 | -------------------------------------------------------------------------------- /nasType/NAS_SecurityModeCompleteMessageIdentity.go: -------------------------------------------------------------------------------- 1 | package nasType 2 | 3 | // SecurityModeCompleteMessageIdentity 9.6 4 | // MessageType Row, sBit, len = [0, 0], 8 , 8 5 | type SecurityModeCompleteMessageIdentity struct { 6 | Octet uint8 7 | } 8 | 9 | func NewSecurityModeCompleteMessageIdentity() (securityModeCompleteMessageIdentity *SecurityModeCompleteMessageIdentity) { 10 | securityModeCompleteMessageIdentity = &SecurityModeCompleteMessageIdentity{} 11 | return securityModeCompleteMessageIdentity 12 | } 13 | 14 | // SecurityModeCompleteMessageIdentity 9.6 15 | // MessageType Row, sBit, len = [0, 0], 8 , 8 16 | func (a *SecurityModeCompleteMessageIdentity) GetMessageType() (messageType uint8) { 17 | return a.Octet 18 | } 19 | 20 | // SecurityModeCompleteMessageIdentity 9.6 21 | // MessageType Row, sBit, len = [0, 0], 8 , 8 22 | func (a *SecurityModeCompleteMessageIdentity) SetMessageType(messageType uint8) { 23 | a.Octet = messageType 24 | } 25 | -------------------------------------------------------------------------------- /nasType/NAS_AuthenticationFailureMessageIdentity.go: -------------------------------------------------------------------------------- 1 | package nasType 2 | 3 | // AuthenticationFailureMessageIdentity 9.7 4 | // MessageType Row, sBit, len = [0, 0], 8 , 8 5 | type AuthenticationFailureMessageIdentity struct { 6 | Octet uint8 7 | } 8 | 9 | func NewAuthenticationFailureMessageIdentity() (authenticationFailureMessageIdentity *AuthenticationFailureMessageIdentity) { 10 | authenticationFailureMessageIdentity = &AuthenticationFailureMessageIdentity{} 11 | return authenticationFailureMessageIdentity 12 | } 13 | 14 | // AuthenticationFailureMessageIdentity 9.7 15 | // MessageType Row, sBit, len = [0, 0], 8 , 8 16 | func (a *AuthenticationFailureMessageIdentity) GetMessageType() (messageType uint8) { 17 | return a.Octet 18 | } 19 | 20 | // AuthenticationFailureMessageIdentity 9.7 21 | // MessageType Row, sBit, len = [0, 0], 8 , 8 22 | func (a *AuthenticationFailureMessageIdentity) SetMessageType(messageType uint8) { 23 | a.Octet = messageType 24 | } 25 | -------------------------------------------------------------------------------- /nasType/NAS_AuthenticationRequestMessageIdentity.go: -------------------------------------------------------------------------------- 1 | package nasType 2 | 3 | // AuthenticationRequestMessageIdentity 9.7 4 | // MessageType Row, sBit, len = [0, 0], 8 , 8 5 | type AuthenticationRequestMessageIdentity struct { 6 | Octet uint8 7 | } 8 | 9 | func NewAuthenticationRequestMessageIdentity() (authenticationRequestMessageIdentity *AuthenticationRequestMessageIdentity) { 10 | authenticationRequestMessageIdentity = &AuthenticationRequestMessageIdentity{} 11 | return authenticationRequestMessageIdentity 12 | } 13 | 14 | // AuthenticationRequestMessageIdentity 9.7 15 | // MessageType Row, sBit, len = [0, 0], 8 , 8 16 | func (a *AuthenticationRequestMessageIdentity) GetMessageType() (messageType uint8) { 17 | return a.Octet 18 | } 19 | 20 | // AuthenticationRequestMessageIdentity 9.7 21 | // MessageType Row, sBit, len = [0, 0], 8 , 8 22 | func (a *AuthenticationRequestMessageIdentity) SetMessageType(messageType uint8) { 23 | a.Octet = messageType 24 | } 25 | -------------------------------------------------------------------------------- /nasType/NAS_Cause5GMM.go: -------------------------------------------------------------------------------- 1 | package nasType 2 | 3 | // Cause5GMM 9.11.3.2 4 | // CauseValue Row, sBit, len = [0, 0], 8 , 8 5 | type Cause5GMM struct { 6 | Iei uint8 7 | Octet uint8 8 | } 9 | 10 | func NewCause5GMM(iei uint8) (cause5GMM *Cause5GMM) { 11 | cause5GMM = &Cause5GMM{} 12 | cause5GMM.SetIei(iei) 13 | return cause5GMM 14 | } 15 | 16 | // Cause5GMM 9.11.3.2 17 | // Iei Row, sBit, len = [], 8, 8 18 | func (a *Cause5GMM) GetIei() (iei uint8) { 19 | return a.Iei 20 | } 21 | 22 | // Cause5GMM 9.11.3.2 23 | // Iei Row, sBit, len = [], 8, 8 24 | func (a *Cause5GMM) SetIei(iei uint8) { 25 | a.Iei = iei 26 | } 27 | 28 | // Cause5GMM 9.11.3.2 29 | // CauseValue Row, sBit, len = [0, 0], 8 , 8 30 | func (a *Cause5GMM) GetCauseValue() (causeValue uint8) { 31 | return a.Octet 32 | } 33 | 34 | // Cause5GMM 9.11.3.2 35 | // CauseValue Row, sBit, len = [0, 0], 8 , 8 36 | func (a *Cause5GMM) SetCauseValue(causeValue uint8) { 37 | a.Octet = causeValue 38 | } 39 | -------------------------------------------------------------------------------- /nasType/NAS_Cause5GSM.go: -------------------------------------------------------------------------------- 1 | package nasType 2 | 3 | // Cause5GSM 9.11.4.2 4 | // CauseValue Row, sBit, len = [0, 0], 8 , 8 5 | type Cause5GSM struct { 6 | Iei uint8 7 | Octet uint8 8 | } 9 | 10 | func NewCause5GSM(iei uint8) (cause5GSM *Cause5GSM) { 11 | cause5GSM = &Cause5GSM{} 12 | cause5GSM.SetIei(iei) 13 | return cause5GSM 14 | } 15 | 16 | // Cause5GSM 9.11.4.2 17 | // Iei Row, sBit, len = [], 8, 8 18 | func (a *Cause5GSM) GetIei() (iei uint8) { 19 | return a.Iei 20 | } 21 | 22 | // Cause5GSM 9.11.4.2 23 | // Iei Row, sBit, len = [], 8, 8 24 | func (a *Cause5GSM) SetIei(iei uint8) { 25 | a.Iei = iei 26 | } 27 | 28 | // Cause5GSM 9.11.4.2 29 | // CauseValue Row, sBit, len = [0, 0], 8 , 8 30 | func (a *Cause5GSM) GetCauseValue() (causeValue uint8) { 31 | return a.Octet 32 | } 33 | 34 | // Cause5GSM 9.11.4.2 35 | // CauseValue Row, sBit, len = [0, 0], 8 , 8 36 | func (a *Cause5GSM) SetCauseValue(causeValue uint8) { 37 | a.Octet = causeValue 38 | } 39 | -------------------------------------------------------------------------------- /nasType/NAS_DLNASTRANSPORTMessageIdentity_test.go: -------------------------------------------------------------------------------- 1 | package nasType_test 2 | 3 | import ( 4 | "testing" 5 | 6 | "github.com/stretchr/testify/assert" 7 | 8 | "github.com/free5gc/nas" 9 | "github.com/free5gc/nas/nasType" 10 | ) 11 | 12 | type nasTypeDLNASTRANSPORTMessageIdentityData struct { 13 | in uint8 14 | out uint8 15 | } 16 | 17 | var nasTypeDLNASTRANSPORTMessageIdentityTable = []nasTypeDLNASTRANSPORTMessageIdentityData{ 18 | {nas.MsgTypeDLNASTransport, nas.MsgTypeDLNASTransport}, 19 | } 20 | 21 | func TestNasTypeNewDLNASTRANSPORTMessageIdentity(t *testing.T) { 22 | a := nasType.NewDLNASTRANSPORTMessageIdentity() 23 | assert.NotNil(t, a) 24 | } 25 | 26 | func TestNasTypeGetSetDLNASTRANSPORTMessageIdentity(t *testing.T) { 27 | a := nasType.NewDLNASTRANSPORTMessageIdentity() 28 | for _, table := range nasTypeDLNASTRANSPORTMessageIdentityTable { 29 | a.SetMessageType(table.in) 30 | assert.Equal(t, table.out, a.GetMessageType()) 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /nasType/NAS_DeregistrationRequestMessageIdentity.go: -------------------------------------------------------------------------------- 1 | package nasType 2 | 3 | // DeregistrationRequestMessageIdentity 9.7 4 | // MessageType Row, sBit, len = [0, 0], 8 , 8 5 | type DeregistrationRequestMessageIdentity struct { 6 | Octet uint8 7 | } 8 | 9 | func NewDeregistrationRequestMessageIdentity() (deregistrationRequestMessageIdentity *DeregistrationRequestMessageIdentity) { 10 | deregistrationRequestMessageIdentity = &DeregistrationRequestMessageIdentity{} 11 | return deregistrationRequestMessageIdentity 12 | } 13 | 14 | // DeregistrationRequestMessageIdentity 9.7 15 | // MessageType Row, sBit, len = [0, 0], 8 , 8 16 | func (a *DeregistrationRequestMessageIdentity) GetMessageType() (messageType uint8) { 17 | return a.Octet 18 | } 19 | 20 | // DeregistrationRequestMessageIdentity 9.7 21 | // MessageType Row, sBit, len = [0, 0], 8 , 8 22 | func (a *DeregistrationRequestMessageIdentity) SetMessageType(messageType uint8) { 23 | a.Octet = messageType 24 | } 25 | -------------------------------------------------------------------------------- /nasType/NAS_IdentityRequestMessageIdentity_test.go: -------------------------------------------------------------------------------- 1 | package nasType_test 2 | 3 | import ( 4 | "testing" 5 | 6 | "github.com/stretchr/testify/assert" 7 | 8 | "github.com/free5gc/nas" 9 | "github.com/free5gc/nas/nasType" 10 | ) 11 | 12 | type nasTypeIdentityRequestMessageIdentityData struct { 13 | in uint8 14 | out uint8 15 | } 16 | 17 | var nasTypeIdentityRequestMessageIdentityTable = []nasTypeIdentityRequestMessageIdentityData{ 18 | {nas.MsgTypeIdentityRequest, nas.MsgTypeIdentityRequest}, 19 | } 20 | 21 | func TestNasTypeNewIdentityRequestMessageIdentity(t *testing.T) { 22 | a := nasType.NewIdentityRequestMessageIdentity() 23 | assert.NotNil(t, a) 24 | } 25 | 26 | func TestNasTypeIdentityRequestMessageIdentity(t *testing.T) { 27 | a := nasType.NewIdentityRequestMessageIdentity() 28 | for _, table := range nasTypeIdentityRequestMessageIdentityTable { 29 | a.SetMessageType(table.in) 30 | assert.Equal(t, table.out, a.GetMessageType()) 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /nasType/NAS_SpareHalfOctetAndIdentityType.go: -------------------------------------------------------------------------------- 1 | package nasType 2 | 3 | // SpareHalfOctetAndIdentityType 9.11.3.3 9.5 4 | // TypeOfIdentity Row, sBit, len = [0, 0], 3 , 3 5 | type SpareHalfOctetAndIdentityType struct { 6 | Octet uint8 7 | } 8 | 9 | func NewSpareHalfOctetAndIdentityType() (spareHalfOctetAndIdentityType *SpareHalfOctetAndIdentityType) { 10 | spareHalfOctetAndIdentityType = &SpareHalfOctetAndIdentityType{} 11 | return spareHalfOctetAndIdentityType 12 | } 13 | 14 | // SpareHalfOctetAndIdentityType 9.11.3.3 9.5 15 | // TypeOfIdentity Row, sBit, len = [0, 0], 3 , 3 16 | func (a *SpareHalfOctetAndIdentityType) GetTypeOfIdentity() (typeOfIdentity uint8) { 17 | return a.Octet & GetBitMask(3, 0) 18 | } 19 | 20 | // SpareHalfOctetAndIdentityType 9.11.3.3 9.5 21 | // TypeOfIdentity Row, sBit, len = [0, 0], 3 , 3 22 | func (a *SpareHalfOctetAndIdentityType) SetTypeOfIdentity(typeOfIdentity uint8) { 23 | a.Octet = (a.Octet & 248) + (typeOfIdentity & 7) 24 | } 25 | -------------------------------------------------------------------------------- /nasType/NAS_AuthenticationResponseMessageIdentity.go: -------------------------------------------------------------------------------- 1 | package nasType 2 | 3 | // AuthenticationResponseMessageIdentity 9.7 4 | // MessageType Row, sBit, len = [0, 0], 8 , 8 5 | type AuthenticationResponseMessageIdentity struct { 6 | Octet uint8 7 | } 8 | 9 | func NewAuthenticationResponseMessageIdentity() (authenticationResponseMessageIdentity *AuthenticationResponseMessageIdentity) { 10 | authenticationResponseMessageIdentity = &AuthenticationResponseMessageIdentity{} 11 | return authenticationResponseMessageIdentity 12 | } 13 | 14 | // AuthenticationResponseMessageIdentity 9.7 15 | // MessageType Row, sBit, len = [0, 0], 8 , 8 16 | func (a *AuthenticationResponseMessageIdentity) GetMessageType() (messageType uint8) { 17 | return a.Octet 18 | } 19 | 20 | // AuthenticationResponseMessageIdentity 9.7 21 | // MessageType Row, sBit, len = [0, 0], 8 , 8 22 | func (a *AuthenticationResponseMessageIdentity) SetMessageType(messageType uint8) { 23 | a.Octet = messageType 24 | } 25 | -------------------------------------------------------------------------------- /nasType/NAS_IdentityResponseMessageIdentity_test.go: -------------------------------------------------------------------------------- 1 | package nasType_test 2 | 3 | import ( 4 | "testing" 5 | 6 | "github.com/stretchr/testify/assert" 7 | 8 | "github.com/free5gc/nas" 9 | "github.com/free5gc/nas/nasType" 10 | ) 11 | 12 | type nasTypeIdentityResponseMessageIdentityData struct { 13 | in uint8 14 | out uint8 15 | } 16 | 17 | var nasTypeIdentityResponseMessageIdentityTable = []nasTypeIdentityResponseMessageIdentityData{ 18 | {nas.MsgTypeIdentityResponse, nas.MsgTypeIdentityResponse}, 19 | } 20 | 21 | func TestNasTypeNewIdentityResponseMessageIdentity(t *testing.T) { 22 | a := nasType.NewIdentityResponseMessageIdentity() 23 | assert.NotNil(t, a) 24 | } 25 | 26 | func TestNasTypeIdentityResponseMessageIdentity(t *testing.T) { 27 | a := nasType.NewIdentityResponseMessageIdentity() 28 | for _, table := range nasTypeIdentityResponseMessageIdentityTable { 29 | a.SetMessageType(table.in) 30 | assert.Equal(t, table.out, a.GetMessageType()) 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /nasType/NAS_NotificationMessageIdentity_test.go: -------------------------------------------------------------------------------- 1 | package nasType_test 2 | 3 | import ( 4 | "testing" 5 | 6 | "github.com/stretchr/testify/assert" 7 | 8 | "github.com/free5gc/nas" 9 | "github.com/free5gc/nas/nasType" 10 | ) 11 | 12 | func TestNasTypeNewNotificationMessageIdentity(t *testing.T) { 13 | a := nasType.NewNotificationMessageIdentity() 14 | assert.NotNil(t, a) 15 | } 16 | 17 | type nasTypeNotificationMessageIdentityMessageType struct { 18 | in uint8 19 | out uint8 20 | } 21 | 22 | var nasTypeNotificationMessageIdentityMessageTypeTable = []nasTypeNotificationMessageIdentityMessageType{ 23 | {nas.MsgTypeNotification, nas.MsgTypeNotification}, 24 | } 25 | 26 | func TestNasTypeGetSetNotificationMessageIdentityMessageType(t *testing.T) { 27 | a := nasType.NewNotificationMessageIdentity() 28 | for _, table := range nasTypeNotificationMessageIdentityMessageTypeTable { 29 | a.SetMessageType(table.in) 30 | assert.Equal(t, table.out, a.GetMessageType()) 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /nasType/NAS_PDUSESSIONRELEASEREJECTMessageIdentity.go: -------------------------------------------------------------------------------- 1 | package nasType 2 | 3 | // PDUSESSIONRELEASEREJECTMessageIdentity 9.7 4 | // MessageType Row, sBit, len = [0, 0], 8 , 8 5 | type PDUSESSIONRELEASEREJECTMessageIdentity struct { 6 | Octet uint8 7 | } 8 | 9 | func NewPDUSESSIONRELEASEREJECTMessageIdentity() (pDUSESSIONRELEASEREJECTMessageIdentity *PDUSESSIONRELEASEREJECTMessageIdentity) { 10 | pDUSESSIONRELEASEREJECTMessageIdentity = &PDUSESSIONRELEASEREJECTMessageIdentity{} 11 | return pDUSESSIONRELEASEREJECTMessageIdentity 12 | } 13 | 14 | // PDUSESSIONRELEASEREJECTMessageIdentity 9.7 15 | // MessageType Row, sBit, len = [0, 0], 8 , 8 16 | func (a *PDUSESSIONRELEASEREJECTMessageIdentity) GetMessageType() (messageType uint8) { 17 | return a.Octet 18 | } 19 | 20 | // PDUSESSIONRELEASEREJECTMessageIdentity 9.7 21 | // MessageType Row, sBit, len = [0, 0], 8 , 8 22 | func (a *PDUSESSIONRELEASEREJECTMessageIdentity) SetMessageType(messageType uint8) { 23 | a.Octet = messageType 24 | } 25 | -------------------------------------------------------------------------------- /nasType/NAS_PDUSESSIONRELEASECOMMANDMessageIdentity.go: -------------------------------------------------------------------------------- 1 | package nasType 2 | 3 | // PDUSESSIONRELEASECOMMANDMessageIdentity 9.7 4 | // MessageType Row, sBit, len = [0, 0], 8 , 8 5 | type PDUSESSIONRELEASECOMMANDMessageIdentity struct { 6 | Octet uint8 7 | } 8 | 9 | func NewPDUSESSIONRELEASECOMMANDMessageIdentity() (pDUSESSIONRELEASECOMMANDMessageIdentity *PDUSESSIONRELEASECOMMANDMessageIdentity) { 10 | pDUSESSIONRELEASECOMMANDMessageIdentity = &PDUSESSIONRELEASECOMMANDMessageIdentity{} 11 | return pDUSESSIONRELEASECOMMANDMessageIdentity 12 | } 13 | 14 | // PDUSESSIONRELEASECOMMANDMessageIdentity 9.7 15 | // MessageType Row, sBit, len = [0, 0], 8 , 8 16 | func (a *PDUSESSIONRELEASECOMMANDMessageIdentity) GetMessageType() (messageType uint8) { 17 | return a.Octet 18 | } 19 | 20 | // PDUSESSIONRELEASECOMMANDMessageIdentity 9.7 21 | // MessageType Row, sBit, len = [0, 0], 8 , 8 22 | func (a *PDUSESSIONRELEASECOMMANDMessageIdentity) SetMessageType(messageType uint8) { 23 | a.Octet = messageType 24 | } 25 | -------------------------------------------------------------------------------- /nasType/NAS_PDUSESSIONRELEASEREQUESTMessageIdentity.go: -------------------------------------------------------------------------------- 1 | package nasType 2 | 3 | // PDUSESSIONRELEASEREQUESTMessageIdentity 9.7 4 | // MessageType Row, sBit, len = [0, 0], 8 , 8 5 | type PDUSESSIONRELEASEREQUESTMessageIdentity struct { 6 | Octet uint8 7 | } 8 | 9 | func NewPDUSESSIONRELEASEREQUESTMessageIdentity() (pDUSESSIONRELEASEREQUESTMessageIdentity *PDUSESSIONRELEASEREQUESTMessageIdentity) { 10 | pDUSESSIONRELEASEREQUESTMessageIdentity = &PDUSESSIONRELEASEREQUESTMessageIdentity{} 11 | return pDUSESSIONRELEASEREQUESTMessageIdentity 12 | } 13 | 14 | // PDUSESSIONRELEASEREQUESTMessageIdentity 9.7 15 | // MessageType Row, sBit, len = [0, 0], 8 , 8 16 | func (a *PDUSESSIONRELEASEREQUESTMessageIdentity) GetMessageType() (messageType uint8) { 17 | return a.Octet 18 | } 19 | 20 | // PDUSESSIONRELEASEREQUESTMessageIdentity 9.7 21 | // MessageType Row, sBit, len = [0, 0], 8 , 8 22 | func (a *PDUSESSIONRELEASEREQUESTMessageIdentity) SetMessageType(messageType uint8) { 23 | a.Octet = messageType 24 | } 25 | -------------------------------------------------------------------------------- /nasType/NAS_ExtendedProtocolDiscriminator.go: -------------------------------------------------------------------------------- 1 | package nasType 2 | 3 | // ExtendedProtocolDiscriminator 9.2 4 | // ExtendedProtocolDiscriminator Row, sBit, len = [0, 0], 8 , 8 5 | type ExtendedProtocolDiscriminator struct { 6 | Octet uint8 7 | } 8 | 9 | func NewExtendedProtocolDiscriminator() (extendedProtocolDiscriminator *ExtendedProtocolDiscriminator) { 10 | extendedProtocolDiscriminator = &ExtendedProtocolDiscriminator{} 11 | return extendedProtocolDiscriminator 12 | } 13 | 14 | // ExtendedProtocolDiscriminator 9.2 15 | // ExtendedProtocolDiscriminator Row, sBit, len = [0, 0], 8 , 8 16 | func (a *ExtendedProtocolDiscriminator) GetExtendedProtocolDiscriminator() (extendedProtocolDiscriminator uint8) { 17 | return a.Octet 18 | } 19 | 20 | // ExtendedProtocolDiscriminator 9.2 21 | // ExtendedProtocolDiscriminator Row, sBit, len = [0, 0], 8 , 8 22 | func (a *ExtendedProtocolDiscriminator) SetExtendedProtocolDiscriminator(extendedProtocolDiscriminator uint8) { 23 | a.Octet = extendedProtocolDiscriminator 24 | } 25 | -------------------------------------------------------------------------------- /nasType/NAS_PDUSESSIONRELEASECOMPLETEMessageIdentity.go: -------------------------------------------------------------------------------- 1 | package nasType 2 | 3 | // PDUSESSIONRELEASECOMPLETEMessageIdentity 9.7 4 | // MessageType Row, sBit, len = [0, 0], 8 , 8 5 | type PDUSESSIONRELEASECOMPLETEMessageIdentity struct { 6 | Octet uint8 7 | } 8 | 9 | func NewPDUSESSIONRELEASECOMPLETEMessageIdentity() (pDUSESSIONRELEASECOMPLETEMessageIdentity *PDUSESSIONRELEASECOMPLETEMessageIdentity) { 10 | pDUSESSIONRELEASECOMPLETEMessageIdentity = &PDUSESSIONRELEASECOMPLETEMessageIdentity{} 11 | return pDUSESSIONRELEASECOMPLETEMessageIdentity 12 | } 13 | 14 | // PDUSESSIONRELEASECOMPLETEMessageIdentity 9.7 15 | // MessageType Row, sBit, len = [0, 0], 8 , 8 16 | func (a *PDUSESSIONRELEASECOMPLETEMessageIdentity) GetMessageType() (messageType uint8) { 17 | return a.Octet 18 | } 19 | 20 | // PDUSESSIONRELEASECOMPLETEMessageIdentity 9.7 21 | // MessageType Row, sBit, len = [0, 0], 8 , 8 22 | func (a *PDUSESSIONRELEASECOMPLETEMessageIdentity) SetMessageType(messageType uint8) { 23 | a.Octet = messageType 24 | } 25 | -------------------------------------------------------------------------------- /nasType/NAS_AuthenticationRequestMessageIdentity_test.go: -------------------------------------------------------------------------------- 1 | package nasType_test 2 | 3 | import ( 4 | "testing" 5 | 6 | "github.com/stretchr/testify/assert" 7 | 8 | "github.com/free5gc/nas/nasMessage" 9 | "github.com/free5gc/nas/nasType" 10 | ) 11 | 12 | type nasTypeRequestMessageIdentityData struct { 13 | in uint8 14 | out uint8 15 | } 16 | 17 | var nasTypeRequestMessageIdentityTable = []nasTypeRequestMessageIdentityData{ 18 | {nasMessage.AuthenticationRequestEAPMessageType, nasMessage.AuthenticationRequestEAPMessageType}, 19 | } 20 | 21 | func TestNasTypeNewAuthenticationRequestMessageIdentity(t *testing.T) { 22 | a := nasType.NewAuthenticationRequestMessageIdentity() 23 | assert.NotNil(t, a) 24 | } 25 | 26 | func TestNasTypeGetSetAuthenticationRequestMessageIdentity(t *testing.T) { 27 | a := nasType.NewAuthenticationRequestMessageIdentity() 28 | for _, table := range nasTypeRequestMessageIdentityTable { 29 | a.SetMessageType(table.in) 30 | assert.Equal(t, table.out, a.GetMessageType()) 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /nasType/NAS_LocalTimeZone.go: -------------------------------------------------------------------------------- 1 | package nasType 2 | 3 | // LocalTimeZone 9.11.3.52 4 | // TimeZone Row, sBit, len = [0, 0], 8 , 8 5 | type LocalTimeZone struct { 6 | Iei uint8 7 | Octet uint8 8 | } 9 | 10 | func NewLocalTimeZone(iei uint8) (localTimeZone *LocalTimeZone) { 11 | localTimeZone = &LocalTimeZone{} 12 | localTimeZone.SetIei(iei) 13 | return localTimeZone 14 | } 15 | 16 | // LocalTimeZone 9.11.3.52 17 | // Iei Row, sBit, len = [], 8, 8 18 | func (a *LocalTimeZone) GetIei() (iei uint8) { 19 | return a.Iei 20 | } 21 | 22 | // LocalTimeZone 9.11.3.52 23 | // Iei Row, sBit, len = [], 8, 8 24 | func (a *LocalTimeZone) SetIei(iei uint8) { 25 | a.Iei = iei 26 | } 27 | 28 | // LocalTimeZone 9.11.3.52 29 | // TimeZone Row, sBit, len = [0, 0], 8 , 8 30 | func (a *LocalTimeZone) GetTimeZone() (timeZone uint8) { 31 | return a.Octet 32 | } 33 | 34 | // LocalTimeZone 9.11.3.52 35 | // TimeZone Row, sBit, len = [0, 0], 8 , 8 36 | func (a *LocalTimeZone) SetTimeZone(timeZone uint8) { 37 | a.Octet = timeZone 38 | } 39 | -------------------------------------------------------------------------------- /nasType/NAS_SpareHalfOctetAndPayloadContainerType_test.go: -------------------------------------------------------------------------------- 1 | package nasType_test 2 | 3 | import ( 4 | "testing" 5 | 6 | "github.com/stretchr/testify/assert" 7 | 8 | "github.com/free5gc/nas/nasType" 9 | ) 10 | 11 | func TestNasTypeNewSpareHalfOctetAndPayloadContainerType(t *testing.T) { 12 | a := nasType.NewSpareHalfOctetAndPayloadContainerType() 13 | assert.NotNil(t, a) 14 | } 15 | 16 | type nasTypePayloadContainerTypeAndSparePayloadContainerType struct { 17 | in uint8 18 | out uint8 19 | } 20 | 21 | var nasTypePayloadContainerTypeAndSparePayloadContainerTypeTable = []nasTypePayloadContainerTypeAndSparePayloadContainerType{ 22 | {0x0f, 0x0f}, 23 | } 24 | 25 | func TestNasTypeGetSetPayloadSpareHalfOctetAndPayloadContainerType(t *testing.T) { 26 | a := nasType.NewSpareHalfOctetAndPayloadContainerType() 27 | for _, table := range nasTypePayloadContainerTypeAndSparePayloadContainerTypeTable { 28 | a.SetPayloadContainerType(table.in) 29 | assert.Equal(t, table.out, a.GetPayloadContainerType()) 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /nasType/NAS_ConfigurationUpdateCommandMessageIdentity.go: -------------------------------------------------------------------------------- 1 | package nasType 2 | 3 | // ConfigurationUpdateCommandMessageIdentity 9.7 4 | // MessageType Row, sBit, len = [0, 0], 8 , 8 5 | type ConfigurationUpdateCommandMessageIdentity struct { 6 | Octet uint8 7 | } 8 | 9 | func NewConfigurationUpdateCommandMessageIdentity() (configurationUpdateCommandMessageIdentity *ConfigurationUpdateCommandMessageIdentity) { 10 | configurationUpdateCommandMessageIdentity = &ConfigurationUpdateCommandMessageIdentity{} 11 | return configurationUpdateCommandMessageIdentity 12 | } 13 | 14 | // ConfigurationUpdateCommandMessageIdentity 9.7 15 | // MessageType Row, sBit, len = [0, 0], 8 , 8 16 | func (a *ConfigurationUpdateCommandMessageIdentity) GetMessageType() (messageType uint8) { 17 | return a.Octet 18 | } 19 | 20 | // ConfigurationUpdateCommandMessageIdentity 9.7 21 | // MessageType Row, sBit, len = [0, 0], 8 , 8 22 | func (a *ConfigurationUpdateCommandMessageIdentity) SetMessageType(messageType uint8) { 23 | a.Octet = messageType 24 | } 25 | -------------------------------------------------------------------------------- /nasType/NAS_AuthenticationRejectMessageIdentity_test.go: -------------------------------------------------------------------------------- 1 | package nasType_test 2 | 3 | import ( 4 | "testing" 5 | 6 | "github.com/stretchr/testify/assert" 7 | 8 | "github.com/free5gc/nas/nasMessage" 9 | "github.com/free5gc/nas/nasType" 10 | ) 11 | 12 | type nasTypeRejectMessageIdentityData struct { 13 | in uint8 14 | out uint8 15 | } 16 | 17 | var nasTypeRejectMessageIdentityTable = []nasTypeRejectMessageIdentityData{ 18 | {nasMessage.PDUSessionEstablishmentRejectEAPMessageType, nasMessage.PDUSessionEstablishmentRejectEAPMessageType}, 19 | } 20 | 21 | func TestNasTypeNewAuthenticationRejectMessageIdentity(t *testing.T) { 22 | a := nasType.NewAuthenticationRejectMessageIdentity() 23 | assert.NotNil(t, a) 24 | } 25 | 26 | func TestNasTypeGetSetAuthenticationRejectMessageIdentity(t *testing.T) { 27 | a := nasType.NewAuthenticationRejectMessageIdentity() 28 | for _, table := range nasTypeRejectMessageIdentityTable { 29 | a.SetMessageType(table.in) 30 | assert.Equal(t, table.out, a.GetMessageType()) 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /nasType/NAS_AuthenticationResponseMessageIdentity_test.go: -------------------------------------------------------------------------------- 1 | package nasType_test 2 | 3 | import ( 4 | "testing" 5 | 6 | "github.com/stretchr/testify/assert" 7 | 8 | "github.com/free5gc/nas/nasMessage" 9 | "github.com/free5gc/nas/nasType" 10 | ) 11 | 12 | type nasTypeResponseMessageIdentityData struct { 13 | in uint8 14 | out uint8 15 | } 16 | 17 | var nasTypeResponseMessageIdentityTable = []nasTypeResponseMessageIdentityData{ 18 | {nasMessage.AuthenticationResponseEAPMessageType, nasMessage.AuthenticationResponseEAPMessageType}, 19 | } 20 | 21 | func TestNasTypeNewAuthenticationResponseMessageIdentity(t *testing.T) { 22 | a := nasType.NewAuthenticationResponseMessageIdentity() 23 | assert.NotNil(t, a) 24 | } 25 | 26 | func TestNasTypeGetSetAuthenticationResponseMessageIdentity(t *testing.T) { 27 | a := nasType.NewAuthenticationResponseMessageIdentity() 28 | for _, table := range nasTypeResponseMessageIdentityTable { 29 | a.SetMessageType(table.in) 30 | assert.Equal(t, table.out, a.GetMessageType()) 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /nasType/NAS_AuthenticationResultMessageIdentity_test.go: -------------------------------------------------------------------------------- 1 | package nasType_test 2 | 3 | import ( 4 | "testing" 5 | 6 | "github.com/stretchr/testify/assert" 7 | 8 | "github.com/free5gc/nas/nasMessage" 9 | "github.com/free5gc/nas/nasType" 10 | ) 11 | 12 | type nasTypeResultMessageIdentityData struct { 13 | in uint8 14 | out uint8 15 | } 16 | 17 | var nasTypeResultMessageIdentityTable = []nasTypeResultMessageIdentityData{ 18 | {nasMessage.PDUSessionAuthenticationResultEAPMessageType, nasMessage.PDUSessionAuthenticationResultEAPMessageType}, 19 | } 20 | 21 | func TestNasTypeNewAuthenticationResultMessageIdentity(t *testing.T) { 22 | a := nasType.NewAuthenticationResultMessageIdentity() 23 | assert.NotNil(t, a) 24 | } 25 | 26 | func TestNasTypeGetSetAuthenticationResultMessageIdentity(t *testing.T) { 27 | a := nasType.NewAuthenticationResultMessageIdentity() 28 | for _, table := range nasTypeResultMessageIdentityTable { 29 | a.SetMessageType(table.in) 30 | assert.Equal(t, table.out, a.GetMessageType()) 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /nasType/NAS_ConfigurationUpdateCompleteMessageIdentity.go: -------------------------------------------------------------------------------- 1 | package nasType 2 | 3 | // ConfigurationUpdateCompleteMessageIdentity 9.7 4 | // MessageType Row, sBit, len = [0, 0], 8 , 8 5 | type ConfigurationUpdateCompleteMessageIdentity struct { 6 | Octet uint8 7 | } 8 | 9 | func NewConfigurationUpdateCompleteMessageIdentity() (configurationUpdateCompleteMessageIdentity *ConfigurationUpdateCompleteMessageIdentity) { 10 | configurationUpdateCompleteMessageIdentity = &ConfigurationUpdateCompleteMessageIdentity{} 11 | return configurationUpdateCompleteMessageIdentity 12 | } 13 | 14 | // ConfigurationUpdateCompleteMessageIdentity 9.7 15 | // MessageType Row, sBit, len = [0, 0], 8 , 8 16 | func (a *ConfigurationUpdateCompleteMessageIdentity) GetMessageType() (messageType uint8) { 17 | return a.Octet 18 | } 19 | 20 | // ConfigurationUpdateCompleteMessageIdentity 9.7 21 | // MessageType Row, sBit, len = [0, 0], 8 , 8 22 | func (a *ConfigurationUpdateCompleteMessageIdentity) SetMessageType(messageType uint8) { 23 | a.Octet = messageType 24 | } 25 | -------------------------------------------------------------------------------- /nasType/NAS_PDUSESSIONMODIFICATIONREJECTMessageIdentity.go: -------------------------------------------------------------------------------- 1 | package nasType 2 | 3 | // PDUSESSIONMODIFICATIONREJECTMessageIdentity 9.7 4 | // MessageType Row, sBit, len = [0, 0], 8 , 8 5 | type PDUSESSIONMODIFICATIONREJECTMessageIdentity struct { 6 | Octet uint8 7 | } 8 | 9 | func NewPDUSESSIONMODIFICATIONREJECTMessageIdentity() (pDUSESSIONMODIFICATIONREJECTMessageIdentity *PDUSESSIONMODIFICATIONREJECTMessageIdentity) { 10 | pDUSESSIONMODIFICATIONREJECTMessageIdentity = &PDUSESSIONMODIFICATIONREJECTMessageIdentity{} 11 | return pDUSESSIONMODIFICATIONREJECTMessageIdentity 12 | } 13 | 14 | // PDUSESSIONMODIFICATIONREJECTMessageIdentity 9.7 15 | // MessageType Row, sBit, len = [0, 0], 8 , 8 16 | func (a *PDUSESSIONMODIFICATIONREJECTMessageIdentity) GetMessageType() (messageType uint8) { 17 | return a.Octet 18 | } 19 | 20 | // PDUSESSIONMODIFICATIONREJECTMessageIdentity 9.7 21 | // MessageType Row, sBit, len = [0, 0], 8 , 8 22 | func (a *PDUSESSIONMODIFICATIONREJECTMessageIdentity) SetMessageType(messageType uint8) { 23 | a.Octet = messageType 24 | } 25 | -------------------------------------------------------------------------------- /security/counter_test.go: -------------------------------------------------------------------------------- 1 | package security_test 2 | 3 | import ( 4 | "testing" 5 | 6 | "github.com/stretchr/testify/assert" 7 | 8 | "github.com/free5gc/nas/security" 9 | ) 10 | 11 | func TestSetterGetter(t *testing.T) { 12 | testCases := []struct { 13 | overflow uint16 14 | sqn uint8 15 | }{ 16 | {1, 2}, 17 | {0, 0}, 18 | {170, 35}, 19 | {65535, 255}, 20 | } 21 | 22 | count := security.Count{} 23 | 24 | for _, testCase := range testCases { 25 | count.Set(testCase.overflow, testCase.sqn) 26 | expected := (uint32(testCase.overflow) << 8) + uint32(testCase.sqn) 27 | assert.Equal(t, expected, count.Get(), "Get() Failed") 28 | assert.Equal(t, testCase.overflow, count.Overflow(), "Overflow() Failed") 29 | assert.Equal(t, testCase.sqn, count.SQN(), "SQN() Failed") 30 | } 31 | } 32 | 33 | func TestAddOne(t *testing.T) { 34 | count := security.Count{} 35 | 36 | count.Set(0, 0) 37 | 38 | for i := uint32(0); i < 4567; i++ { 39 | count.AddOne() 40 | assert.Equal(t, i+1, count.Get(), "AddOne() Test Failed") 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /nasType/NAS_PDUSESSIONESTABLISHMENTACCEPTMessageIdentity.go: -------------------------------------------------------------------------------- 1 | package nasType 2 | 3 | // PDUSESSIONESTABLISHMENTACCEPTMessageIdentity 9.7 4 | // MessageType Row, sBit, len = [0, 0], 8 , 8 5 | type PDUSESSIONESTABLISHMENTACCEPTMessageIdentity struct { 6 | Octet uint8 7 | } 8 | 9 | func NewPDUSESSIONESTABLISHMENTACCEPTMessageIdentity() (pDUSESSIONESTABLISHMENTACCEPTMessageIdentity *PDUSESSIONESTABLISHMENTACCEPTMessageIdentity) { 10 | pDUSESSIONESTABLISHMENTACCEPTMessageIdentity = &PDUSESSIONESTABLISHMENTACCEPTMessageIdentity{} 11 | return pDUSESSIONESTABLISHMENTACCEPTMessageIdentity 12 | } 13 | 14 | // PDUSESSIONESTABLISHMENTACCEPTMessageIdentity 9.7 15 | // MessageType Row, sBit, len = [0, 0], 8 , 8 16 | func (a *PDUSESSIONESTABLISHMENTACCEPTMessageIdentity) GetMessageType() (messageType uint8) { 17 | return a.Octet 18 | } 19 | 20 | // PDUSESSIONESTABLISHMENTACCEPTMessageIdentity 9.7 21 | // MessageType Row, sBit, len = [0, 0], 8 , 8 22 | func (a *PDUSESSIONESTABLISHMENTACCEPTMessageIdentity) SetMessageType(messageType uint8) { 23 | a.Octet = messageType 24 | } 25 | -------------------------------------------------------------------------------- /nasType/NAS_PDUSESSIONESTABLISHMENTREJECTMessageIdentity.go: -------------------------------------------------------------------------------- 1 | package nasType 2 | 3 | // PDUSESSIONESTABLISHMENTREJECTMessageIdentity 9.7 4 | // MessageType Row, sBit, len = [0, 0], 8 , 8 5 | type PDUSESSIONESTABLISHMENTREJECTMessageIdentity struct { 6 | Octet uint8 7 | } 8 | 9 | func NewPDUSESSIONESTABLISHMENTREJECTMessageIdentity() (pDUSESSIONESTABLISHMENTREJECTMessageIdentity *PDUSESSIONESTABLISHMENTREJECTMessageIdentity) { 10 | pDUSESSIONESTABLISHMENTREJECTMessageIdentity = &PDUSESSIONESTABLISHMENTREJECTMessageIdentity{} 11 | return pDUSESSIONESTABLISHMENTREJECTMessageIdentity 12 | } 13 | 14 | // PDUSESSIONESTABLISHMENTREJECTMessageIdentity 9.7 15 | // MessageType Row, sBit, len = [0, 0], 8 , 8 16 | func (a *PDUSESSIONESTABLISHMENTREJECTMessageIdentity) GetMessageType() (messageType uint8) { 17 | return a.Octet 18 | } 19 | 20 | // PDUSESSIONESTABLISHMENTREJECTMessageIdentity 9.7 21 | // MessageType Row, sBit, len = [0, 0], 8 , 8 22 | func (a *PDUSESSIONESTABLISHMENTREJECTMessageIdentity) SetMessageType(messageType uint8) { 23 | a.Octet = messageType 24 | } 25 | -------------------------------------------------------------------------------- /nasType/NAS_PDUSESSIONMODIFICATIONCOMMANDMessageIdentity.go: -------------------------------------------------------------------------------- 1 | package nasType 2 | 3 | // PDUSESSIONMODIFICATIONCOMMANDMessageIdentity 9.7 4 | // MessageType Row, sBit, len = [0, 0], 8 , 8 5 | type PDUSESSIONMODIFICATIONCOMMANDMessageIdentity struct { 6 | Octet uint8 7 | } 8 | 9 | func NewPDUSESSIONMODIFICATIONCOMMANDMessageIdentity() (pDUSESSIONMODIFICATIONCOMMANDMessageIdentity *PDUSESSIONMODIFICATIONCOMMANDMessageIdentity) { 10 | pDUSESSIONMODIFICATIONCOMMANDMessageIdentity = &PDUSESSIONMODIFICATIONCOMMANDMessageIdentity{} 11 | return pDUSESSIONMODIFICATIONCOMMANDMessageIdentity 12 | } 13 | 14 | // PDUSESSIONMODIFICATIONCOMMANDMessageIdentity 9.7 15 | // MessageType Row, sBit, len = [0, 0], 8 , 8 16 | func (a *PDUSESSIONMODIFICATIONCOMMANDMessageIdentity) GetMessageType() (messageType uint8) { 17 | return a.Octet 18 | } 19 | 20 | // PDUSESSIONMODIFICATIONCOMMANDMessageIdentity 9.7 21 | // MessageType Row, sBit, len = [0, 0], 8 , 8 22 | func (a *PDUSESSIONMODIFICATIONCOMMANDMessageIdentity) SetMessageType(messageType uint8) { 23 | a.Octet = messageType 24 | } 25 | -------------------------------------------------------------------------------- /nasType/NAS_PDUSESSIONMODIFICATIONREQUESTMessageIdentity.go: -------------------------------------------------------------------------------- 1 | package nasType 2 | 3 | // PDUSESSIONMODIFICATIONREQUESTMessageIdentity 9.7 4 | // MessageType Row, sBit, len = [0, 0], 8 , 8 5 | type PDUSESSIONMODIFICATIONREQUESTMessageIdentity struct { 6 | Octet uint8 7 | } 8 | 9 | func NewPDUSESSIONMODIFICATIONREQUESTMessageIdentity() (pDUSESSIONMODIFICATIONREQUESTMessageIdentity *PDUSESSIONMODIFICATIONREQUESTMessageIdentity) { 10 | pDUSESSIONMODIFICATIONREQUESTMessageIdentity = &PDUSESSIONMODIFICATIONREQUESTMessageIdentity{} 11 | return pDUSESSIONMODIFICATIONREQUESTMessageIdentity 12 | } 13 | 14 | // PDUSESSIONMODIFICATIONREQUESTMessageIdentity 9.7 15 | // MessageType Row, sBit, len = [0, 0], 8 , 8 16 | func (a *PDUSESSIONMODIFICATIONREQUESTMessageIdentity) GetMessageType() (messageType uint8) { 17 | return a.Octet 18 | } 19 | 20 | // PDUSESSIONMODIFICATIONREQUESTMessageIdentity 9.7 21 | // MessageType Row, sBit, len = [0, 0], 8 , 8 22 | func (a *PDUSESSIONMODIFICATIONREQUESTMessageIdentity) SetMessageType(messageType uint8) { 23 | a.Octet = messageType 24 | } 25 | -------------------------------------------------------------------------------- /nasType/NAS_NotificationResponseMessageIdentity_test.go: -------------------------------------------------------------------------------- 1 | package nasType_test 2 | 3 | import ( 4 | "testing" 5 | 6 | "github.com/stretchr/testify/assert" 7 | 8 | "github.com/free5gc/nas" 9 | "github.com/free5gc/nas/nasType" 10 | ) 11 | 12 | func TestNasTypeNewNotificationResponseMessageIdentity(t *testing.T) { 13 | a := nasType.NewNotificationResponseMessageIdentity() 14 | assert.NotNil(t, a) 15 | } 16 | 17 | type nasTypeNotificationResponseMessageIdentityMessageType struct { 18 | in uint8 19 | out uint8 20 | } 21 | 22 | var nasTypeNotificationResponseMessageIdentityMessageTypeTable = []nasTypeNotificationResponseMessageIdentityMessageType{ 23 | {nas.MsgTypeNotificationResponse, nas.MsgTypeNotificationResponse}, 24 | } 25 | 26 | func TestNasTypeGetSetNotificationResponseMessageIdentityMessageType(t *testing.T) { 27 | a := nasType.NewNotificationResponseMessageIdentity() 28 | for _, table := range nasTypeNotificationResponseMessageIdentityMessageTypeTable { 29 | a.SetMessageType(table.in) 30 | assert.Equal(t, table.out, a.GetMessageType()) 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /nasType/NAS_DeregistrationAcceptMessageIdentity_test.go: -------------------------------------------------------------------------------- 1 | package nasType_test 2 | 3 | import ( 4 | "testing" 5 | 6 | "github.com/stretchr/testify/assert" 7 | 8 | "github.com/free5gc/nas" 9 | "github.com/free5gc/nas/nasType" 10 | ) 11 | 12 | type nasTypeDeregistrationAcceptMessageIdentityData struct { 13 | in uint8 14 | out uint8 15 | } 16 | 17 | var nasTypeDeregistrationAcceptMessageIdentityTable = []nasTypeDeregistrationAcceptMessageIdentityData{ 18 | {nas.MsgTypeDeregistrationAcceptUETerminatedDeregistration, nas.MsgTypeDeregistrationAcceptUETerminatedDeregistration}, 19 | } 20 | 21 | func TestNasTypeNewDeregistrationAcceptMessageIdentity(t *testing.T) { 22 | a := nasType.NewDeregistrationAcceptMessageIdentity() 23 | assert.NotNil(t, a) 24 | } 25 | 26 | func TestNasTypeGetSetDeregistrationAcceptMessageIdentity(t *testing.T) { 27 | a := nasType.NewDeregistrationAcceptMessageIdentity() 28 | for _, table := range nasTypeDeregistrationAcceptMessageIdentityTable { 29 | a.SetMessageType(table.in) 30 | assert.Equal(t, table.out, a.GetMessageType()) 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /nasType/NAS_PDUSESSIONAUTHENTICATIONRESULTMessageIdentity.go: -------------------------------------------------------------------------------- 1 | package nasType 2 | 3 | // PDUSESSIONAUTHENTICATIONRESULTMessageIdentity 9.7 4 | // MessageType Row, sBit, len = [0, 0], 8 , 8 5 | type PDUSESSIONAUTHENTICATIONRESULTMessageIdentity struct { 6 | Octet uint8 7 | } 8 | 9 | func NewPDUSESSIONAUTHENTICATIONRESULTMessageIdentity() (pDUSESSIONAUTHENTICATIONRESULTMessageIdentity *PDUSESSIONAUTHENTICATIONRESULTMessageIdentity) { 10 | pDUSESSIONAUTHENTICATIONRESULTMessageIdentity = &PDUSESSIONAUTHENTICATIONRESULTMessageIdentity{} 11 | return pDUSESSIONAUTHENTICATIONRESULTMessageIdentity 12 | } 13 | 14 | // PDUSESSIONAUTHENTICATIONRESULTMessageIdentity 9.7 15 | // MessageType Row, sBit, len = [0, 0], 8 , 8 16 | func (a *PDUSESSIONAUTHENTICATIONRESULTMessageIdentity) GetMessageType() (messageType uint8) { 17 | return a.Octet 18 | } 19 | 20 | // PDUSESSIONAUTHENTICATIONRESULTMessageIdentity 9.7 21 | // MessageType Row, sBit, len = [0, 0], 8 , 8 22 | func (a *PDUSESSIONAUTHENTICATIONRESULTMessageIdentity) SetMessageType(messageType uint8) { 23 | a.Octet = messageType 24 | } 25 | -------------------------------------------------------------------------------- /nasType/NAS_PDUSESSIONESTABLISHMENTREQUESTMessageIdentity.go: -------------------------------------------------------------------------------- 1 | package nasType 2 | 3 | // PDUSESSIONESTABLISHMENTREQUESTMessageIdentity 9.7 4 | // MessageType Row, sBit, len = [0, 0], 8 , 8 5 | type PDUSESSIONESTABLISHMENTREQUESTMessageIdentity struct { 6 | Octet uint8 7 | } 8 | 9 | func NewPDUSESSIONESTABLISHMENTREQUESTMessageIdentity() (pDUSESSIONESTABLISHMENTREQUESTMessageIdentity *PDUSESSIONESTABLISHMENTREQUESTMessageIdentity) { 10 | pDUSESSIONESTABLISHMENTREQUESTMessageIdentity = &PDUSESSIONESTABLISHMENTREQUESTMessageIdentity{} 11 | return pDUSESSIONESTABLISHMENTREQUESTMessageIdentity 12 | } 13 | 14 | // PDUSESSIONESTABLISHMENTREQUESTMessageIdentity 9.7 15 | // MessageType Row, sBit, len = [0, 0], 8 , 8 16 | func (a *PDUSESSIONESTABLISHMENTREQUESTMessageIdentity) GetMessageType() (messageType uint8) { 17 | return a.Octet 18 | } 19 | 20 | // PDUSESSIONESTABLISHMENTREQUESTMessageIdentity 9.7 21 | // MessageType Row, sBit, len = [0, 0], 8 , 8 22 | func (a *PDUSESSIONESTABLISHMENTREQUESTMessageIdentity) SetMessageType(messageType uint8) { 23 | a.Octet = messageType 24 | } 25 | -------------------------------------------------------------------------------- /nasType/NAS_PDUSESSIONMODIFICATIONCOMPLETEMessageIdentity.go: -------------------------------------------------------------------------------- 1 | package nasType 2 | 3 | // PDUSESSIONMODIFICATIONCOMPLETEMessageIdentity 9.7 4 | // MessageType Row, sBit, len = [0, 0], 8 , 8 5 | type PDUSESSIONMODIFICATIONCOMPLETEMessageIdentity struct { 6 | Octet uint8 7 | } 8 | 9 | func NewPDUSESSIONMODIFICATIONCOMPLETEMessageIdentity() (pDUSESSIONMODIFICATIONCOMPLETEMessageIdentity *PDUSESSIONMODIFICATIONCOMPLETEMessageIdentity) { 10 | pDUSESSIONMODIFICATIONCOMPLETEMessageIdentity = &PDUSESSIONMODIFICATIONCOMPLETEMessageIdentity{} 11 | return pDUSESSIONMODIFICATIONCOMPLETEMessageIdentity 12 | } 13 | 14 | // PDUSESSIONMODIFICATIONCOMPLETEMessageIdentity 9.7 15 | // MessageType Row, sBit, len = [0, 0], 8 , 8 16 | func (a *PDUSESSIONMODIFICATIONCOMPLETEMessageIdentity) GetMessageType() (messageType uint8) { 17 | return a.Octet 18 | } 19 | 20 | // PDUSESSIONMODIFICATIONCOMPLETEMessageIdentity 9.7 21 | // MessageType Row, sBit, len = [0, 0], 8 , 8 22 | func (a *PDUSESSIONMODIFICATIONCOMPLETEMessageIdentity) SetMessageType(messageType uint8) { 23 | a.Octet = messageType 24 | } 25 | -------------------------------------------------------------------------------- /nasType/NAS_DeregistrationRequestMessageIdentity_test.go: -------------------------------------------------------------------------------- 1 | package nasType_test 2 | 3 | import ( 4 | "testing" 5 | 6 | "github.com/stretchr/testify/assert" 7 | 8 | "github.com/free5gc/nas" 9 | "github.com/free5gc/nas/nasType" 10 | ) 11 | 12 | type nasTypeDeregistrationRequestMessageIdentityData struct { 13 | in uint8 14 | out uint8 15 | } 16 | 17 | var nasTypeDeregistrationRequestMessageIdentityTable = []nasTypeDeregistrationRequestMessageIdentityData{ 18 | {nas.MsgTypeDeregistrationRequestUETerminatedDeregistration, nas.MsgTypeDeregistrationRequestUETerminatedDeregistration}, 19 | } 20 | 21 | func TestNasTypeNewDeregistrationRequestMessageIdentity(t *testing.T) { 22 | a := nasType.NewDeregistrationRequestMessageIdentity() 23 | assert.NotNil(t, a) 24 | } 25 | 26 | func TestNasTypeGetSetDeregistrationRequestMessageIdentity(t *testing.T) { 27 | a := nasType.NewDeregistrationRequestMessageIdentity() 28 | for _, table := range nasTypeDeregistrationRequestMessageIdentityTable { 29 | a.SetMessageType(table.in) 30 | assert.Equal(t, table.out, a.GetMessageType()) 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /nasType/NAS_PDUSESSIONAUTHENTICATIONCOMMANDMessageIdentity.go: -------------------------------------------------------------------------------- 1 | package nasType 2 | 3 | // PDUSESSIONAUTHENTICATIONCOMMANDMessageIdentity 9.7 4 | // MessageType Row, sBit, len = [0, 0], 8 , 8 5 | type PDUSESSIONAUTHENTICATIONCOMMANDMessageIdentity struct { 6 | Octet uint8 7 | } 8 | 9 | func NewPDUSESSIONAUTHENTICATIONCOMMANDMessageIdentity() (pDUSESSIONAUTHENTICATIONCOMMANDMessageIdentity *PDUSESSIONAUTHENTICATIONCOMMANDMessageIdentity) { 10 | pDUSESSIONAUTHENTICATIONCOMMANDMessageIdentity = &PDUSESSIONAUTHENTICATIONCOMMANDMessageIdentity{} 11 | return pDUSESSIONAUTHENTICATIONCOMMANDMessageIdentity 12 | } 13 | 14 | // PDUSESSIONAUTHENTICATIONCOMMANDMessageIdentity 9.7 15 | // MessageType Row, sBit, len = [0, 0], 8 , 8 16 | func (a *PDUSESSIONAUTHENTICATIONCOMMANDMessageIdentity) GetMessageType() (messageType uint8) { 17 | return a.Octet 18 | } 19 | 20 | // PDUSESSIONAUTHENTICATIONCOMMANDMessageIdentity 9.7 21 | // MessageType Row, sBit, len = [0, 0], 8 , 8 22 | func (a *PDUSESSIONAUTHENTICATIONCOMMANDMessageIdentity) SetMessageType(messageType uint8) { 23 | a.Octet = messageType 24 | } 25 | -------------------------------------------------------------------------------- /nasType/NAS_ConfigurationUpdateCommandMessageIdentity_test.go: -------------------------------------------------------------------------------- 1 | package nasType_test 2 | 3 | import ( 4 | "testing" 5 | 6 | "github.com/stretchr/testify/assert" 7 | 8 | "github.com/free5gc/nas" 9 | "github.com/free5gc/nas/nasType" 10 | ) 11 | 12 | type nasTypeConfigurationUpdateCommandMessageIdentityData struct { 13 | in uint8 14 | out uint8 15 | } 16 | 17 | var nasTypeConfigurationUpdateCommandMessageIdentityTable = []nasTypeConfigurationUpdateCommandMessageIdentityData{ 18 | {nas.MsgTypeConfigurationUpdateCommand, nas.MsgTypeConfigurationUpdateCommand}, 19 | } 20 | 21 | func TestNasTypeNewConfigurationUpdateCommandMessageIdentity(t *testing.T) { 22 | a := nasType.NewConfigurationUpdateCommandMessageIdentity() 23 | assert.NotNil(t, a) 24 | } 25 | 26 | func TestNasTypeGetSetConfigurationUpdateCommandMessageIdentity(t *testing.T) { 27 | a := nasType.NewConfigurationUpdateCommandMessageIdentity() 28 | for _, table := range nasTypeConfigurationUpdateCommandMessageIdentityTable { 29 | a.SetMessageType(table.in) 30 | assert.Equal(t, table.out, a.GetMessageType()) 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /nasConvert/AmfId.go: -------------------------------------------------------------------------------- 1 | package nasConvert 2 | 3 | import ( 4 | "encoding/hex" 5 | "fmt" 6 | "log" 7 | ) 8 | 9 | func AmfIdToNas(amfId string) (amfRegionId uint8, amfSetId uint16, amfPointer uint8) { 10 | var err error 11 | amfRegionId, amfSetId, amfPointer, err = AmfIdToNasWithError(amfId) 12 | if err != nil { 13 | log.Printf("AmfIdToNas: %+v", err) 14 | return 0, 0, 0 15 | } 16 | return 17 | } 18 | 19 | func AmfIdToNasWithError(amfId string) (amfRegionId uint8, amfSetId uint16, amfPointer uint8, err error) { 20 | amfIdBytes, err := hex.DecodeString(amfId) 21 | if err != nil { 22 | return 0, 0, 0, fmt.Errorf("amfId decode failed: %w", err) 23 | } 24 | 25 | amfRegionId = amfIdBytes[0] 26 | amfSetId = uint16(amfIdBytes[1])<<2 + (uint16(amfIdBytes[2])&0x00c0)>>6 27 | amfPointer = amfIdBytes[2] & 0x3f 28 | return 29 | } 30 | 31 | func AmfIdToModels(amfRegionId uint8, amfSetId uint16, amfPointer uint8) (amfId string) { 32 | tmpBytes := []uint8{amfRegionId, uint8(amfSetId>>2) & 0xff, uint8(amfSetId&0x03) + amfPointer&0x3f} 33 | amfId = hex.EncodeToString(tmpBytes) 34 | return 35 | } 36 | -------------------------------------------------------------------------------- /nasType/NAS_ConfigurationUpdateCompleteMessageIdentity_test.go: -------------------------------------------------------------------------------- 1 | package nasType_test 2 | 3 | import ( 4 | "testing" 5 | 6 | "github.com/stretchr/testify/assert" 7 | 8 | "github.com/free5gc/nas" 9 | "github.com/free5gc/nas/nasType" 10 | ) 11 | 12 | type nasTypeConfigurationUpdateCompleteMessageIdentityData struct { 13 | in uint8 14 | out uint8 15 | } 16 | 17 | var nasTypeConfigurationUpdateCompleteMessageIdentityTable = []nasTypeConfigurationUpdateCompleteMessageIdentityData{ 18 | {nas.MsgTypeConfigurationUpdateComplete, nas.MsgTypeConfigurationUpdateComplete}, 19 | } 20 | 21 | func TestNasTypeNewConfigurationUpdateCompleteMessageIdentity(t *testing.T) { 22 | a := nasType.NewConfigurationUpdateCompleteMessageIdentity() 23 | assert.NotNil(t, a) 24 | } 25 | 26 | func TestNasTypeGetSetConfigurationUpdateCompleteMessageIdentity(t *testing.T) { 27 | a := nasType.NewConfigurationUpdateCompleteMessageIdentity() 28 | for _, table := range nasTypeConfigurationUpdateCompleteMessageIdentityTable { 29 | a.SetMessageType(table.in) 30 | assert.Equal(t, table.out, a.GetMessageType()) 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /nasType/NAS_PDUSESSIONAUTHENTICATIONCOMPLETEMessageIdentity.go: -------------------------------------------------------------------------------- 1 | package nasType 2 | 3 | // PDUSESSIONAUTHENTICATIONCOMPLETEMessageIdentity 9.7 4 | // MessageType Row, sBit, len = [0, 0], 8 , 8 5 | type PDUSESSIONAUTHENTICATIONCOMPLETEMessageIdentity struct { 6 | Octet uint8 7 | } 8 | 9 | func NewPDUSESSIONAUTHENTICATIONCOMPLETEMessageIdentity() (pDUSESSIONAUTHENTICATIONCOMPLETEMessageIdentity *PDUSESSIONAUTHENTICATIONCOMPLETEMessageIdentity) { 10 | pDUSESSIONAUTHENTICATIONCOMPLETEMessageIdentity = &PDUSESSIONAUTHENTICATIONCOMPLETEMessageIdentity{} 11 | return pDUSESSIONAUTHENTICATIONCOMPLETEMessageIdentity 12 | } 13 | 14 | // PDUSESSIONAUTHENTICATIONCOMPLETEMessageIdentity 9.7 15 | // MessageType Row, sBit, len = [0, 0], 8 , 8 16 | func (a *PDUSESSIONAUTHENTICATIONCOMPLETEMessageIdentity) GetMessageType() (messageType uint8) { 17 | return a.Octet 18 | } 19 | 20 | // PDUSESSIONAUTHENTICATIONCOMPLETEMessageIdentity 9.7 21 | // MessageType Row, sBit, len = [0, 0], 8 , 8 22 | func (a *PDUSESSIONAUTHENTICATIONCOMPLETEMessageIdentity) SetMessageType(messageType uint8) { 23 | a.Octet = messageType 24 | } 25 | -------------------------------------------------------------------------------- /nasConvert/GPRSTimer3.go: -------------------------------------------------------------------------------- 1 | package nasConvert 2 | 3 | import ( 4 | "github.com/free5gc/nas/nasMessage" 5 | ) 6 | 7 | // TS 24.008 10.5.7.4a 8 | func GPRSTimer3ToNas(timerValue int) (timerValueNas uint8) { 9 | if timerValue <= 2*31 { 10 | t := uint8(timerValue / 2) 11 | timerValueNas = (nasMessage.GPRSTimer3UnitMultiplesOf2Seconds << 5) + t 12 | } else if timerValue <= 30*31 { 13 | t := uint8(timerValue / 30) 14 | timerValueNas = (nasMessage.GPRSTimer3UnitMultiplesOf30Seconds << 5) + t 15 | } else if timerValue <= 60*31 { 16 | t := uint8(timerValue / 60) 17 | timerValueNas = (nasMessage.GPRSTimer3UnitMultiplesOf1Minute << 5) + t 18 | } else if timerValue <= 600*31 { 19 | t := uint8(timerValue / 600) 20 | timerValueNas = (nasMessage.GPRSTimer3UnitMultiplesOf10Minutes << 5) + t 21 | } else if timerValue <= 3600*31 { 22 | t := uint8(timerValue / 3600) 23 | timerValueNas = (nasMessage.GPRSTimer3UnitMultiplesOf1Hour << 5) + t 24 | } else { 25 | t := uint8(timerValue / (36000)) 26 | timerValueNas = (nasMessage.GPRSTimer3UnitMultiplesOf10Hours << 5) + t 27 | } 28 | 29 | return 30 | } 31 | -------------------------------------------------------------------------------- /nasConvert/SpareHalfOctetAndNgKsi.go: -------------------------------------------------------------------------------- 1 | package nasConvert 2 | 3 | import ( 4 | "github.com/free5gc/nas/nasMessage" 5 | "github.com/free5gc/nas/nasType" 6 | "github.com/free5gc/openapi/models" 7 | ) 8 | 9 | func SpareHalfOctetAndNgksiToModels(ngKsiNas nasType.SpareHalfOctetAndNgksi) (ngKsiModels models.NgKsi) { 10 | switch ngKsiNas.GetTSC() { 11 | case nasMessage.TypeOfSecurityContextFlagNative: 12 | ngKsiModels.Tsc = models.ScType_NATIVE 13 | case nasMessage.TypeOfSecurityContextFlagMapped: 14 | ngKsiModels.Tsc = models.ScType_MAPPED 15 | } 16 | 17 | ngKsiModels.Ksi = int32(ngKsiNas.GetNasKeySetIdentifiler()) 18 | return 19 | } 20 | 21 | func SpareHalfOctetAndNgksiToNas(ngKsiModels models.NgKsi) (ngKsiNas nasType.SpareHalfOctetAndNgksi) { 22 | switch ngKsiModels.Tsc { 23 | case models.ScType_NATIVE: 24 | ngKsiNas.SetTSC(nasMessage.TypeOfSecurityContextFlagNative) 25 | case models.ScType_MAPPED: 26 | ngKsiNas.SetTSC(nasMessage.TypeOfSecurityContextFlagMapped) 27 | } 28 | 29 | ngKsiNas.SetSpareHalfOctet(0) 30 | ngKsiNas.SetNasKeySetIdentifiler(uint8(ngKsiModels.Ksi)) 31 | return 32 | } 33 | -------------------------------------------------------------------------------- /nasType/NAS_OldPDUSessionID.go: -------------------------------------------------------------------------------- 1 | package nasType 2 | 3 | // OldPDUSessionID 9.11.3.41 4 | // OldPDUSessionID Row, sBit, len = [0, 0], 8 , 8 5 | type OldPDUSessionID struct { 6 | Iei uint8 7 | Octet uint8 8 | } 9 | 10 | func NewOldPDUSessionID(iei uint8) (oldPDUSessionID *OldPDUSessionID) { 11 | oldPDUSessionID = &OldPDUSessionID{} 12 | oldPDUSessionID.SetIei(iei) 13 | return oldPDUSessionID 14 | } 15 | 16 | // OldPDUSessionID 9.11.3.41 17 | // Iei Row, sBit, len = [], 8, 8 18 | func (a *OldPDUSessionID) GetIei() (iei uint8) { 19 | return a.Iei 20 | } 21 | 22 | // OldPDUSessionID 9.11.3.41 23 | // Iei Row, sBit, len = [], 8, 8 24 | func (a *OldPDUSessionID) SetIei(iei uint8) { 25 | a.Iei = iei 26 | } 27 | 28 | // OldPDUSessionID 9.11.3.41 29 | // OldPDUSessionID Row, sBit, len = [0, 0], 8 , 8 30 | func (a *OldPDUSessionID) GetOldPDUSessionID() (oldPDUSessionID uint8) { 31 | return a.Octet 32 | } 33 | 34 | // OldPDUSessionID 9.11.3.41 35 | // OldPDUSessionID Row, sBit, len = [0, 0], 8 , 8 36 | func (a *OldPDUSessionID) SetOldPDUSessionID(oldPDUSessionID uint8) { 37 | a.Octet = oldPDUSessionID 38 | } 39 | -------------------------------------------------------------------------------- /nasType/NAS_SpareHalfOctetAndPayloadContainerType.go: -------------------------------------------------------------------------------- 1 | package nasType 2 | 3 | // SpareHalfOctetAndPayloadContainerType 9.11.3.40 9.5 4 | // PayloadContainerType Row, sBit, len = [0, 0], 4 , 4 5 | type SpareHalfOctetAndPayloadContainerType struct { 6 | Octet uint8 7 | } 8 | 9 | func NewSpareHalfOctetAndPayloadContainerType() (spareHalfOctetAndPayloadContainerType *SpareHalfOctetAndPayloadContainerType) { 10 | spareHalfOctetAndPayloadContainerType = &SpareHalfOctetAndPayloadContainerType{} 11 | return spareHalfOctetAndPayloadContainerType 12 | } 13 | 14 | // SpareHalfOctetAndPayloadContainerType 9.11.3.40 9.5 15 | // PayloadContainerType Row, sBit, len = [0, 0], 4 , 4 16 | func (a *SpareHalfOctetAndPayloadContainerType) GetPayloadContainerType() (payloadContainerType uint8) { 17 | return a.Octet & GetBitMask(4, 0) 18 | } 19 | 20 | // SpareHalfOctetAndPayloadContainerType 9.11.3.40 9.5 21 | // PayloadContainerType Row, sBit, len = [0, 0], 4 , 4 22 | func (a *SpareHalfOctetAndPayloadContainerType) SetPayloadContainerType(payloadContainerType uint8) { 23 | a.Octet = (a.Octet & 240) + (payloadContainerType & 15) 24 | } 25 | -------------------------------------------------------------------------------- /nasType/NAS_SMSIndication.go: -------------------------------------------------------------------------------- 1 | package nasType 2 | 3 | // SMSIndication 9.10.3.50A 4 | // Iei Row, sBit, len = [0, 0], 8 , 4 5 | // SAI Row, sBit, len = [0, 0], 1 , 1 6 | type SMSIndication struct { 7 | Octet uint8 8 | } 9 | 10 | func NewSMSIndication(iei uint8) (sMSIndication *SMSIndication) { 11 | sMSIndication = &SMSIndication{} 12 | sMSIndication.SetIei(iei) 13 | return sMSIndication 14 | } 15 | 16 | // SMSIndication 9.10.3.50A 17 | // Iei Row, sBit, len = [0, 0], 8 , 4 18 | func (a *SMSIndication) GetIei() (iei uint8) { 19 | return a.Octet & GetBitMask(8, 4) >> (4) 20 | } 21 | 22 | // SMSIndication 9.10.3.50A 23 | // Iei Row, sBit, len = [0, 0], 8 , 4 24 | func (a *SMSIndication) SetIei(iei uint8) { 25 | a.Octet = (a.Octet & 15) + ((iei & 15) << 4) 26 | } 27 | 28 | // SMSIndication 9.10.3.50A 29 | // SAI Row, sBit, len = [0, 0], 1 , 1 30 | func (a *SMSIndication) GetSAI() (sAI uint8) { 31 | return a.Octet & GetBitMask(1, 0) 32 | } 33 | 34 | // SMSIndication 9.10.3.50A 35 | // SAI Row, sBit, len = [0, 0], 1 , 1 36 | func (a *SMSIndication) SetSAI(sAI uint8) { 37 | a.Octet = (a.Octet & 254) + (sAI & 1) 38 | } 39 | -------------------------------------------------------------------------------- /nasType/NAS_MICOIndication.go: -------------------------------------------------------------------------------- 1 | package nasType 2 | 3 | // MICOIndication 9.11.3.31 4 | // Iei Row, sBit, len = [0, 0], 8 , 4 5 | // RAAI Row, sBit, len = [0, 0], 1 , 1 6 | type MICOIndication struct { 7 | Octet uint8 8 | } 9 | 10 | func NewMICOIndication(iei uint8) (mICOIndication *MICOIndication) { 11 | mICOIndication = &MICOIndication{} 12 | mICOIndication.SetIei(iei) 13 | return mICOIndication 14 | } 15 | 16 | // MICOIndication 9.11.3.31 17 | // Iei Row, sBit, len = [0, 0], 8 , 4 18 | func (a *MICOIndication) GetIei() (iei uint8) { 19 | return a.Octet & GetBitMask(8, 4) >> (4) 20 | } 21 | 22 | // MICOIndication 9.11.3.31 23 | // Iei Row, sBit, len = [0, 0], 8 , 4 24 | func (a *MICOIndication) SetIei(iei uint8) { 25 | a.Octet = (a.Octet & 15) + ((iei & 15) << 4) 26 | } 27 | 28 | // MICOIndication 9.11.3.31 29 | // RAAI Row, sBit, len = [0, 0], 1 , 1 30 | func (a *MICOIndication) GetRAAI() (rAAI uint8) { 31 | return a.Octet & GetBitMask(1, 0) 32 | } 33 | 34 | // MICOIndication 9.11.3.31 35 | // RAAI Row, sBit, len = [0, 0], 1 , 1 36 | func (a *MICOIndication) SetRAAI(rAAI uint8) { 37 | a.Octet = (a.Octet & 254) + (rAAI & 1) 38 | } 39 | -------------------------------------------------------------------------------- /nasType/NAS_PDUSESSIONMODIFICATIONCOMMANDREJECTMessageIdentity.go: -------------------------------------------------------------------------------- 1 | package nasType 2 | 3 | // PDUSESSIONMODIFICATIONCOMMANDREJECTMessageIdentity 9.7 4 | // MessageType Row, sBit, len = [0, 0], 8 , 8 5 | type PDUSESSIONMODIFICATIONCOMMANDREJECTMessageIdentity struct { 6 | Octet uint8 7 | } 8 | 9 | func NewPDUSESSIONMODIFICATIONCOMMANDREJECTMessageIdentity() (pDUSESSIONMODIFICATIONCOMMANDREJECTMessageIdentity *PDUSESSIONMODIFICATIONCOMMANDREJECTMessageIdentity) { 10 | pDUSESSIONMODIFICATIONCOMMANDREJECTMessageIdentity = &PDUSESSIONMODIFICATIONCOMMANDREJECTMessageIdentity{} 11 | return pDUSESSIONMODIFICATIONCOMMANDREJECTMessageIdentity 12 | } 13 | 14 | // PDUSESSIONMODIFICATIONCOMMANDREJECTMessageIdentity 9.7 15 | // MessageType Row, sBit, len = [0, 0], 8 , 8 16 | func (a *PDUSESSIONMODIFICATIONCOMMANDREJECTMessageIdentity) GetMessageType() (messageType uint8) { 17 | return a.Octet 18 | } 19 | 20 | // PDUSESSIONMODIFICATIONCOMMANDREJECTMessageIdentity 9.7 21 | // MessageType Row, sBit, len = [0, 0], 8 , 8 22 | func (a *PDUSESSIONMODIFICATIONCOMMANDREJECTMessageIdentity) SetMessageType(messageType uint8) { 23 | a.Octet = messageType 24 | } 25 | -------------------------------------------------------------------------------- /nasType/NAS_PDUSESSIONMODIFICATIONREJECTMessageIdentity_test.go: -------------------------------------------------------------------------------- 1 | package nasType_test 2 | 3 | import ( 4 | "testing" 5 | 6 | "github.com/stretchr/testify/assert" 7 | 8 | "github.com/free5gc/nas" 9 | "github.com/free5gc/nas/nasType" 10 | ) 11 | 12 | func TestNasTypeNewPDUSESSIONMODIFICATIONREJECTMessageIdentity(t *testing.T) { 13 | a := nasType.NewPDUSESSIONMODIFICATIONREJECTMessageIdentity() 14 | assert.NotNil(t, a) 15 | } 16 | 17 | type nasTypePDUSESSIONMODIFICATIONREJECTMessageIdentityMessageType struct { 18 | in uint8 19 | out uint8 20 | } 21 | 22 | var nasTypePDUSESSIONMODIFICATIONREJECTMessageIdentityMessageTypeTable = []nasTypePDUSESSIONMODIFICATIONREJECTMessageIdentityMessageType{ 23 | {nas.MsgTypePDUSessionModificationReject, nas.MsgTypePDUSessionModificationReject}, 24 | } 25 | 26 | func TestNasTypeGetSetPDUSESSIONMODIFICATIONREJECTMessageIdentityMessageType(t *testing.T) { 27 | a := nasType.NewPDUSESSIONMODIFICATIONREJECTMessageIdentity() 28 | for _, table := range nasTypePDUSESSIONMODIFICATIONREJECTMessageIdentityMessageTypeTable { 29 | a.SetMessageType(table.in) 30 | assert.Equal(t, table.out, a.GetMessageType()) 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /security/counter.go: -------------------------------------------------------------------------------- 1 | package security 2 | 3 | /* 4 | TS 33.501 6.4.3.1 5 | 6 | COUNT (32 bits) := 0x00 || NAS COUNT (24 bits) 7 | NAS COUNT (24 bits) := NAS OVERFLOW (16 bits) || NAS SQN (8 bits) 8 | */ 9 | type Count struct { 10 | count uint32 11 | } 12 | 13 | func (counter *Count) maskTo24Bits() { 14 | counter.count &= 0x00ffffff 15 | } 16 | 17 | func (counter *Count) Set(overflow uint16, sqn uint8) { 18 | counter.SetOverflow(overflow) 19 | counter.SetSQN(sqn) 20 | } 21 | 22 | func (counter *Count) Get() uint32 { 23 | counter.maskTo24Bits() 24 | return counter.count 25 | } 26 | 27 | func (counter *Count) AddOne() { 28 | counter.count++ 29 | counter.maskTo24Bits() 30 | } 31 | 32 | func (counter *Count) SQN() uint8 { 33 | return uint8(counter.count & 0x000000ff) 34 | } 35 | 36 | func (counter *Count) SetSQN(sqn uint8) { 37 | counter.count = (counter.count & 0xffffff00) | uint32(sqn) 38 | } 39 | 40 | func (counter *Count) Overflow() uint16 { 41 | return uint16((counter.count & 0x00ffff00) >> 8) 42 | } 43 | 44 | func (counter *Count) SetOverflow(overflow uint16) { 45 | counter.count = (counter.count & 0xff0000ff) | (uint32(overflow) << 8) 46 | } 47 | -------------------------------------------------------------------------------- /internal/tools/generator_sub.go: -------------------------------------------------------------------------------- 1 | //go:build ignore 2 | // +build ignore 3 | 4 | package main 5 | 6 | import ( 7 | "fmt" 8 | "os" 9 | "strings" 10 | 11 | "github.com/free5gc/nas/internal/tools/generator" 12 | ) 13 | 14 | // Generate table of types in nasType package 15 | func main() { 16 | dirs, err := os.ReadDir("nasType") 17 | if err != nil { 18 | panic(err) 19 | } 20 | 21 | fOut := generator.NewOutputFile("internal/tools/generator/types.go", "generator", []string{ 22 | "\"reflect\"", 23 | "", 24 | "\"github.com/free5gc/nas/nasType\"", 25 | }) 26 | 27 | fmt.Fprintln(fOut, "var nasTypeTable map[string]reflect.Type = map[string]reflect.Type{") 28 | for _, dir := range dirs { 29 | name := dir.Name() 30 | // Assume one type by one file 31 | if strings.HasPrefix(name, "NAS_") && strings.HasSuffix(name, ".go") && !strings.HasSuffix(name, "_test.go") { 32 | name := strings.TrimPrefix(name, "NAS_") 33 | name = strings.TrimSuffix(name, ".go") 34 | fmt.Fprintf(fOut, "\"%s\": reflect.TypeOf(nasType.%s{}),\n", name, name) 35 | } 36 | } 37 | fmt.Fprintln(fOut, "}") 38 | 39 | if err := fOut.Close(); err != nil { 40 | panic(err) 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /nasType/NAS_PDUSESSIONESTABLISHMENTACCEPTMessageIdentity_test.go: -------------------------------------------------------------------------------- 1 | package nasType_test 2 | 3 | import ( 4 | "testing" 5 | 6 | "github.com/stretchr/testify/assert" 7 | 8 | "github.com/free5gc/nas" 9 | "github.com/free5gc/nas/nasType" 10 | ) 11 | 12 | func TestNasTypeNewPDUSESSIONESTABLISHMENTACCEPTMessageIdentity(t *testing.T) { 13 | a := nasType.NewPDUSESSIONESTABLISHMENTACCEPTMessageIdentity() 14 | assert.NotNil(t, a) 15 | } 16 | 17 | type nasTypePDUSESSIONESTABLISHMENTACCEPTMessageIdentityMessageType struct { 18 | in uint8 19 | out uint8 20 | } 21 | 22 | var nasTypePDUSESSIONESTABLISHMENTACCEPTMessageIdentityMessageTypeTable = []nasTypePDUSESSIONESTABLISHMENTACCEPTMessageIdentityMessageType{ 23 | {nas.MsgTypePDUSessionEstablishmentAccept, nas.MsgTypePDUSessionEstablishmentAccept}, 24 | } 25 | 26 | func TestNasTypeGetSetPDUSESSIONESTABLISHMENTACCEPTMessageIdentityMessageType(t *testing.T) { 27 | a := nasType.NewPDUSESSIONESTABLISHMENTACCEPTMessageIdentity() 28 | for _, table := range nasTypePDUSESSIONESTABLISHMENTACCEPTMessageIdentityMessageTypeTable { 29 | a.SetMessageType(table.in) 30 | assert.Equal(t, table.out, a.GetMessageType()) 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /nasType/NAS_PDUSESSIONESTABLISHMENTREJECTMessageIdentity_test.go: -------------------------------------------------------------------------------- 1 | package nasType_test 2 | 3 | import ( 4 | "testing" 5 | 6 | "github.com/stretchr/testify/assert" 7 | 8 | "github.com/free5gc/nas" 9 | "github.com/free5gc/nas/nasType" 10 | ) 11 | 12 | func TestNasTypeNewPDUSESSIONESTABLISHMENTREJECTMessageIdentity(t *testing.T) { 13 | a := nasType.NewPDUSESSIONESTABLISHMENTREJECTMessageIdentity() 14 | assert.NotNil(t, a) 15 | } 16 | 17 | type nasTypePDUSESSIONESTABLISHMENTREJECTMessageIdentityMessageType struct { 18 | in uint8 19 | out uint8 20 | } 21 | 22 | var nasTypePDUSESSIONESTABLISHMENTREJECTMessageIdentityMessageTypeTable = []nasTypePDUSESSIONESTABLISHMENTREJECTMessageIdentityMessageType{ 23 | {nas.MsgTypePDUSessionEstablishmentReject, nas.MsgTypePDUSessionEstablishmentReject}, 24 | } 25 | 26 | func TestNasTypeGetSetPDUSESSIONESTABLISHMENTREJECTMessageIdentityMessageType(t *testing.T) { 27 | a := nasType.NewPDUSESSIONESTABLISHMENTREJECTMessageIdentity() 28 | for _, table := range nasTypePDUSESSIONESTABLISHMENTREJECTMessageIdentityMessageTypeTable { 29 | a.SetMessageType(table.in) 30 | assert.Equal(t, table.out, a.GetMessageType()) 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /nasType/NAS_PDUSESSIONMODIFICATIONCOMMANDMessageIdentity_test.go: -------------------------------------------------------------------------------- 1 | package nasType_test 2 | 3 | import ( 4 | "testing" 5 | 6 | "github.com/stretchr/testify/assert" 7 | 8 | "github.com/free5gc/nas" 9 | "github.com/free5gc/nas/nasType" 10 | ) 11 | 12 | func TestNasTypeNewPDUSESSIONMODIFICATIONCOMMANDMessageIdentity(t *testing.T) { 13 | a := nasType.NewPDUSESSIONMODIFICATIONCOMMANDMessageIdentity() 14 | assert.NotNil(t, a) 15 | } 16 | 17 | type nasTypePDUSESSIONMODIFICATIONCOMMANDMessageIdentityMessageType struct { 18 | in uint8 19 | out uint8 20 | } 21 | 22 | var nasTypePDUSESSIONMODIFICATIONCOMMANDMessageIdentityMessageTypeTable = []nasTypePDUSESSIONMODIFICATIONCOMMANDMessageIdentityMessageType{ 23 | {nas.MsgTypePDUSessionModificationCommand, nas.MsgTypePDUSessionModificationCommand}, 24 | } 25 | 26 | func TestNasTypeGetSetPDUSESSIONMODIFICATIONCOMMANDMessageIdentityMessageType(t *testing.T) { 27 | a := nasType.NewPDUSESSIONMODIFICATIONCOMMANDMessageIdentity() 28 | for _, table := range nasTypePDUSESSIONMODIFICATIONCOMMANDMessageIdentityMessageTypeTable { 29 | a.SetMessageType(table.in) 30 | assert.Equal(t, table.out, a.GetMessageType()) 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /nasType/NAS_PDUSESSIONMODIFICATIONREQUESTMessageIdentity_test.go: -------------------------------------------------------------------------------- 1 | package nasType_test 2 | 3 | import ( 4 | "testing" 5 | 6 | "github.com/stretchr/testify/assert" 7 | 8 | "github.com/free5gc/nas" 9 | "github.com/free5gc/nas/nasType" 10 | ) 11 | 12 | func TestNasTypeNewPDUSESSIONMODIFICATIONREQUESTMessageIdentity(t *testing.T) { 13 | a := nasType.NewPDUSESSIONMODIFICATIONREQUESTMessageIdentity() 14 | assert.NotNil(t, a) 15 | } 16 | 17 | type nasTypePDUSESSIONMODIFICATIONREQUESTMessageIdentityMessageType struct { 18 | in uint8 19 | out uint8 20 | } 21 | 22 | var nasTypePDUSESSIONMODIFICATIONREQUESTMessageIdentityMessageTypeTable = []nasTypePDUSESSIONMODIFICATIONREQUESTMessageIdentityMessageType{ 23 | {nas.MsgTypePDUSessionModificationRequest, nas.MsgTypePDUSessionModificationRequest}, 24 | } 25 | 26 | func TestNasTypeGetSetPDUSESSIONMODIFICATIONREQUESTMessageIdentityMessageType(t *testing.T) { 27 | a := nasType.NewPDUSESSIONMODIFICATIONREQUESTMessageIdentity() 28 | for _, table := range nasTypePDUSESSIONMODIFICATIONREQUESTMessageIdentityMessageTypeTable { 29 | a.SetMessageType(table.in) 30 | assert.Equal(t, table.out, a.GetMessageType()) 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /nasType/NAS_PDUSESSIONAUTHENTICATIONRESULTMessageIdentity_test.go: -------------------------------------------------------------------------------- 1 | package nasType_test 2 | 3 | import ( 4 | "testing" 5 | 6 | "github.com/stretchr/testify/assert" 7 | 8 | "github.com/free5gc/nas" 9 | "github.com/free5gc/nas/nasType" 10 | ) 11 | 12 | func TestNasTypeNewPDUSESSIONAUTHENTICATIONRESULTMessageIdentity(t *testing.T) { 13 | a := nasType.NewPDUSESSIONAUTHENTICATIONRESULTMessageIdentity() 14 | assert.NotNil(t, a) 15 | } 16 | 17 | type nasTypePDUSESSIONAUTHENTICATIONRESULTMessageIdentityMessageType struct { 18 | in uint8 19 | out uint8 20 | } 21 | 22 | var nasTypePDUSESSIONAUTHENTICATIONRESULTMessageIdentityMessageTypeTable = []nasTypePDUSESSIONAUTHENTICATIONRESULTMessageIdentityMessageType{ 23 | {nas.MsgTypePDUSessionAuthenticationResult, nas.MsgTypePDUSessionAuthenticationResult}, 24 | } 25 | 26 | func TestNasTypeGetSetPDUSESSIONAUTHENTICATIONRESULTMessageIdentityMessageType(t *testing.T) { 27 | a := nasType.NewPDUSESSIONAUTHENTICATIONRESULTMessageIdentity() 28 | for _, table := range nasTypePDUSESSIONAUTHENTICATIONRESULTMessageIdentityMessageTypeTable { 29 | a.SetMessageType(table.in) 30 | assert.Equal(t, table.out, a.GetMessageType()) 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /nasType/NAS_PDUSESSIONESTABLISHMENTREQUESTMessageIdentity_test.go: -------------------------------------------------------------------------------- 1 | package nasType_test 2 | 3 | import ( 4 | "testing" 5 | 6 | "github.com/stretchr/testify/assert" 7 | 8 | "github.com/free5gc/nas" 9 | "github.com/free5gc/nas/nasType" 10 | ) 11 | 12 | func TestNasTypeNewPDUSESSIONESTABLISHMENTREQUESTMessageIdentity(t *testing.T) { 13 | a := nasType.NewPDUSESSIONESTABLISHMENTREQUESTMessageIdentity() 14 | assert.NotNil(t, a) 15 | } 16 | 17 | type nasTypePDUSESSIONESTABLISHMENTREQUESTMessageIdentityMessageType struct { 18 | in uint8 19 | out uint8 20 | } 21 | 22 | var nasTypePDUSESSIONESTABLISHMENTREQUESTMessageIdentityMessageTypeTable = []nasTypePDUSESSIONESTABLISHMENTREQUESTMessageIdentityMessageType{ 23 | {nas.MsgTypePDUSessionEstablishmentRequest, nas.MsgTypePDUSessionEstablishmentRequest}, 24 | } 25 | 26 | func TestNasTypeGetSetPDUSESSIONESTABLISHMENTREQUESTMessageIdentityMessageType(t *testing.T) { 27 | a := nasType.NewPDUSESSIONESTABLISHMENTREQUESTMessageIdentity() 28 | for _, table := range nasTypePDUSESSIONESTABLISHMENTREQUESTMessageIdentityMessageTypeTable { 29 | a.SetMessageType(table.in) 30 | assert.Equal(t, table.out, a.GetMessageType()) 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /nasType/NAS_PDUSESSIONMODIFICATIONCOMPLETEMessageIdentity_test.go: -------------------------------------------------------------------------------- 1 | package nasType_test 2 | 3 | import ( 4 | "testing" 5 | 6 | "github.com/stretchr/testify/assert" 7 | 8 | "github.com/free5gc/nas" 9 | "github.com/free5gc/nas/nasType" 10 | ) 11 | 12 | func TestNasTypeNewPDUSESSIONMODIFICATIONCOMPLETEMessageIdentity(t *testing.T) { 13 | a := nasType.NewPDUSESSIONMODIFICATIONCOMPLETEMessageIdentity() 14 | assert.NotNil(t, a) 15 | } 16 | 17 | type nasTypePDUSESSIONMODIFICATIONCOMPLETEMessageIdentityMessageType struct { 18 | in uint8 19 | out uint8 20 | } 21 | 22 | var nasTypePDUSESSIONMODIFICATIONCOMPLETEMessageIdentityMessageTypeTable = []nasTypePDUSESSIONMODIFICATIONCOMPLETEMessageIdentityMessageType{ 23 | {nas.MsgTypePDUSessionModificationComplete, nas.MsgTypePDUSessionModificationComplete}, 24 | } 25 | 26 | func TestNasTypeGetSetPDUSESSIONMODIFICATIONCOMPLETEMessageIdentityMessageType(t *testing.T) { 27 | a := nasType.NewPDUSESSIONMODIFICATIONCOMPLETEMessageIdentity() 28 | for _, table := range nasTypePDUSESSIONMODIFICATIONCOMPLETEMessageIdentityMessageTypeTable { 29 | a.SetMessageType(table.in) 30 | assert.Equal(t, table.out, a.GetMessageType()) 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /nasType/NAS_RequestType.go: -------------------------------------------------------------------------------- 1 | package nasType 2 | 3 | // RequestType 9.11.3.47 4 | // Iei Row, sBit, len = [0, 0], 8 , 4 5 | // RequestTypeValue Row, sBit, len = [0, 0], 3 , 3 6 | type RequestType struct { 7 | Octet uint8 8 | } 9 | 10 | func NewRequestType(iei uint8) (requestType *RequestType) { 11 | requestType = &RequestType{} 12 | requestType.SetIei(iei) 13 | return requestType 14 | } 15 | 16 | // RequestType 9.11.3.47 17 | // Iei Row, sBit, len = [0, 0], 8 , 4 18 | func (a *RequestType) GetIei() (iei uint8) { 19 | return a.Octet & GetBitMask(8, 4) >> (4) 20 | } 21 | 22 | // RequestType 9.11.3.47 23 | // Iei Row, sBit, len = [0, 0], 8 , 4 24 | func (a *RequestType) SetIei(iei uint8) { 25 | a.Octet = (a.Octet & 15) + ((iei & 15) << 4) 26 | } 27 | 28 | // RequestType 9.11.3.47 29 | // RequestTypeValue Row, sBit, len = [0, 0], 3 , 3 30 | func (a *RequestType) GetRequestTypeValue() (requestTypeValue uint8) { 31 | return a.Octet & GetBitMask(3, 0) 32 | } 33 | 34 | // RequestType 9.11.3.47 35 | // RequestTypeValue Row, sBit, len = [0, 0], 3 , 3 36 | func (a *RequestType) SetRequestTypeValue(requestTypeValue uint8) { 37 | a.Octet = (a.Octet & 248) + (requestTypeValue & 7) 38 | } 39 | -------------------------------------------------------------------------------- /nasType/NAS_PduSessionID2Value.go: -------------------------------------------------------------------------------- 1 | package nasType 2 | 3 | // PduSessionID2Value 9.11.3.41 4 | // PduSessionID2Value Row, sBit, len = [0, 0], 8 , 8 5 | type PduSessionID2Value struct { 6 | Iei uint8 7 | Octet uint8 8 | } 9 | 10 | func NewPduSessionID2Value(iei uint8) (pduSessionID2Value *PduSessionID2Value) { 11 | pduSessionID2Value = &PduSessionID2Value{} 12 | pduSessionID2Value.SetIei(iei) 13 | return pduSessionID2Value 14 | } 15 | 16 | // PduSessionID2Value 9.11.3.41 17 | // Iei Row, sBit, len = [], 8, 8 18 | func (a *PduSessionID2Value) GetIei() (iei uint8) { 19 | return a.Iei 20 | } 21 | 22 | // PduSessionID2Value 9.11.3.41 23 | // Iei Row, sBit, len = [], 8, 8 24 | func (a *PduSessionID2Value) SetIei(iei uint8) { 25 | a.Iei = iei 26 | } 27 | 28 | // PduSessionID2Value 9.11.3.41 29 | // PduSessionID2Value Row, sBit, len = [0, 0], 8 , 8 30 | func (a *PduSessionID2Value) GetPduSessionID2Value() (pduSessionID2Value uint8) { 31 | return a.Octet 32 | } 33 | 34 | // PduSessionID2Value 9.11.3.41 35 | // PduSessionID2Value Row, sBit, len = [0, 0], 8 , 8 36 | func (a *PduSessionID2Value) SetPduSessionID2Value(pduSessionID2Value uint8) { 37 | a.Octet = pduSessionID2Value 38 | } 39 | -------------------------------------------------------------------------------- /nasType/NAS_PDUSESSIONAUTHENTICATIONCOMMANDMessageIdentity_test.go: -------------------------------------------------------------------------------- 1 | package nasType_test 2 | 3 | import ( 4 | "testing" 5 | 6 | "github.com/stretchr/testify/assert" 7 | 8 | "github.com/free5gc/nas" 9 | "github.com/free5gc/nas/nasType" 10 | ) 11 | 12 | func TestNasTypeNewPDUSESSIONAUTHENTICATIONCOMMANDMessageIdentity(t *testing.T) { 13 | a := nasType.NewPDUSESSIONAUTHENTICATIONCOMMANDMessageIdentity() 14 | assert.NotNil(t, a) 15 | } 16 | 17 | type nasTypePDUSESSIONAUTHENTICATIONCOMMANDMessageIdentityMessageType struct { 18 | in uint8 19 | out uint8 20 | } 21 | 22 | var nasTypePDUSESSIONAUTHENTICATIONCOMMANDMessageIdentityMessageTypeTable = []nasTypePDUSESSIONAUTHENTICATIONCOMMANDMessageIdentityMessageType{ 23 | {nas.MsgTypePDUSessionAuthenticationCommand, nas.MsgTypePDUSessionAuthenticationCommand}, 24 | } 25 | 26 | func TestNasTypeGetSetPDUSESSIONAUTHENTICATIONCOMMANDMessageIdentityMessageType(t *testing.T) { 27 | a := nasType.NewPDUSESSIONAUTHENTICATIONCOMMANDMessageIdentity() 28 | for _, table := range nasTypePDUSESSIONAUTHENTICATIONCOMMANDMessageIdentityMessageTypeTable { 29 | a.SetMessageType(table.in) 30 | assert.Equal(t, table.out, a.GetMessageType()) 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /nasType/NAS_SpareHalfOctetAndSecurityHeaderType_test.go: -------------------------------------------------------------------------------- 1 | package nasType_test 2 | 3 | import ( 4 | "testing" 5 | 6 | "github.com/stretchr/testify/assert" 7 | 8 | "github.com/free5gc/nas/nasType" 9 | ) 10 | 11 | func TestNasTypeSpareHalfOctetAndSecurityHeaderType(t *testing.T) { 12 | a := nasType.NewSpareHalfOctetAndSecurityHeaderType() 13 | assert.NotNil(t, a) 14 | } 15 | 16 | type nasTypeSecurityHeaderTypeAndSpareHalfOctetData struct { 17 | inSecurityHeader uint8 18 | inSpareHalfOctet uint8 19 | outSecurityHeader uint8 20 | outSpareHalfOctet uint8 21 | } 22 | 23 | var nasTypeSecurityHeaderTypeAndSpareHalfOctetTable = []nasTypeSecurityHeaderTypeAndSpareHalfOctetData{ 24 | {0x8, 0x1, 0x8, 0x01}, 25 | } 26 | 27 | func TestNasTypeGetSetSpareHalfOctetAndSecurityHeaderType(t *testing.T) { 28 | a := nasType.NewSpareHalfOctetAndSecurityHeaderType() 29 | for _, table := range nasTypeSecurityHeaderTypeAndSpareHalfOctetTable { 30 | a.SetSecurityHeaderType(table.inSecurityHeader) 31 | assert.Equal(t, table.outSecurityHeader, a.GetSecurityHeaderType()) 32 | a.SetSpareHalfOctet(table.inSpareHalfOctet) 33 | assert.Equal(t, table.outSpareHalfOctet, a.GetSpareHalfOctet()) 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /nasType/NAS_PDUSESSIONAUTHENTICATIONCOMPLETEMessageIdentity_test.go: -------------------------------------------------------------------------------- 1 | package nasType_test 2 | 3 | import ( 4 | "testing" 5 | 6 | "github.com/stretchr/testify/assert" 7 | 8 | "github.com/free5gc/nas" 9 | "github.com/free5gc/nas/nasType" 10 | ) 11 | 12 | func TestNasTypeNewPDUSESSIONAUTHENTICATIONCOMPLETEMessageIdentity(t *testing.T) { 13 | a := nasType.NewPDUSESSIONAUTHENTICATIONCOMPLETEMessageIdentity() 14 | assert.NotNil(t, a) 15 | } 16 | 17 | type nasTypePDUSESSIONAUTHENTICATIONCOMPLETEMessageIdentityMessageType struct { 18 | in uint8 19 | out uint8 20 | } 21 | 22 | var nasTypePDUSESSIONAUTHENTICATIONCOMPLETEMessageIdentityMessageTypeTable = []nasTypePDUSESSIONAUTHENTICATIONCOMPLETEMessageIdentityMessageType{ 23 | {nas.MsgTypePDUSessionAuthenticationComplete, nas.MsgTypePDUSessionAuthenticationComplete}, 24 | } 25 | 26 | func TestNasTypeGetSetPDUSESSIONAUTHENTICATIONCOMPLETEMessageIdentityMessageType(t *testing.T) { 27 | a := nasType.NewPDUSESSIONAUTHENTICATIONCOMPLETEMessageIdentity() 28 | for _, table := range nasTypePDUSESSIONAUTHENTICATIONCOMPLETEMessageIdentityMessageTypeTable { 29 | a.SetMessageType(table.in) 30 | assert.Equal(t, table.out, a.GetMessageType()) 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /nasType/NAS_PTI_test.go: -------------------------------------------------------------------------------- 1 | package nasType_test 2 | 3 | import ( 4 | "testing" 5 | 6 | "github.com/stretchr/testify/assert" 7 | 8 | "github.com/free5gc/nas/nasType" 9 | ) 10 | 11 | func TestNasTypeNewPTI(t *testing.T) { 12 | a := nasType.NewPTI() 13 | assert.NotNil(t, a) 14 | } 15 | 16 | type nasTypePTI struct { 17 | in uint8 18 | out uint8 19 | } 20 | 21 | var nasTypePTITable = []nasTypePTI{ 22 | {0x03, 0x03}, 23 | } 24 | 25 | func TestNasTypePTIGetSetPDUSessionIdentity(t *testing.T) { 26 | a := nasType.NewPTI() 27 | for _, table := range nasTypePTITable { 28 | a.SetPTI(table.in) 29 | assert.Equal(t, table.out, a.GetPTI()) 30 | } 31 | } 32 | 33 | type PTITestDataTemplate struct { 34 | in nasType.PTI 35 | out nasType.PTI 36 | } 37 | 38 | var PTITestData = []nasType.PTI{ 39 | {0x03}, 40 | } 41 | 42 | var PTIExpectedTestData = []nasType.PTI{ 43 | {0x03}, 44 | } 45 | 46 | var PTITable = []PTITestDataTemplate{ 47 | {PTITestData[0], PTIExpectedTestData[0]}, 48 | } 49 | 50 | func TestNasTypePTI(t *testing.T) { 51 | for _, table := range PTITable { 52 | 53 | a := nasType.NewPTI() 54 | 55 | a.SetPTI(table.in.GetPTI()) 56 | assert.Equal(t, table.out.GetPTI(), a.GetPTI()) 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /internal/tools/extract.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python3 2 | 3 | import zipfile 4 | import docx 5 | import csv 6 | from docx.oxml import CT_P 7 | from docx.text.paragraph import Paragraph 8 | from docx.oxml.table import CT_Tbl 9 | from docx.table import _Cell, Table 10 | 11 | with zipfile.ZipFile('24501-f70.zip') as zf: 12 | with zf.open('24501-f70.docx') as inf: 13 | with open('spec.csv', 'w', encoding='utf8', newline='') as outf: 14 | csvw = csv.writer(outf) 15 | doc = docx.Document(inf) 16 | parent = doc._body._body 17 | prev = None 18 | for c in parent.iterchildren(): 19 | if isinstance(c, CT_P): 20 | prev = Paragraph(c, parent) 21 | elif isinstance(c, CT_Tbl): 22 | tab = Table(c, parent) 23 | if isinstance(prev, Paragraph): 24 | csvw.writerow([prev.text]) 25 | for row in tab.rows: 26 | crow = [] 27 | for cell in row.cells: 28 | crow.append(cell.text) 29 | csvw.writerow(crow) 30 | prev = tab 31 | -------------------------------------------------------------------------------- /nasType/NAS_IMEISVRequest.go: -------------------------------------------------------------------------------- 1 | package nasType 2 | 3 | // IMEISVRequest 9.11.3.28 4 | // Iei Row, sBit, len = [0, 0], 8 , 4 5 | // IMEISVRequestValue Row, sBit, len = [0, 0], 3 , 3 6 | type IMEISVRequest struct { 7 | Octet uint8 8 | } 9 | 10 | func NewIMEISVRequest(iei uint8) (iMEISVRequest *IMEISVRequest) { 11 | iMEISVRequest = &IMEISVRequest{} 12 | iMEISVRequest.SetIei(iei) 13 | return iMEISVRequest 14 | } 15 | 16 | // IMEISVRequest 9.11.3.28 17 | // Iei Row, sBit, len = [0, 0], 8 , 4 18 | func (a *IMEISVRequest) GetIei() (iei uint8) { 19 | return a.Octet & GetBitMask(8, 4) >> (4) 20 | } 21 | 22 | // IMEISVRequest 9.11.3.28 23 | // Iei Row, sBit, len = [0, 0], 8 , 4 24 | func (a *IMEISVRequest) SetIei(iei uint8) { 25 | a.Octet = (a.Octet & 15) + ((iei & 15) << 4) 26 | } 27 | 28 | // IMEISVRequest 9.11.3.28 29 | // IMEISVRequestValue Row, sBit, len = [0, 0], 3 , 3 30 | func (a *IMEISVRequest) GetIMEISVRequestValue() (iMEISVRequestValue uint8) { 31 | return a.Octet & GetBitMask(3, 0) 32 | } 33 | 34 | // IMEISVRequest 9.11.3.28 35 | // IMEISVRequestValue Row, sBit, len = [0, 0], 3 , 3 36 | func (a *IMEISVRequest) SetIMEISVRequestValue(iMEISVRequestValue uint8) { 37 | a.Octet = (a.Octet & 248) + (iMEISVRequestValue & 7) 38 | } 39 | -------------------------------------------------------------------------------- /nasType/NAS_PDUSESSIONMODIFICATIONCOMMANDREJECTMessageIdentity_test.go: -------------------------------------------------------------------------------- 1 | package nasType_test 2 | 3 | import ( 4 | "testing" 5 | 6 | "github.com/stretchr/testify/assert" 7 | 8 | "github.com/free5gc/nas" 9 | "github.com/free5gc/nas/nasType" 10 | ) 11 | 12 | func TestNasTypeNewPDUSESSIONMODIFICATIONCOMMANDREJECTMessageIdentity(t *testing.T) { 13 | a := nasType.NewPDUSESSIONMODIFICATIONCOMMANDREJECTMessageIdentity() 14 | assert.NotNil(t, a) 15 | } 16 | 17 | type nasTypePDUSESSIONMODIFICATIONCOMMANDREJECTMessageIdentityMessageType struct { 18 | in uint8 19 | out uint8 20 | } 21 | 22 | var nasTypePDUSESSIONMODIFICATIONCOMMANDREJECTMessageIdentityMessageTypeTable = []nasTypePDUSESSIONMODIFICATIONCOMMANDREJECTMessageIdentityMessageType{ 23 | {nas.MsgTypePDUSessionModificationCommandReject, nas.MsgTypePDUSessionModificationCommandReject}, 24 | } 25 | 26 | func TestNasTypeGetSetPDUSESSIONMODIFICATIONCOMMANDREJECTMessageIdentityMessageType(t *testing.T) { 27 | a := nasType.NewPDUSESSIONMODIFICATIONCOMMANDREJECTMessageIdentity() 28 | for _, table := range nasTypePDUSESSIONMODIFICATIONCOMMANDREJECTMessageIdentityMessageTypeTable { 29 | a.SetMessageType(table.in) 30 | assert.Equal(t, table.out, a.GetMessageType()) 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /internal/tools/generator/writer.go: -------------------------------------------------------------------------------- 1 | package generator 2 | 3 | import ( 4 | "bytes" 5 | "fmt" 6 | "go/format" 7 | "os" 8 | "strings" 9 | ) 10 | 11 | // Writer and formatter of golang source file 12 | type outputFile struct { 13 | *bytes.Buffer 14 | name string 15 | } 16 | 17 | func NewOutputFile(name string, pkgName string, imports []string) *outputFile { 18 | o := outputFile{ 19 | Buffer: new(bytes.Buffer), 20 | name: name, 21 | } 22 | 23 | fmt.Fprintln(o, "// Code generated by generate.sh, DO NOT EDIT.") 24 | fmt.Fprintln(o, "") 25 | fmt.Fprintf(o, "package %s\n", pkgName) 26 | fmt.Fprintln(o, "") 27 | fmt.Fprintf(o, "import (\n\n%s\n)\n", strings.Join(imports, "\n")) 28 | fmt.Fprintln(o, "") 29 | 30 | return &o 31 | } 32 | 33 | func (o *outputFile) Close() (err error) { 34 | // Output to file 35 | out, err := format.Source(o.Bytes()) 36 | if err != nil { 37 | return fmt.Errorf("format error: %w\n%s\n", err, o.String()) 38 | } 39 | fWrite, err := os.Create(o.name) 40 | if err != nil { 41 | return err 42 | } 43 | defer func() { 44 | errClose := fWrite.Close() 45 | if errClose != nil && err == nil { 46 | err = errClose 47 | } 48 | }() 49 | _, err = fWrite.Write(out) 50 | if err != nil { 51 | return err 52 | } 53 | return nil 54 | } 55 | -------------------------------------------------------------------------------- /nasType/NAS_ServiceTypeAndNgksi_test.go: -------------------------------------------------------------------------------- 1 | package nasType_test 2 | 3 | import ( 4 | "testing" 5 | 6 | "github.com/stretchr/testify/assert" 7 | 8 | "github.com/free5gc/nas/nasType" 9 | ) 10 | 11 | type nasTypeNgksiAndServiceTypeData struct { 12 | inTsc uint8 13 | outTsc uint8 14 | inNASKeySetIdentifier uint8 15 | outNASKeySetIdentifier uint8 16 | inServiceTypeValue uint8 17 | outServiceTypeValue uint8 18 | } 19 | 20 | var nasTypeNgksiAndServiceTypeTable = []nasTypeNgksiAndServiceTypeData{ 21 | {0x01, 0x01, 0x07, 0x07, 0x7, 0x07}, 22 | } 23 | 24 | func TestNasTypeNewServiceTypeAndNgksi(t *testing.T) { 25 | a := nasType.NewServiceTypeAndNgksi() 26 | assert.NotNil(t, a) 27 | } 28 | 29 | func TestNasTypeGetSetNgksiAndServiceType(t *testing.T) { 30 | a := nasType.NewServiceTypeAndNgksi() 31 | for _, table := range nasTypeNgksiAndServiceTypeTable { 32 | a.SetTSC(table.inTsc) 33 | assert.Equal(t, table.outTsc, a.GetTSC()) 34 | // a.SetTSC(0) 35 | a.SetNasKeySetIdentifiler(table.inNASKeySetIdentifier) 36 | assert.Equal(t, table.outNASKeySetIdentifier, a.GetNasKeySetIdentifiler()) 37 | 38 | a.SetServiceTypeValue(table.inServiceTypeValue) 39 | assert.Equal(t, table.outServiceTypeValue, a.GetServiceTypeValue()) 40 | 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /nasType/NAS_SpareHalfOctetAndNgksi_test.go: -------------------------------------------------------------------------------- 1 | package nasType_test 2 | 3 | import ( 4 | "testing" 5 | 6 | "github.com/stretchr/testify/assert" 7 | 8 | "github.com/free5gc/nas/nasType" 9 | ) 10 | 11 | type nasTypeNewNgksiAndSpareHalfOctetData struct { 12 | inTsc uint8 13 | outTsc uint8 14 | inNASKeySetIdentifier uint8 15 | outNASKeySetIdentifier uint8 16 | inSpareHalfOctet uint8 17 | outSpareHalfOctet uint8 18 | } 19 | 20 | var nasTypeNewNgksiAndSpareHalfOctetTable = []nasTypeNewNgksiAndSpareHalfOctetData{ 21 | {0x1, 0x1, 0x7, 0x7, 0x7, 0x7}, 22 | } 23 | 24 | func TestNasTypeNewSpareHalfOctetAndNgksi(t *testing.T) { 25 | a := nasType.NewSpareHalfOctetAndNgksi() 26 | assert.NotNil(t, a) 27 | } 28 | 29 | func TestNasTypeGetSetSpareHalfOctetAndNgksi(t *testing.T) { 30 | a := nasType.NewSpareHalfOctetAndNgksi() 31 | for _, table := range nasTypeNewNgksiAndSpareHalfOctetTable { 32 | a.SetTSC(table.inTsc) 33 | assert.Equal(t, table.outTsc, a.GetTSC()) 34 | a.SetNasKeySetIdentifiler(table.inNASKeySetIdentifier) 35 | assert.Equal(t, table.outNASKeySetIdentifier, a.GetNasKeySetIdentifiler()) 36 | 37 | a.SetSpareHalfOctet(table.inSpareHalfOctet) 38 | assert.Equal(t, table.outSpareHalfOctet, a.GetSpareHalfOctet()) 39 | 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /nasType/NAS_ABBA.go: -------------------------------------------------------------------------------- 1 | package nasType 2 | 3 | // ABBA 9.11.3.10 4 | // ABBAContents Row, sBit, len = [0, 0], 8 , INF 5 | type ABBA struct { 6 | Iei uint8 7 | Len uint8 8 | Buffer []uint8 9 | } 10 | 11 | func NewABBA(iei uint8) (aBBA *ABBA) { 12 | aBBA = &ABBA{} 13 | aBBA.SetIei(iei) 14 | return aBBA 15 | } 16 | 17 | // ABBA 9.11.3.10 18 | // Iei Row, sBit, len = [], 8, 8 19 | func (a *ABBA) GetIei() (iei uint8) { 20 | return a.Iei 21 | } 22 | 23 | // ABBA 9.11.3.10 24 | // Iei Row, sBit, len = [], 8, 8 25 | func (a *ABBA) SetIei(iei uint8) { 26 | a.Iei = iei 27 | } 28 | 29 | // ABBA 9.11.3.10 30 | // Len Row, sBit, len = [], 8, 8 31 | func (a *ABBA) GetLen() (len uint8) { 32 | return a.Len 33 | } 34 | 35 | // ABBA 9.11.3.10 36 | // Len Row, sBit, len = [], 8, 8 37 | func (a *ABBA) SetLen(len uint8) { 38 | a.Len = len 39 | a.Buffer = make([]uint8, a.Len) 40 | } 41 | 42 | // ABBA 9.11.3.10 43 | // ABBAContents Row, sBit, len = [0, 0], 8 , INF 44 | func (a *ABBA) GetABBAContents() (aBBAContents []uint8) { 45 | aBBAContents = make([]uint8, len(a.Buffer)) 46 | copy(aBBAContents, a.Buffer) 47 | return aBBAContents 48 | } 49 | 50 | // ABBA 9.11.3.10 51 | // ABBAContents Row, sBit, len = [0, 0], 8 , INF 52 | func (a *ABBA) SetABBAContents(aBBAContents []uint8) { 53 | copy(a.Buffer, aBBAContents) 54 | } 55 | -------------------------------------------------------------------------------- /nasType/NAS_T3346Value.go: -------------------------------------------------------------------------------- 1 | package nasType 2 | 3 | // T3346Value 9.11.2.4 4 | // GPRSTimer2Value Row, sBit, len = [0, 0], 8 , 8 5 | type T3346Value struct { 6 | Iei uint8 7 | Len uint8 8 | Octet uint8 9 | } 10 | 11 | func NewT3346Value(iei uint8) (t3346Value *T3346Value) { 12 | t3346Value = &T3346Value{} 13 | t3346Value.SetIei(iei) 14 | return t3346Value 15 | } 16 | 17 | // T3346Value 9.11.2.4 18 | // Iei Row, sBit, len = [], 8, 8 19 | func (a *T3346Value) GetIei() (iei uint8) { 20 | return a.Iei 21 | } 22 | 23 | // T3346Value 9.11.2.4 24 | // Iei Row, sBit, len = [], 8, 8 25 | func (a *T3346Value) SetIei(iei uint8) { 26 | a.Iei = iei 27 | } 28 | 29 | // T3346Value 9.11.2.4 30 | // Len Row, sBit, len = [], 8, 8 31 | func (a *T3346Value) GetLen() (len uint8) { 32 | return a.Len 33 | } 34 | 35 | // T3346Value 9.11.2.4 36 | // Len Row, sBit, len = [], 8, 8 37 | func (a *T3346Value) SetLen(len uint8) { 38 | a.Len = len 39 | } 40 | 41 | // T3346Value 9.11.2.4 42 | // GPRSTimer2Value Row, sBit, len = [0, 0], 8 , 8 43 | func (a *T3346Value) GetGPRSTimer2Value() (gPRSTimer2Value uint8) { 44 | return a.Octet 45 | } 46 | 47 | // T3346Value 9.11.2.4 48 | // GPRSTimer2Value Row, sBit, len = [0, 0], 8 , 8 49 | func (a *T3346Value) SetGPRSTimer2Value(gPRSTimer2Value uint8) { 50 | a.Octet = gPRSTimer2Value 51 | } 52 | -------------------------------------------------------------------------------- /nasType/NAS_T3502Value.go: -------------------------------------------------------------------------------- 1 | package nasType 2 | 3 | // T3502Value 9.11.2.4 4 | // GPRSTimer2Value Row, sBit, len = [0, 0], 8 , 8 5 | type T3502Value struct { 6 | Iei uint8 7 | Len uint8 8 | Octet uint8 9 | } 10 | 11 | func NewT3502Value(iei uint8) (t3502Value *T3502Value) { 12 | t3502Value = &T3502Value{} 13 | t3502Value.SetIei(iei) 14 | return t3502Value 15 | } 16 | 17 | // T3502Value 9.11.2.4 18 | // Iei Row, sBit, len = [], 8, 8 19 | func (a *T3502Value) GetIei() (iei uint8) { 20 | return a.Iei 21 | } 22 | 23 | // T3502Value 9.11.2.4 24 | // Iei Row, sBit, len = [], 8, 8 25 | func (a *T3502Value) SetIei(iei uint8) { 26 | a.Iei = iei 27 | } 28 | 29 | // T3502Value 9.11.2.4 30 | // Len Row, sBit, len = [], 8, 8 31 | func (a *T3502Value) GetLen() (len uint8) { 32 | return a.Len 33 | } 34 | 35 | // T3502Value 9.11.2.4 36 | // Len Row, sBit, len = [], 8, 8 37 | func (a *T3502Value) SetLen(len uint8) { 38 | a.Len = len 39 | } 40 | 41 | // T3502Value 9.11.2.4 42 | // GPRSTimer2Value Row, sBit, len = [0, 0], 8 , 8 43 | func (a *T3502Value) GetGPRSTimer2Value() (gPRSTimer2Value uint8) { 44 | return a.Octet 45 | } 46 | 47 | // T3502Value 9.11.2.4 48 | // GPRSTimer2Value Row, sBit, len = [0, 0], 8 , 8 49 | func (a *T3502Value) SetGPRSTimer2Value(gPRSTimer2Value uint8) { 50 | a.Octet = gPRSTimer2Value 51 | } 52 | -------------------------------------------------------------------------------- /security/parameters.go: -------------------------------------------------------------------------------- 1 | package security 2 | 3 | // TS 33.501 Annex A.8 Algorithm distinguisher For Knas_int Knas_enc 4 | const ( 5 | NNASEncAlg uint8 = 0x01 6 | NNASIntAlg uint8 = 0x02 7 | NRRCEncAlg uint8 = 0x03 8 | NRRCIntAlg uint8 = 0x04 9 | NUpEncAlg uint8 = 0x05 10 | NUpIntAlg uint8 = 0x06 11 | ) 12 | 13 | // TS 33.501 5.11.1.1 Algorithm identifier values For integrity algorithm 14 | const ( 15 | AlgIntegrity128NIA0 uint8 = 0x00 // NULL 16 | AlgIntegrity128NIA1 uint8 = 0x01 // 128-Snow3G 17 | AlgIntegrity128NIA2 uint8 = 0x02 // 128-AES 18 | AlgIntegrity128NIA3 uint8 = 0x03 // 128-ZUC 19 | ) 20 | 21 | // TS 33.501 5.11.1.1 Algorithm identifier values For ciphering algorithm 22 | const ( 23 | AlgCiphering128NEA0 uint8 = 0x00 // NULL 24 | AlgCiphering128NEA1 uint8 = 0x01 // 128-Snow3G 25 | AlgCiphering128NEA2 uint8 = 0x02 // 128-AES 26 | AlgCiphering128NEA3 uint8 = 0x03 // 128-ZUC 27 | ) 28 | 29 | // 1bit 30 | const ( 31 | DirectionUplink uint8 = 0x00 32 | DirectionDownlink uint8 = 0x01 33 | ) 34 | 35 | // 5bits 36 | const ( 37 | OnlyOneBearer uint8 = 0x00 38 | Bearer3GPP uint8 = 0x01 39 | BearerNon3GPP uint8 = 0x02 40 | ) 41 | 42 | // TS 33501 Annex A.0 Access type distinguisher For Kgnb Kn3iwf 43 | const ( 44 | AccessType3GPP uint8 = 0x01 45 | AccessTypeNon3GPP uint8 = 0x02 46 | ) 47 | -------------------------------------------------------------------------------- /nasType/NAS_NSSAIInclusionMode.go: -------------------------------------------------------------------------------- 1 | package nasType 2 | 3 | // NSSAIInclusionMode 9.11.3.37A 4 | // Iei Row, sBit, len = [0, 0], 8 , 4 5 | // NSSAIInclusionMode Row, sBit, len = [0, 0], 2 , 2 6 | type NSSAIInclusionMode struct { 7 | Octet uint8 8 | } 9 | 10 | func NewNSSAIInclusionMode(iei uint8) (nSSAIInclusionMode *NSSAIInclusionMode) { 11 | nSSAIInclusionMode = &NSSAIInclusionMode{} 12 | nSSAIInclusionMode.SetIei(iei) 13 | return nSSAIInclusionMode 14 | } 15 | 16 | // NSSAIInclusionMode 9.11.3.37A 17 | // Iei Row, sBit, len = [0, 0], 8 , 4 18 | func (a *NSSAIInclusionMode) GetIei() (iei uint8) { 19 | return a.Octet & GetBitMask(8, 4) >> (4) 20 | } 21 | 22 | // NSSAIInclusionMode 9.11.3.37A 23 | // Iei Row, sBit, len = [0, 0], 8 , 4 24 | func (a *NSSAIInclusionMode) SetIei(iei uint8) { 25 | a.Octet = (a.Octet & 15) + ((iei & 15) << 4) 26 | } 27 | 28 | // NSSAIInclusionMode 9.11.3.37A 29 | // NSSAIInclusionMode Row, sBit, len = [0, 0], 2 , 2 30 | func (a *NSSAIInclusionMode) GetNSSAIInclusionMode() (nSSAIInclusionMode uint8) { 31 | return a.Octet & GetBitMask(2, 0) 32 | } 33 | 34 | // NSSAIInclusionMode 9.11.3.37A 35 | // NSSAIInclusionMode Row, sBit, len = [0, 0], 2 , 2 36 | func (a *NSSAIInclusionMode) SetNSSAIInclusionMode(nSSAIInclusionMode uint8) { 37 | a.Octet = (a.Octet & 252) + (nSSAIInclusionMode & 3) 38 | } 39 | -------------------------------------------------------------------------------- /nasType/NAS_AuthenticationParameterRAND.go: -------------------------------------------------------------------------------- 1 | package nasType 2 | 3 | // AuthenticationParameterRAND 9.11.3.16 4 | // RANDValue Row, sBit, len = [0, 15], 8 , 128 5 | type AuthenticationParameterRAND struct { 6 | Iei uint8 7 | Octet [16]uint8 8 | } 9 | 10 | func NewAuthenticationParameterRAND(iei uint8) (authenticationParameterRAND *AuthenticationParameterRAND) { 11 | authenticationParameterRAND = &AuthenticationParameterRAND{} 12 | authenticationParameterRAND.SetIei(iei) 13 | return authenticationParameterRAND 14 | } 15 | 16 | // AuthenticationParameterRAND 9.11.3.16 17 | // Iei Row, sBit, len = [], 8, 8 18 | func (a *AuthenticationParameterRAND) GetIei() (iei uint8) { 19 | return a.Iei 20 | } 21 | 22 | // AuthenticationParameterRAND 9.11.3.16 23 | // Iei Row, sBit, len = [], 8, 8 24 | func (a *AuthenticationParameterRAND) SetIei(iei uint8) { 25 | a.Iei = iei 26 | } 27 | 28 | // AuthenticationParameterRAND 9.11.3.16 29 | // RANDValue Row, sBit, len = [0, 15], 8 , 128 30 | func (a *AuthenticationParameterRAND) GetRANDValue() (rANDValue [16]uint8) { 31 | copy(rANDValue[:], a.Octet[0:16]) 32 | return rANDValue 33 | } 34 | 35 | // AuthenticationParameterRAND 9.11.3.16 36 | // RANDValue Row, sBit, len = [0, 15], 8 , 128 37 | func (a *AuthenticationParameterRAND) SetRANDValue(rANDValue [16]uint8) { 38 | copy(a.Octet[0:16], rANDValue[:]) 39 | } 40 | -------------------------------------------------------------------------------- /uePolicyContainer/UePolicyContainer_ManageUEPolicyComplete.go: -------------------------------------------------------------------------------- 1 | package uePolicyContainer 2 | 3 | import ( 4 | "bytes" 5 | "encoding/binary" 6 | 7 | "github.com/free5gc/nas/nasType" 8 | ) 9 | 10 | type ManageUEPolicyComplete struct { 11 | nasType.PTI 12 | UePolicyDeliveryServiceMsgType 13 | } 14 | 15 | func NewManageUEPolicyComplete(msgType uint8) (manageUEPolicyComplete *ManageUEPolicyComplete) { 16 | manageUEPolicyComplete = &ManageUEPolicyComplete{} 17 | manageUEPolicyComplete.UePolicyDeliveryServiceMsgType.SetMessageIdentity(msgType) 18 | return manageUEPolicyComplete 19 | } 20 | 21 | func (m *ManageUEPolicyComplete) EncodeManageUEPolicyComplete(buffer *bytes.Buffer) error { 22 | if err := binary.Write(buffer, binary.BigEndian, m.PTI.Octet); err != nil { 23 | return err 24 | } 25 | if err := binary.Write(buffer, binary.BigEndian, m.UePolicyDeliveryServiceMsgType.Octet); err != nil { 26 | return err 27 | } 28 | return nil 29 | } 30 | 31 | func (m *ManageUEPolicyComplete) DecodeManageUEPolicyComplete(byteArray []byte) error { 32 | buffer := bytes.NewBuffer(byteArray) 33 | if err := binary.Read(buffer, binary.BigEndian, &m.PTI.Octet); err != nil { 34 | return err 35 | } 36 | if err := binary.Read(buffer, binary.BigEndian, &m.UePolicyDeliveryServiceMsgType.Octet); err != nil { 37 | return err 38 | } 39 | return nil 40 | } 41 | -------------------------------------------------------------------------------- /logger/logger.go: -------------------------------------------------------------------------------- 1 | package logger 2 | 3 | import ( 4 | "time" 5 | 6 | "github.com/sirupsen/logrus" 7 | formatter "github.com/tim-ywliu/nested-logrus-formatter" 8 | ) 9 | 10 | var ( 11 | log *logrus.Logger 12 | NasLog *logrus.Entry 13 | NasMsgLog *logrus.Entry 14 | ConvertLog *logrus.Entry 15 | SecurityLog *logrus.Entry 16 | ) 17 | 18 | func init() { 19 | log = logrus.New() 20 | log.SetReportCaller(false) 21 | 22 | log.Formatter = &formatter.Formatter{ 23 | TimestampFormat: time.RFC3339, 24 | TrimMessages: true, 25 | NoFieldsSpace: true, 26 | HideKeys: true, 27 | FieldsOrder: []string{"component", "category"}, 28 | } 29 | 30 | NasLog = log.WithFields(logrus.Fields{"component": "LIB", "category": "NAS"}) 31 | NasMsgLog = log.WithFields(logrus.Fields{"component": "NAS", "category": "Message"}) 32 | ConvertLog = log.WithFields(logrus.Fields{"component": "NAS", "category": "Convert"}) 33 | SecurityLog = log.WithFields(logrus.Fields{"component": "NAS", "category": "Security"}) 34 | } 35 | 36 | func GetLogger() *logrus.Logger { 37 | return log 38 | } 39 | 40 | func SetLogLevel(level logrus.Level) { 41 | log.SetLevel(level) 42 | NasLog.Infoln("set log level :", level) 43 | } 44 | 45 | func SetReportCaller(enable bool) { 46 | NasLog.Infoln("set report call :", enable) 47 | log.SetReportCaller(enable) 48 | } 49 | -------------------------------------------------------------------------------- /nasType/NAS_AlwaysonPDUSessionRequested.go: -------------------------------------------------------------------------------- 1 | package nasType 2 | 3 | // AlwaysonPDUSessionRequested 9.11.4.4 4 | // Iei Row, sBit, len = [0, 0], 8 , 4 5 | // APSR Row, sBit, len = [0, 0], 1 , 1 6 | type AlwaysonPDUSessionRequested struct { 7 | Octet uint8 8 | } 9 | 10 | func NewAlwaysonPDUSessionRequested(iei uint8) (alwaysonPDUSessionRequested *AlwaysonPDUSessionRequested) { 11 | alwaysonPDUSessionRequested = &AlwaysonPDUSessionRequested{} 12 | alwaysonPDUSessionRequested.SetIei(iei) 13 | return alwaysonPDUSessionRequested 14 | } 15 | 16 | // AlwaysonPDUSessionRequested 9.11.4.4 17 | // Iei Row, sBit, len = [0, 0], 8 , 4 18 | func (a *AlwaysonPDUSessionRequested) GetIei() (iei uint8) { 19 | return a.Octet & GetBitMask(8, 4) >> (4) 20 | } 21 | 22 | // AlwaysonPDUSessionRequested 9.11.4.4 23 | // Iei Row, sBit, len = [0, 0], 8 , 4 24 | func (a *AlwaysonPDUSessionRequested) SetIei(iei uint8) { 25 | a.Octet = (a.Octet & 15) + ((iei & 15) << 4) 26 | } 27 | 28 | // AlwaysonPDUSessionRequested 9.11.4.4 29 | // APSR Row, sBit, len = [0, 0], 1 , 1 30 | func (a *AlwaysonPDUSessionRequested) GetAPSR() (aPSR uint8) { 31 | return a.Octet & GetBitMask(1, 0) 32 | } 33 | 34 | // AlwaysonPDUSessionRequested 9.11.4.4 35 | // APSR Row, sBit, len = [0, 0], 1 , 1 36 | func (a *AlwaysonPDUSessionRequested) SetAPSR(aPSR uint8) { 37 | a.Octet = (a.Octet & 254) + (aPSR & 1) 38 | } 39 | -------------------------------------------------------------------------------- /nasType/NAS_AlwaysonPDUSessionIndication.go: -------------------------------------------------------------------------------- 1 | package nasType 2 | 3 | // AlwaysonPDUSessionIndication 9.11.4.3 4 | // Iei Row, sBit, len = [0, 0], 8 , 4 5 | // APSI Row, sBit, len = [0, 0], 1 , 1 6 | type AlwaysonPDUSessionIndication struct { 7 | Octet uint8 8 | } 9 | 10 | func NewAlwaysonPDUSessionIndication(iei uint8) (alwaysonPDUSessionIndication *AlwaysonPDUSessionIndication) { 11 | alwaysonPDUSessionIndication = &AlwaysonPDUSessionIndication{} 12 | alwaysonPDUSessionIndication.SetIei(iei) 13 | return alwaysonPDUSessionIndication 14 | } 15 | 16 | // AlwaysonPDUSessionIndication 9.11.4.3 17 | // Iei Row, sBit, len = [0, 0], 8 , 4 18 | func (a *AlwaysonPDUSessionIndication) GetIei() (iei uint8) { 19 | return a.Octet & GetBitMask(8, 4) >> (4) 20 | } 21 | 22 | // AlwaysonPDUSessionIndication 9.11.4.3 23 | // Iei Row, sBit, len = [0, 0], 8 , 4 24 | func (a *AlwaysonPDUSessionIndication) SetIei(iei uint8) { 25 | a.Octet = (a.Octet & 15) + ((iei & 15) << 4) 26 | } 27 | 28 | // AlwaysonPDUSessionIndication 9.11.4.3 29 | // APSI Row, sBit, len = [0, 0], 1 , 1 30 | func (a *AlwaysonPDUSessionIndication) GetAPSI() (aPSI uint8) { 31 | return a.Octet & GetBitMask(1, 0) 32 | } 33 | 34 | // AlwaysonPDUSessionIndication 9.11.4.3 35 | // APSI Row, sBit, len = [0, 0], 1 , 1 36 | func (a *AlwaysonPDUSessionIndication) SetAPSI(aPSI uint8) { 37 | a.Octet = (a.Octet & 254) + (aPSI & 1) 38 | } 39 | -------------------------------------------------------------------------------- /nasConvert/ServiceAreaList.go: -------------------------------------------------------------------------------- 1 | package nasConvert 2 | 3 | import ( 4 | "encoding/hex" 5 | 6 | "github.com/free5gc/nas/logger" 7 | "github.com/free5gc/nas/nasMessage" 8 | "github.com/free5gc/openapi/models" 9 | ) 10 | 11 | // TS 24.501 9.11.3.49 12 | func PartialServiceAreaListToNas(plmnID models.PlmnId, serviceAreaRestriction models.ServiceAreaRestriction) []byte { 13 | var partialServiceAreaList []byte 14 | var allowedType uint8 15 | 16 | if serviceAreaRestriction.RestrictionType == models.RestrictionType_ALLOWED_AREAS { 17 | allowedType = nasMessage.AllowedTypeAllowedArea 18 | } else { 19 | allowedType = nasMessage.AllowedTypeNonAllowedArea 20 | } 21 | 22 | numOfElements := uint8(len(serviceAreaRestriction.Areas)) 23 | 24 | firstByte := (allowedType<<7)&0x80 + numOfElements // only support TypeOfList '00' now 25 | plmnIDNas := PlmnIDToNas(plmnID) 26 | 27 | partialServiceAreaList = append(partialServiceAreaList, firstByte) 28 | partialServiceAreaList = append(partialServiceAreaList, plmnIDNas...) 29 | 30 | for _, area := range serviceAreaRestriction.Areas { 31 | for _, tac := range area.Tacs { 32 | if tacBytes, err := hex.DecodeString(tac); err != nil { 33 | logger.ConvertLog.Warnf("Decode tac failed: %+v", err) 34 | } else { 35 | partialServiceAreaList = append(partialServiceAreaList, tacBytes...) 36 | } 37 | } 38 | } 39 | return partialServiceAreaList 40 | } 41 | -------------------------------------------------------------------------------- /nasConvert/PDUSessionType.go: -------------------------------------------------------------------------------- 1 | package nasConvert 2 | 3 | import ( 4 | "github.com/free5gc/nas/nasMessage" 5 | "github.com/free5gc/openapi/models" 6 | ) 7 | 8 | func PDUSessionTypeToModels(nasPduSessType uint8) (pduSessType models.PduSessionType) { 9 | switch nasPduSessType { 10 | case nasMessage.PDUSessionTypeIPv4: 11 | pduSessType = models.PduSessionType_IPV4 12 | case nasMessage.PDUSessionTypeIPv6: 13 | pduSessType = models.PduSessionType_IPV6 14 | case nasMessage.PDUSessionTypeIPv4IPv6: 15 | pduSessType = models.PduSessionType_IPV4_V6 16 | case nasMessage.PDUSessionTypeUnstructured: 17 | pduSessType = models.PduSessionType_UNSTRUCTURED 18 | case nasMessage.PDUSessionTypeEthernet: 19 | pduSessType = models.PduSessionType_ETHERNET 20 | } 21 | 22 | return 23 | } 24 | 25 | func ModelsToPDUSessionType(pduSessType models.PduSessionType) (nasPduSessType uint8) { 26 | switch pduSessType { 27 | case models.PduSessionType_IPV4: 28 | nasPduSessType = nasMessage.PDUSessionTypeIPv4 29 | case models.PduSessionType_IPV6: 30 | nasPduSessType = nasMessage.PDUSessionTypeIPv6 31 | case models.PduSessionType_IPV4_V6: 32 | nasPduSessType = nasMessage.PDUSessionTypeIPv4IPv6 33 | case models.PduSessionType_UNSTRUCTURED: 34 | nasPduSessType = nasMessage.PDUSessionTypeUnstructured 35 | case models.PduSessionType_ETHERNET: 36 | nasPduSessType = nasMessage.PDUSessionTypeEthernet 37 | } 38 | return 39 | } 40 | -------------------------------------------------------------------------------- /nasType/NAS_EAPMessage.go: -------------------------------------------------------------------------------- 1 | package nasType 2 | 3 | // EAPMessage 9.11.2.2 4 | // EAPMessage Row, sBit, len = [0, 0], 8 , INF 5 | type EAPMessage struct { 6 | Iei uint8 7 | Len uint16 8 | Buffer []uint8 9 | } 10 | 11 | func NewEAPMessage(iei uint8) (eAPMessage *EAPMessage) { 12 | eAPMessage = &EAPMessage{} 13 | eAPMessage.SetIei(iei) 14 | return eAPMessage 15 | } 16 | 17 | // EAPMessage 9.11.2.2 18 | // Iei Row, sBit, len = [], 8, 8 19 | func (a *EAPMessage) GetIei() (iei uint8) { 20 | return a.Iei 21 | } 22 | 23 | // EAPMessage 9.11.2.2 24 | // Iei Row, sBit, len = [], 8, 8 25 | func (a *EAPMessage) SetIei(iei uint8) { 26 | a.Iei = iei 27 | } 28 | 29 | // EAPMessage 9.11.2.2 30 | // Len Row, sBit, len = [], 8, 16 31 | func (a *EAPMessage) GetLen() (len uint16) { 32 | return a.Len 33 | } 34 | 35 | // EAPMessage 9.11.2.2 36 | // Len Row, sBit, len = [], 8, 16 37 | func (a *EAPMessage) SetLen(len uint16) { 38 | a.Len = len 39 | a.Buffer = make([]uint8, a.Len) 40 | } 41 | 42 | // EAPMessage 9.11.2.2 43 | // EAPMessage Row, sBit, len = [0, 0], 8 , INF 44 | func (a *EAPMessage) GetEAPMessage() (eAPMessage []uint8) { 45 | eAPMessage = make([]uint8, len(a.Buffer)) 46 | copy(eAPMessage, a.Buffer) 47 | return eAPMessage 48 | } 49 | 50 | // EAPMessage 9.11.2.2 51 | // EAPMessage Row, sBit, len = [0, 0], 8 , INF 52 | func (a *EAPMessage) SetEAPMessage(eAPMessage []uint8) { 53 | copy(a.Buffer, eAPMessage) 54 | } 55 | -------------------------------------------------------------------------------- /nasConvert/TaiList.go: -------------------------------------------------------------------------------- 1 | package nasConvert 2 | 3 | import ( 4 | "encoding/hex" 5 | "reflect" 6 | 7 | "github.com/free5gc/nas/logger" 8 | "github.com/free5gc/openapi/models" 9 | ) 10 | 11 | // TS 24.501 9.11.3.9 12 | func TaiListToNas(taiList []models.Tai) []uint8 { 13 | var taiListNas []uint8 14 | typeOfList := 0x00 15 | 16 | plmnId := taiList[0].PlmnId 17 | for _, tai := range taiList { 18 | if !reflect.DeepEqual(plmnId, tai.PlmnId) { 19 | typeOfList = 0x02 20 | } 21 | } 22 | 23 | numOfElementsNas := uint8(len(taiList)) - 1 24 | 25 | taiListNas = append(taiListNas, uint8(typeOfList<<5)+numOfElementsNas) 26 | 27 | switch typeOfList { 28 | case 0x00: 29 | plmnNas := PlmnIDToNas(*plmnId) 30 | taiListNas = append(taiListNas, plmnNas...) 31 | 32 | for _, tai := range taiList { 33 | if tacBytes, err := hex.DecodeString(tai.Tac); err != nil { 34 | logger.ConvertLog.Warnf("Decode tac failed: %+v", err) 35 | } else { 36 | taiListNas = append(taiListNas, tacBytes...) 37 | } 38 | } 39 | case 0x02: 40 | for _, tai := range taiList { 41 | plmnNas := PlmnIDToNas(*tai.PlmnId) 42 | if tacBytes, err := hex.DecodeString(tai.Tac); err != nil { 43 | logger.ConvertLog.Warnf("Decode tac failed: %+v", err) 44 | } else { 45 | taiListNas = append(taiListNas, plmnNas...) 46 | taiListNas = append(taiListNas, tacBytes...) 47 | } 48 | } 49 | } 50 | 51 | return taiListNas 52 | } 53 | -------------------------------------------------------------------------------- /nasType/NAS_SSCMode.go: -------------------------------------------------------------------------------- 1 | package nasType 2 | 3 | // SSCMode 9.11.4.16 4 | // Iei Row, sBit, len = [0, 0], 8 , 4 5 | // Spare Row, sBit, len = [0, 0], 4 , 1 6 | // SSCMode Row, sBit, len = [0, 0], 3 , 3 7 | type SSCMode struct { 8 | Octet uint8 9 | } 10 | 11 | func NewSSCMode(iei uint8) (sSCMode *SSCMode) { 12 | sSCMode = &SSCMode{} 13 | sSCMode.SetIei(iei) 14 | return sSCMode 15 | } 16 | 17 | // SSCMode 9.11.4.16 18 | // Iei Row, sBit, len = [0, 0], 8 , 4 19 | func (a *SSCMode) GetIei() (iei uint8) { 20 | return a.Octet & GetBitMask(8, 4) >> (4) 21 | } 22 | 23 | // SSCMode 9.11.4.16 24 | // Iei Row, sBit, len = [0, 0], 8 , 4 25 | func (a *SSCMode) SetIei(iei uint8) { 26 | a.Octet = (a.Octet & 15) + ((iei & 15) << 4) 27 | } 28 | 29 | // SSCMode 9.11.4.16 30 | // Spare Row, sBit, len = [0, 0], 4 , 1 31 | func (a *SSCMode) GetSpare() (spare uint8) { 32 | return a.Octet & GetBitMask(4, 3) >> (3) 33 | } 34 | 35 | // SSCMode 9.11.4.16 36 | // Spare Row, sBit, len = [0, 0], 4 , 1 37 | func (a *SSCMode) SetSpare(spare uint8) { 38 | a.Octet = (a.Octet & 247) + ((spare & 1) << 3) 39 | } 40 | 41 | // SSCMode 9.11.4.16 42 | // SSCMode Row, sBit, len = [0, 0], 3 , 3 43 | func (a *SSCMode) GetSSCMode() (sSCMode uint8) { 44 | return a.Octet & GetBitMask(3, 0) 45 | } 46 | 47 | // SSCMode 9.11.4.16 48 | // SSCMode Row, sBit, len = [0, 0], 3 , 3 49 | func (a *SSCMode) SetSSCMode(sSCMode uint8) { 50 | a.Octet = (a.Octet & 248) + (sSCMode & 7) 51 | } 52 | -------------------------------------------------------------------------------- /nasType/NAS_SequenceNumber_test.go: -------------------------------------------------------------------------------- 1 | package nasType_test 2 | 3 | import ( 4 | "testing" 5 | 6 | "github.com/stretchr/testify/assert" 7 | 8 | "github.com/free5gc/nas/nasType" 9 | ) 10 | 11 | func TestNasTypeNewSequenceNumber(t *testing.T) { 12 | a := nasType.NewSequenceNumber() 13 | assert.NotNil(t, a) 14 | } 15 | 16 | type nasTypeSequenceNumber struct { 17 | in uint8 18 | out uint8 19 | } 20 | 21 | var nasTypeSequenceNumberTable = []nasTypeSequenceNumber{ 22 | {0x03, 0x03}, 23 | } 24 | 25 | func TestNasTypeSequenceNumberGetSetSQN(t *testing.T) { 26 | a := nasType.NewSequenceNumber() 27 | for _, table := range nasTypeSequenceNumberTable { 28 | a.SetSQN(table.in) 29 | assert.Equal(t, table.out, a.GetSQN()) 30 | } 31 | } 32 | 33 | type SequenceNumberTestDataTemplate struct { 34 | in nasType.SequenceNumber 35 | out nasType.SequenceNumber 36 | } 37 | 38 | var SequenceNumberTestData = []nasType.SequenceNumber{ 39 | {0x03}, 40 | } 41 | 42 | var SequenceNumberExpectedTestData = []nasType.SequenceNumber{ 43 | {0x03}, 44 | } 45 | 46 | var SequenceNumberTable = []SequenceNumberTestDataTemplate{ 47 | {SequenceNumberTestData[0], SequenceNumberExpectedTestData[0]}, 48 | } 49 | 50 | func TestNasTypeSequenceNumber(t *testing.T) { 51 | for _, table := range SequenceNumberTable { 52 | 53 | a := nasType.NewSequenceNumber() 54 | 55 | a.SetSQN(table.in.GetSQN()) 56 | assert.Equal(t, table.out.GetSQN(), a.GetSQN()) 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /nasType/NAS_RQTimerValue.go: -------------------------------------------------------------------------------- 1 | package nasType 2 | 3 | // RQTimerValue 9.11.2.3 4 | // Unit Row, sBit, len = [0, 0], 8 , 3 5 | // TimerValue Row, sBit, len = [0, 0], 5 , 5 6 | type RQTimerValue struct { 7 | Iei uint8 8 | Octet uint8 9 | } 10 | 11 | func NewRQTimerValue(iei uint8) (rQTimerValue *RQTimerValue) { 12 | rQTimerValue = &RQTimerValue{} 13 | rQTimerValue.SetIei(iei) 14 | return rQTimerValue 15 | } 16 | 17 | // RQTimerValue 9.11.2.3 18 | // Iei Row, sBit, len = [], 8, 8 19 | func (a *RQTimerValue) GetIei() (iei uint8) { 20 | return a.Iei 21 | } 22 | 23 | // RQTimerValue 9.11.2.3 24 | // Iei Row, sBit, len = [], 8, 8 25 | func (a *RQTimerValue) SetIei(iei uint8) { 26 | a.Iei = iei 27 | } 28 | 29 | // RQTimerValue 9.11.2.3 30 | // Unit Row, sBit, len = [0, 0], 8 , 3 31 | func (a *RQTimerValue) GetUnit() (unit uint8) { 32 | return a.Octet & GetBitMask(8, 5) >> (5) 33 | } 34 | 35 | // RQTimerValue 9.11.2.3 36 | // Unit Row, sBit, len = [0, 0], 8 , 3 37 | func (a *RQTimerValue) SetUnit(unit uint8) { 38 | a.Octet = (a.Octet & 31) + ((unit & 7) << 5) 39 | } 40 | 41 | // RQTimerValue 9.11.2.3 42 | // TimerValue Row, sBit, len = [0, 0], 5 , 5 43 | func (a *RQTimerValue) GetTimerValue() (timerValue uint8) { 44 | return a.Octet & GetBitMask(5, 0) 45 | } 46 | 47 | // RQTimerValue 9.11.2.3 48 | // TimerValue Row, sBit, len = [0, 0], 5 , 5 49 | func (a *RQTimerValue) SetTimerValue(timerValue uint8) { 50 | a.Octet = (a.Octet & 224) + (timerValue & 31) 51 | } 52 | -------------------------------------------------------------------------------- /nasType/NAS_UesUsageSetting.go: -------------------------------------------------------------------------------- 1 | package nasType 2 | 3 | // UesUsageSetting 9.11.3.55 4 | // UesUsageSetting Row, sBit, len = [0, 0], 1 , 1 5 | type UesUsageSetting struct { 6 | Iei uint8 7 | Len uint8 8 | Octet uint8 9 | } 10 | 11 | func NewUesUsageSetting(iei uint8) (uesUsageSetting *UesUsageSetting) { 12 | uesUsageSetting = &UesUsageSetting{} 13 | uesUsageSetting.SetIei(iei) 14 | return uesUsageSetting 15 | } 16 | 17 | // UesUsageSetting 9.11.3.55 18 | // Iei Row, sBit, len = [], 8, 8 19 | func (a *UesUsageSetting) GetIei() (iei uint8) { 20 | return a.Iei 21 | } 22 | 23 | // UesUsageSetting 9.11.3.55 24 | // Iei Row, sBit, len = [], 8, 8 25 | func (a *UesUsageSetting) SetIei(iei uint8) { 26 | a.Iei = iei 27 | } 28 | 29 | // UesUsageSetting 9.11.3.55 30 | // Len Row, sBit, len = [], 8, 8 31 | func (a *UesUsageSetting) GetLen() (len uint8) { 32 | return a.Len 33 | } 34 | 35 | // UesUsageSetting 9.11.3.55 36 | // Len Row, sBit, len = [], 8, 8 37 | func (a *UesUsageSetting) SetLen(len uint8) { 38 | a.Len = len 39 | } 40 | 41 | // UesUsageSetting 9.11.3.55 42 | // UesUsageSetting Row, sBit, len = [0, 0], 1 , 1 43 | func (a *UesUsageSetting) GetUesUsageSetting() (uesUsageSetting uint8) { 44 | return a.Octet & GetBitMask(1, 0) 45 | } 46 | 47 | // UesUsageSetting 9.11.3.55 48 | // UesUsageSetting Row, sBit, len = [0, 0], 1 , 1 49 | func (a *UesUsageSetting) SetUesUsageSetting(uesUsageSetting uint8) { 50 | a.Octet = (a.Octet & 254) + (uesUsageSetting & 1) 51 | } 52 | --------------------------------------------------------------------------------