parser

package
v0.8.1 Latest Latest
Warning

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

Go to latest
Published: Apr 26, 2024 License: Apache-2.0 Imports: 9 Imported by: 0

Documentation

Overview

Package netlink contains the bare minimum needed to partially parse netlink messages.

Index

Constants

View Source
const (
	RTA_ALIGNTO    = 4
	SizeofNlMsghdr = 0x10
	SizeofNlAttr   = 0x4
	SizeofRtAttr   = 0x4

	EINVAL = syscall.Errno(0x16)
)

TODO - get these from sys/unix or syscall

Variables

View Source
var (
	ErrNotType20   = errors.New("NetlinkMessage wrong type")
	ErrParseFailed = errors.New("Unable to parse InetDiagMsg")
)

Error types.

Functions

func Parse

Parse returns the InetDiagMsg itself Modified from original to also return attribute data array.

Types

type NetlinkMessage

type NetlinkMessage = syscall.NetlinkMessage

type NetlinkRouteAttr

type NetlinkRouteAttr = syscall.NetlinkRouteAttr

func ParseRouteAttr

func ParseRouteAttr(b []byte) ([]NetlinkRouteAttr, error)

ParseRouteAttr parses a byte array into slice of NetlinkRouteAttr struct. Derived from "github.com/vishvananda/netlink/nl/nl_linux.go"

type NlMsghdr

type NlMsghdr = syscall.NlMsghdr

TODO use unix instead.

type RouteAttrValue

type RouteAttrValue []byte

RouteAttrValue is the type of RouteAttr.Value

func (RouteAttrValue) CongestionAlgorithm

func (raw RouteAttrValue) CongestionAlgorithm() (string, bool)

CongestionAlgorithm returns the congestion algorithm string INET_DIAG_CONG

type RtAttr

type RtAttr = syscall.RtAttr

type Snapshot

type Snapshot struct {
	// Timestamp of batch of messages containing this message.
	Timestamp time.Time

	// Bit field indicating whether each message type was observed.
	Observed uint32

	// Bit field indicating whether any message type was NOT fully parsed.
	// TODO - populate this field if any message is ignored, or not fully parsed.
	NotFullyParsed uint32

	// Info from struct inet_diag_msg, including socket_id;
	InetDiagMsg *inetdiag.InetDiagMsg

	SockInfo *inetdiag.SockID
	// From INET_DIAG_CONG message.
	CongestionAlgorithm string

	// See https://tools.ietf.org/html/rfc3168
	// TODO Do we need to record whether these are present and zero, vs absent?
	TOS     uint8
	TClass  uint8
	ClassID uint8

	// TODO Do we need to record present and zero, vs absent?
	Shutdown uint8

	// From INET_DIAG_PROTOCOL message.
	// TODO Do we need to record present and zero, vs absent?
	Protocol inetdiag.Protocol

	Mark uint32

	// TCPInfo contains data from struct tcp_info.
	TCPInfo *tcp.LinuxTCPInfo

	// Data obtained from INET_DIAG_MEMINFO.
	MemInfo *inetdiag.MemInfo

	// Data obtained from INET_DIAG_SKMEMINFO.
	SocketMem *inetdiag.SocketMemInfo

	VegasInfo *inetdiag.VegasInfo
	DCTCPInfo *inetdiag.DCTCPInfo
	BBRInfo   *inetdiag.BBRInfo
}

Snapshot contains all info gathered through netlink library.

func MakeSnapShot

func MakeSnapShot(msg *NetlinkMessage, skipLocal bool) (*Snapshot, error)

MakeArchivalRecord parses the NetlinkMessage into a ArchivalRecord. If skipLocal is true, it will return nil for loopback, local unicast, multicast, and unspecified connections. Note that Parse does not populate the Timestamp field, so caller should do so.

Jump to

Keyboard shortcuts

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