Documentation
¶
Index ¶
- Constants
- Variables
- func IntToPublicIPv4(n int) net.IP
- type ConnStats
- type DelayedPacketReciever
- type FixedLatencyRouter
- type LinkSettings
- type NodeBiDiLinkSettings
- type Packet
- type PacketReceiver
- type PerfectRouter
- type Router
- type SimConn
- func (c *SimConn) Close() error
- func (c *SimConn) LocalAddr() net.Addr
- func (c *SimConn) ReadFrom(p []byte) (n int, addr net.Addr, err error)
- func (c *SimConn) RecvPacket(p Packet)
- func (c *SimConn) SetDeadline(t time.Time) error
- func (c *SimConn) SetLocalAddr(addr net.Addr)
- func (c *SimConn) SetReadBuffer(n int) error
- func (c *SimConn) SetReadDeadline(t time.Time) error
- func (c *SimConn) SetWriteBuffer(n int) error
- func (c *SimConn) SetWriteDeadline(t time.Time) error
- func (c *SimConn) Stats() ConnStats
- func (c *SimConn) UnicastAddr() net.Addr
- func (c *SimConn) WriteTo(p []byte, addr net.Addr) (n int, err error)
- type Simnet
- type SimpleFirewallRouter
- func (r *SimpleFirewallRouter) AddNode(addr net.Addr, conn PacketReceiver)
- func (r *SimpleFirewallRouter) RemoveNode(addr net.Addr)
- func (r *SimpleFirewallRouter) SendPacket(p Packet) error
- func (r *SimpleFirewallRouter) SetAddrPubliclyReachable(addr net.Addr)
- func (r *SimpleFirewallRouter) String() string
- type SimulatedLink
Constants ¶
const Mibps = 1_000_000
Variables ¶
var ErrDeadlineExceeded = errors.New("deadline exceeded")
Functions ¶
func IntToPublicIPv4 ¶
Types ¶
type DelayedPacketReciever ¶
type DelayedPacketReciever struct {
// contains filtered or unexported fields
}
func (*DelayedPacketReciever) RecvPacket ¶
func (r *DelayedPacketReciever) RecvPacket(p Packet)
type FixedLatencyRouter ¶
type FixedLatencyRouter struct {
PerfectRouter
// contains filtered or unexported fields
}
func (*FixedLatencyRouter) AddNode ¶
func (r *FixedLatencyRouter) AddNode(addr net.Addr, conn PacketReceiver)
func (*FixedLatencyRouter) SendPacket ¶
func (r *FixedLatencyRouter) SendPacket(p Packet) error
type LinkSettings ¶
type LinkSettings struct {
// BitsPerSecond specifies the bandwidth limit in bits per second
BitsPerSecond int
// MTU (Maximum Transmission Unit) specifies the maximum packet size in bytes
MTU int
}
LinkSettings defines the network characteristics for a simulated link direction
type NodeBiDiLinkSettings ¶
type NodeBiDiLinkSettings struct {
// Downlink configures the settings for incoming traffic to this node
Downlink LinkSettings
// Uplink configures the settings for outgoing traffic from this node
Uplink LinkSettings
// Latency specifies a fixed network delay for downlink packets only
// If both Latency and LatencyFunc are set, LatencyFunc takes precedence
Latency time.Duration
// LatencyFunc computes the network delay for each downlink packet
// This allows variable latency based on packet source/destination
// If nil, Latency field is used instead
LatencyFunc func(Packet) time.Duration
}
NodeBiDiLinkSettings defines the bidirectional link settings for a network node. It specifies separate configurations for downlink (incoming) and uplink (outgoing) traffic, allowing asymmetric network conditions to be simulated.
type PacketReceiver ¶
type PacketReceiver interface {
RecvPacket(p Packet)
}
type PerfectRouter ¶
type PerfectRouter struct {
// contains filtered or unexported fields
}
PerfectRouter is a router that has no latency or jitter and can route to every node
func (*PerfectRouter) AddNode ¶
func (r *PerfectRouter) AddNode(addr net.Addr, conn PacketReceiver)
func (*PerfectRouter) RemoveNode ¶
func (r *PerfectRouter) RemoveNode(addr net.Addr)
func (*PerfectRouter) SendPacket ¶
func (r *PerfectRouter) SendPacket(p Packet) error
SendPacket implements Router.
type Router ¶
type Router interface {
SendPacket(p Packet) error
AddNode(addr net.Addr, receiver PacketReceiver)
}
Router handles routing of packets between simulated connections. Implementations are responsible for delivering packets to their destinations.
type SimConn ¶
type SimConn struct {
// contains filtered or unexported fields
}
SimConn is a simulated network connection that implements net.PacketConn. It provides packet-based communication through a Router for testing and simulation purposes. All send/recv operations are handled through the Router's packet delivery mechanism.
func NewBlockingSimConn ¶
NewBlockingSimConn creates a new simulated connection that blocks if the receive buffer is full. Does not drop packets.
func NewSimConn ¶
NewSimConn creates a new simulated connection that drops packets if the receive buffer is full.
func (*SimConn) RecvPacket ¶
func (*SimConn) SetDeadline ¶
SetDeadline implements net.PacketConn
func (*SimConn) SetLocalAddr ¶
SetLocalAddr only changes what `.LocalAddr()` returns. Packets will still come From the initially configured addr.
func (*SimConn) SetReadBuffer ¶
SetReadBuffer only exists to quell the warning message from quic-go
func (*SimConn) SetReadDeadline ¶
SetReadDeadline implements net.PacketConn
func (*SimConn) SetWriteBuffer ¶
SetReadBuffer only exists to quell the warning message from quic-go
func (*SimConn) SetWriteDeadline ¶
SetWriteDeadline implements net.PacketConn
func (*SimConn) UnicastAddr ¶
type Simnet ¶
type Simnet struct {
// contains filtered or unexported fields
}
Simnet is a simulated network that manages connections between nodes with configurable network conditions.
func (*Simnet) NewEndpoint ¶
func (n *Simnet) NewEndpoint(addr *net.UDPAddr, linkSettings NodeBiDiLinkSettings) *SimConn
type SimpleFirewallRouter ¶
type SimpleFirewallRouter struct {
// contains filtered or unexported fields
}
func (*SimpleFirewallRouter) AddNode ¶
func (r *SimpleFirewallRouter) AddNode(addr net.Addr, conn PacketReceiver)
func (*SimpleFirewallRouter) RemoveNode ¶
func (r *SimpleFirewallRouter) RemoveNode(addr net.Addr)
func (*SimpleFirewallRouter) SendPacket ¶
func (r *SimpleFirewallRouter) SendPacket(p Packet) error
func (*SimpleFirewallRouter) SetAddrPubliclyReachable ¶
func (r *SimpleFirewallRouter) SetAddrPubliclyReachable(addr net.Addr)
func (*SimpleFirewallRouter) String ¶
func (r *SimpleFirewallRouter) String() string
type SimulatedLink ¶
type SimulatedLink struct {
// Configuration for link characteristics
UplinkSettings LinkSettings
DownlinkSettings LinkSettings
// Latency specifies a fixed network delay for downlink packets
// If both Latency and LatencyFunc are set, LatencyFunc takes precedence
Latency time.Duration
// LatencyFunc computes the network delay for each downlink packet
// This allows variable latency based on packet source/destination
// If nil, Latency field is used instead
LatencyFunc func(Packet) time.Duration
// Packet routing interfaces
UploadPacket Router
// contains filtered or unexported fields
}
SimulatedLink simulates a bidirectional network link with variable latency, bandwidth limiting, and CoDel-based bufferbloat mitigation
func (*SimulatedLink) AddNode ¶
func (l *SimulatedLink) AddNode(addr net.Addr, receiver PacketReceiver)
func (*SimulatedLink) Close ¶
func (l *SimulatedLink) Close() error
func (*SimulatedLink) RecvPacket ¶
func (l *SimulatedLink) RecvPacket(p Packet)
func (*SimulatedLink) SendPacket ¶
func (l *SimulatedLink) SendPacket(p Packet) error
func (*SimulatedLink) Start ¶
func (l *SimulatedLink) Start()