Documentation
¶
Index ¶
- Constants
- func GetInterfaceName(IPAddress string) (interfaceName string, err error)
- func InitN3IWFContext() bool
- type AMFOverloadContent
- type AMFTNLAssociationItem
- type ChildSecurityAssociation
- type CreatePDUSessionEvt
- type EvtError
- type GTPConnectionInfo
- type GetNGAPContextEvt
- type GetNGAPContextRepEvt
- type IKEContextUpdateEvt
- type IKEDeleteRequestEvt
- type IKESecurityAssociation
- type IkeEventType
- type IkeEvt
- type IkeMsgTemporaryData
- type IkeReceivePacket
- type IkeServer
- type N3IWFAMF
- func (amf *N3IWFAMF) AddAMFTNLAssociationItem(info ngapType.CPTransportLayerInformation) *AMFTNLAssociationItem
- func (amf *N3IWFAMF) DeleteAMFTNLAssociationItem(info ngapType.CPTransportLayerInformation)
- func (amf *N3IWFAMF) FindAMFTNLAssociationItem(info ngapType.CPTransportLayerInformation) *AMFTNLAssociationItem
- func (amf *N3IWFAMF) FindAvalibleAMFByCompareGUAMI(ueSpecifiedGUAMI *ngapType.GUAMI) bool
- func (amf *N3IWFAMF) FindAvalibleAMFByCompareSelectedPLMNId(ueSpecifiedSelectedPLMNId *ngapType.PLMNIdentity) bool
- func (amf *N3IWFAMF) FindUeByAmfUeNgapID(id int64) *N3IWFRanUe
- func (amf *N3IWFAMF) RemoveAllRelatedUe() error
- func (amf *N3IWFAMF) StartOverload(resp *ngapType.OverloadResponse, ...) *AMFOverloadContent
- func (amf *N3IWFAMF) StopOverload()
- type N3IWFContext
- func (context *N3IWFContext) AMFPoolLoad(sctpAddr string) (*N3IWFAMF, bool)
- func (context *N3IWFContext) AMFReInitAvailableListLoad(sctpAddr string) (bool, bool)
- func (context *N3IWFContext) AMFReInitAvailableListStore(sctpAddr string, flag bool)
- func (context *N3IWFContext) AMFSelection(ueSpecifiedGUAMI *ngapType.GUAMI, ueSpecifiedPLMNId *ngapType.PLMNIdentity) *N3IWFAMF
- func (context *N3IWFContext) AllocatedUEIPAddressLoad(ipAddr string) (*N3IWFIkeUe, bool)
- func (context *N3IWFContext) AllocatedUETEIDLoad(teid uint32) (*N3IWFRanUe, bool)
- func (context *N3IWFContext) DeleteAMFReInitAvailableFlag(sctpAddr string)
- func (context *N3IWFContext) DeleteGTPConnection(upfAddr string)
- func (context *N3IWFContext) DeleteIKESecurityAssociation(spi uint64)
- func (context *N3IWFContext) DeleteIKEUe(spi uint64)
- func (context *N3IWFContext) DeleteIkeSPIFromNgapId(ranUeNgapId int64)
- func (context *N3IWFContext) DeleteInternalUEIPAddr(ipAddr string)
- func (context *N3IWFContext) DeleteN3iwfAmf(sctpAddr string)
- func (context *N3IWFContext) DeleteNgapIdFromIkeSPI(spi uint64)
- func (context *N3IWFContext) DeleteRanUe(ranUeNgapId int64)
- func (context *N3IWFContext) DeleteTEID(teid uint32)
- func (context *N3IWFContext) GTPConnectionWithUPFLoad(upfAddr string) (*gtpv1.UPlaneConn, bool)
- func (context *N3IWFContext) GTPConnectionWithUPFStore(upfAddr string, conn *gtpv1.UPlaneConn)
- func (context *N3IWFContext) IKESALoad(spi uint64) (*IKESecurityAssociation, bool)
- func (context *N3IWFContext) IkeSpiLoad(ranUeNgapId int64) (uint64, bool)
- func (context *N3IWFContext) IkeSpiNgapIdMapping(spi uint64, ranUeNgapId int64)
- func (context *N3IWFContext) IkeUeLoadFromNgapId(ranUeNgapId int64) (*N3IWFIkeUe, error)
- func (context *N3IWFContext) IkeUePoolLoad(spi uint64) (*N3IWFIkeUe, bool)
- func (context *N3IWFContext) NewIKESecurityAssociation() *IKESecurityAssociation
- func (context *N3IWFContext) NewInternalUEIPAddr(ikeUe *N3IWFIkeUe) net.IP
- func (context *N3IWFContext) NewN3iwfAmf(sctpAddr string, conn *sctp.SCTPConn) *N3IWFAMF
- func (context *N3IWFContext) NewN3iwfIkeUe(spi uint64) *N3IWFIkeUe
- func (context *N3IWFContext) NewN3iwfRanUe() *N3IWFRanUe
- func (context *N3IWFContext) NewTEID(ranUe *N3IWFRanUe) uint32
- func (context *N3IWFContext) NgapIdLoad(spi uint64) (int64, bool)
- func (context *N3IWFContext) RanUeLoadFromIkeSPI(spi uint64) (*N3IWFRanUe, error)
- func (context *N3IWFContext) RanUePoolLoad(ranUeNgapId int64) (*N3IWFRanUe, bool)
- type N3IWFIkeUe
- func (ikeUe *N3IWFIkeUe) CompleteChildSA(msgID uint32, outboundSPI uint32, ...) (*ChildSecurityAssociation, error)
- func (ikeUe *N3IWFIkeUe) CreateHalfChildSA(msgID, inboundSPI uint32, pduSessionID int64)
- func (ikeUe *N3IWFIkeUe) DeleteChildSA(childSA *ChildSecurityAssociation) error
- func (ikeUe *N3IWFIkeUe) Remove() error
- type N3IWFRanUe
- func (ranUe *N3IWFRanUe) AttachAMF(sctpAddr string) bool
- func (ranUe *N3IWFRanUe) CreatePDUSession(pduSessionID int64, snssai ngapType.SNSSAI) (*PDUSession, error)
- func (ranUe *N3IWFRanUe) DetachAMF()
- func (ranUe *N3IWFRanUe) FindPDUSession(pduSessionID int64) *PDUSession
- func (ranUe *N3IWFRanUe) Remove() error
- type NASTCPConnEstablishedCompleteEvt
- type NGAPServer
- type NgapEventType
- type NgapEvt
- type PDUSession
- type PDUSessionSetupTemporaryData
- type QosFlow
- type ReceiveNGAPPacket
- type SendChildSADeleteRequestEvt
- type SendEAP5GFailureMsgEvt
- type SendEAPNASMsgEvt
- type SendEAPSuccessMsgEvt
- type SendInitialUEMessageEvt
- type SendNASMsgEvt
- type SendPDUSessionResourceReleaseResEvt
- type SendPDUSessionResourceSetupResEvt
- type SendUEContextReleaseCompleteEvt
- type SendUEContextReleaseRequestEvt
- type SliceOverloadItem
- type StartTCPSignalNASMsgEvt
- type Timer
- type UDPSocketInfo
- type UnmarshalEAP5GDataEvt
- type UnmarshalEAP5GDataResponseEvt
Constants ¶
View Source
const ( MaxValueOfRanUeNgapID int64 = 4294967295 MaxNumOfPDUSessions int = 256 )
View Source
const ( ErrNil = EvtError("Nil") ErrRadioConnWithUeLost = EvtError("RadioConnectionWithUeLost") ErrAMFSelection = EvtError("No avalible AMF for this UE") )
NGAP IKE event error string
View Source
const (
AmfUeNgapIdUnspecified int64 = 0xffffffffff
)
View Source
const (
ArgsUEUDPConn string = "UE UDP Socket Info"
)
Temporary State Data Args
View Source
const (
CxtTempPDUSessionSetupData int64 = iota
)
Ngap context
Variables ¶
This section is empty.
Functions ¶
func GetInterfaceName ¶
func InitN3IWFContext ¶
func InitN3IWFContext() bool
Types ¶
type AMFOverloadContent ¶
type AMFOverloadContent struct {
Action *ngapType.OverloadAction
TrafficInd *int64
NSSAIList []SliceOverloadItem
}
type AMFTNLAssociationItem ¶
type AMFTNLAssociationItem struct {
Ipv4 string
Ipv6 string
TNLAssociationUsage *ngapType.TNLAssociationUsage
TNLAddressWeightFactor *int64
}
type ChildSecurityAssociation ¶
type ChildSecurityAssociation struct {
// SPI
InboundSPI uint32 // N3IWF Specify
OutboundSPI uint32 // Non-3GPP UE Specify
// Associated XFRM interface
XfrmIface netlink.Link
XfrmStateList []netlink.XfrmState
XfrmPolicyList []netlink.XfrmPolicy
// IP address
PeerPublicIPAddr net.IP
LocalPublicIPAddr net.IP
// Traffic selector
SelectedIPProtocol uint8
TrafficSelectorLocal net.IPNet
TrafficSelectorRemote net.IPNet
// Security
EncryptionAlgorithm uint16
InitiatorToResponderEncryptionKey []byte
ResponderToInitiatorEncryptionKey []byte
IntegrityAlgorithm uint16
InitiatorToResponderIntegrityKey []byte
ResponderToInitiatorIntegrityKey []byte
ESN bool
// Encapsulate
EnableEncapsulate bool
N3IWFPort int
NATPort int
// PDU Session IDs associated with this child SA
PDUSessionIds []int64
// IKE UE context
IkeUE *N3IWFIkeUe
}
type CreatePDUSessionEvt ¶
type CreatePDUSessionEvt struct {
LocalSPI uint64
PduSessionListLen int
TempPDUSessionSetupData *PDUSessionSetupTemporaryData
}
func NewCreatePDUSessionEvt ¶
func NewCreatePDUSessionEvt(localSPI uint64, pduSessionListLen int, tempPDUSessionSetupData *PDUSessionSetupTemporaryData, ) *CreatePDUSessionEvt
func (*CreatePDUSessionEvt) Type ¶
func (createPDUSessionEvt *CreatePDUSessionEvt) Type() IkeEventType
type GTPConnectionInfo ¶
type GetNGAPContextEvt ¶
func NewGetNGAPContextEvt ¶
func NewGetNGAPContextEvt(ranUeNgapId int64, ngapCxtReqNumlist []int64) *GetNGAPContextEvt
func (*GetNGAPContextEvt) Type ¶
func (getNGAPContextEvt *GetNGAPContextEvt) Type() NgapEventType
type GetNGAPContextRepEvt ¶
type GetNGAPContextRepEvt struct {
LocalSPI uint64
NgapCxtReqNumlist []int64
NgapCxt []interface{}
}
func NewGetNGAPContextRepEvt ¶
func NewGetNGAPContextRepEvt(localSPI uint64, ngapCxtReqNumlist []int64, ngapCxt []interface{}, ) *GetNGAPContextRepEvt
func (*GetNGAPContextRepEvt) Type ¶
func (getNGAPContextRepEvt *GetNGAPContextRepEvt) Type() IkeEventType
type IKEContextUpdateEvt ¶
func NewIKEContextUpdateEvt ¶
func NewIKEContextUpdateEvt(localSPI uint64, kn3iwf []byte, ) *IKEContextUpdateEvt
func (*IKEContextUpdateEvt) Type ¶
func (ikeContextUpdateEvt *IKEContextUpdateEvt) Type() IkeEventType
type IKEDeleteRequestEvt ¶
type IKEDeleteRequestEvt struct {
LocalSPI uint64
}
func NewIKEDeleteRequestEvt ¶
func NewIKEDeleteRequestEvt(localSPI uint64, ) *IKEDeleteRequestEvt
func (*IKEDeleteRequestEvt) Type ¶
func (ikeDeleteRequestEvt *IKEDeleteRequestEvt) Type() IkeEventType
type IKESecurityAssociation ¶
type IKESecurityAssociation struct {
// SPI
RemoteSPI uint64
LocalSPI uint64
// Message ID
InitiatorMessageID uint32
ResponderMessageID uint32
// Transforms for IKE SA
EncryptionAlgorithm *ike_message.Transform
PseudorandomFunction *ike_message.Transform
IntegrityAlgorithm *ike_message.Transform
DiffieHellmanGroup *ike_message.Transform
ExpandedSequenceNumber *ike_message.Transform
// Used for key generating
ConcatenatedNonce []byte
// Keys
SK_d []byte // used for child SA key deriving
SK_ai []byte // used by initiator for integrity checking
SK_ar []byte // used by responder for integrity checking
SK_ei []byte // used by initiator for encrypting
SK_er []byte // used by responder for encrypting
SK_pi []byte // used by initiator for IKE authentication
SK_pr []byte // used by responder for IKE authentication
// State for IKE_AUTH
State uint8
// Temporary data stored for the use in later exchange
InitiatorID *ike_message.IdentificationInitiator
InitiatorCertificate *ike_message.Certificate
IKEAuthResponseSA *ike_message.SecurityAssociation
TrafficSelectorInitiator *ike_message.TrafficSelectorInitiator
TrafficSelectorResponder *ike_message.TrafficSelectorResponder
LastEAPIdentifier uint8
// UDP Connection
IKEConnection *UDPSocketInfo
// Authentication data
ResponderSignedOctets []byte
InitiatorSignedOctets []byte
// NAT detection
// If UEIsBehindNAT == true, N3IWF should enable NAT traversal and
// TODO: should support dynamic updating network address (MOBIKE)
UEIsBehindNAT bool
// If N3IWFIsBehindNAT == true, N3IWF should send UDP keepalive periodically
N3IWFIsBehindNAT bool
// IKE UE context
IkeUE *N3IWFIkeUe
// Temporary store the receive ike message
TemporaryIkeMsg *IkeMsgTemporaryData
DPDReqRetransTimer *Timer // The time from sending the DPD request to receiving the response
CurrentRetryTimes int32 // Accumulate the number of times the DPD response wasn't received
IKESAClosedCh chan struct{}
IsUseDPD bool
}
type IkeEventType ¶
type IkeEventType int64
const ( UnmarshalEAP5GDataResponse IkeEventType = iota SendEAP5GFailureMsg SendEAPNASMsg SendEAPSuccessMsg CreatePDUSession IKEDeleteRequest SendChildSADeleteRequest IKEContextUpdate GetNGAPContextResponse )
IKE Event type
type IkeEvt ¶
type IkeEvt interface {
Type() IkeEventType
}
type IkeMsgTemporaryData ¶
type IkeMsgTemporaryData struct {
SecurityAssociation *ike_message.SecurityAssociation
TrafficSelectorInitiator *ike_message.TrafficSelectorInitiator
TrafficSelectorResponder *ike_message.TrafficSelectorResponder
}
type IkeReceivePacket ¶
type IkeServer ¶
type IkeServer struct {
Listener map[int]*net.UDPConn
RcvIkePktCh chan IkeReceivePacket
RcvEventCh chan IkeEvt
StopServer chan struct{}
}
type N3IWFAMF ¶
type N3IWFAMF struct {
SCTPAddr string
SCTPConn *sctp.SCTPConn
AMFName *ngapType.AMFName
ServedGUAMIList *ngapType.ServedGUAMIList
RelativeAMFCapacity *ngapType.RelativeAMFCapacity
PLMNSupportList *ngapType.PLMNSupportList
AMFTNLAssociationList map[string]*AMFTNLAssociationItem // v4+v6 as key
// Overload related
AMFOverloadContent *AMFOverloadContent
// Relative Context
N3iwfRanUeList map[int64]*N3IWFRanUe // ranUeNgapId as key
}
func (*N3IWFAMF) AddAMFTNLAssociationItem ¶
func (amf *N3IWFAMF) AddAMFTNLAssociationItem(info ngapType.CPTransportLayerInformation) *AMFTNLAssociationItem
func (*N3IWFAMF) DeleteAMFTNLAssociationItem ¶
func (amf *N3IWFAMF) DeleteAMFTNLAssociationItem(info ngapType.CPTransportLayerInformation)
func (*N3IWFAMF) FindAMFTNLAssociationItem ¶
func (amf *N3IWFAMF) FindAMFTNLAssociationItem(info ngapType.CPTransportLayerInformation) *AMFTNLAssociationItem
func (*N3IWFAMF) FindAvalibleAMFByCompareGUAMI ¶
FindAvalibleAMFByCompareGUAMI compares the incoming GUAMI with AMF served GUAMI and return if this AMF is avalible for UE
func (*N3IWFAMF) FindAvalibleAMFByCompareSelectedPLMNId ¶
func (amf *N3IWFAMF) FindAvalibleAMFByCompareSelectedPLMNId(ueSpecifiedSelectedPLMNId *ngapType.PLMNIdentity) bool
func (*N3IWFAMF) FindUeByAmfUeNgapID ¶
func (amf *N3IWFAMF) FindUeByAmfUeNgapID(id int64) *N3IWFRanUe
func (*N3IWFAMF) RemoveAllRelatedUe ¶
func (*N3IWFAMF) StartOverload ¶
func (amf *N3IWFAMF) StartOverload( resp *ngapType.OverloadResponse, trafloadInd *ngapType.TrafficLoadReductionIndication, nssai *ngapType.OverloadStartNSSAIList, ) *AMFOverloadContent
func (*N3IWFAMF) StopOverload ¶
func (amf *N3IWFAMF) StopOverload()
type N3IWFContext ¶
type N3IWFContext struct {
NFInfo factory.N3IWFNFInfo
AMFSCTPAddresses []*sctp.SCTPAddr
// ID generator
RANUENGAPIDGenerator *idgenerator.IDGenerator
TEIDGenerator *idgenerator.IDGenerator
// Pools
AMFPool sync.Map // map[string]*N3IWFAMF, SCTPAddr as key
AMFReInitAvailableList sync.Map // map[string]bool, SCTPAddr as key
IKESA sync.Map // map[uint64]*IKESecurityAssociation, SPI as key
ChildSA sync.Map // map[uint32]*ChildSecurityAssociation, inboundSPI as key
GTPConnectionWithUPF sync.Map // map[string]*gtpv1.UPlaneConn, UPF address as key
AllocatedUEIPAddress sync.Map // map[string]*N3IWFIkeUe, IPAddr as key
AllocatedUETEID sync.Map // map[uint32]*N3IWFRanUe, TEID as key
IKEUePool sync.Map // map[uint64]*N3IWFIkeUe, SPI as key
RANUePool sync.Map // map[int64]*N3IWFRanUe, RanUeNgapID as key
IKESPIToNGAPId sync.Map // map[uint64]RanUeNgapID, SPI as key
NGAPIdToIKESPI sync.Map // map[uint64]SPI, RanUeNgapID as key
// N3IWF FQDN
FQDN string
// Security data
CertificateAuthority []byte
N3IWFCertificate []byte
N3IWFPrivateKey *rsa.PrivateKey
// UEIPAddressRange
Subnet *net.IPNet
// XFRM interface
XfrmIfaceId uint32
XfrmIfaces sync.Map // map[uint32]*netlink.Link, XfrmIfaceId as key
XfrmIfaceName string
XfrmParentIfaceName string
// Every UE's first UP IPsec will use default XFRM interface, additoinal UP IPsec will offset its XFRM id
XfrmIfaceIdOffsetForUP uint32
// N3IWF local address
IKEBindAddress string
IPSecGatewayAddress string
GTPBindAddress string
TCPPort uint16
// N3IWF NWu interface IPv4 packet connection
NWuIPv4PacketConn *ipv4.PacketConn
Ctx context.Context
Wg sync.WaitGroup
NGAPServer *NGAPServer
IKEServer *IkeServer
}
func (*N3IWFContext) AMFPoolLoad ¶
func (context *N3IWFContext) AMFPoolLoad(sctpAddr string) (*N3IWFAMF, bool)
func (*N3IWFContext) AMFReInitAvailableListLoad ¶
func (context *N3IWFContext) AMFReInitAvailableListLoad(sctpAddr string) (bool, bool)
func (*N3IWFContext) AMFReInitAvailableListStore ¶
func (context *N3IWFContext) AMFReInitAvailableListStore(sctpAddr string, flag bool)
func (*N3IWFContext) AMFSelection ¶
func (context *N3IWFContext) AMFSelection(ueSpecifiedGUAMI *ngapType.GUAMI, ueSpecifiedPLMNId *ngapType.PLMNIdentity, ) *N3IWFAMF
func (*N3IWFContext) AllocatedUEIPAddressLoad ¶
func (context *N3IWFContext) AllocatedUEIPAddressLoad(ipAddr string) (*N3IWFIkeUe, bool)
func (*N3IWFContext) AllocatedUETEIDLoad ¶
func (context *N3IWFContext) AllocatedUETEIDLoad(teid uint32) (*N3IWFRanUe, bool)
func (*N3IWFContext) DeleteAMFReInitAvailableFlag ¶
func (context *N3IWFContext) DeleteAMFReInitAvailableFlag(sctpAddr string)
func (*N3IWFContext) DeleteGTPConnection ¶
func (context *N3IWFContext) DeleteGTPConnection(upfAddr string)
func (*N3IWFContext) DeleteIKESecurityAssociation ¶
func (context *N3IWFContext) DeleteIKESecurityAssociation(spi uint64)
func (*N3IWFContext) DeleteIKEUe ¶
func (context *N3IWFContext) DeleteIKEUe(spi uint64)
func (*N3IWFContext) DeleteIkeSPIFromNgapId ¶
func (context *N3IWFContext) DeleteIkeSPIFromNgapId(ranUeNgapId int64)
func (*N3IWFContext) DeleteInternalUEIPAddr ¶
func (context *N3IWFContext) DeleteInternalUEIPAddr(ipAddr string)
func (*N3IWFContext) DeleteN3iwfAmf ¶
func (context *N3IWFContext) DeleteN3iwfAmf(sctpAddr string)
func (*N3IWFContext) DeleteNgapIdFromIkeSPI ¶
func (context *N3IWFContext) DeleteNgapIdFromIkeSPI(spi uint64)
func (*N3IWFContext) DeleteRanUe ¶
func (context *N3IWFContext) DeleteRanUe(ranUeNgapId int64)
func (*N3IWFContext) DeleteTEID ¶
func (context *N3IWFContext) DeleteTEID(teid uint32)
func (*N3IWFContext) GTPConnectionWithUPFLoad ¶
func (context *N3IWFContext) GTPConnectionWithUPFLoad(upfAddr string) (*gtpv1.UPlaneConn, bool)
func (*N3IWFContext) GTPConnectionWithUPFStore ¶
func (context *N3IWFContext) GTPConnectionWithUPFStore(upfAddr string, conn *gtpv1.UPlaneConn)
func (*N3IWFContext) IKESALoad ¶
func (context *N3IWFContext) IKESALoad(spi uint64) (*IKESecurityAssociation, bool)
func (*N3IWFContext) IkeSpiLoad ¶
func (context *N3IWFContext) IkeSpiLoad(ranUeNgapId int64) (uint64, bool)
func (*N3IWFContext) IkeSpiNgapIdMapping ¶
func (context *N3IWFContext) IkeSpiNgapIdMapping(spi uint64, ranUeNgapId int64)
func (*N3IWFContext) IkeUeLoadFromNgapId ¶
func (context *N3IWFContext) IkeUeLoadFromNgapId(ranUeNgapId int64) (*N3IWFIkeUe, error)
func (*N3IWFContext) IkeUePoolLoad ¶
func (context *N3IWFContext) IkeUePoolLoad(spi uint64) (*N3IWFIkeUe, bool)
func (*N3IWFContext) NewIKESecurityAssociation ¶
func (context *N3IWFContext) NewIKESecurityAssociation() *IKESecurityAssociation
func (*N3IWFContext) NewInternalUEIPAddr ¶
func (context *N3IWFContext) NewInternalUEIPAddr(ikeUe *N3IWFIkeUe) net.IP
func (*N3IWFContext) NewN3iwfAmf ¶
func (context *N3IWFContext) NewN3iwfAmf(sctpAddr string, conn *sctp.SCTPConn) *N3IWFAMF
func (*N3IWFContext) NewN3iwfIkeUe ¶
func (context *N3IWFContext) NewN3iwfIkeUe(spi uint64) *N3IWFIkeUe
func (*N3IWFContext) NewN3iwfRanUe ¶
func (context *N3IWFContext) NewN3iwfRanUe() *N3IWFRanUe
func (*N3IWFContext) NewTEID ¶
func (context *N3IWFContext) NewTEID(ranUe *N3IWFRanUe) uint32
func (*N3IWFContext) NgapIdLoad ¶
func (context *N3IWFContext) NgapIdLoad(spi uint64) (int64, bool)
func (*N3IWFContext) RanUeLoadFromIkeSPI ¶
func (context *N3IWFContext) RanUeLoadFromIkeSPI(spi uint64) (*N3IWFRanUe, error)
func (*N3IWFContext) RanUePoolLoad ¶
func (context *N3IWFContext) RanUePoolLoad(ranUeNgapId int64) (*N3IWFRanUe, bool)
type N3IWFIkeUe ¶
type N3IWFIkeUe struct {
/* UE identity */
IPSecInnerIP net.IP
IPSecInnerIPAddr *net.IPAddr // Used to send UP packets to UE
/* IKE Security Association */
N3IWFIKESecurityAssociation *IKESecurityAssociation
N3IWFChildSecurityAssociation map[uint32]*ChildSecurityAssociation // inbound SPI as key
/* Temporary Mapping of two SPIs */
// Exchange Message ID(including a SPI) and ChildSA(including a SPI)
// Mapping of Message ID of exchange in IKE and Child SA when creating new child SA
TemporaryExchangeMsgIDChildSAMapping map[uint32]*ChildSecurityAssociation // Message ID as a key
/* Security */
Kn3iwf []uint8 // 32 bytes (256 bits), value is from NGAP IE "Security Key"
/* NAS IKE Connection */
IKEConnection *UDPSocketInfo
// Length of PDU Session List
PduSessionListLen int
}
func (*N3IWFIkeUe) CompleteChildSA ¶
func (ikeUe *N3IWFIkeUe) CompleteChildSA(msgID uint32, outboundSPI uint32, chosenSecurityAssociation *ike_message.SecurityAssociation, ) (*ChildSecurityAssociation, error)
func (*N3IWFIkeUe) CreateHalfChildSA ¶
func (ikeUe *N3IWFIkeUe) CreateHalfChildSA(msgID, inboundSPI uint32, pduSessionID int64)
When N3IWF send CREATE_CHILD_SA request to N3UE, the inbound SPI of childSA will be only stored first until receive response and call CompleteChildSAWithProposal to fill the all data of childSA
func (*N3IWFIkeUe) DeleteChildSA ¶
func (ikeUe *N3IWFIkeUe) DeleteChildSA(childSA *ChildSecurityAssociation) error
func (*N3IWFIkeUe) Remove ¶
func (ikeUe *N3IWFIkeUe) Remove() error
type N3IWFRanUe ¶
type N3IWFRanUe struct {
/* UE identity */
RanUeNgapId int64
AmfUeNgapId int64
IPAddrv4 string
IPAddrv6 string
PortNumber int32
MaskedIMEISV *ngapType.MaskedIMEISV // TS 38.413 9.3.1.54
Guti string
/* Relative Context */
AMF *N3IWFAMF
/* Security */
SecurityCapabilities *ngapType.UESecurityCapabilities // TS 38.413 9.3.1.86
/* PDU Session */
PduSessionList map[int64]*PDUSession // pduSessionId as key
/* PDU Session Setup Temporary Data */
TemporaryPDUSessionSetupData *PDUSessionSetupTemporaryData
/* Temporary cached NAS message */
// Used when NAS registration accept arrived before
// UE setup NAS TCP connection with N3IWF, and
// Forward pduSessionEstablishmentAccept to UE after
// UE send CREATE_CHILD_SA response
TemporaryCachedNASMessage []byte
/* NAS TCP Connection Established */
IsNASTCPConnEstablished bool
IsNASTCPConnEstablishedComplete bool
/* NAS TCP Connection */
TCPConnection net.Conn
/* Others */
Guami *ngapType.GUAMI
IndexToRfsp int64
Ambr *ngapType.UEAggregateMaximumBitRate
AllowedNssai *ngapType.AllowedNSSAI
RadioCapability *ngapType.UERadioCapability // TODO: This is for RRC, can be deleted
CoreNetworkAssistanceInformation *ngapType.CoreNetworkAssistanceInformation // TS 38.413 9.3.1.15
IMSVoiceSupported int32
RRCEstablishmentCause int16
PduSessionReleaseList ngapType.PDUSessionResourceReleasedListRelRes
}
func (*N3IWFRanUe) AttachAMF ¶
func (ranUe *N3IWFRanUe) AttachAMF(sctpAddr string) bool
func (*N3IWFRanUe) CreatePDUSession ¶
func (ranUe *N3IWFRanUe) CreatePDUSession(pduSessionID int64, snssai ngapType.SNSSAI) (*PDUSession, error)
func (*N3IWFRanUe) DetachAMF ¶
func (ranUe *N3IWFRanUe) DetachAMF()
func (*N3IWFRanUe) FindPDUSession ¶
func (ranUe *N3IWFRanUe) FindPDUSession(pduSessionID int64) *PDUSession
func (*N3IWFRanUe) Remove ¶
func (ranUe *N3IWFRanUe) Remove() error
type NASTCPConnEstablishedCompleteEvt ¶
type NASTCPConnEstablishedCompleteEvt struct {
RanUeNgapId int64
}
func NewNASTCPConnEstablishedCompleteEvt ¶
func NewNASTCPConnEstablishedCompleteEvt(ranUeNgapId int64) *NASTCPConnEstablishedCompleteEvt
func (*NASTCPConnEstablishedCompleteEvt) Type ¶
func (nasTCPConnEstablishedCompleteEvt *NASTCPConnEstablishedCompleteEvt) Type() NgapEventType
type NGAPServer ¶
type NGAPServer struct {
Conn []*sctp.SCTPConn
RcvNgapPktCh chan ReceiveNGAPPacket
RcvEventCh chan NgapEvt
}
type NgapEventType ¶
type NgapEventType int64
const ( UnmarshalEAP5GData NgapEventType = iota SendInitialUEMessage SendPDUSessionResourceSetupResponse SendNASMsg StartTCPSignalNASMsg NASTCPConnEstablishedComplete SendUEContextReleaseRequest SendUEContextReleaseComplete SendPDUSessionResourceReleaseResponse GetNGAPContext )
NGAP event type
type NgapEvt ¶
type NgapEvt interface {
Type() NgapEventType
}
type PDUSession ¶
type PDUSession struct {
Id int64 // PDU Session ID
Type *ngapType.PDUSessionType
Ambr *ngapType.PDUSessionAggregateMaximumBitRate
Snssai ngapType.SNSSAI
NetworkInstance *ngapType.NetworkInstance
SecurityCipher bool
SecurityIntegrity bool
MaximumIntegrityDataRateUplink *ngapType.MaximumIntegrityProtectedDataRate
MaximumIntegrityDataRateDownlink *ngapType.MaximumIntegrityProtectedDataRate
GTPConnection *GTPConnectionInfo
QFIList []uint8
QosFlows map[int64]*QosFlow // QosFlowIdentifier as key
}
type PDUSessionSetupTemporaryData ¶
type PDUSessionSetupTemporaryData struct {
// Slice of unactivated PDU session
UnactivatedPDUSession []*PDUSession // PDUSession as content
// NGAPProcedureCode is used to identify which type of
// response shall be used
NGAPProcedureCode ngapType.ProcedureCode
// PDU session setup list response
SetupListCxtRes *ngapType.PDUSessionResourceSetupListCxtRes
FailedListCxtRes *ngapType.PDUSessionResourceFailedToSetupListCxtRes
SetupListSURes *ngapType.PDUSessionResourceSetupListSURes
FailedListSURes *ngapType.PDUSessionResourceFailedToSetupListSURes
// List of Error for failed setup PDUSessionID
FailedErrStr []EvtError // Error string as content
// Current Index of UnactivatedPDUSession
Index int
}
type QosFlow ¶
type QosFlow struct {
Identifier int64
Parameters ngapType.QosFlowLevelQosParameters
}
type ReceiveNGAPPacket ¶
type SendChildSADeleteRequestEvt ¶
func NewSendChildSADeleteRequestEvt ¶
func NewSendChildSADeleteRequestEvt(localSPI uint64, releaseIdList []int64, ) *SendChildSADeleteRequestEvt
func (*SendChildSADeleteRequestEvt) Type ¶
func (sendChildSADeleteRequestEvt *SendChildSADeleteRequestEvt) Type() IkeEventType
type SendEAP5GFailureMsgEvt ¶
func NewSendEAP5GFailureMsgEvt ¶
func NewSendEAP5GFailureMsgEvt(localSPI uint64, errMsg EvtError, ) *SendEAP5GFailureMsgEvt
func (*SendEAP5GFailureMsgEvt) Type ¶
func (sendEAP5GFailureMsgEvt *SendEAP5GFailureMsgEvt) Type() IkeEventType
type SendEAPNASMsgEvt ¶
func NewSendEAPNASMsgEvt ¶
func NewSendEAPNASMsgEvt(localSPI uint64, nasPDU []byte, ) *SendEAPNASMsgEvt
func (*SendEAPNASMsgEvt) Type ¶
func (sendEAPNASMsgEvt *SendEAPNASMsgEvt) Type() IkeEventType
type SendEAPSuccessMsgEvt ¶
func NewSendEAPSuccessMsgEvt ¶
func NewSendEAPSuccessMsgEvt(localSPI uint64, kn3iwf []byte, pduSessionListLen int, ) *SendEAPSuccessMsgEvt
func (*SendEAPSuccessMsgEvt) Type ¶
func (SendEAPSuccessMsgEvt *SendEAPSuccessMsgEvt) Type() IkeEventType
type SendInitialUEMessageEvt ¶
type SendInitialUEMessageEvt struct {
RanUeNgapId int64
IPv4Addr string
IPv4Port int
NasPDU []byte
}
func NewSendInitialUEMessageEvt ¶
func NewSendInitialUEMessageEvt(ranUeNgapId int64, ipv4Addr string, ipv4Port int, nasPDU []byte, ) *SendInitialUEMessageEvt
func (*SendInitialUEMessageEvt) Type ¶
func (sendInitialUEMessageEvt *SendInitialUEMessageEvt) Type() NgapEventType
type SendNASMsgEvt ¶
type SendNASMsgEvt struct {
RanUeNgapId int64
}
func NewSendNASMsgEvt ¶
func NewSendNASMsgEvt(ranUeNgapId int64) *SendNASMsgEvt
func (*SendNASMsgEvt) Type ¶
func (sendNASMsgEvt *SendNASMsgEvt) Type() NgapEventType
type SendPDUSessionResourceReleaseResEvt ¶
type SendPDUSessionResourceReleaseResEvt struct {
RanUeNgapId int64
}
func NewSendPDUSessionResourceReleaseResEvt ¶
func NewSendPDUSessionResourceReleaseResEvt(ranUeNgapId int64) *SendPDUSessionResourceReleaseResEvt
func (*SendPDUSessionResourceReleaseResEvt) Type ¶
func (sendPDUSessionResourceReleaseResEvt *SendPDUSessionResourceReleaseResEvt) Type() NgapEventType
type SendPDUSessionResourceSetupResEvt ¶
type SendPDUSessionResourceSetupResEvt struct {
RanUeNgapId int64
}
func NewSendPDUSessionResourceSetupResEvt ¶
func NewSendPDUSessionResourceSetupResEvt(ranUeNgapId int64) *SendPDUSessionResourceSetupResEvt
func (*SendPDUSessionResourceSetupResEvt) Type ¶
func (sendPDUSessionResourceSetupResEvt *SendPDUSessionResourceSetupResEvt) Type() NgapEventType
type SendUEContextReleaseCompleteEvt ¶
type SendUEContextReleaseCompleteEvt struct {
RanUeNgapId int64
}
func NewSendUEContextReleaseCompleteEvt ¶
func NewSendUEContextReleaseCompleteEvt(ranUeNgapId int64) *SendUEContextReleaseCompleteEvt
func (*SendUEContextReleaseCompleteEvt) Type ¶
func (sendUEContextReleaseCompleteEvt *SendUEContextReleaseCompleteEvt) Type() NgapEventType
type SendUEContextReleaseRequestEvt ¶
func NewSendUEContextReleaseRequestEvt ¶
func NewSendUEContextReleaseRequestEvt(ranUeNgapId int64, errMsg EvtError, ) *SendUEContextReleaseRequestEvt
func (*SendUEContextReleaseRequestEvt) Type ¶
func (sendUEContextReleaseRequestEvt *SendUEContextReleaseRequestEvt) Type() NgapEventType
type SliceOverloadItem ¶
type SliceOverloadItem struct {
SNssaiList []ngapType.SNSSAI
Action *ngapType.OverloadAction
TrafficInd *int64
}
type StartTCPSignalNASMsgEvt ¶
type StartTCPSignalNASMsgEvt struct {
RanUeNgapId int64
}
func NewStartTCPSignalNASMsgEvt ¶
func NewStartTCPSignalNASMsgEvt(ranUeNgapId int64) *StartTCPSignalNASMsgEvt
func (*StartTCPSignalNASMsgEvt) Type ¶
func (startTCPSignalNASMsgEvt *StartTCPSignalNASMsgEvt) Type() NgapEventType
type Timer ¶
type Timer struct {
// contains filtered or unexported fields
}
func NewDPDPeriodicTimer ¶
func NewDPDPeriodicTimer(d time.Duration, maxRetryTimes int32, ikeSA *IKESecurityAssociation, cancelFunc func(), ) *Timer
type UDPSocketInfo ¶
type UnmarshalEAP5GDataEvt ¶
type UnmarshalEAP5GDataEvt struct {
LocalSPI uint64
EAPVendorData []byte
IsInitialUE bool
RanUeNgapId int64
}
func NewUnmarshalEAP5GDataEvt ¶
func NewUnmarshalEAP5GDataEvt(localSPI uint64, eapVendorData []byte, isInitialUE bool, ranUeNgapId int64, ) *UnmarshalEAP5GDataEvt
func (*UnmarshalEAP5GDataEvt) Type ¶
func (unmarshalEAP5GDataEvt *UnmarshalEAP5GDataEvt) Type() NgapEventType
type UnmarshalEAP5GDataResponseEvt ¶
func NewUnmarshalEAP5GDataResponseEvt ¶
func NewUnmarshalEAP5GDataResponseEvt(localSPI uint64, ranUeNgapId int64, nasPDU []byte, ) *UnmarshalEAP5GDataResponseEvt
func (*UnmarshalEAP5GDataResponseEvt) Type ¶
func (unmarshalEAP5GDataResponseEvt *UnmarshalEAP5GDataResponseEvt) Type() IkeEventType
Click to show internal directories.
Click to hide internal directories.