2014-09-01 03:27:34 +00:00
|
|
|
package netlink
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
"net"
|
2014-09-15 00:44:56 +00:00
|
|
|
"syscall"
|
|
|
|
)
|
|
|
|
|
|
|
|
// Scope is an enum representing a route scope.
|
|
|
|
type Scope uint8
|
|
|
|
|
|
|
|
const (
|
|
|
|
SCOPE_UNIVERSE Scope = syscall.RT_SCOPE_UNIVERSE
|
|
|
|
SCOPE_SITE Scope = syscall.RT_SCOPE_SITE
|
|
|
|
SCOPE_LINK Scope = syscall.RT_SCOPE_LINK
|
|
|
|
SCOPE_HOST Scope = syscall.RT_SCOPE_HOST
|
|
|
|
SCOPE_NOWHERE Scope = syscall.RT_SCOPE_NOWHERE
|
2014-09-01 03:27:34 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
// Route represents a netlink route. A route is associated with a link,
|
|
|
|
// has a destination network, an optional source ip, and optional
|
|
|
|
// gateway. Advanced route parameters and non-main routing tables are
|
|
|
|
// currently not supported.
|
|
|
|
type Route struct {
|
2014-10-13 23:09:09 +00:00
|
|
|
LinkIndex int
|
|
|
|
Scope Scope
|
|
|
|
Dst *net.IPNet
|
|
|
|
Src net.IP
|
|
|
|
Gw net.IP
|
2014-09-01 03:27:34 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
func (r Route) String() string {
|
2015-01-14 15:59:00 +00:00
|
|
|
return fmt.Sprintf("{Ifindex: %d Dst: %s Src: %s Gw: %s}", r.LinkIndex, r.Dst,
|
2014-09-01 03:27:34 +00:00
|
|
|
r.Src, r.Gw)
|
|
|
|
}
|
2015-08-19 14:42:33 +00:00
|
|
|
|
|
|
|
// RouteUpdate is sent when a route changes - type is RTM_NEWROUTE or RTM_DELROUTE
|
|
|
|
type RouteUpdate struct {
|
|
|
|
Type uint16
|
|
|
|
Route
|
|
|
|
}
|