/
packet.go
107 lines (90 loc) · 4.24 KB
/
packet.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
package ue_actions
import (
"github.com/free5gc/nas"
"github.com/free5gc/nas/nasMessage"
"github.com/free5gc/ngap"
// Nausf_UEAU_Client "github.com/free5gc/openapi/Nausf_UEAuthentication"
// "github.com/free5gc/openapi/models"
"github.com/matanbroner/UESimulator/src/ue/ue_ngap"
)
func GetNGSetupRequest(gnbId []byte, bitlength uint64, name string) ([]byte, error) {
message := ue_ngap.BuildNGSetupRequest()
// GlobalRANNodeID
ie := message.InitiatingMessage.Value.NGSetupRequest.ProtocolIEs.List[0]
gnbID := ie.Value.GlobalRANNodeID.GlobalGNBID.GNBID.GNBID
gnbID.Bytes = gnbId
gnbID.BitLength = bitlength
// RANNodeName
ie = message.InitiatingMessage.Value.NGSetupRequest.ProtocolIEs.List[1]
ie.Value.RANNodeName.Value = name
return ngap.Encoder(message)
}
func GetInitialUEMessage(ranUeNgapID int64, nasPdu []byte, fiveGSTmsi string) ([]byte, error) {
message := ue_ngap.BuildInitialUEMessage(ranUeNgapID, nasPdu, fiveGSTmsi)
return ngap.Encoder(message)
}
func GetUplinkNASTransport(amfUeNgapID, ranUeNgapID int64, nasPdu []byte) ([]byte, error) {
message := ue_ngap.BuildUplinkNasTransport(amfUeNgapID, ranUeNgapID, nasPdu)
return ngap.Encoder(message)
}
func GetInitialContextSetupResponse(amfUeNgapID int64, ranUeNgapID int64) ([]byte, error) {
message := ue_ngap.BuildInitialContextSetupResponseForRegistraionTest(amfUeNgapID, ranUeNgapID)
return ngap.Encoder(message)
}
func GetInitialContextSetupResponseForServiceRequest(
amfUeNgapID int64, ranUeNgapID int64, ipv4 string) ([]byte, error) {
message := ue_ngap.BuildInitialContextSetupResponse(amfUeNgapID, ranUeNgapID, ipv4, nil)
return ngap.Encoder(message)
}
func GetPDUSessionResourceSetupResponse(pduSessionId int64, amfUeNgapID int64, ranUeNgapID int64, ipv4 string) ([]byte, error) {
message := ue_ngap.BuildPDUSessionResourceSetupResponseForRegistrationTest(pduSessionId, amfUeNgapID, ranUeNgapID, ipv4)
return ngap.Encoder(message)
}
func EncodeNasPduWithSecurity(ue *RanUeContext, pdu []byte, securityHeaderType uint8,
securityContextAvailable, newSecurityContext bool) ([]byte, error) {
m := nas.NewMessage()
err := m.PlainNasDecode(&pdu)
if err != nil {
return nil, err
}
m.SecurityHeader = nas.SecurityHeader{
ProtocolDiscriminator: nasMessage.Epd5GSMobilityManagementMessage,
SecurityHeaderType: securityHeaderType,
}
return NASEncode(ue, m, securityContextAvailable, newSecurityContext)
}
func GetUEContextReleaseComplete(amfUeNgapID int64, ranUeNgapID int64, pduSessionIDList []int64) ([]byte, error) {
message := ue_ngap.BuildUEContextReleaseComplete(amfUeNgapID, ranUeNgapID, pduSessionIDList)
return ngap.Encoder(message)
}
func GetUEContextReleaseRequest(amfUeNgapID int64, ranUeNgapID int64, pduSessionIDList []int64) ([]byte, error) {
message := ue_ngap.BuildUEContextReleaseRequest(amfUeNgapID, ranUeNgapID, pduSessionIDList)
return ngap.Encoder(message)
}
func GetPDUSessionResourceReleaseResponse(amfUeNgapID int64, ranUeNgapID int64) ([]byte, error) {
message := ue_ngap.BuildPDUSessionResourceReleaseResponseForReleaseTest(amfUeNgapID, ranUeNgapID)
return ngap.Encoder(message)
}
func GetPathSwitchRequest(amfUeNgapID int64, ranUeNgapID int64) ([]byte, error) {
message := ue_ngap.BuildPathSwitchRequest(amfUeNgapID, ranUeNgapID)
message.InitiatingMessage.Value.PathSwitchRequest.ProtocolIEs.List =
message.InitiatingMessage.Value.PathSwitchRequest.ProtocolIEs.List[0:5]
return ngap.Encoder(message)
}
func GetHandoverRequired(
amfUeNgapID int64, ranUeNgapID int64, targetGNBID []byte, targetCellID []byte) ([]byte, error) {
message := ue_ngap.BuildHandoverRequired(amfUeNgapID, ranUeNgapID, targetGNBID, targetCellID)
return ngap.Encoder(message)
}
func GetHandoverRequestAcknowledge(amfUeNgapID int64, ranUeNgapID int64) ([]byte, error) {
message := ue_ngap.BuildHandoverRequestAcknowledge(amfUeNgapID, ranUeNgapID)
return ngap.Encoder(message)
}
func GetHandoverNotify(amfUeNgapID int64, ranUeNgapID int64) ([]byte, error) {
message := ue_ngap.BuildHandoverNotify(amfUeNgapID, ranUeNgapID)
return ngap.Encoder(message)
}
func GetPDUSessionResourceSetupResponseForPaging(amfUeNgapID int64, ranUeNgapID int64, ipv4 string) ([]byte, error) {
message := ue_ngap.BuildPDUSessionResourceSetupResponseForPaging(amfUeNgapID, ranUeNgapID, ipv4)
return ngap.Encoder(message)
}