Documentation
¶
Index ¶
- Variables
- func DisplayConfig() func(c *gin.Context)
- func DisplayXdpStatistics(forwardPlaneStats ebpf.UpfXdpActionStatistic) func(c *gin.Context)
- func GetQerContent(bpfObjects *ebpf.BpfObjects) func(c *gin.Context)
- func GetTransportLevelMarking(far *ie.IE) (uint16, error)
- func HandlePfcpAssociationSetupRequest(conn *PfcpConnection, msg message.Message, addr string) (message.Message, error)
- func HandlePfcpHeartbeatRequest(conn *PfcpConnection, msg message.Message, addr string) (message.Message, error)
- func HandlePfcpHeartbeatResponse(conn *PfcpConnection, msg message.Message, addr string) (message.Message, error)
- func HandlePfcpSessionDeletionRequest(conn *PfcpConnection, msg message.Message, addr string) (message.Message, error)
- func HandlePfcpSessionEstablishmentRequest(conn *PfcpConnection, msg message.Message, addr string) (message.Message, error)
- func HandlePfcpSessionModificationRequest(conn *PfcpConnection, msg message.Message, addr string) (message.Message, error)
- func ListPfcpAssociations(pfcpSrv *PfcpConnection) func(c *gin.Context)
- func ListPfcpAssociationsFull(pfcpSrv *PfcpConnection) func(c *gin.Context)
- func ListPfcpSessionsFiltered(pfcpSrv *PfcpConnection) func(c *gin.Context)
- func ListQerMapContent(bpfObjects *ebpf.BpfObjects) func(c *gin.Context)
- func ListUpfPipeline(bpfObjects *ebpf.BpfObjects) func(c *gin.Context)
- func RegisterMetrics(stats ebpf.UpfXdpActionStatistic)
- func SendHeartbeatRequest(conn *PfcpConnection, sequenceID uint32, associationAddr string)
- func StartMetrics(addr string) error
- type ApiServer
- type NodeAssociation
- func (association *NodeAssociation) IsExpired() bool
- func (association *NodeAssociation) IsHeartbeatScheduled() bool
- func (association *NodeAssociation) NewLocalSEID() uint64
- func (association *NodeAssociation) NewSequenceID() uint32
- func (association *NodeAssociation) RefreshRetries()
- func (association *NodeAssociation) ScheduleHeartbeatRequest(duration time.Duration, conn *PfcpConnection) context.CancelFunc
- type NodeAssociationMapNoSession
- type NodeAssociationNoSession
- type PfcpConnection
- func (connection *PfcpConnection) Close()
- func (connection *PfcpConnection) DeleteAssociation(assocAddr string)
- func (connection *PfcpConnection) DeleteSession(session *Session)
- func (connection *PfcpConnection) GetAssociation(assocAddr string) *NodeAssociation
- func (connection *PfcpConnection) Handle(b []byte, addr *net.UDPAddr)
- func (connection *PfcpConnection) Receive(b []byte) (n int, addr *net.UDPAddr, err error)
- func (connection *PfcpConnection) RefreshAssociations()
- func (connection *PfcpConnection) Run()
- func (connection *PfcpConnection) Send(b []byte, addr *net.UDPAddr) (int, error)
- func (connection *PfcpConnection) SendMessage(msg message.Message, addr *net.UDPAddr) error
- type PfcpFunc
- type PfcpHandlerMap
- type SFarInfo
- type SPDRInfo
- type SQerInfo
- type Session
- func FilterSessionsByIP(nodeMap *map[string]*NodeAssociation, filterByIP net.IP) *Session
- func FilterSessionsByTeid(nodeMap *map[string]*NodeAssociation, filterByTeid uint32) *Session
- func GetAllSessions(nodeMap *map[string]*NodeAssociation) (sessions []Session)
- func NewSession(localSEID uint64, remoteSEID uint64) *Session
- func (s *Session) GetDownlinkPDR(id uint16) SPDRInfo
- func (s *Session) GetFar(id uint32) SFarInfo
- func (s *Session) GetQer(id uint32) SQerInfo
- func (s *Session) GetUplinkPDR(id uint16) SPDRInfo
- func (s *Session) NewFar(id uint32, internalId uint32, farInfo ebpf.FarInfo)
- func (s *Session) NewQer(id uint32, internalId uint32, qerInfo ebpf.QerInfo)
- func (s *Session) PutDownlinkPDR(id uint32, info SPDRInfo)
- func (s *Session) PutUplinkPDR(id uint32, info SPDRInfo)
- func (s *Session) RemoveDownlinkPDR(id uint32) SPDRInfo
- func (s *Session) RemoveFar(id uint32) SFarInfo
- func (s *Session) RemoveQer(id uint32) SQerInfo
- func (s *Session) RemoveUplinkPDR(id uint32) SPDRInfo
- func (s *Session) UpdateFar(id uint32, farInfo ebpf.FarInfo)
- func (s *Session) UpdateQer(id uint32, qerInfo ebpf.QerInfo)
- type XdpStats
Constants ¶
This section is empty.
Variables ¶
var ( PfcpMessageRx = promauto.NewCounterVec(prometheus.CounterOpts{ Name: "upf_pfcp_rx", Help: "The total number of received PFCP messages", }, []string{"message_name"}) PfcpMessageTx = promauto.NewCounterVec(prometheus.CounterOpts{ Name: "upf_pfcp_tx", Help: "The total number of transmitted PFCP messages", }, []string{"message_name"}) PfcpMessageRxErrors = promauto.NewCounterVec(prometheus.CounterOpts{ Name: "upf_pfcp_rx_errors", Help: "The total number of received PFCP messages with cause code", }, []string{"message_name", "cause_code"}) UpfXdpAborted prometheus.CounterFunc UpfXdpDrop prometheus.CounterFunc UpfXdpPass prometheus.CounterFunc UpfXdpTx prometheus.CounterFunc UpfXdpRedirect prometheus.CounterFunc UpfRx = promauto.NewCounterVec(prometheus.CounterOpts{ Name: "upf_rx", Help: "The total number of received packets", }, []string{"packet_type"}) UpfMessageRxLatency = promauto.NewSummaryVec(prometheus.SummaryOpts{ Name: "upf_pfcp_rx_latency", Subsystem: "pfcp", Help: "Duration of the PFCP message processing", Objectives: map[float64]float64{0.5: 0.05, 0.9: 0.01, 0.99: 0.001}, }, []string{"message_type"}) )
Functions ¶
func DisplayConfig ¶
DisplayConfig godoc @Summary Display configuration @Description Display configuration @Tags Configuration @Produce json @Success 200 {object} config.UpfConfig @Router /config [get]
func DisplayXdpStatistics ¶
func DisplayXdpStatistics(forwardPlaneStats ebpf.UpfXdpActionStatistic) func(c *gin.Context)
DisplayXdpStatistics godoc @Summary Display XDP statistics @Description Display XDP statistics @Tags XDP @Produce json @Success 200 {object} XdpStats @Router /xdp_stats [get]
func GetQerContent ¶
func GetQerContent(bpfObjects *ebpf.BpfObjects) func(c *gin.Context)
GetQerContent godoc @Summary List QER map content @Description List QER map content @Tags QER @Produce json @Param id path int true "Qer ID" @Success 200 {object} []ebpf.QerMapElement @Router /qer_map/{id} [get]
func GetTransportLevelMarking ¶ added in v0.3.4
func HandlePfcpAssociationSetupRequest ¶
func HandlePfcpAssociationSetupRequest(conn *PfcpConnection, msg message.Message, addr string) (message.Message, error)
https://www.etsi.org/deliver/etsi_ts/129200_129299/129244/16.04.00_60/ts_129244v160400p.pdf page 95
func HandlePfcpHeartbeatResponse ¶ added in v0.3.3
func ListPfcpAssociations ¶
func ListPfcpAssociations(pfcpSrv *PfcpConnection) func(c *gin.Context)
ListPfcpAssociations godoc @Summary List PFCP associations @Description List PFCP associations @Tags PFCP @Produce json @Success 200 {object} NodeAssociationMapNoSession @Router /pfcp_associations [get]
func ListPfcpAssociationsFull ¶
func ListPfcpAssociationsFull(pfcpSrv *PfcpConnection) func(c *gin.Context)
ListPfcpAssociationsFull godoc @Summary List PFCP associations @Description List PFCP associations @Tags PFCP @Produce json @Success 200 {object} map[string]core.NodeAssociation @Router /pfcp_associations/full [get]
func ListPfcpSessionsFiltered ¶
func ListPfcpSessionsFiltered(pfcpSrv *PfcpConnection) func(c *gin.Context)
ListPfcpSessionsFiltered godoc @Summary If no parameters are given, list all PFCP sessions. If ip or teid is given, single session will be returned. If both ip and teid are given, it is possible to return two sessions. @Tags PFCP @Produce json @Param ip query string false "ip" @Param teid query int false "teid" @Success 200 {object} []core.Session @Router /pfcp_sessions [get]
func ListQerMapContent ¶
func ListQerMapContent(bpfObjects *ebpf.BpfObjects) func(c *gin.Context)
ListQerMapContent godoc @Summary List QER map content @Description List QER map content @Tags QER @Produce json @Success 200 {object} []ebpf.QerMapElement @Router /qer_map [get]
func ListUpfPipeline ¶
func ListUpfPipeline(bpfObjects *ebpf.BpfObjects) func(c *gin.Context)
ListUpfPipeline godoc @Summary List UPF pipeline @Description List UPF pipeline @Tags UPF @Produce json @Success 200 {object} []ebpf.BpfMapProgArrayMember @Router /upf_pipeline [get]
func RegisterMetrics ¶
func RegisterMetrics(stats ebpf.UpfXdpActionStatistic)
func SendHeartbeatRequest ¶ added in v0.3.3
func SendHeartbeatRequest(conn *PfcpConnection, sequenceID uint32, associationAddr string)
func StartMetrics ¶
Types ¶
type ApiServer ¶
type ApiServer struct {
// contains filtered or unexported fields
}
func CreateApiServer ¶
func CreateApiServer(bpfObjects *ebpf.BpfObjects, pfcpSrv *PfcpConnection, forwardPlaneStats ebpf.UpfXdpActionStatistic) *ApiServer
type NodeAssociation ¶
type NodeAssociation struct {
ID string
Addr string
NextSessionID uint64
NextSequenceID uint32
Sessions map[uint64]*Session
HeartbeatRetries uint32
// contains filtered or unexported fields
}
func NewNodeAssociation ¶ added in v0.3.3
func NewNodeAssociation(remoteNodeID string, addr string) *NodeAssociation
func (*NodeAssociation) IsExpired ¶ added in v0.3.3
func (association *NodeAssociation) IsExpired() bool
func (*NodeAssociation) IsHeartbeatScheduled ¶ added in v0.3.3
func (association *NodeAssociation) IsHeartbeatScheduled() bool
func (*NodeAssociation) NewLocalSEID ¶
func (association *NodeAssociation) NewLocalSEID() uint64
func (*NodeAssociation) NewSequenceID ¶ added in v0.3.5
func (association *NodeAssociation) NewSequenceID() uint32
func (*NodeAssociation) RefreshRetries ¶ added in v0.3.3
func (association *NodeAssociation) RefreshRetries()
func (*NodeAssociation) ScheduleHeartbeatRequest ¶ added in v0.3.3
func (association *NodeAssociation) ScheduleHeartbeatRequest(duration time.Duration, conn *PfcpConnection) context.CancelFunc
ScheduleHeartbeatRequest schedules a series of heartbeat requests to be sent to the remote node. Return a cancellation function to stop the scheduled requests.
type NodeAssociationMapNoSession ¶
type NodeAssociationMapNoSession map[string]NodeAssociationNoSession
type PfcpConnection ¶
type PfcpConnection struct {
NodeAssociations map[string]*NodeAssociation
// contains filtered or unexported fields
}
func CreatePfcpConnection ¶
func CreatePfcpConnection(addr string, pfcpHandlerMap PfcpHandlerMap, nodeId string, n3Ip string, mapOperations ebpf.ForwardingPlaneController) (*PfcpConnection, error)
func (*PfcpConnection) Close ¶
func (connection *PfcpConnection) Close()
func (*PfcpConnection) DeleteAssociation ¶ added in v0.3.3
func (connection *PfcpConnection) DeleteAssociation(assocAddr string)
DeleteAssociation deletes an association and all sessions associated with it.
func (*PfcpConnection) DeleteSession ¶ added in v0.3.3
func (connection *PfcpConnection) DeleteSession(session *Session)
DeleteSession deletes a session and all PDRs, FARs and QERs associated with it.
func (*PfcpConnection) GetAssociation ¶ added in v0.3.3
func (connection *PfcpConnection) GetAssociation(assocAddr string) *NodeAssociation
func (*PfcpConnection) Handle ¶
func (connection *PfcpConnection) Handle(b []byte, addr *net.UDPAddr)
func (*PfcpConnection) RefreshAssociations ¶ added in v0.3.3
func (connection *PfcpConnection) RefreshAssociations()
RefreshAssociations checks for expired associations and schedules heartbeats for those that are not expired.
func (*PfcpConnection) Run ¶
func (connection *PfcpConnection) Run()
func (*PfcpConnection) SendMessage ¶
type PfcpHandlerMap ¶
func (PfcpHandlerMap) Handle ¶
func (handlerMap PfcpHandlerMap) Handle(conn *PfcpConnection, buf []byte, addr *net.UDPAddr) error
type Session ¶
type Session struct {
LocalSEID uint64
RemoteSEID uint64
UplinkPDRs map[uint32]SPDRInfo
DownlinkPDRs map[uint32]SPDRInfo
FARs map[uint32]SFarInfo
QERs map[uint32]SQerInfo
}
func FilterSessionsByIP ¶
func FilterSessionsByIP(nodeMap *map[string]*NodeAssociation, filterByIP net.IP) *Session
func FilterSessionsByTeid ¶
func FilterSessionsByTeid(nodeMap *map[string]*NodeAssociation, filterByTeid uint32) *Session
func GetAllSessions ¶
func GetAllSessions(nodeMap *map[string]*NodeAssociation) (sessions []Session)