tcpinfo

package module
v0.0.0-...-30a79bb Latest Latest
Warning

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

Go to latest
Published: Mar 14, 2019 License: BSD-2-Clause Imports: 6 Imported by: 24

README

Package tcpinfo implements encoding and decoding of TCP-level socket options regarding connection information.

GoDoc Build Status Build status Go Report Card

Documentation

Overview

Package tcpinfo implements encoding and decoding of TCP-level socket options regarding connection information.

The Transmission Control Protocol (TCP) is defined in RFC 793. TCP Selective Acknowledgment Options is defined in RFC 2018. Management Information Base for the Transmission Control Protocol (TCP) is defined in RFC 4022. TCP Congestion Control is defined in RFC 5681. Computing TCP's Retransmission Timer is described in RFC 6298. TCP Options and Maximum Segment Size (MSS) is defined in RFC 6691. Shared Use of Experimental TCP Options is defined in RFC 6994. TCP Extensions for High Performance is defined in RFC 7323.

NOTE: Older Linux kernels may not support extended TCP statistics described in RFC 4898.

Index

Examples

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type BBRInfo

type BBRInfo struct {
	MaxBW          uint64        `json:"max_bw"`      // maximum-filtered bandwidth in bps
	MinRTT         time.Duration `json:"min_rtt"`     // minimum-filtered round-trip time
	PacingGain     uint          `json:"pacing_gain"` // pacing gain shifted left 8 bits
	CongWindowGain uint          `json:"cwnd_gain"`   // congestion window gain shifted left 8 bits
}

A BBRInfo represents Bottleneck Bandwidth and Round-trip propagation time-based congestion control information.

func (*BBRInfo) Algorithm

func (bi *BBRInfo) Algorithm() string

Algorithm implements the Algorithm method of CCAlgorithmInfo interface.

type CAState

type CAState int

A CAState represents a state of congestion avoidance.

const (
	CAOpen     CAState = 0x0
	CADisorder CAState = 0x1
	CACWR      CAState = 0x2
	CARecovery CAState = 0x3
	CALoss     CAState = 0x4
)

func (CAState) String

func (st CAState) String() string

type CCAlgorithm

type CCAlgorithm string

A CCAlgorithm represents a name of congestion control algorithm.

Only supported on Linux.

func (CCAlgorithm) Level

func (cca CCAlgorithm) Level() int

Level implements the Level method of tcpopt.Option interface.

func (CCAlgorithm) Marshal

func (cca CCAlgorithm) Marshal() ([]byte, error)

Marshal implements the Marshal method of tcpopt.Option interface.

func (CCAlgorithm) Name

func (cca CCAlgorithm) Name() int

Name implements the Name method of tcpopt.Option interface.

type CCAlgorithmInfo

type CCAlgorithmInfo interface {
	Algorithm() string
}

A CCAlgorithmInfo represents congestion control algorithm information.

Only supported on Linux.

func ParseCCAlgorithmInfo

func ParseCCAlgorithmInfo(name string, b []byte) (CCAlgorithmInfo, error)

ParseCCAlgorithmInfo parses congestion control algorithm information.

Only supported on Linux.

type CCInfo

type CCInfo struct {
	Raw []byte `json:"raw,omitempty"`
}

A CCInfo represents raw information of congestion control algorithm.

Only supported on Linux.

func (*CCInfo) Level

func (cci *CCInfo) Level() int

Level implements the Level method of tcpopt.Option interface.

func (*CCInfo) Marshal

func (cci *CCInfo) Marshal() ([]byte, error)

Marshal implements the Marshal method of tcpopt.Option interface.

func (*CCInfo) Name

func (cci *CCInfo) Name() int

Name implements the Name method of tcpopt.Option interface.

type CEState

type CEState int

A CEState represents a state of ECN congestion encountered (CE) codepoint.

type CongestionControl

type CongestionControl struct {
	SenderSSThreshold   uint `json:"snd_ssthresh"`   // slow start threshold for sender in bytes or # of segments
	ReceiverSSThreshold uint `json:"rcv_ssthresh"`   // slow start threshold for receiver in bytes [Linux only]
	SenderWindowBytes   uint `json:"snd_cwnd_bytes"` // congestion window for sender in bytes [Darwin and FreeBSD]
	SenderWindowSegs    uint `json:"snd_cwnd_segs"`  // congestion window for sender in # of segments [Linux and NetBSD]
}

A CongestionControl represents congestion control information.

type DCTCPInfo

type DCTCPInfo struct {
	Enabled         bool    `json:"enabled"`
	CEState         CEState `json:"ce_state"`    // state of ECN CE codepoint
	Alpha           uint    `json:"alpha"`       // fraction of bytes sent
	ECNAckedBytes   uint    `json:"ecn_acked"`   // # of acked bytes with ECN
	TotalAckedBytes uint    `json:"total_acked"` // total # of acked bytes
}

A DCTCPInfo represents Datacenter TCP congestion control information.

func (*DCTCPInfo) Algorithm

func (di *DCTCPInfo) Algorithm() string

Algorithm implements the Algorithm method of CCAlgorithmInfo interface.

type FlowControl

type FlowControl struct {
	ReceiverWindow uint `json:"rcv_wnd"` // advertised receiver window in bytes
}

A FlowControl represents flow control information.

type Info

type Info struct {
	State             State              `json:"state"`               // connection state
	Options           []Option           `json:"opts,omitempty"`      // requesting options
	PeerOptions       []Option           `json:"peer_opts,omitempty"` // options requested from peer
	SenderMSS         MaxSegSize         `json:"snd_mss"`             // maximum segment size for sender in bytes
	ReceiverMSS       MaxSegSize         `json:"rcv_mss"`             // maximum segment size for receiver in bytes
	RTT               time.Duration      `json:"rtt"`                 // round-trip time
	RTTVar            time.Duration      `json:"rttvar"`              // round-trip time variation
	RTO               time.Duration      `json:"rto"`                 // retransmission timeout
	ATO               time.Duration      `json:"ato"`                 // delayed acknowledgement timeout [Linux only]
	LastDataSent      time.Duration      `json:"last_data_sent"`      // since last data sent [Linux only]
	LastDataReceived  time.Duration      `json:"last_data_rcvd"`      // since last data received [FreeBSD and Linux]
	LastAckReceived   time.Duration      `json:"last_ack_rcvd"`       // since last ack received [Linux only]
	FlowControl       *FlowControl       `json:"flow_ctl,omitempty"`  // flow control information
	CongestionControl *CongestionControl `json:"cong_ctl,omitempty"`  // congestion control information
	Sys               *SysInfo           `json:"sys,omitempty"`       // platform-specific information
}

An Info represents connection information.

Only supported on Darwin, FreeBSD, Linux and NetBSD.

Example
package main

import (
	"encoding/json"
	"fmt"
	"log"
	"net"

	"github.com/mikioh/tcp"
	"github.com/mikioh/tcpinfo"
)

func main() {
	c, err := net.Dial("tcp", "golang.org:80")
	if err != nil {
		log.Fatal(err)
	}
	defer c.Close()

	tc, err := tcp.NewConn(c)
	if err != nil {
		log.Fatal(err)
	}
	var o tcpinfo.Info
	var b [256]byte
	i, err := tc.Option(o.Level(), o.Name(), b[:])
	if err != nil {
		log.Fatal(err)
	}
	txt, err := json.Marshal(i)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println(string(txt))
}
Output:

func (*Info) Level

func (i *Info) Level() int

Level implements the Level method of tcpopt.Option interface.

func (*Info) Marshal

func (i *Info) Marshal() ([]byte, error)

Marshal implements the Marshal method of tcpopt.Option interface.

func (*Info) MarshalJSON

func (i *Info) MarshalJSON() ([]byte, error)

MarshalJSON implements the MarshalJSON method of json.Marshaler interface.

func (*Info) Name

func (i *Info) Name() int

Name implements the Name method of tcpopt.Option interface.

type MaxSegSize

type MaxSegSize uint

A MaxSegSize represents a maxiumum segment size option.

func (MaxSegSize) Kind

func (mss MaxSegSize) Kind() OptionKind

Kind returns an option kind field.

type Option

type Option interface {
	Kind() OptionKind
}

An Option represents an option.

type OptionKind

type OptionKind int

An OptionKind represents an option kind.

const (
	KindMaxSegSize    OptionKind = 2
	KindWindowScale   OptionKind = 3
	KindSACKPermitted OptionKind = 4
	KindTimestamps    OptionKind = 8
)

func (OptionKind) String

func (k OptionKind) String() string

type SACKPermitted

type SACKPermitted bool

A SACKPermitted reports whether a selective acknowledgment permitted option is enabled.

func (SACKPermitted) Kind

func (sp SACKPermitted) Kind() OptionKind

Kind returns an option kind field.

type State

type State int

A State represents a state of connection.

const (
	Unknown State = iota
	Closed
	Listen
	SynSent
	SynReceived
	Established
	FinWait1
	FinWait2
	CloseWait
	LastAck
	Closing
	TimeWait
)

func (State) String

func (st State) String() string

type SysInfo

type SysInfo struct {
	PathMTU                 uint          `json:"path_mtu"`           // path maximum transmission unit
	AdvertisedMSS           MaxSegSize    `json:"adv_mss"`            // advertised maximum segment size
	CAState                 CAState       `json:"ca_state"`           // state of congestion avoidance
	Retransmissions         uint          `json:"rexmits"`            // # of retranmissions on timeout invoked
	Backoffs                uint          `json:"backoffs"`           // # of times retransmission backoff timer invoked
	WindowOrKeepAliveProbes uint          `json:"wnd_ka_probes"`      // # of window or keep alive probes sent
	UnackedSegs             uint          `json:"unacked_segs"`       // # of unack'd segments
	SackedSegs              uint          `json:"sacked_segs"`        // # of sack'd segments
	LostSegs                uint          `json:"lost_segs"`          // # of lost segments
	RetransSegs             uint          `json:"retrans_segs"`       // # of retransmitting segments in transmission queue
	ForwardAckSegs          uint          `json:"fack_segs"`          // # of forward ack segments in transmission queue
	ReorderedSegs           uint          `json:"reord_segs"`         // # of reordered segments allowed
	ReceiverRTT             time.Duration `json:"rcv_rtt"`            // current RTT for receiver
	TotalRetransSegs        uint          `json:"total_retrans_segs"` // # of retransmitted segments
	PacingRate              uint64        `json:"pacing_rate"`        // pacing rate
	ThruBytesAcked          uint64        `json:"thru_bytes_acked"`   // # of bytes for which cumulative acknowledgments have been received
	ThruBytesReceived       uint64        `json:"thru_bytes_rcvd"`    // # of bytes for which cumulative acknowledgments have been sent
	SegsOut                 uint          `json:"segs_out"`           // # of segments sent
	SegsIn                  uint          `json:"segs_in"`            // # of segments received
	NotSentBytes            uint          `json:"not_sent_bytes"`     // # of bytes not sent yet
	MinRTT                  time.Duration `json:"min_rtt"`            // current measured minimum RTT; zero means not available
	DataSegsOut             uint          `json:"data_segs_out"`      // # of segments sent containing a positive length data segment
	DataSegsIn              uint          `json:"data_segs_in"`       // # of segments received containing a positive length data segment
}

A SysInfo represents platform-specific information.

type Timestamps

type Timestamps bool

A Timestamps reports whether a timestamps option is enabled.

func (Timestamps) Kind

func (ts Timestamps) Kind() OptionKind

Kind returns an option kind field.

type VegasInfo

type VegasInfo struct {
	Enabled    bool          `json:"enabled"`
	RoundTrips uint          `json:"rnd_trips"` // # of round-trips
	RTT        time.Duration `json:"rtt"`       // round-trip time
	MinRTT     time.Duration `json:"min_rtt"`   // minimum round-trip time
}

A VegasInfo represents Vegas congestion control information.

func (*VegasInfo) Algorithm

func (vi *VegasInfo) Algorithm() string

Algorithm implements the Algorithm method of CCAlgorithmInfo interface.

type WindowScale

type WindowScale int

A WindowScale represents a windows scale option.

func (WindowScale) Kind

func (ws WindowScale) Kind() OptionKind

Kind returns an option kind field.

Jump to

Keyboard shortcuts

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