64 lines
1.1 KiB
Go
64 lines
1.1 KiB
Go
package netlink
|
|
|
|
import (
|
|
"fmt"
|
|
"net/netip"
|
|
)
|
|
|
|
type Addr struct {
|
|
Network netip.Prefix
|
|
}
|
|
|
|
func (a Addr) String() string {
|
|
return a.Network.String()
|
|
}
|
|
|
|
type Link struct {
|
|
Type string
|
|
Name string
|
|
Index int
|
|
EncapType string
|
|
MTU uint16
|
|
}
|
|
|
|
type Route struct {
|
|
LinkIndex int
|
|
Dst netip.Prefix
|
|
Src netip.Addr
|
|
Gw netip.Addr
|
|
Priority int
|
|
Family int
|
|
Table int
|
|
Type int
|
|
}
|
|
|
|
func (r Route) String() string {
|
|
return fmt.Sprintf("{link %d, dst %s, src %s, gw %s, priority %d, family %d, table %d, type %d}",
|
|
r.LinkIndex, r.Dst, r.Src, r.Gw, r.Priority, r.Family, r.Table, r.Type)
|
|
}
|
|
|
|
type Rule struct {
|
|
Priority int
|
|
Family int
|
|
Table int
|
|
Mark uint32
|
|
Src netip.Prefix
|
|
Dst netip.Prefix
|
|
Invert bool
|
|
}
|
|
|
|
func (r Rule) String() string {
|
|
from := "all"
|
|
if r.Src.IsValid() && !r.Src.Addr().IsUnspecified() {
|
|
from = r.Src.String()
|
|
}
|
|
|
|
to := "all"
|
|
if r.Dst.IsValid() && !r.Dst.Addr().IsUnspecified() {
|
|
to = r.Dst.String()
|
|
}
|
|
|
|
return fmt.Sprintf("ip rule %d: from %s to %s table %d",
|
|
r.Priority, from, to, r.Table)
|
|
}
|