Skip to content

Commit aa9d9c6

Browse files
committed
Improve add windows route
1 parent f457988 commit aa9d9c6

File tree

1 file changed

+36
-17
lines changed

1 file changed

+36
-17
lines changed

tun_windows.go

Lines changed: 36 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -172,15 +172,9 @@ func (t *NativeTun) Start() error {
172172
if err != nil {
173173
return err
174174
}
175-
for _, routeRange := range routeRanges {
176-
if routeRange.Addr().Is4() {
177-
err = luid.AddRoute(routeRange, gateway4, 0)
178-
} else {
179-
err = luid.AddRoute(routeRange, gateway6, 0)
180-
}
181-
if err != nil {
182-
return err
183-
}
175+
err = addRouteList(luid, routeRanges, gateway4, gateway6, 0)
176+
if err != nil {
177+
return err
184178
}
185179
err = windnsapi.FlushResolverCache()
186180
if err != nil {
@@ -560,20 +554,45 @@ func (t *NativeTun) UpdateRouteOptions(tunOptions Options) error {
560554
if err != nil {
561555
return err
562556
}
563-
for _, routeRange := range routeRanges {
564-
if routeRange.Addr().Is4() {
565-
err = luid.AddRoute(routeRange, gateway4, 0)
557+
err = addRouteList(luid, routeRanges, gateway4, gateway6, 0)
558+
if err != nil {
559+
return err
560+
}
561+
err = windnsapi.FlushResolverCache()
562+
if err != nil {
563+
return err
564+
}
565+
return nil
566+
}
567+
568+
func addRouteList(luid winipcfg.LUID, destinations []netip.Prefix, gateway4 netip.Addr, gateway6 netip.Addr, metric uint32) error {
569+
row := winipcfg.MibIPforwardRow2{}
570+
row.Init()
571+
row.InterfaceLUID = luid
572+
row.Metric = metric
573+
nextHop4 := row.NextHop
574+
nextHop6 := row.NextHop
575+
if gateway4.IsValid() {
576+
nextHop4.SetAddr(gateway4)
577+
}
578+
if gateway6.IsValid() {
579+
nextHop6.SetAddr(gateway6)
580+
}
581+
for _, destination := range destinations {
582+
err := row.DestinationPrefix.SetPrefix(destination)
583+
if err != nil {
584+
return err
585+
}
586+
if destination.Addr().Is4() {
587+
row.NextHop = nextHop4
566588
} else {
567-
err = luid.AddRoute(routeRange, gateway6, 0)
589+
row.NextHop = nextHop6
568590
}
591+
err = row.Create()
569592
if err != nil {
570593
return err
571594
}
572595
}
573-
err = windnsapi.FlushResolverCache()
574-
if err != nil {
575-
return err
576-
}
577596
return nil
578597
}
579598

0 commit comments

Comments
 (0)