Skip to content

Commit 8d4dd26

Browse files
committed
try to fix windows?
1 parent 0a94f9f commit 8d4dd26

File tree

1 file changed

+25
-15
lines changed

1 file changed

+25
-15
lines changed

overlay/tun_windows.go

Lines changed: 25 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import (
2121
const tunGUIDLabel = "Fixed Nebula Windows GUID v1"
2222

2323
type tun struct {
24-
luid windows.LUID
24+
luid winipcfg.LUID
2525
}
2626

2727
func newTunFromFd(_ *config.C, _ *logrus.Logger, _ int, _ []netip.Prefix) (*wgTun, error) {
@@ -56,13 +56,14 @@ func newTun(c *config.C, l *logrus.Logger, vpnNetworks []netip.Prefix, _ bool) (
5656
// Create Windows-specific route manager
5757
rm := &tun{}
5858

59-
// Get LUID from the device name
60-
luid, err := winipcfg.LUIDFromAlias(actualName)
61-
if err != nil {
59+
// Get LUID from the TUN device
60+
// The WireGuard TUN device on Windows should provide a LUID() method
61+
if nativeTun, ok := tunDevice.(interface{ LUID() uint64 }); ok {
62+
rm.luid = winipcfg.LUID(nativeTun.LUID())
63+
} else {
6264
tunDevice.Close()
63-
return nil, fmt.Errorf("failed to get LUID: %w", err)
65+
return nil, fmt.Errorf("failed to get LUID from TUN device")
6466
}
65-
rm.luid = luid
6667
t.routeManager = rm
6768

6869
err = t.reload(c, true)
@@ -113,7 +114,9 @@ func (rm *tun) SetMTU(t *wgTun, mtu int) {
113114

114115
func (rm *tun) setMTU(t *wgTun, mtu int) error {
115116
// Set MTU using winipcfg
116-
return rm.luid.SetIPInterfaceMTU(uint32(mtu))
117+
// Note: MTU setting on Windows TUN devices may be handled by the driver
118+
// For now, we'll skip explicit MTU setting as the WireGuard TUN handles it
119+
return nil
117120
}
118121

119122
func (rm *tun) SetDefaultRoute(t *wgTun, cidr netip.Prefix) error {
@@ -128,17 +131,19 @@ func (rm *tun) AddRoutes(t *wgTun, logErrors bool) error {
128131
continue
129132
}
130133

131-
route := winipcfg.RouteData{
132-
Destination: r.Cidr,
133-
Metric: uint32(r.Metric),
134-
}
135-
136134
if r.MTU > 0 {
137135
// Windows route MTU is not directly supported
138136
t.l.WithField("route", r).Debug("Route MTU is not supported on Windows")
139137
}
140138

141-
err := rm.luid.AddRoute(route.Destination, route.Destination.Addr(), route.Metric)
139+
// Use winipcfg to add the route
140+
// The rm.luid should have the AddRoute method from winipcfg
141+
if len(r.Via) == 0 {
142+
t.l.WithField("route", r).Warn("Route has no via address, skipping")
143+
continue
144+
}
145+
146+
err := rm.luid.AddRoute(r.Cidr, r.Via[0].Addr(), uint32(r.Metric))
142147
if err != nil {
143148
retErr := util.NewContextualError("Failed to add route", map[string]any{"route": r}, err)
144149
if logErrors {
@@ -160,7 +165,11 @@ func (rm *tun) RemoveRoutes(t *wgTun, routes []Route) {
160165
continue
161166
}
162167

163-
err := rm.luid.DeleteRoute(r.Cidr, r.Cidr.Addr())
168+
if len(r.Via) == 0 {
169+
continue
170+
}
171+
172+
err := rm.luid.DeleteRoute(r.Cidr, r.Via[0].Addr())
164173
if err != nil {
165174
t.l.WithError(err).WithField("route", r).Error("Failed to remove route")
166175
} else {
@@ -182,7 +191,8 @@ func (rm *tun) NewMultiQueueReader(t *wgTun) (io.ReadWriteCloser, error) {
182191

183192
func (rm *tun) addIP(t *wgTun, network netip.Prefix) error {
184193
// Add IP address using winipcfg
185-
err := rm.luid.AddIPAddress(network)
194+
// SetIPAddresses expects a slice of prefixes
195+
err := rm.luid.SetIPAddresses([]netip.Prefix{network})
186196
if err != nil {
187197
return fmt.Errorf("failed to add IP address %s: %w", network, err)
188198
}

0 commit comments

Comments
 (0)