| package netlink |
| |
| import ( |
| "fmt" |
| "net" |
| ) |
| |
| // Scope is an enum representing a route scope. |
| type Scope uint8 |
| |
| type NextHopFlag int |
| |
| // Route represents a netlink route. |
| type Route struct { |
| LinkIndex int |
| ILinkIndex int |
| Scope Scope |
| Dst *net.IPNet |
| Src net.IP |
| Gw net.IP |
| MultiPath []*NexthopInfo |
| Protocol int |
| Priority int |
| Table int |
| Type int |
| Tos int |
| Flags int |
| } |
| |
| func (r Route) String() string { |
| if len(r.MultiPath) > 0 { |
| return fmt.Sprintf("{Dst: %s Src: %s Gw: %s Flags: %s Table: %d}", r.Dst, |
| r.Src, r.MultiPath, r.ListFlags(), r.Table) |
| } |
| return fmt.Sprintf("{Ifindex: %d Dst: %s Src: %s Gw: %s Flags: %s Table: %d}", r.LinkIndex, r.Dst, |
| r.Src, r.Gw, r.ListFlags(), r.Table) |
| } |
| |
| func (r *Route) SetFlag(flag NextHopFlag) { |
| r.Flags |= int(flag) |
| } |
| |
| func (r *Route) ClearFlag(flag NextHopFlag) { |
| r.Flags &^= int(flag) |
| } |
| |
| type flagString struct { |
| f NextHopFlag |
| s string |
| } |
| |
| // RouteUpdate is sent when a route changes - type is RTM_NEWROUTE or RTM_DELROUTE |
| type RouteUpdate struct { |
| Type uint16 |
| Route |
| } |
| |
| type NexthopInfo struct { |
| LinkIndex int |
| Hops int |
| Gw net.IP |
| } |
| |
| func (n *NexthopInfo) String() string { |
| return fmt.Sprintf("{Ifindex: %d Weight: %d, Gw: %s}", n.LinkIndex, n.Hops+1, n.Gw) |
| } |