gtp5gnl

package module
v1.0.3 Latest Latest
Warning

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

Go to latest
Published: Dec 16, 2024 License: Apache-2.0 Imports: 11 Imported by: 0

README

go-gtp5gnl

go-gtp5gnl provides a netlink library about gtp5g for Go.

License

This software is released under the Apache 2.0 License, see LICENSE

Usage

List all PDR/FAR/QER
# ./gtp5g-tunnel list [pdr/far/qer]
./gtp5g-tunnel list pdr
Get/Del/Add/Mod PDR/FAR/QER
# ./gtp5g-tunnel [get/del/add/mod] [PDR/FAR/QER] [interface_name] [seid] [id] [option]
./gtp5g-tunnel add pdr upfgtp0 1 3 --pcd 99
  • options
    PDR OPTIONS
    
            --pcd <precedence>
    
            --hdr-rm <outer-header-removal>
    
            --far-id <existed-far-id>
    
            --ue-ipv4 <pdi-ue-ipv4>
    
            --f-teid <i-teid> <local-gtpu-ipv4>
    
            --sdf-desp <description-string>
    
            --sdf-tos-traff-cls <tos-traffic-class>
    
            --sdf-scy-param-idx <security-param-idx>
    
            --sdf-flow-label <flow-label>
    
            --sdf-id <id>
    
            --qer-id <id>
    
    FAR OPTIONS
    
            --action <apply-action>
    
            --hdr-creation <description> <o-teid> <peer-ipv4> <peer-port>
    
    QER OPTIONS
    
            --qer-id <qer-id>
    
            --qfi-id <qfi-id> [Value range: {0..63}]
    
            --rqi-d <rqi> [Value range: {0=not triggered, 1=triggered}]
    
            --ppp <ppp> [Value range: {0=not present, 1=present}]
    
            --ppi <ppi> [Value range: {0..7}]
    

Documentation

Index

Constants

View Source
const (
	LINK = iota + 1
	NET_NS_FD
)
View Source
const (
	BAR_ID = iota + 3
	BAR_DOWNLINK_DATA_NOTIFICATION_DELAY
	BAR_BUFFERING_PACKETS_COUNT
	BAR_SEID
)
View Source
const (
	FAR_ID = iota + 3
	FAR_APPLY_ACTION
	FAR_FORWARDING_PARAMETER
	FAR_RELATED_TO_PDR
	FAR_SEID
	FAR_BAR_ID
)
View Source
const (
	FORWARDING_PARAMETER_OUTER_HEADER_CREATION = iota + 1
	FORWARDING_PARAMETER_FORWARDING_POLICY
	FORWARDING_PARAMETER_PFCPSM_REQ_FLAGS
	FORWARDING_PARAMETER_TOS_TC
)
View Source
const (
	OUTER_HEADER_CREATION_DESCRIPTION = iota + 1
	OUTER_HEADER_CREATION_O_TEID
	OUTER_HEADER_CREATION_PEER_ADDR_IPV4
	OUTER_HEADER_CREATION_PORT
)
View Source
const (
	PDR_ID = iota + 3
	PDR_PRECEDENCE
	PDR_PDI
	PDR_OUTER_HEADER_REMOVAL
	PDR_FAR_ID
	PDR_ROLE_ADDR_IPV4
	PDR_UNIX_SOCKET_PATH
	PDR_QER_ID
	PDR_SEID
	PDR_URR_ID
	PDR_PDN_TYPE
)
View Source
const (
	PDI_UE_ADDR_IPV4 = iota + 1
	PDI_F_TEID
	PDI_SDF_FILTER
	PDI_SRC_INTF
	PDI_ETHERNET_PACKET_FILTER
)
View Source
const (
	F_TEID_I_TEID = iota + 1
	F_TEID_GTPU_ADDR_IPV4
)
View Source
const (
	SDF_FILTER_FLOW_DESCRIPTION = iota + 1
	SDF_FILTER_TOS_TRAFFIC_CLASS
	SDF_FILTER_SECURITY_PARAMETER_INDEX
	SDF_FILTER_FLOW_LABEL
	SDF_FILTER_SDF_FILTER_ID
)
View Source
const (
	FLOW_DESCRIPTION_ACTION = iota + 1
	FLOW_DESCRIPTION_DIRECTION
	FLOW_DESCRIPTION_PROTOCOL
	FLOW_DESCRIPTION_SRC_IPV4
	FLOW_DESCRIPTION_SRC_MASK
	FLOW_DESCRIPTION_DEST_IPV4
	FLOW_DESCRIPTION_DEST_MASK
	FLOW_DESCRIPTION_SRC_PORT
	FLOW_DESCRIPTION_DEST_PORT
)
View Source
const (
	SDF_FILTER_ACTION_UNSPEC = iota
	SDF_FILTER_PERMIT
)
View Source
const (
	SDF_FILTER_DIRECTION_UNSPEC = iota
	SDF_FILTER_IN
	SDF_FILTER_OUT
)
View Source
const (
	EPF_FILTER_ETHERNET_FILTER_ID = iota + 1
	EPF_FILTER_ETHERNET_FILTER_PROPERTIES
	EPF_FILTER_MACADDRESS
	EPF_FILTER_ETHERTYPE
	EPF_FILTER_CTAG
	EPF_FILTER_STAG
	EPF_FILTER_SDF_FILTER
)
View Source
const (
	MACADDRESS_SRC = iota + 1
	MACADDRESS_DST
	MACADDRESS_UPPER_SRC
	MACADDRESS_UPPER_DST
)
View Source
const (
	QER_ID = iota + 3
	QER_GATE
	QER_MBR
	QER_GBR
	QER_CORR_ID
	QER_RQI
	QER_QFI
	QER_PPI
	QER_RCSR // deplicated
	QER_RELATED_TO_PDR
	QER_SEID
)
View Source
const (
	QER_MBR_UL_HIGH32 = iota + 1
	QER_MBR_UL_LOW8
	QER_MBR_DL_HIGH32
	QER_MBR_DL_LOW8
)
View Source
const (
	QER_GBR_UL_HIGH32 = iota + 1
	QER_GBR_UL_LOW8
	QER_GBR_DL_HIGH32
	QER_GBR_DL_LOW8
)
View Source
const (
	USTAT_UL_VOL_RX = iota + 1
	USTAT_UL_VOL_TX
	USTAT_DL_VOL_RX
	USTAT_DL_VOL_TX

	USTAT_UL_PKT_RX
	USTAT_UL_PKT_TX
	USTAT_DL_PKT_RX
	USTAT_DL_PKT_TX
)

for UPF Usage Statistic

View Source
const (
	UR_URRID = iota + 3
	UR_USAGE_REPORT_TRIGGER
	UR_URSEQN
	UR_VOLUME_MEASUREMENT
	UR_QUERY_URR_REFERENCE
	UR_START_TIME
	UR_END_TIME
	UR_SEID
)
View Source
const (
	UR_VOLUME_MEASUREMENT_FLAGS = iota + 1

	UR_VOLUME_MEASUREMENT_TOVOL
	UR_VOLUME_MEASUREMENT_UVOL
	UR_VOLUME_MEASUREMENT_DVOL

	UR_VOLUME_MEASUREMENT_TOPACKET
	UR_VOLUME_MEASUREMENT_UPACKET
	UR_VOLUME_MEASUREMENT_DPACKET
)
View Source
const (
	TOVOL uint8 = 1 << iota
	ULVOL
	DLVOL
	TONOP
	ULNOP
	DLNOP
)
View Source
const (
	MAX_NETLINK_MSG_BODY_SIZE = 7856
	NETLIMK_ATTR_HDR_SIZE     = 4
)

The maximun netlink message size is 16K, and the body for the attibutes are 7856 Bytes

View Source
const (
	URR_ID = iota + 3
	URR_MEASUREMENT_METHOD
	URR_REPORTING_TRIGGER
	URR_MEASUREMENT_PERIOD
	URR_MEASUREMENT_INFO
	URR_SEID
	URR_VOLUME_THRESHOLD
	URR_VOLUME_QUOTA
	URR_MULTI_SEID_URRID
	URR_NUM
)
View Source
const (
	URR_VOLUME_QUOTA_FLAG = iota + 1
	URR_VOLUME_QUOTA_TOVOL
	URR_VOLUME_QUOTA_UVOL
	URR_VOLUME_QUOTA_DVOL
)
View Source
const (
	URR_VOLUME_THRESHOLD_FLAG = iota + 1
	URR_VOLUME_THRESHOLD_TOVOL
	URR_VOLUME_THRESHOLD_UVOL
	URR_VOLUME_THRESHOLD_DVOL
)
View Source
const (
	BUFFER = iota + 1
	REPORT
)
View Source
const (
	BUFFER_PAD = iota + 3
	BUFFER_PACKET
	BUFFER_ID
	BUFFER_SEID
	BUFFER_ACTION
)
View Source
const (
	CMD_UNSPEC = iota

	CMD_ADD_PDR
	CMD_ADD_FAR
	CMD_ADD_QER

	CMD_DEL_PDR
	CMD_DEL_FAR
	CMD_DEL_QER

	CMD_GET_PDR
	CMD_GET_FAR
	CMD_GET_QER

	CMD_ADD_URR
	CMD_ADD_BAR
	CMD_DEL_URR
	CMD_DEL_BAR
	CMD_GET_URR
	CMD_GET_BAR

	CMD_GET_VERSION
	CMD_GET_REPORT

	CMD_BUFFER_GTPU
	CMD_GET_MULTI_REPORTS
	CMD_GET_USAGE_STATISTIC
)
View Source
const (
	IFLA_UNSPEC = iota
	IFLA_FD1
	IFLA_HASHSIZE
	IFLA_ROLE
	IFLA_ETHERNET_N6_DEV
)
View Source
const (
	ATTR_MAX = 0x10
)
View Source
const (
	GENL_MCGRP = iota
)
View Source
const PdrAddrForNetlink = "/"
View Source
const (
	UR = iota + 5
)

Variables

This section is empty.

Functions

func CreateBAR

func CreateBAR(c *Client, link *Link, barid int, attrs []nl.Attr) error

m LINK: ifindex o BAR_SEID: u64 m BAR_ID: u8 o BAR_DOWNLINK_DATA_NOTIFICATION_DELAY: u8 o BAR_BUFFERING_PACKETS_COUNT: u16

func CreateBAROID

func CreateBAROID(c *Client, link *Link, oid OID, attrs []nl.Attr) error

func CreateFAR

func CreateFAR(c *Client, link *Link, farid int, attrs []nl.Attr) error

m LINK: ifindex m FAR_ID: u32 m FAR_APPLY_ACTION: u16 m FAR_FORWARDING_PARAMETER {

m   FORWARDING_PARAMETER_OUTER_HEADER_CREATION {
      OUTER_HEADER_CREATION_DESCRIPTION: u16
      OUTER_HEADER_CREATION_O_TEID: u32
      OUTER_HEADER_CREATION_PEER_ADDR_IPV4: [4]byte IP
      OUTER_HEADER_CREATION_PORT: u16
    }

o FORWARDING_PARAMETER_FORWARDING_POLICY: string

}

func CreateFAROID

func CreateFAROID(c *Client, link *Link, oid OID, attrs []nl.Attr) error

func CreatePDR

func CreatePDR(c *Client, link *Link, pdrid int, attrs []nl.Attr) error

m LINK: ifindex m PDR_ID: u16 o PDR_PRECEDENCE: u32 o PDR_OUTER_HEADER_REMOVAL: u8 o PDR_FAR_ID: u32 o PDR_QER_ID: u32 o PDR_PDI { o PDI_UE_ADDR_IPV4: u32

o   PDI_F_TEID {
      F_TEID_I_TEID: u32
      F_TEID_GTPU_ADDR_IPV4: u32
    }
o   PDI_SDF_FILTER {
    }
  }

func CreatePDROID

func CreatePDROID(c *Client, link *Link, oid OID, attrs []nl.Attr) error

func CreateQER

func CreateQER(c *Client, link *Link, qerid int, attrs []nl.Attr) error

m QER_ID: u32 o QER_GATE: u8 o QER_MBR { m QER_MBR_UL_HIGH32: u32 m QER_MBR_UL_LOW8: u8 m QER_MBR_DL_HIGH32: u32 m QER_MBR_DL_LOW8: u8

}

o QER_GBR { m QER_GBR_UL_HIGH32: u32 m QER_GBR_UL_LOW8: u8 m QER_GBR_DL_HIGH32: u32 m QER_GBR_DL_LOW8: u8

}

o QER_CORR_ID: u32 o QER_RQI: u8 o QER_QFI: u8 o QER_PPI: u8

func CreateQEROID

func CreateQEROID(c *Client, link *Link, oid OID, attrs []nl.Attr) error

func CreateURR

func CreateURR(c *Client, link *Link, urrid int, attrs []nl.Attr) error

m LINK: ifindex o URR_SEID: u64 m URR_ID: u32 o URR_MEASUREMENT_METHOD: u64 o URR_REPORTING_TRIGGER: u64 o URR_MEASUREMENT_PERIOD: u64 o URR_MEASUREMENT_INFO: u64 o URR_SEQ: u64

func CreateURROID

func CreateURROID(c *Client, link *Link, oid OID, attrs []nl.Attr) error

func DecodeVersion

func DecodeVersion(b []byte) (string, error)

func GetVersion

func GetVersion(c *Client) (string, error)

func MaxNetlinkUsageReportNum

func MaxNetlinkUsageReportNum() int

The netlink attribute size of UR need to count the UR header(4) + size of the attributes (and it's header) in UR

func NativeEndian

func NativeEndian() binary.ByteOrder

func RemoveBAR

func RemoveBAR(c *Client, link *Link, barid int) error

func RemoveBAROID

func RemoveBAROID(c *Client, link *Link, oid OID) error

func RemoveFAR

func RemoveFAR(c *Client, link *Link, farid int) error

func RemoveFAROID

func RemoveFAROID(c *Client, link *Link, oid OID) error

func RemovePDR

func RemovePDR(c *Client, link *Link, pdrid int) error

func RemovePDROID

func RemovePDROID(c *Client, link *Link, oid OID) error

func RemoveQER

func RemoveQER(c *Client, link *Link, qerid int) error

func RemoveQEROID

func RemoveQEROID(c *Client, link *Link, oid OID) error

func UpdateBAR

func UpdateBAR(c *Client, link *Link, barid int, attrs []nl.Attr) error

func UpdateBAROID

func UpdateBAROID(c *Client, link *Link, oid OID, attrs []nl.Attr) error

func UpdateFAR

func UpdateFAR(c *Client, link *Link, farid int, attrs []nl.Attr) error

func UpdateFAROID

func UpdateFAROID(c *Client, link *Link, oid OID, attrs []nl.Attr) error

func UpdatePDR

func UpdatePDR(c *Client, link *Link, pdrid int, attrs []nl.Attr) error

func UpdatePDROID

func UpdatePDROID(c *Client, link *Link, oid OID, attrs []nl.Attr) error

func UpdateQER

func UpdateQER(c *Client, link *Link, qerid int, attrs []nl.Attr) error

func UpdateQEROID

func UpdateQEROID(c *Client, link *Link, oid OID, attrs []nl.Attr) error

Types

type BAR

type BAR struct {
	ID    uint8
	Delay *uint8
	Count *uint16
	SEID  *uint64
}

func DecodeBAR

func DecodeBAR(b []byte) (*BAR, error)

func GetBAR

func GetBAR(c *Client, link *Link, barid int) (*BAR, error)

func GetBARAll

func GetBARAll(c *Client) ([]BAR, error)

func GetBAROID

func GetBAROID(c *Client, link *Link, oid OID) (*BAR, error)

type Client

type Client struct {
	Client *nl.Client
	ID     int
}

func NewClient

func NewClient(conn *nl.Conn, mux *nl.Mux) (*Client, error)

func (*Client) Do

func (c *Client) Do(req *nl.Request) ([]nl.Msg, error)

type EthPktFilter added in v1.0.1

type EthPktFilter struct {
	EthFilterID *uint32
	MACAddrs    []MACAddrFields
	Ethertype   *uint16
}

func DecodeEthPktFilter added in v1.0.1

func DecodeEthPktFilter(b []byte) (EthPktFilter, error)

type FAR

type FAR struct {
	ID     uint32
	Action uint16
	Param  *ForwardParam
	PDRIDs []uint16
	BARID  *uint8
	SEID   *uint64
}

func DecodeFAR

func DecodeFAR(b []byte) (*FAR, error)

func GetFAR

func GetFAR(c *Client, link *Link, farid int) (*FAR, error)

func GetFARAll

func GetFARAll(c *Client) ([]FAR, error)

func GetFAROID

func GetFAROID(c *Client, link *Link, oid OID) (*FAR, error)

type FTEID

type FTEID struct {
	TEID     uint32
	GTPuAddr net.IP
}

func DecodeFTEID

func DecodeFTEID(b []byte) (FTEID, error)

type FlowDesc

type FlowDesc struct {
	Action   uint8
	Dir      uint8
	Proto    uint8
	Src      net.IPNet
	Dst      net.IPNet
	SrcPorts [][]uint16
	DstPorts [][]uint16
}

func DecodeFlowDesc

func DecodeFlowDesc(b []byte) (FlowDesc, error)

type ForwardParam

type ForwardParam struct {
	Creation *HeaderCreation
	Policy   *string
	TosTc    uint8
}

func DecodeForwardParam

func DecodeForwardParam(b []byte) (ForwardParam, error)

type GBR

type GBR struct {
	ULHigh  uint32
	ULLow   uint8
	UL_Kbps uint64 // for viewer-friendly
	DLHigh  uint32
	DLLow   uint8
	DL_Kbps uint64 // for viewer-friendly
}

func DecodeGBR

func DecodeGBR(b []byte) (GBR, error)

type HeaderCreation

type HeaderCreation struct {
	Desc     uint16
	TEID     uint32
	PeerAddr net.IP
	Port     uint16
}

func DecodeHeaderCreation

func DecodeHeaderCreation(b []byte) (HeaderCreation, error)
type Link struct {
	Name  string
	Index int
}
func GetLink(name string) (*Link, error)

type MACAddrFields added in v1.0.1

type MACAddrFields struct {
	SourceMACAddress           string
	DestinationMACAddress      string
	UpperSourceMACAddress      string
	UpperDestinationMACAddress string
}

func DecodeMACAddrFields added in v1.0.1

func DecodeMACAddrFields(b []byte) (MACAddrFields, error)

type MBR

type MBR struct {
	ULHigh  uint32
	ULLow   uint8
	UL_Kbps uint64 // for viewer-friendly
	DLHigh  uint32
	DLLow   uint8
	DL_Kbps uint64 // for viewer-friendly
}

func DecodeMBR

func DecodeMBR(b []byte) (MBR, error)

type OID

type OID []uint64

func (OID) Equal

func (oid OID) Equal(a OID) bool

func (OID) ID

func (oid OID) ID() (int, bool)

func (OID) SEID

func (oid OID) SEID() (uint64, bool)

type PDI

type PDI struct {
	SrcIntf *uint8
	UEAddr  net.IP
	FTEID   *FTEID
	SDF     *SDFFilter
	EPFs    []EthPktFilter
}

func DecodePDI

func DecodePDI(b []byte) (PDI, error)

type PDR

type PDR struct {
	ID              uint16
	Precedence      *uint32
	PDI             *PDI
	OuterHdrRemoval *uint8
	FARID           *uint32
	QERID           []uint32
	URRID           []uint32
	SEID            *uint64
	PDNType         *uint8
}

func DecodePDR

func DecodePDR(b []byte) (*PDR, error)

func GetPDR

func GetPDR(c *Client, link *Link, pdrid int) (*PDR, error)

func GetPDRAll

func GetPDRAll(c *Client) ([]PDR, error)

func GetPDROID

func GetPDROID(c *Client, link *Link, oid OID) (*PDR, error)

type QER

type QER struct {
	ID     uint32
	Gate   uint8
	MBR    MBR
	GBR    GBR
	CorrID uint32
	RQI    uint8
	QFI    uint8
	PPI    uint8
	PDRIDs []uint16
	SEID   *uint64
}

func DecodeQER

func DecodeQER(b []byte) (*QER, error)

func GetQER

func GetQER(c *Client, link *Link, qerid int) (*QER, error)

func GetQERAll

func GetQERAll(c *Client) ([]QER, error)

func GetQEROID

func GetQEROID(c *Client, link *Link, oid OID) (*QER, error)

type SDFFilter

type SDFFilter struct {
	FD  *FlowDesc
	TTC *uint16
	SPI *uint32
	FL  *uint32
	BID *uint32
}

func DecodeSDFFilter

func DecodeSDFFilter(b []byte) (SDFFilter, error)

type URR

type URR struct {
	ID           uint32
	Method       uint8
	Trigger      uint32
	Period       *uint32
	Info         *uint8
	SEID         *uint64
	VolThreshold *VolumeThreshold
	VolQuota     *VolumeQuota
}

func DecodeURR

func DecodeURR(b []byte) (*URR, error)

func GetURR

func GetURR(c *Client, link *Link, urrid int) (*URR, error)

func GetURRAll

func GetURRAll(c *Client) ([]URR, error)

func GetURROID

func GetURROID(c *Client, link *Link, oid OID) (*URR, error)

type USAReport

type USAReport struct {
	URRID          uint32
	URSEQN         uint32
	USARTrigger    uint32
	VolMeasurement VolumeMeasurement
	QueryUrrRef    uint32
	StartTime      time.Time
	EndTime        time.Time
	SEID           uint64
}

func DecodeAllUSAReports

func DecodeAllUSAReports(b []byte) ([]USAReport, error)

func GetMultiReports

func GetMultiReports(c *Client, link *Link, lSeidUrridsMap map[uint64][]uint32) ([]USAReport, error)

map[uint64][]uint32 // key: seid, value: urrids

func GetMultiReportsOID

func GetMultiReportsOID(c *Client, link *Link, oids []OID) ([]USAReport, error)

func GetReport

func GetReport(c *Client, link *Link, urrid uint64, seid uint64) ([]USAReport, error)

func GetReportOID

func GetReportOID(c *Client, link *Link, oid OID) ([]USAReport, error)

func RemoveURR

func RemoveURR(c *Client, link *Link, urrid int) ([]USAReport, error)

func RemoveURROID

func RemoveURROID(c *Client, link *Link, oid OID) ([]USAReport, error)

func UpdateURR

func UpdateURR(c *Client, link *Link, urrid int, attrs []nl.Attr) ([]USAReport, error)

func UpdateURROID

func UpdateURROID(c *Client, link *Link, oid OID, attrs []nl.Attr) ([]USAReport, error)

type UsageStatistic added in v1.0.1

type UsageStatistic struct {
	TotalVolRx uint64
	TotalVolTx uint64
	UlVolRx    uint64
	UlVolTx    uint64
	DlVolRx    uint64
	DlVolTx    uint64
	TotalPktRx uint64
	TotalPktTx uint64
	UlPktRx    uint64
	UlPktTx    uint64
	DlPktRx    uint64
	DlPktTx    uint64
}

func DecodeUsageStatistic added in v1.0.1

func DecodeUsageStatistic(b []byte) (*UsageStatistic, error)

func GetUsageStatistic added in v1.0.1

func GetUsageStatistic(c *Client, link *Link) (*UsageStatistic, error)

type VolumeMeasurement

type VolumeMeasurement struct {
	Flag           uint8
	TotalVolume    uint64
	UplinkVolume   uint64
	DownlinkVolume uint64
	TotalPktNum    uint64
	UplinkPktNum   uint64
	DownlinkPktNum uint64
}

type VolumeQuota

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

type VolumeThreshold

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

Directories

Path Synopsis
cmd
gogtp5g-link command
gogtp5g-tunnel command

Jump to

Keyboard shortcuts

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