core

package
v0.3.6 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 26, 2023 License: Apache-2.0 Imports: 22 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
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
	UpfPfcpSessions     prometheus.GaugeFunc
	UpfPfcpAssociations prometheus.GaugeFunc

	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

func DisplayConfig() func(c *gin.Context)

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 GetTransportLevelMarking(far *ie.IE) (uint16, error)

func HandlePfcpHeartbeatRequest

func HandlePfcpHeartbeatRequest(conn *PfcpConnection, msg message.Message, addr string) (message.Message, error)

func HandlePfcpHeartbeatResponse added in v0.3.3

func HandlePfcpHeartbeatResponse(conn *PfcpConnection, msg message.Message, addr string) (message.Message, error)

func HandlePfcpSessionDeletionRequest

func HandlePfcpSessionDeletionRequest(conn *PfcpConnection, msg message.Message, addr string) (message.Message, error)

func HandlePfcpSessionEstablishmentRequest

func HandlePfcpSessionEstablishmentRequest(conn *PfcpConnection, msg message.Message, addr string) (message.Message, error)

func HandlePfcpSessionModificationRequest

func HandlePfcpSessionModificationRequest(conn *PfcpConnection, msg message.Message, addr string) (message.Message, error)

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, conn *PfcpConnection)

func SendHeartbeatRequest added in v0.3.3

func SendHeartbeatRequest(conn *PfcpConnection, sequenceID uint32, associationAddr string)

func StartMetrics

func StartMetrics(addr string) error

Types

type ApiServer

type ApiServer struct {
	// contains filtered or unexported fields
}

func CreateApiServer

func CreateApiServer(bpfObjects *ebpf.BpfObjects, pfcpSrv *PfcpConnection, forwardPlaneStats ebpf.UpfXdpActionStatistic) *ApiServer

func (*ApiServer) Run

func (server *ApiServer) Run(addr string) error

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 NodeAssociationNoSession

type NodeAssociationNoSession struct {
	ID            string
	Addr          string
	NextSessionID uint64
}

type PfcpConnection

type PfcpConnection struct {
	NodeAssociations map[string]*NodeAssociation

	RecoveryTimestamp time.Time
	// 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) GetAssiciationCount added in v0.3.6

func (connection *PfcpConnection) GetAssiciationCount() int

func (*PfcpConnection) GetAssociation added in v0.3.3

func (connection *PfcpConnection) GetAssociation(assocAddr string) *NodeAssociation

func (*PfcpConnection) GetSessionCount added in v0.3.6

func (connection *PfcpConnection) GetSessionCount() int

func (*PfcpConnection) Handle

func (connection *PfcpConnection) Handle(b []byte, addr *net.UDPAddr)

func (*PfcpConnection) Receive

func (connection *PfcpConnection) Receive(b []byte) (n int, addr *net.UDPAddr, err error)

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) Send

func (connection *PfcpConnection) Send(b []byte, addr *net.UDPAddr) (int, error)

func (*PfcpConnection) SendMessage

func (connection *PfcpConnection) SendMessage(msg message.Message, addr *net.UDPAddr) error

type PfcpFunc

type PfcpFunc func(conn *PfcpConnection, msg message.Message, addr string) (message.Message, error)

type PfcpHandlerMap

type PfcpHandlerMap map[uint8]PfcpFunc

func (PfcpHandlerMap) Handle

func (handlerMap PfcpHandlerMap) Handle(conn *PfcpConnection, buf []byte, addr *net.UDPAddr) error

type SFarInfo

type SFarInfo struct {
	FarInfo  ebpf.FarInfo
	GlobalId uint32
}

type SPDRInfo

type SPDRInfo struct {
	PdrInfo ebpf.PdrInfo
	Teid    uint32
	Ipv4    net.IP
	Ipv6    net.IP
}

type SQerInfo

type SQerInfo struct {
	QerInfo  ebpf.QerInfo
	GlobalId uint32
}

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)

func NewSession added in v0.3.3

func NewSession(localSEID uint64, remoteSEID uint64) *Session

func (*Session) GetDownlinkPDR

func (s *Session) GetDownlinkPDR(id uint16) SPDRInfo

func (*Session) GetFar

func (s *Session) GetFar(id uint32) SFarInfo

func (*Session) GetQer

func (s *Session) GetQer(id uint32) SQerInfo

func (*Session) GetUplinkPDR

func (s *Session) GetUplinkPDR(id uint16) SPDRInfo

func (*Session) NewFar

func (s *Session) NewFar(id uint32, internalId uint32, farInfo ebpf.FarInfo)

func (*Session) NewQer

func (s *Session) NewQer(id uint32, internalId uint32, qerInfo ebpf.QerInfo)

func (*Session) PutDownlinkPDR

func (s *Session) PutDownlinkPDR(id uint32, info SPDRInfo)

func (*Session) PutUplinkPDR

func (s *Session) PutUplinkPDR(id uint32, info SPDRInfo)

func (*Session) RemoveDownlinkPDR

func (s *Session) RemoveDownlinkPDR(id uint32) SPDRInfo

func (*Session) RemoveFar

func (s *Session) RemoveFar(id uint32) SFarInfo

func (*Session) RemoveQer

func (s *Session) RemoveQer(id uint32) SQerInfo

func (*Session) RemoveUplinkPDR

func (s *Session) RemoveUplinkPDR(id uint32) SPDRInfo

func (*Session) UpdateFar

func (s *Session) UpdateFar(id uint32, farInfo ebpf.FarInfo)

func (*Session) UpdateQer

func (s *Session) UpdateQer(id uint32, qerInfo ebpf.QerInfo)

type XdpStats

type XdpStats struct {
	Aborted  uint64 `json:"aborted"`
	Drop     uint64 `json:"drop"`
	Pass     uint64 `json:"pass"`
	Tx       uint64 `json:"tx"`
	Redirect uint64 `json:"redirect"`
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL