Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
2.1.1-dev
2.2.0
14 changes: 13 additions & 1 deletion nasMessage/NAS_AuthenticationResult.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ type AuthenticationResult struct {
nasType.SpareHalfOctetAndNgksi
nasType.EAPMessage
*nasType.ABBA
*nasType.MasterSessionKey
}

func NewAuthenticationResult(iei uint8) (authenticationResult *AuthenticationResult) {
Expand All @@ -27,7 +28,8 @@ func NewAuthenticationResult(iei uint8) (authenticationResult *AuthenticationRes
}

const (
AuthenticationResultABBAType uint8 = 0x38
AuthenticationResultABBAType uint8 = 0x38
AuthenticationResultMasterSessionKeyType uint8 = 0x55
)

func (a *AuthenticationResult) EncodeAuthenticationResult(buffer *bytes.Buffer) {
Expand All @@ -42,6 +44,11 @@ func (a *AuthenticationResult) EncodeAuthenticationResult(buffer *bytes.Buffer)
binary.Write(buffer, binary.BigEndian, a.ABBA.GetLen())
binary.Write(buffer, binary.BigEndian, &a.ABBA.Buffer)
}
if a.MasterSessionKey != nil {
binary.Write(buffer, binary.BigEndian, a.MasterSessionKey.GetIei())
binary.Write(buffer, binary.BigEndian, a.MasterSessionKey.GetLen())
binary.Write(buffer, binary.BigEndian, &a.MasterSessionKey.Buffer)
}
}

func (a *AuthenticationResult) DecodeAuthenticationResult(byteArray *[]byte) {
Expand All @@ -68,6 +75,11 @@ func (a *AuthenticationResult) DecodeAuthenticationResult(byteArray *[]byte) {
binary.Read(buffer, binary.BigEndian, &a.ABBA.Len)
a.ABBA.SetLen(a.ABBA.GetLen())
binary.Read(buffer, binary.BigEndian, a.ABBA.Buffer[:a.ABBA.GetLen()])
case AuthenticationResultMasterSessionKeyType:
a.MasterSessionKey = nasType.NewMasterSessionKey(ieiN)
binary.Read(buffer, binary.BigEndian, &a.MasterSessionKey.Len)
a.MasterSessionKey.SetLen(a.MasterSessionKey.GetLen())
binary.Read(buffer, binary.BigEndian, a.MasterSessionKey.Buffer[:a.MasterSessionKey.GetLen()])
default:
}
}
Expand Down
136 changes: 136 additions & 0 deletions nasMessage/NAS_ConfigurationUpdateCommand.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,18 @@ type ConfigurationUpdateCommand struct {
*nasType.ExtendedCAGInformationList
*nasType.NSAGInformation
*nasType.ExtendedLADNInformation
*nasType.RegistrationResult5GS
*nasType.AdditionalConfigurationIndication
*nasType.UpdatedPEIPSAssistanceInformation
*nasType.PriorityIndicator
*nasType.RANTimingSynchronization
*nasType.AlternativeNSSAI
*nasType.SNSSAILocationValidityInformation
*nasType.SNSSAITimeValidityInformation
*nasType.DiscontinuousCoverageMaxTimeOffset
*nasType.PartiallyAllowedNSSAI
*nasType.PartiallyRejectedNSSAI
*nasType.FeatureAuthorizationIndication
}

func NewConfigurationUpdateCommand(iei uint8) (configurationUpdateCommand *ConfigurationUpdateCommand) {
Expand Down Expand Up @@ -83,6 +95,18 @@ const (
ConfigurationUpdateCommandExtendedCAGInformationListType uint8 = 0x71
ConfigurationUpdateCommandNSAGInformationType uint8 = 0x73
ConfigurationUpdateCommandExtendedLADNInformationType uint8 = 0x78
ConfigurationUpdateCommandRegistrationResult5GSType uint8 = 0x44
ConfigurationUpdateCommandAdditionalConfigurationIndicationType uint8 = 0x0C
ConfigurationUpdateCommandUpdatedPEIPSAssistanceInformationType uint8 = 0x1F
ConfigurationUpdateCommandPriorityIndicatorType uint8 = 0x0E
ConfigurationUpdateCommandRANTimingSynchronizationType uint8 = 0x4B
Comment thread
gab-arrobo marked this conversation as resolved.
ConfigurationUpdateCommandAlternativeNSSAIType uint8 = 0x4C
ConfigurationUpdateCommandSNSSAILocationValidityInformationType uint8 = 0x7D
ConfigurationUpdateCommandSNSSAITimeValidityInformationType uint8 = 0x5B
ConfigurationUpdateCommandDiscontinuousCoverageMaxTimeOffsetType uint8 = 0x4F
ConfigurationUpdateCommandPartiallyAllowedNSSAIType uint8 = 0x74
ConfigurationUpdateCommandPartiallyRejectedNSSAIType uint8 = 0x7A
ConfigurationUpdateCommandFeatureAuthorizationIndicationType uint8 = 0x5C
)

func (a *ConfigurationUpdateCommand) EncodeConfigurationUpdateCommand(buffer *bytes.Buffer) {
Expand Down Expand Up @@ -227,6 +251,62 @@ func (a *ConfigurationUpdateCommand) EncodeConfigurationUpdateCommand(buffer *by
binary.Write(buffer, binary.BigEndian, a.ExtendedLADNInformation.GetLen())
binary.Write(buffer, binary.BigEndian, &a.ExtendedLADNInformation.Buffer)
}
if a.RegistrationResult5GS != nil {
binary.Write(buffer, binary.BigEndian, a.RegistrationResult5GS.GetIei())
binary.Write(buffer, binary.BigEndian, a.RegistrationResult5GS.GetLen())
binary.Write(buffer, binary.BigEndian, &a.RegistrationResult5GS.Octet)
}
if a.AdditionalConfigurationIndication != nil {
binary.Write(buffer, binary.BigEndian, &a.AdditionalConfigurationIndication.Octet)
}
if a.UpdatedPEIPSAssistanceInformation != nil {
binary.Write(buffer, binary.BigEndian, a.UpdatedPEIPSAssistanceInformation.GetIei())
binary.Write(buffer, binary.BigEndian, a.UpdatedPEIPSAssistanceInformation.GetLen())
binary.Write(buffer, binary.BigEndian, &a.UpdatedPEIPSAssistanceInformation.Buffer)
}
if a.PriorityIndicator != nil {
binary.Write(buffer, binary.BigEndian, &a.PriorityIndicator.Octet)
}
if a.RANTimingSynchronization != nil {
binary.Write(buffer, binary.BigEndian, a.RANTimingSynchronization.GetIei())
binary.Write(buffer, binary.BigEndian, a.RANTimingSynchronization.GetLen())
binary.Write(buffer, binary.BigEndian, &a.RANTimingSynchronization.Buffer)
}
if a.AlternativeNSSAI != nil {
binary.Write(buffer, binary.BigEndian, a.AlternativeNSSAI.GetIei())
binary.Write(buffer, binary.BigEndian, a.AlternativeNSSAI.GetLen())
binary.Write(buffer, binary.BigEndian, &a.AlternativeNSSAI.Buffer)
}
if a.SNSSAILocationValidityInformation != nil {
binary.Write(buffer, binary.BigEndian, a.SNSSAILocationValidityInformation.GetIei())
binary.Write(buffer, binary.BigEndian, a.SNSSAILocationValidityInformation.GetLen())
binary.Write(buffer, binary.BigEndian, &a.SNSSAILocationValidityInformation.Buffer)
}
if a.SNSSAITimeValidityInformation != nil {
binary.Write(buffer, binary.BigEndian, a.SNSSAITimeValidityInformation.GetIei())
binary.Write(buffer, binary.BigEndian, a.SNSSAITimeValidityInformation.GetLen())
binary.Write(buffer, binary.BigEndian, &a.SNSSAITimeValidityInformation.Buffer)
}
if a.DiscontinuousCoverageMaxTimeOffset != nil {
binary.Write(buffer, binary.BigEndian, a.DiscontinuousCoverageMaxTimeOffset.GetIei())
binary.Write(buffer, binary.BigEndian, a.DiscontinuousCoverageMaxTimeOffset.GetLen())
binary.Write(buffer, binary.BigEndian, &a.DiscontinuousCoverageMaxTimeOffset.Octet)
}
if a.PartiallyAllowedNSSAI != nil {
binary.Write(buffer, binary.BigEndian, a.PartiallyAllowedNSSAI.GetIei())
binary.Write(buffer, binary.BigEndian, a.PartiallyAllowedNSSAI.GetLen())
binary.Write(buffer, binary.BigEndian, &a.PartiallyAllowedNSSAI.Buffer)
}
if a.PartiallyRejectedNSSAI != nil {
binary.Write(buffer, binary.BigEndian, a.PartiallyRejectedNSSAI.GetIei())
binary.Write(buffer, binary.BigEndian, a.PartiallyRejectedNSSAI.GetLen())
binary.Write(buffer, binary.BigEndian, &a.PartiallyRejectedNSSAI.Buffer)
}
if a.FeatureAuthorizationIndication != nil {
binary.Write(buffer, binary.BigEndian, a.FeatureAuthorizationIndication.GetIei())
binary.Write(buffer, binary.BigEndian, a.FeatureAuthorizationIndication.GetLen())
binary.Write(buffer, binary.BigEndian, &a.FeatureAuthorizationIndication.Buffer)
}
}

func (a *ConfigurationUpdateCommand) DecodeConfigurationUpdateCommand(byteArray *[]byte) {
Expand Down Expand Up @@ -386,6 +466,62 @@ func (a *ConfigurationUpdateCommand) DecodeConfigurationUpdateCommand(byteArray
binary.Read(buffer, binary.BigEndian, &a.ExtendedLADNInformation.Len)
a.ExtendedLADNInformation.SetLen(a.ExtendedLADNInformation.GetLen())
binary.Read(buffer, binary.BigEndian, a.ExtendedLADNInformation.Buffer[:a.ExtendedLADNInformation.GetLen()])
case ConfigurationUpdateCommandRegistrationResult5GSType:
a.RegistrationResult5GS = nasType.NewRegistrationResult5GS(ieiN)
binary.Read(buffer, binary.BigEndian, &a.RegistrationResult5GS.Len)
a.RegistrationResult5GS.SetLen(a.RegistrationResult5GS.GetLen())
binary.Read(buffer, binary.BigEndian, &a.RegistrationResult5GS.Octet)
case ConfigurationUpdateCommandAdditionalConfigurationIndicationType:
a.AdditionalConfigurationIndication = nasType.NewAdditionalConfigurationIndication(ieiN)
a.AdditionalConfigurationIndication.Octet = ieiN
case ConfigurationUpdateCommandUpdatedPEIPSAssistanceInformationType:
a.UpdatedPEIPSAssistanceInformation = nasType.NewUpdatedPEIPSAssistanceInformation(ieiN)
binary.Read(buffer, binary.BigEndian, &a.UpdatedPEIPSAssistanceInformation.Len)
a.UpdatedPEIPSAssistanceInformation.SetLen(a.UpdatedPEIPSAssistanceInformation.GetLen())
binary.Read(buffer, binary.BigEndian, a.UpdatedPEIPSAssistanceInformation.Buffer[:a.UpdatedPEIPSAssistanceInformation.GetLen()])
case ConfigurationUpdateCommandPriorityIndicatorType:
a.PriorityIndicator = nasType.NewPriorityIndicator(ieiN)
a.PriorityIndicator.Octet = ieiN
case ConfigurationUpdateCommandRANTimingSynchronizationType:
a.RANTimingSynchronization = nasType.NewRANTimingSynchronization(ieiN)
binary.Read(buffer, binary.BigEndian, &a.RANTimingSynchronization.Len)
a.RANTimingSynchronization.SetLen(a.RANTimingSynchronization.GetLen())
binary.Read(buffer, binary.BigEndian, a.RANTimingSynchronization.Buffer[:a.RANTimingSynchronization.GetLen()])
case ConfigurationUpdateCommandAlternativeNSSAIType:
a.AlternativeNSSAI = nasType.NewAlternativeNSSAI(ieiN)
binary.Read(buffer, binary.BigEndian, &a.AlternativeNSSAI.Len)
a.AlternativeNSSAI.SetLen(a.AlternativeNSSAI.GetLen())
binary.Read(buffer, binary.BigEndian, a.AlternativeNSSAI.Buffer[:a.AlternativeNSSAI.GetLen()])
case ConfigurationUpdateCommandSNSSAILocationValidityInformationType:
a.SNSSAILocationValidityInformation = nasType.NewSNSSAILocationValidityInformation(ieiN)
binary.Read(buffer, binary.BigEndian, &a.SNSSAILocationValidityInformation.Len)
a.SNSSAILocationValidityInformation.SetLen(a.SNSSAILocationValidityInformation.GetLen())
binary.Read(buffer, binary.BigEndian, a.SNSSAILocationValidityInformation.Buffer[:a.SNSSAILocationValidityInformation.GetLen()])
case ConfigurationUpdateCommandSNSSAITimeValidityInformationType:
a.SNSSAITimeValidityInformation = nasType.NewSNSSAITimeValidityInformation(ieiN)
binary.Read(buffer, binary.BigEndian, &a.SNSSAITimeValidityInformation.Len)
a.SNSSAITimeValidityInformation.SetLen(a.SNSSAITimeValidityInformation.GetLen())
binary.Read(buffer, binary.BigEndian, a.SNSSAITimeValidityInformation.Buffer[:a.SNSSAITimeValidityInformation.GetLen()])
case ConfigurationUpdateCommandDiscontinuousCoverageMaxTimeOffsetType:
a.DiscontinuousCoverageMaxTimeOffset = nasType.NewDiscontinuousCoverageMaxTimeOffset(ieiN)
binary.Read(buffer, binary.BigEndian, &a.DiscontinuousCoverageMaxTimeOffset.Len)
a.DiscontinuousCoverageMaxTimeOffset.SetLen(a.DiscontinuousCoverageMaxTimeOffset.GetLen())
binary.Read(buffer, binary.BigEndian, &a.DiscontinuousCoverageMaxTimeOffset.Octet)
case ConfigurationUpdateCommandPartiallyAllowedNSSAIType:
a.PartiallyAllowedNSSAI = nasType.NewPartiallyAllowedNSSAI(ieiN)
binary.Read(buffer, binary.BigEndian, &a.PartiallyAllowedNSSAI.Len)
a.PartiallyAllowedNSSAI.SetLen(a.PartiallyAllowedNSSAI.GetLen())
binary.Read(buffer, binary.BigEndian, a.PartiallyAllowedNSSAI.Buffer[:a.PartiallyAllowedNSSAI.GetLen()])
case ConfigurationUpdateCommandPartiallyRejectedNSSAIType:
a.PartiallyRejectedNSSAI = nasType.NewPartiallyRejectedNSSAI(ieiN)
binary.Read(buffer, binary.BigEndian, &a.PartiallyRejectedNSSAI.Len)
a.PartiallyRejectedNSSAI.SetLen(a.PartiallyRejectedNSSAI.GetLen())
binary.Read(buffer, binary.BigEndian, a.PartiallyRejectedNSSAI.Buffer[:a.PartiallyRejectedNSSAI.GetLen()])
case ConfigurationUpdateCommandFeatureAuthorizationIndicationType:
a.FeatureAuthorizationIndication = nasType.NewFeatureAuthorizationIndication(ieiN)
binary.Read(buffer, binary.BigEndian, &a.FeatureAuthorizationIndication.Len)
a.FeatureAuthorizationIndication.SetLen(a.FeatureAuthorizationIndication.GetLen())
binary.Read(buffer, binary.BigEndian, a.FeatureAuthorizationIndication.Buffer[:a.FeatureAuthorizationIndication.GetLen()])
default:
}
}
Expand Down
47 changes: 47 additions & 0 deletions nasMessage/NAS_ConfigurationUpdateCommand_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -266,3 +266,50 @@ func TestConfigurationUpdateCommandNewIEsEncodeDecode(t *testing.T) {
t.Errorf("ConfigurationUpdateCommand new IEs encode/decode mismatch")
}
}

func TestConfigurationUpdateCommandRel1718IEsEncodeDecode(t *testing.T) {
a := nasMessage.NewConfigurationUpdateCommand(0)
b := nasMessage.NewConfigurationUpdateCommand(0)
if a == nil {
t.Fatal("Expected value not to be nil")
}
if b == nil {
t.Fatal("Expected value not to be nil")
}

a.ExtendedProtocolDiscriminator.SetExtendedProtocolDiscriminator(nasMessage.Epd5GSMobilityManagementMessage)
a.SpareHalfOctetAndSecurityHeaderType.SetSecurityHeaderType(0x00)
a.SpareHalfOctetAndSecurityHeaderType.SetSpareHalfOctet(0x00)
a.ConfigurationUpdateCommandMessageIdentity.SetMessageType(nas.MsgTypeConfigurationUpdateCommand)

a.RegistrationResult5GS = nasType.NewRegistrationResult5GS(nasMessage.ConfigurationUpdateCommandRegistrationResult5GSType)
a.RegistrationResult5GS.SetLen(1)
a.RegistrationResult5GS.Octet = 0x01

a.AdditionalConfigurationIndication = nasType.NewAdditionalConfigurationIndication(nasMessage.ConfigurationUpdateCommandAdditionalConfigurationIndicationType)
a.AdditionalConfigurationIndication.SetSCMR(0x01)

a.UpdatedPEIPSAssistanceInformation = nasType.NewUpdatedPEIPSAssistanceInformation(nasMessage.ConfigurationUpdateCommandUpdatedPEIPSAssistanceInformationType)
a.UpdatedPEIPSAssistanceInformation.SetLen(2)
copy(a.UpdatedPEIPSAssistanceInformation.Buffer, []byte{0xAA, 0xBB})

a.PriorityIndicator = nasType.NewPriorityIndicator(nasMessage.ConfigurationUpdateCommandPriorityIndicatorType)
a.PriorityIndicator.SetMPSI(0x01)

a.RANTimingSynchronization = nasType.NewRANTimingSynchronization(nasMessage.ConfigurationUpdateCommandRANTimingSynchronizationType)
a.RANTimingSynchronization.SetLen(2)
copy(a.RANTimingSynchronization.Buffer, []byte{0x01, 0x02})

buff := new(bytes.Buffer)
a.EncodeConfigurationUpdateCommand(buff)
logger.NasMsgLog.Debugln("Encode: ", a)

data := make([]byte, buff.Len())
buff.Read(data)
b.DecodeConfigurationUpdateCommand(&data)
logger.NasMsgLog.Debugln("Decode: ", b)

if reflect.DeepEqual(a, b) != true {
t.Errorf("ConfigurationUpdateCommand Rel-17/18 IEs encode/decode mismatch")
}
}
53 changes: 47 additions & 6 deletions nasMessage/NAS_ControlPlaneServiceRequest.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,10 @@ type ControlPlaneServiceRequest struct {
*nasType.AllowedPDUSessionStatus
*nasType.UERequestType
*nasType.PagingRestriction
*nasType.CIoTSmallDataContainer
*nasType.PduSessionID2Value
*nasType.AdditionalInformation
*nasType.ReleaseAssistanceIndication
}

func NewControlPlaneServiceRequest(iei uint8) (controlPlaneServiceRequest *ControlPlaneServiceRequest) {
Expand All @@ -30,12 +34,16 @@ func NewControlPlaneServiceRequest(iei uint8) (controlPlaneServiceRequest *Contr
}

const (
ControlPlaneServiceRequestPDUSessionStatusType uint8 = 0x50
ControlPlaneServiceRequestUplinkDataStatusType uint8 = 0x40
ControlPlaneServiceRequestNASMessageContainerType uint8 = 0x71
ControlPlaneServiceRequestAllowedPDUSessionStatusType uint8 = 0x25
ControlPlaneServiceRequestUERequestTypeType uint8 = 0x29
ControlPlaneServiceRequestPagingRestrictionType uint8 = 0x28
ControlPlaneServiceRequestPDUSessionStatusType uint8 = 0x50
ControlPlaneServiceRequestUplinkDataStatusType uint8 = 0x40
ControlPlaneServiceRequestNASMessageContainerType uint8 = 0x71
ControlPlaneServiceRequestAllowedPDUSessionStatusType uint8 = 0x25
ControlPlaneServiceRequestUERequestTypeType uint8 = 0x29
ControlPlaneServiceRequestPagingRestrictionType uint8 = 0x28
ControlPlaneServiceRequestCIoTSmallDataContainerType uint8 = 0x6F
ControlPlaneServiceRequestPduSessionIDType uint8 = 0x12
ControlPlaneServiceRequestAdditionalInformationType uint8 = 0x24
ControlPlaneServiceRequestReleaseAssistanceIndicationType uint8 = 0x0F
)

func (a *ControlPlaneServiceRequest) EncodeControlPlaneServiceRequest(buffer *bytes.Buffer) {
Expand Down Expand Up @@ -73,6 +81,23 @@ func (a *ControlPlaneServiceRequest) EncodeControlPlaneServiceRequest(buffer *by
binary.Write(buffer, binary.BigEndian, uint8(a.PagingRestriction.GetLen()))
binary.Write(buffer, binary.BigEndian, a.PagingRestriction.Buffer[:uint8(a.PagingRestriction.GetLen())])
}
if a.CIoTSmallDataContainer != nil {
binary.Write(buffer, binary.BigEndian, a.CIoTSmallDataContainer.GetIei())
binary.Write(buffer, binary.BigEndian, a.CIoTSmallDataContainer.GetLen())
binary.Write(buffer, binary.BigEndian, &a.CIoTSmallDataContainer.Buffer)
}
if a.PduSessionID2Value != nil {
binary.Write(buffer, binary.BigEndian, a.PduSessionID2Value.GetIei())
binary.Write(buffer, binary.BigEndian, &a.PduSessionID2Value.Octet)
}
if a.AdditionalInformation != nil {
binary.Write(buffer, binary.BigEndian, a.AdditionalInformation.GetIei())
binary.Write(buffer, binary.BigEndian, a.AdditionalInformation.GetLen())
binary.Write(buffer, binary.BigEndian, &a.AdditionalInformation.Buffer)
}
if a.ReleaseAssistanceIndication != nil {
binary.Write(buffer, binary.BigEndian, &a.ReleaseAssistanceIndication.Octet)
}
}

func (a *ControlPlaneServiceRequest) DecodeControlPlaneServiceRequest(byteArray *[]byte) {
Expand Down Expand Up @@ -123,6 +148,22 @@ func (a *ControlPlaneServiceRequest) DecodeControlPlaneServiceRequest(byteArray
binary.Read(buffer, binary.BigEndian, &lenN1)
a.PagingRestriction.SetLen(uint16(lenN1))
binary.Read(buffer, binary.BigEndian, a.PagingRestriction.Buffer[:lenN1])
case ControlPlaneServiceRequestCIoTSmallDataContainerType:
a.CIoTSmallDataContainer = nasType.NewCIoTSmallDataContainer(ieiN)
binary.Read(buffer, binary.BigEndian, &a.CIoTSmallDataContainer.Len)
a.CIoTSmallDataContainer.SetLen(a.CIoTSmallDataContainer.GetLen())
binary.Read(buffer, binary.BigEndian, a.CIoTSmallDataContainer.Buffer[:a.CIoTSmallDataContainer.GetLen()])
case ControlPlaneServiceRequestPduSessionIDType:
a.PduSessionID2Value = nasType.NewPduSessionID2Value(ieiN)
binary.Read(buffer, binary.BigEndian, &a.PduSessionID2Value.Octet)
case ControlPlaneServiceRequestAdditionalInformationType:
a.AdditionalInformation = nasType.NewAdditionalInformation(ieiN)
binary.Read(buffer, binary.BigEndian, &a.AdditionalInformation.Len)
a.AdditionalInformation.SetLen(a.AdditionalInformation.GetLen())
binary.Read(buffer, binary.BigEndian, a.AdditionalInformation.Buffer[:a.AdditionalInformation.GetLen()])
case ControlPlaneServiceRequestReleaseAssistanceIndicationType:
a.ReleaseAssistanceIndication = nasType.NewReleaseAssistanceIndication(ieiN)
a.ReleaseAssistanceIndication.Octet = ieiN
default:
}
}
Expand Down
Loading
Loading