netlink: move func AddRoute/DelRoute

This commit is contained in:
rkonfj 2024-07-20 09:37:53 +08:00
parent 7f6c78b763
commit 948522a2bb
No known key found for this signature in database
GPG Key ID: 9595E3A991503741
8 changed files with 57 additions and 56 deletions

View File

@ -25,20 +25,6 @@ func SetupLink(ifName, cidr string) error {
return AddRoute(ifName, ipnet, nil)
}
func AddRoute(ifName string, to *net.IPNet, _ net.IP) error {
if to.IP.To4() == nil { // ipv6
return exec.Command("route", "-qn", "add", "-inet6", to.String(), "-iface", ifName).Run()
}
return exec.Command("route", "-qn", "add", "-inet", to.String(), "-iface", ifName).Run()
}
func DelRoute(_ string, to *net.IPNet, _ net.IP) error {
if to.IP.To4() == nil { // ipv6
return exec.Command("route", "-qn", "delete", "-inet6", to.String()).Run()
}
return exec.Command("route", "-qn", "delete", "-inet", to.String()).Run()
}
func LinkByIndex(index int) (*Link, error) {
return nil, errors.ErrUnsupported
}

View File

@ -4,7 +4,6 @@ package netlink
import (
"errors"
"net"
)
func SetupLink(string, string) error {
@ -12,16 +11,6 @@ func SetupLink(string, string) error {
return nil
}
func AddRoute(string, *net.IPNet, net.IP) error {
// noop
return nil
}
func DelRoute(string, *net.IPNet, net.IP) error {
// noop
return nil
}
func LinkByIndex(index int) (*Link, error) {
return nil, errors.ErrUnsupported
}

View File

@ -4,7 +4,6 @@ package netlink
import (
"errors"
"net"
"github.com/vishvananda/netlink"
)
@ -35,20 +34,6 @@ func SetupLink(ifName, cidr string) error {
return nil
}
func AddRoute(_ string, to *net.IPNet, via net.IP) error {
return netlink.RouteAdd(&netlink.Route{
Dst: to,
Gw: via,
})
}
func DelRoute(_ string, to *net.IPNet, via net.IP) error {
return netlink.RouteDel(&netlink.Route{
Dst: to,
Gw: via,
})
}
func LinkByIndex(index int) (*Link, error) {
l, err := netlink.LinkByIndex(index)
if err != nil {

View File

@ -25,22 +25,6 @@ func SetupLink(ifName, cidr string) error {
return exec.Command("netsh", "interface", "ipv4", "set", "address", ifName, "static", ip.String(), addrMask).Run()
}
func AddRoute(ifName string, to *net.IPNet, via net.IP) error {
if via.To4() == nil { // ipv6
return exec.Command("netsh", "interface", "ipv6", "add", "route", to.String(), ifName, via.String()).Run()
}
// ipv4
addrMask := fmt.Sprintf("%d.%d.%d.%d", to.Mask[0], to.Mask[1], to.Mask[2], to.Mask[3])
return exec.Command("route", "add", to.IP.String(), "mask", addrMask, via.String()).Run()
}
func DelRoute(ifName string, to *net.IPNet, via net.IP) error {
if via.To4() == nil { // ipv6
return exec.Command("netsh", "interface", "ipv6", "delete", "route", to.String(), ifName, via.String()).Run()
}
return exec.Command("route", "delete", to.IP.String()).Run()
}
func LinkByIndex(index int) (*Link, error) {
luid, err := winipcfg.LUIDFromIndex(uint32(index))
if err != nil {

View File

@ -7,6 +7,7 @@ import (
"log/slog"
"net"
"os"
"os/exec"
"slices"
"syscall"
@ -88,3 +89,17 @@ func runRouteMsgReadLoop(fd int, ch chan<- RouteUpdate) error {
}
}
}
func AddRoute(ifName string, to *net.IPNet, _ net.IP) error {
if to.IP.To4() == nil { // ipv6
return exec.Command("route", "-qn", "add", "-inet6", to.String(), "-iface", ifName).Run()
}
return exec.Command("route", "-qn", "add", "-inet", to.String(), "-iface", ifName).Run()
}
func DelRoute(_ string, to *net.IPNet, _ net.IP) error {
if to.IP.To4() == nil { // ipv6
return exec.Command("route", "-qn", "delete", "-inet6", to.String()).Run()
}
return exec.Command("route", "-qn", "delete", "-inet", to.String()).Run()
}

View File

@ -5,8 +5,18 @@ package netlink
import (
"context"
"errors"
"net"
)
func RouteSubscribe(ctx context.Context, ch chan<- RouteUpdate) error {
return errors.ErrUnsupported
}
func AddRoute(string, *net.IPNet, net.IP) error {
// noop
return errors.ErrUnsupported
}
func DelRoute(string, *net.IPNet, net.IP) error {
// noop
return errors.ErrUnsupported
}

View File

@ -3,6 +3,7 @@ package netlink
import (
"context"
"log/slog"
"net"
"slices"
"github.com/vishvananda/netlink"
@ -43,3 +44,17 @@ func RouteSubscribe(ctx context.Context, ch chan<- RouteUpdate) error {
}()
return nil
}
func AddRoute(_ string, to *net.IPNet, via net.IP) error {
return netlink.RouteAdd(&netlink.Route{
Dst: to,
Gw: via,
})
}
func DelRoute(_ string, to *net.IPNet, via net.IP) error {
return netlink.RouteDel(&netlink.Route{
Dst: to,
Gw: via,
})
}

View File

@ -2,7 +2,9 @@ package netlink
import (
"context"
"fmt"
"net"
"os/exec"
"golang.zx2c4.com/wireguard/windows/tunnel/winipcfg"
)
@ -26,3 +28,18 @@ func RouteSubscribe(ctx context.Context, ch chan<- RouteUpdate) error {
}()
return nil
}
func AddRoute(ifName string, to *net.IPNet, via net.IP) error {
if via.To4() == nil { // ipv6
return exec.Command("netsh", "interface", "ipv6", "add", "route", to.String(), ifName, via.String()).Run()
}
// ipv4
addrMask := fmt.Sprintf("%d.%d.%d.%d", to.Mask[0], to.Mask[1], to.Mask[2], to.Mask[3])
return exec.Command("route", "add", to.IP.String(), "mask", addrMask, via.String()).Run()
}
func DelRoute(ifName string, to *net.IPNet, via net.IP) error {
if via.To4() == nil { // ipv6
return exec.Command("netsh", "interface", "ipv6", "delete", "route", to.String(), ifName, via.String()).Run()
}
return exec.Command("route", "delete", to.IP.String()).Run()
}