Skip to content

Commit

Permalink
Fix windows route zones (#2164)
Browse files Browse the repository at this point in the history
* Fix windows zone and add additional debug output

* Fix routes zone on BSD

* Remove redundant Unmap

* Add zone to windows routes
  • Loading branch information
lixmal authored Jun 20, 2024
1 parent c347a4c commit b075009
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 13 deletions.
9 changes: 6 additions & 3 deletions client/internal/networkmonitor/monitor_windows.go
Original file line number Diff line number Diff line change
Expand Up @@ -101,11 +101,14 @@ func routeChanged(nexthop systemops.Nexthop, intf *net.Interface, routes map[net

if r, ok := routes[unspec]; ok {
if r.Nexthop != nexthop.IP || compareIntf(r.Interface, intf) != 0 {
intf := "<nil>"
oldIntf, newIntf := "<nil>", "<nil>"
if intf != nil {
oldIntf = intf.Name
}
if r.Interface != nil {
intf = r.Interface.Name
newIntf = r.Interface.Name
}
log.Infof("network monitor: default route changed: %s via %s (%s)", r.Destination, r.Nexthop, intf)
log.Infof("network monitor: default route changed: %s from %s (%s) to %s (%s)", r.Destination, nexthop.IP, oldIntf, nexthop.IP, newIntf)
return true
}
} else {
Expand Down
2 changes: 1 addition & 1 deletion client/internal/routemanager/systemops/systemops_bsd.go
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ func toNetIP(a route.Addr) netip.Addr {
case *route.Inet6Addr:
ip := netip.AddrFrom16(t.IP)
if t.ZoneID != 0 {
ip.WithZone(strconv.Itoa(t.ZoneID))
ip = ip.WithZone(strconv.Itoa(t.ZoneID))
}
return ip
default:
Expand Down
10 changes: 5 additions & 5 deletions client/internal/routemanager/systemops/systemops_generic.go
Original file line number Diff line number Diff line change
Expand Up @@ -356,7 +356,7 @@ func GetNextHop(ip netip.Addr) (Nexthop, error) {
return Nexthop{}, fmt.Errorf("convert preferred source to address: %w", err)
}
return Nexthop{
IP: addr.Unmap(),
IP: addr,
Intf: intf,
}, nil
}
Expand All @@ -380,12 +380,12 @@ func ipToAddr(ip net.IP, intf *net.Interface) (netip.Addr, error) {
}

if intf != nil && (addr.IsLinkLocalMulticast() || addr.IsLinkLocalUnicast()) {
log.Tracef("Adding zone %s to address %s", intf.Name, addr)
zone := intf.Name
if runtime.GOOS == "windows" {
addr = addr.WithZone(strconv.Itoa(intf.Index))
} else {
addr = addr.WithZone(intf.Name)
zone = strconv.Itoa(intf.Index)
}
log.Tracef("Adding zone %s to address %s", zone, addr)
addr = addr.WithZone(zone)
}

return addr.Unmap(), nil
Expand Down
12 changes: 8 additions & 4 deletions client/internal/routemanager/systemops/systemops_windows.go
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,6 @@ func (r *SysOps) addToRouteTable(prefix netip.Prefix, nexthop Nexthop) error {
return fmt.Errorf("invalid zone: %w", err)
}
nexthop.Intf = &net.Interface{Index: zone}
nexthop.IP.WithZone("")
}

return addRouteCmd(prefix, nexthop)
Expand All @@ -80,8 +79,8 @@ func (r *SysOps) addToRouteTable(prefix netip.Prefix, nexthop Nexthop) error {
func (r *SysOps) removeFromRouteTable(prefix netip.Prefix, nexthop Nexthop) error {
args := []string{"delete", prefix.String()}
if nexthop.IP.IsValid() {
nexthop.IP.WithZone("")
args = append(args, nexthop.IP.Unmap().String())
ip := nexthop.IP.WithZone("")
args = append(args, ip.Unmap().String())
}

routeCmd := uspfilter.GetSystem32Command("route")
Expand Down Expand Up @@ -146,6 +145,10 @@ func GetRoutes() ([]Route, error) {
Index: int(entry.InterfaceIndex),
Name: entry.InterfaceAlias,
}

if nexthop.Is6() && (nexthop.IsLinkLocalUnicast() || nexthop.IsLinkLocalMulticast()) {
nexthop = nexthop.WithZone(strconv.Itoa(int(entry.InterfaceIndex)))
}
}

routes = append(routes, Route{
Expand Down Expand Up @@ -189,7 +192,8 @@ func addRouteCmd(prefix netip.Prefix, nexthop Nexthop) error {
args := []string{"add", prefix.String()}

if nexthop.IP.IsValid() {
args = append(args, nexthop.IP.Unmap().String())
ip := nexthop.IP.WithZone("")
args = append(args, ip.Unmap().String())
} else {
addr := "0.0.0.0"
if prefix.Addr().Is6() {
Expand Down

0 comments on commit b075009

Please sign in to comment.