Skip to content

Commit 948522a

Browse files
committed
netlink: move func AddRoute/DelRoute
1 parent 7f6c78b commit 948522a

8 files changed

+57
-56
lines changed

netlink/link_darwin.go

-14
Original file line numberDiff line numberDiff line change
@@ -25,20 +25,6 @@ func SetupLink(ifName, cidr string) error {
2525
return AddRoute(ifName, ipnet, nil)
2626
}
2727

28-
func AddRoute(ifName string, to *net.IPNet, _ net.IP) error {
29-
if to.IP.To4() == nil { // ipv6
30-
return exec.Command("route", "-qn", "add", "-inet6", to.String(), "-iface", ifName).Run()
31-
}
32-
return exec.Command("route", "-qn", "add", "-inet", to.String(), "-iface", ifName).Run()
33-
}
34-
35-
func DelRoute(_ string, to *net.IPNet, _ net.IP) error {
36-
if to.IP.To4() == nil { // ipv6
37-
return exec.Command("route", "-qn", "delete", "-inet6", to.String()).Run()
38-
}
39-
return exec.Command("route", "-qn", "delete", "-inet", to.String()).Run()
40-
}
41-
4228
func LinkByIndex(index int) (*Link, error) {
4329
return nil, errors.ErrUnsupported
4430
}

netlink/link_default.go

-11
Original file line numberDiff line numberDiff line change
@@ -4,24 +4,13 @@ package netlink
44

55
import (
66
"errors"
7-
"net"
87
)
98

109
func SetupLink(string, string) error {
1110
// noop
1211
return nil
1312
}
1413

15-
func AddRoute(string, *net.IPNet, net.IP) error {
16-
// noop
17-
return nil
18-
}
19-
20-
func DelRoute(string, *net.IPNet, net.IP) error {
21-
// noop
22-
return nil
23-
}
24-
2514
func LinkByIndex(index int) (*Link, error) {
2615
return nil, errors.ErrUnsupported
2716
}

netlink/link_linux.go

-15
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ package netlink
44

55
import (
66
"errors"
7-
"net"
87

98
"github.com/vishvananda/netlink"
109
)
@@ -35,20 +34,6 @@ func SetupLink(ifName, cidr string) error {
3534
return nil
3635
}
3736

38-
func AddRoute(_ string, to *net.IPNet, via net.IP) error {
39-
return netlink.RouteAdd(&netlink.Route{
40-
Dst: to,
41-
Gw: via,
42-
})
43-
}
44-
45-
func DelRoute(_ string, to *net.IPNet, via net.IP) error {
46-
return netlink.RouteDel(&netlink.Route{
47-
Dst: to,
48-
Gw: via,
49-
})
50-
}
51-
5237
func LinkByIndex(index int) (*Link, error) {
5338
l, err := netlink.LinkByIndex(index)
5439
if err != nil {

netlink/link_windows.go

-16
Original file line numberDiff line numberDiff line change
@@ -25,22 +25,6 @@ func SetupLink(ifName, cidr string) error {
2525
return exec.Command("netsh", "interface", "ipv4", "set", "address", ifName, "static", ip.String(), addrMask).Run()
2626
}
2727

28-
func AddRoute(ifName string, to *net.IPNet, via net.IP) error {
29-
if via.To4() == nil { // ipv6
30-
return exec.Command("netsh", "interface", "ipv6", "add", "route", to.String(), ifName, via.String()).Run()
31-
}
32-
// ipv4
33-
addrMask := fmt.Sprintf("%d.%d.%d.%d", to.Mask[0], to.Mask[1], to.Mask[2], to.Mask[3])
34-
return exec.Command("route", "add", to.IP.String(), "mask", addrMask, via.String()).Run()
35-
}
36-
37-
func DelRoute(ifName string, to *net.IPNet, via net.IP) error {
38-
if via.To4() == nil { // ipv6
39-
return exec.Command("netsh", "interface", "ipv6", "delete", "route", to.String(), ifName, via.String()).Run()
40-
}
41-
return exec.Command("route", "delete", to.IP.String()).Run()
42-
}
43-
4428
func LinkByIndex(index int) (*Link, error) {
4529
luid, err := winipcfg.LUIDFromIndex(uint32(index))
4630
if err != nil {

netlink/route_darwin.go

+15
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"log/slog"
88
"net"
99
"os"
10+
"os/exec"
1011
"slices"
1112
"syscall"
1213

@@ -88,3 +89,17 @@ func runRouteMsgReadLoop(fd int, ch chan<- RouteUpdate) error {
8889
}
8990
}
9091
}
92+
93+
func AddRoute(ifName string, to *net.IPNet, _ net.IP) error {
94+
if to.IP.To4() == nil { // ipv6
95+
return exec.Command("route", "-qn", "add", "-inet6", to.String(), "-iface", ifName).Run()
96+
}
97+
return exec.Command("route", "-qn", "add", "-inet", to.String(), "-iface", ifName).Run()
98+
}
99+
100+
func DelRoute(_ string, to *net.IPNet, _ net.IP) error {
101+
if to.IP.To4() == nil { // ipv6
102+
return exec.Command("route", "-qn", "delete", "-inet6", to.String()).Run()
103+
}
104+
return exec.Command("route", "-qn", "delete", "-inet", to.String()).Run()
105+
}

netlink/route_default.go

+10
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,18 @@ package netlink
55
import (
66
"context"
77
"errors"
8+
"net"
89
)
910

1011
func RouteSubscribe(ctx context.Context, ch chan<- RouteUpdate) error {
1112
return errors.ErrUnsupported
1213
}
14+
func AddRoute(string, *net.IPNet, net.IP) error {
15+
// noop
16+
return errors.ErrUnsupported
17+
}
18+
19+
func DelRoute(string, *net.IPNet, net.IP) error {
20+
// noop
21+
return errors.ErrUnsupported
22+
}

netlink/route_linux.go

+15
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package netlink
33
import (
44
"context"
55
"log/slog"
6+
"net"
67
"slices"
78

89
"github.com/vishvananda/netlink"
@@ -43,3 +44,17 @@ func RouteSubscribe(ctx context.Context, ch chan<- RouteUpdate) error {
4344
}()
4445
return nil
4546
}
47+
48+
func AddRoute(_ string, to *net.IPNet, via net.IP) error {
49+
return netlink.RouteAdd(&netlink.Route{
50+
Dst: to,
51+
Gw: via,
52+
})
53+
}
54+
55+
func DelRoute(_ string, to *net.IPNet, via net.IP) error {
56+
return netlink.RouteDel(&netlink.Route{
57+
Dst: to,
58+
Gw: via,
59+
})
60+
}

netlink/route_windows.go

+17
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@ package netlink
22

33
import (
44
"context"
5+
"fmt"
56
"net"
7+
"os/exec"
68

79
"golang.zx2c4.com/wireguard/windows/tunnel/winipcfg"
810
)
@@ -26,3 +28,18 @@ func RouteSubscribe(ctx context.Context, ch chan<- RouteUpdate) error {
2628
}()
2729
return nil
2830
}
31+
func AddRoute(ifName string, to *net.IPNet, via net.IP) error {
32+
if via.To4() == nil { // ipv6
33+
return exec.Command("netsh", "interface", "ipv6", "add", "route", to.String(), ifName, via.String()).Run()
34+
}
35+
// ipv4
36+
addrMask := fmt.Sprintf("%d.%d.%d.%d", to.Mask[0], to.Mask[1], to.Mask[2], to.Mask[3])
37+
return exec.Command("route", "add", to.IP.String(), "mask", addrMask, via.String()).Run()
38+
}
39+
40+
func DelRoute(ifName string, to *net.IPNet, via net.IP) error {
41+
if via.To4() == nil { // ipv6
42+
return exec.Command("netsh", "interface", "ipv6", "delete", "route", to.String(), ifName, via.String()).Run()
43+
}
44+
return exec.Command("route", "delete", to.IP.String()).Run()
45+
}

0 commit comments

Comments
 (0)