diff --git a/internal/netlink/address.go b/internal/netlink/address.go index 6340d145..d56a3151 100644 --- a/internal/netlink/address.go +++ b/internal/netlink/address.go @@ -1,19 +1,9 @@ package netlink import ( - "net/netip" - "github.com/vishvananda/netlink" ) -type Addr struct { - Network netip.Prefix -} - -func (a Addr) String() string { - return a.Network.String() -} - func (n *NetLink) AddrList(link Link, family int) ( addresses []Addr, err error) { netlinkLink := linkToNetlinkLink(&link) diff --git a/internal/netlink/family.go b/internal/netlink/family.go index 8c6f6587..0bc5da0f 100644 --- a/internal/netlink/family.go +++ b/internal/netlink/family.go @@ -2,8 +2,6 @@ package netlink import ( "fmt" - - "github.com/vishvananda/netlink" ) const ( @@ -24,16 +22,3 @@ func FamilyToString(family int) string { return fmt.Sprint(family) } } - -func (n *NetLink) IsWireguardSupported() (ok bool, err error) { - families, err := netlink.GenlFamilyList() - if err != nil { - return false, fmt.Errorf("listing gen 1 families: %w", err) - } - for _, family := range families { - if family.Name == "wireguard" { - return true, nil - } - } - return false, nil -} diff --git a/internal/netlink/ipv6.go b/internal/netlink/ipv6.go index 6a476fd5..4af1a55d 100644 --- a/internal/netlink/ipv6.go +++ b/internal/netlink/ipv6.go @@ -2,8 +2,6 @@ package netlink import ( "fmt" - - "github.com/vishvananda/netlink" ) func (n *NetLink) IsIPv6Supported() (supported bool, err error) { @@ -15,7 +13,7 @@ func (n *NetLink) IsIPv6Supported() (supported bool, err error) { var totalRoutes uint for _, link := range links { link := link - routes, err := n.RouteList(&link, netlink.FAMILY_V6) + routes, err := n.RouteList(&link, FamilyV6) if err != nil { return false, fmt.Errorf("listing IPv6 routes for link %s: %w", link.Name, err) diff --git a/internal/netlink/link.go b/internal/netlink/link.go index 46dd4547..f80f8ae7 100644 --- a/internal/netlink/link.go +++ b/internal/netlink/link.go @@ -2,14 +2,6 @@ package netlink import "github.com/vishvananda/netlink" -type Link struct { - Type string - Name string - Index int - EncapType string - MTU uint16 -} - func (n *NetLink) LinkList() (links []Link, err error) { netlinkLinks, err := netlink.LinkList() if err != nil { diff --git a/internal/netlink/route.go b/internal/netlink/route.go index d29c54e8..6c3aaf67 100644 --- a/internal/netlink/route.go +++ b/internal/netlink/route.go @@ -1,22 +1,9 @@ package netlink import ( - "net/netip" - "github.com/vishvananda/netlink" ) -type Route struct { - LinkIndex int - Dst netip.Prefix - Src netip.Addr - Gw netip.Addr - Priority int - Family int - Table int - Type int -} - func (n *NetLink) RouteList(link *Link, family int) ( routes []Route, err error) { netlinkLink := linkToNetlinkLink(link) diff --git a/internal/netlink/rule.go b/internal/netlink/rule.go index 92656b46..532677d5 100644 --- a/internal/netlink/rule.go +++ b/internal/netlink/rule.go @@ -1,37 +1,9 @@ package netlink import ( - "fmt" - "net/netip" - "github.com/vishvananda/netlink" ) -type Rule struct { - Priority int - Family int - Table int - Mark int - Src netip.Prefix - Dst netip.Prefix - Invert bool -} - -func (r Rule) String() string { - from := "all" - if r.Src.IsValid() { - from = r.Src.String() - } - - to := "all" - if r.Dst.IsValid() { - to = r.Dst.String() - } - - return fmt.Sprintf("ip rule %d: from %s to %s table %d", - r.Priority, from, to, r.Table) -} - func NewRule() Rule { // defaults found from netlink.NewRule() for fields we use, // the rest of the defaults is set when converting from a `Rule` diff --git a/internal/netlink/types.go b/internal/netlink/types.go new file mode 100644 index 00000000..e074a259 --- /dev/null +++ b/internal/netlink/types.go @@ -0,0 +1,58 @@ +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 +} + +type Rule struct { + Priority int + Family int + Table int + Mark int + Src netip.Prefix + Dst netip.Prefix + Invert bool +} + +func (r Rule) String() string { + from := "all" + if r.Src.IsValid() { + from = r.Src.String() + } + + to := "all" + if r.Dst.IsValid() { + to = r.Dst.String() + } + + return fmt.Sprintf("ip rule %d: from %s to %s table %d", + r.Priority, from, to, r.Table) +} diff --git a/internal/netlink/wireguard.go b/internal/netlink/wireguard.go new file mode 100644 index 00000000..947d424a --- /dev/null +++ b/internal/netlink/wireguard.go @@ -0,0 +1,20 @@ +package netlink + +import ( + "fmt" + + "github.com/vishvananda/netlink" +) + +func (n *NetLink) IsWireguardSupported() (ok bool, err error) { + families, err := netlink.GenlFamilyList() + if err != nil { + return false, fmt.Errorf("listing gen 1 families: %w", err) + } + for _, family := range families { + if family.Name == "wireguard" { + return true, nil + } + } + return false, nil +} diff --git a/internal/netlink/family_test.go b/internal/netlink/wireguard_test.go similarity index 100% rename from internal/netlink/family_test.go rename to internal/netlink/wireguard_test.go