ipvs

package
v0.0.2 Latest Latest
Warning

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

Go to latest
Published: Aug 19, 2023 License: Apache-2.0, Apache-2.0 Imports: 16 Imported by: 0

README

This is a copy of github.com/moby/ipvs because it seems that the moby project is not maintained anymore.

All rights and copyright on this folder are as specified below.

ipvs - networking for containers

Test GoDoc Go Report Card

ipvs provides a native Go implementation for communicating with IPVS kernel module using a netlink socket.

Using ipvs
import (
	"log"

	"github.com/moby/ipvs"
)

func main() {
	handle, err := ipvs.New("")
	if err != nil {
		log.Fatalf("ipvs.New: %s", err)
	}
	svcs, err := handle.GetServices()
	if err != nil {
		log.Fatalf("handle.GetServices: %s", err)
	}
}

Contributing

Want to hack on ipvs? Docker's contributions guidelines apply.

Copyright 2015 Docker, inc. Code released under the Apache 2.0 license.

Documentation

Index

Constants

View Source
const (
	// ConnectionFlagFwdmask indicates the mask in the connection
	// flags which is used by forwarding method bits.
	ConnectionFlagFwdMask = 0x0007

	// ConnectionFlagMasq is used for masquerade forwarding method.
	ConnectionFlagMasq = 0x0000

	// ConnectionFlagLocalNode is used for local node forwarding
	// method.
	ConnectionFlagLocalNode = 0x0001

	// ConnectionFlagTunnel is used for tunnel mode forwarding
	// method.
	ConnectionFlagTunnel = 0x0002

	// ConnectionFlagDirectRoute is used for direct routing
	// forwarding method.
	ConnectionFlagDirectRoute = 0x0003
)

Destination forwarding methods

View Source
const (
	// RoundRobin distributes jobs equally amongst the available
	// real servers.
	RoundRobin = "rr"

	// LeastConnection assigns more jobs to real servers with
	// fewer active jobs.
	LeastConnection = "lc"

	// DestinationHashing assigns jobs to servers through looking
	// up a statically assigned hash table by their destination IP
	// addresses.
	DestinationHashing = "dh"

	// SourceHashing assigns jobs to servers through looking up
	// a statically assigned hash table by their source IP
	// addresses.
	SourceHashing = "sh"

	// WeightedRoundRobin assigns jobs to real servers proportionally
	// to there real servers' weight. Servers with higher weights
	// receive new jobs first and get more jobs than servers
	// with lower weights. Servers with equal weights get
	// an equal distribution of new jobs
	WeightedRoundRobin = "wrr"

	// WeightedLeastConnection assigns more jobs to servers
	// with fewer jobs and relative to the real servers' weight
	WeightedLeastConnection = "wlc"
)
View Source
const (
	// ConnFwdMask is a mask for the fwd methods
	ConnFwdMask = 0x0007

	// ConnFwdMasq denotes forwarding via masquerading/NAT
	ConnFwdMasq = 0x0000

	// ConnFwdLocalNode denotes forwarding to a local node
	ConnFwdLocalNode = 0x0001

	// ConnFwdTunnel denotes forwarding via a tunnel
	ConnFwdTunnel = 0x0002

	// ConnFwdDirectRoute denotes forwarding via direct routing
	ConnFwdDirectRoute = 0x0003

	// ConnFwdBypass denotes forwarding while bypassing the cache
	ConnFwdBypass = 0x0004
)

Variables

This section is empty.

Functions

This section is empty.

Types

type Config

type Config struct {
	TimeoutTCP    time.Duration
	TimeoutTCPFin time.Duration
	TimeoutUDP    time.Duration
}

Config defines IPVS timeout configuration

type Destination

type Destination struct {
	Address             net.IP
	Port                uint16
	Weight              int
	ConnectionFlags     uint32
	AddressFamily       uint16
	UpperThreshold      uint32
	LowerThreshold      uint32
	ActiveConnections   int
	InactiveConnections int
	Stats               DstStats
}

Destination defines an IPVS destination (real server) in its entirety.

type DstStats

type DstStats SvcStats

DstStats defines IPVS destination (real server) statistics

type Handle

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

Handle provides a namespace specific ipvs handle to program ipvs rules.

func New

func New(path string) (*Handle, error)

New provides a new ipvs handle in the namespace pointed to by the passed path. It will return a valid handle or an error in case an error occurred while creating the handle.

func NewInNamespace

func NewInNamespace(n netns.NsHandle) (*Handle, error)

NewInNamespace provides a new ipvs handle in the namespace provided as a parameter. It will return a valid handle or an error in case an error occurred while creating the handle.

func (*Handle) Close

func (i *Handle) Close()

Close closes the ipvs handle. The handle is invalid after Close returns.

func (*Handle) DelDestination

func (i *Handle) DelDestination(s *Service, d *Destination) error

DelDestination deletes an already existing real server in the passed ipvs service in the passed handle.

func (*Handle) DelService

func (i *Handle) DelService(s *Service) error

DelService deletes an already existing service in the passed handle.

func (*Handle) Flush

func (i *Handle) Flush() error

Flush deletes all existing services in the passed handle.

func (*Handle) GetConfig

func (i *Handle) GetConfig() (*Config, error)

GetConfig returns the current timeout configuration

func (*Handle) GetDestinations

func (i *Handle) GetDestinations(s *Service) ([]*Destination, error)

GetDestinations returns an array of Destinations configured for this Service

func (*Handle) GetService

func (i *Handle) GetService(s *Service) (*Service, error)

GetService gets details of a specific IPVS services, useful in updating statisics etc.,

func (*Handle) GetServices

func (i *Handle) GetServices() ([]*Service, error)

GetServices returns an array of services configured on the Node

func (*Handle) IsServicePresent

func (i *Handle) IsServicePresent(s *Service) bool

IsServicePresent queries for the ipvs service in the passed handle.

func (*Handle) NewDestination

func (i *Handle) NewDestination(s *Service, d *Destination) error

NewDestination creates a new real server in the passed ipvs service which should already be existing in the passed handle.

func (*Handle) NewService

func (i *Handle) NewService(s *Service) error

NewService creates a new ipvs service in the passed handle.

func (*Handle) SetConfig

func (i *Handle) SetConfig(c *Config) error

SetConfig set the current timeout configuration. 0: no change

func (*Handle) UpdateDestination

func (i *Handle) UpdateDestination(s *Service, d *Destination) error

UpdateDestination updates an already existing real server in the passed ipvs service in the passed handle.

func (*Handle) UpdateService

func (i *Handle) UpdateService(s *Service) error

UpdateService updates an already existing service in the passed handle.

type Service

type Service struct {
	// Virtual service address.
	Address  net.IP
	Protocol uint16
	Port     uint16
	FWMark   uint32 // Firewall mark of the service.

	// Virtual service options.
	SchedName     string
	Flags         uint32
	Timeout       uint32
	Netmask       uint32
	AddressFamily uint16
	PEName        string
	Stats         SvcStats
}

Service defines an IPVS service in its entirety.

type SvcStats

type SvcStats struct {
	Connections uint32
	PacketsIn   uint32
	PacketsOut  uint32
	BytesIn     uint64
	BytesOut    uint64
	CPS         uint32
	BPSOut      uint32
	PPSIn       uint32
	PPSOut      uint32
	BPSIn       uint32
}

SvcStats defines an IPVS service statistics

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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