 Documentation
      ¶
      Documentation
      ¶
    
    
  
    
      Overview ¶
Package route provides basic functions for the manipulation of packet routing facilities on BSD variants.
The package supports any version of Darwin, any version of DragonFly BSD, FreeBSD 7 and above, NetBSD 6 and above, and OpenBSD 5.6 and above.
Index ¶
- func FetchRIB(af int, typ RIBType, arg int) ([]byte, error)
- type Addr
- type DefaultAddr
- type Inet4Addr
- type Inet6Addr
- type InterfaceAddrMessage
- type InterfaceAnnounceMessage
- type InterfaceMessage
- type InterfaceMetrics
- type InterfaceMulticastAddrMessage
- type LinkAddr
- type Message
- type RIBType
- type RouteMessage
- type RouteMetrics
- type Sys
- type SysType
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func FetchRIB ¶
FetchRIB fetches a routing information base from the operating system.
The provided af must be an address family.
The provided arg must be a RIBType-specific argument. When RIBType is related to routes, arg might be a set of route flags. When RIBType is related to network interfaces, arg might be an interface index or a set of interface flags. In most cases, zero means a wildcard.
Types ¶
type Addr ¶
type Addr interface {
	// Family returns an address family.
	Family() int
}
    An Addr represents an address associated with packet routing.
type DefaultAddr ¶
type DefaultAddr struct {
	Raw []byte // raw format of address
	// contains filtered or unexported fields
}
    A DefaultAddr represents an address of various operating system-specific features.
func (*DefaultAddr) Family ¶
func (a *DefaultAddr) Family() int
Family implements the Family method of Addr interface.
type Inet4Addr ¶
type Inet4Addr struct {
	IP [4]byte // IP address
}
    An Inet4Addr represents an internet address for IPv4.
type InterfaceAddrMessage ¶
type InterfaceAddrMessage struct {
	Version int    // message version
	Type    int    // message type
	Flags   int    // interface flags
	Index   int    // interface index
	Addrs   []Addr // addresses
	// contains filtered or unexported fields
}
    An InterfaceAddrMessage represents an interface address message.
func (*InterfaceAddrMessage) Sys ¶
func (m *InterfaceAddrMessage) Sys() []Sys
Sys implements the Sys method of Message interface.
type InterfaceAnnounceMessage ¶
type InterfaceAnnounceMessage struct {
	Version int    // message version
	Type    int    // message type
	Index   int    // interface index
	Name    string // interface name
	What    int    // what type of announcement
	// contains filtered or unexported fields
}
    An InterfaceAnnounceMessage represents an interface announcement message.
func (*InterfaceAnnounceMessage) Sys ¶
func (m *InterfaceAnnounceMessage) Sys() []Sys
Sys implements the Sys method of Message interface.
type InterfaceMessage ¶
type InterfaceMessage struct {
	Version int    // message version
	Type    int    // message type
	Flags   int    // interface flags
	Index   int    // interface index
	Name    string // interface name
	Addrs   []Addr // addresses
	// contains filtered or unexported fields
}
    An InterfaceMessage represents an interface message.
func (*InterfaceMessage) Sys ¶
func (m *InterfaceMessage) Sys() []Sys
Sys implements the Sys method of Message interface.
type InterfaceMetrics ¶
InterfaceMetrics represents interface metrics.
func (*InterfaceMetrics) SysType ¶
func (imx *InterfaceMetrics) SysType() SysType
SysType implements the SysType method of Sys interface.
type InterfaceMulticastAddrMessage ¶
type InterfaceMulticastAddrMessage struct {
	Version int    // message version
	Type    int    // message type
	Flags   int    // interface flags
	Index   int    // interface index
	Addrs   []Addr // addresses
	// contains filtered or unexported fields
}
    An InterfaceMulticastAddrMessage represents an interface multicast address message.
func (*InterfaceMulticastAddrMessage) Sys ¶
func (m *InterfaceMulticastAddrMessage) Sys() []Sys
Sys implements the Sys method of Message interface.
type LinkAddr ¶
type LinkAddr struct {
	Index int    // interface index when attached
	Name  string // interface name when attached
	Addr  []byte // link-layer address when attached
}
    A LinkAddr represents a link-layer address.
type Message ¶
type Message interface {
	// Sys returns operating system-specific information.
	Sys() []Sys
}
    A Message represents a routing message.
type RIBType ¶
type RIBType int
A RIBType represents a type of routing information base.
const ( RIBTypeRoute RIBType = syscall.NET_RT_DUMP RIBTypeInterface RIBType = syscall.NET_RT_IFLIST )
type RouteMessage ¶
type RouteMessage struct {
	Version int     // message version
	Type    int     // message type
	Flags   int     // route flags
	Index   int     // interface index when attached
	ID      uintptr // sender's identifier; usually process ID
	Seq     int     // sequence number
	Err     error   // error on requested operation
	Addrs   []Addr  // addresses
	// contains filtered or unexported fields
}
    A RouteMessage represents a message conveying an address prefix, a nexthop address and an output interface.
Unlike other messages, this message can be used to query adjacency information for the given address prefix, to add a new route, and to delete or modify the existing route from the routing information base inside the kernel by writing and reading route messages on a routing socket.
For the manipulation of routing information, the route message must contain appropriate fields that include:
Version = <must be specified> Type = <must be specified> Flags = <must be specified> Index = <must be specified if necessary> ID = <must be specified> Seq = <must be specified> Addrs = <must be specified>
The Type field specifies a type of manipulation, the Flags field specifies a class of target information and the Addrs field specifies target information like the following:
route.RouteMessage{
	Version: RTM_VERSION,
	Type: RTM_GET,
	Flags: RTF_UP | RTF_HOST,
	ID: uintptr(os.Getpid()),
	Seq: 1,
	Addrs: []route.Addrs{
		RTAX_DST: &route.Inet4Addr{ ... },
		RTAX_IFP: &route.LinkAddr{ ... },
		RTAX_BRD: &route.Inet4Addr{ ... },
	},
}
The values for the above fields depend on the implementation of each operating system.
The Err field on a response message contains an error value on the requested operation. If non-nil, the requested operation is failed.
func (*RouteMessage) Marshal ¶
func (m *RouteMessage) Marshal() ([]byte, error)
Marshal returns the binary encoding of m.
func (*RouteMessage) Sys ¶
func (m *RouteMessage) Sys() []Sys
Sys implements the Sys method of Message interface.
type RouteMetrics ¶
type RouteMetrics struct {
	PathMTU int // path maximum transmission unit
}
    RouteMetrics represents route metrics.
func (*RouteMetrics) SysType ¶
func (rmx *RouteMetrics) SysType() SysType
SysType implements the SysType method of Sys interface.