mirror of
https://github.com/sigcn/pg.git
synced 2025-09-27 10:42:08 +08:00
netlink: move func AddRoute/DelRoute
This commit is contained in:
@@ -25,20 +25,6 @@ func SetupLink(ifName, cidr string) error {
|
|||||||
return AddRoute(ifName, ipnet, nil)
|
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) {
|
func LinkByIndex(index int) (*Link, error) {
|
||||||
return nil, errors.ErrUnsupported
|
return nil, errors.ErrUnsupported
|
||||||
}
|
}
|
||||||
|
@@ -4,7 +4,6 @@ package netlink
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"net"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func SetupLink(string, string) error {
|
func SetupLink(string, string) error {
|
||||||
@@ -12,16 +11,6 @@ func SetupLink(string, string) error {
|
|||||||
return nil
|
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) {
|
func LinkByIndex(index int) (*Link, error) {
|
||||||
return nil, errors.ErrUnsupported
|
return nil, errors.ErrUnsupported
|
||||||
}
|
}
|
||||||
|
@@ -4,7 +4,6 @@ package netlink
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"net"
|
|
||||||
|
|
||||||
"github.com/vishvananda/netlink"
|
"github.com/vishvananda/netlink"
|
||||||
)
|
)
|
||||||
@@ -35,20 +34,6 @@ func SetupLink(ifName, cidr string) error {
|
|||||||
return nil
|
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) {
|
func LinkByIndex(index int) (*Link, error) {
|
||||||
l, err := netlink.LinkByIndex(index)
|
l, err := netlink.LinkByIndex(index)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@@ -25,22 +25,6 @@ func SetupLink(ifName, cidr string) error {
|
|||||||
return exec.Command("netsh", "interface", "ipv4", "set", "address", ifName, "static", ip.String(), addrMask).Run()
|
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) {
|
func LinkByIndex(index int) (*Link, error) {
|
||||||
luid, err := winipcfg.LUIDFromIndex(uint32(index))
|
luid, err := winipcfg.LUIDFromIndex(uint32(index))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@@ -7,6 +7,7 @@ import (
|
|||||||
"log/slog"
|
"log/slog"
|
||||||
"net"
|
"net"
|
||||||
"os"
|
"os"
|
||||||
|
"os/exec"
|
||||||
"slices"
|
"slices"
|
||||||
"syscall"
|
"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()
|
||||||
|
}
|
||||||
|
@@ -5,8 +5,18 @@ package netlink
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"errors"
|
"errors"
|
||||||
|
"net"
|
||||||
)
|
)
|
||||||
|
|
||||||
func RouteSubscribe(ctx context.Context, ch chan<- RouteUpdate) error {
|
func RouteSubscribe(ctx context.Context, ch chan<- RouteUpdate) error {
|
||||||
return errors.ErrUnsupported
|
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
|
||||||
|
}
|
||||||
|
@@ -3,6 +3,7 @@ package netlink
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"log/slog"
|
"log/slog"
|
||||||
|
"net"
|
||||||
"slices"
|
"slices"
|
||||||
|
|
||||||
"github.com/vishvananda/netlink"
|
"github.com/vishvananda/netlink"
|
||||||
@@ -43,3 +44,17 @@ func RouteSubscribe(ctx context.Context, ch chan<- RouteUpdate) error {
|
|||||||
}()
|
}()
|
||||||
return nil
|
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,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
@@ -2,7 +2,9 @@ package netlink
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"fmt"
|
||||||
"net"
|
"net"
|
||||||
|
"os/exec"
|
||||||
|
|
||||||
"golang.zx2c4.com/wireguard/windows/tunnel/winipcfg"
|
"golang.zx2c4.com/wireguard/windows/tunnel/winipcfg"
|
||||||
)
|
)
|
||||||
@@ -26,3 +28,18 @@ func RouteSubscribe(ctx context.Context, ch chan<- RouteUpdate) error {
|
|||||||
}()
|
}()
|
||||||
return nil
|
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()
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user