@@ -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