mirror of
				https://github.com/yggdrasil-network/yggdrasil-go.git
				synced 2025-11-04 03:05:07 +03:00 
			
		
		
		
	Update Windows module a bit - capture TAP setup errors earlier, refer to newer version of water which should fix #456
This commit is contained in:
		
							parent
							
								
									85881c04fa
								
							
						
					
					
						commit
						1a5c2a4942
					
				
					 3 changed files with 48 additions and 20 deletions
				
			
		
							
								
								
									
										11
									
								
								go.mod
									
										
									
									
									
								
							
							
						
						
									
										11
									
								
								go.mod
									
										
									
									
									
								
							| 
						 | 
					@ -8,9 +8,10 @@ require (
 | 
				
			||||||
	github.com/kardianos/minwinsvc v0.0.0-20151122163309-cad6b2b879b0
 | 
						github.com/kardianos/minwinsvc v0.0.0-20151122163309-cad6b2b879b0
 | 
				
			||||||
	github.com/mitchellh/mapstructure v1.1.2
 | 
						github.com/mitchellh/mapstructure v1.1.2
 | 
				
			||||||
	github.com/songgao/packets v0.0.0-20160404182456-549a10cd4091
 | 
						github.com/songgao/packets v0.0.0-20160404182456-549a10cd4091
 | 
				
			||||||
	github.com/yggdrasil-network/water v0.0.0-20180615095340-f732c88f34ae
 | 
						github.com/yggdrasil-network/water v0.0.0-20190719211521-a76871ea954b
 | 
				
			||||||
	golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9
 | 
						golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4
 | 
				
			||||||
	golang.org/x/net v0.0.0-20181207154023-610586996380
 | 
						golang.org/x/net v0.0.0-20190628185345-da137c7871d7
 | 
				
			||||||
	golang.org/x/sys v0.0.0-20181206074257-70b957f3b65e
 | 
						golang.org/x/sys v0.0.0-20190712062909-fae7ac547cb7
 | 
				
			||||||
	golang.org/x/text v0.3.0
 | 
						golang.org/x/text v0.3.2
 | 
				
			||||||
 | 
						golang.org/x/tools v0.0.0-20190719005602-e377ae9d6386 // indirect
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										13
									
								
								go.sum
									
										
									
									
									
								
							
							
						
						
									
										13
									
								
								go.sum
									
										
									
									
									
								
							| 
						 | 
					@ -14,11 +14,24 @@ github.com/songgao/packets v0.0.0-20160404182456-549a10cd4091 h1:1zN6ImoqhSJhN8h
 | 
				
			||||||
github.com/songgao/packets v0.0.0-20160404182456-549a10cd4091/go.mod h1:N20Z5Y8oye9a7HmytmZ+tr8Q2vlP0tAHP13kTHzwvQY=
 | 
					github.com/songgao/packets v0.0.0-20160404182456-549a10cd4091/go.mod h1:N20Z5Y8oye9a7HmytmZ+tr8Q2vlP0tAHP13kTHzwvQY=
 | 
				
			||||||
github.com/yggdrasil-network/water v0.0.0-20180615095340-f732c88f34ae h1:MYCANF1kehCG6x6G+/9txLfq6n3lS5Vp0Mxn1hdiBAc=
 | 
					github.com/yggdrasil-network/water v0.0.0-20180615095340-f732c88f34ae h1:MYCANF1kehCG6x6G+/9txLfq6n3lS5Vp0Mxn1hdiBAc=
 | 
				
			||||||
github.com/yggdrasil-network/water v0.0.0-20180615095340-f732c88f34ae/go.mod h1:R0SBCsugm+Sf1katgTb2t7GXMm+nRIv43tM4VDZbaOs=
 | 
					github.com/yggdrasil-network/water v0.0.0-20180615095340-f732c88f34ae/go.mod h1:R0SBCsugm+Sf1katgTb2t7GXMm+nRIv43tM4VDZbaOs=
 | 
				
			||||||
 | 
					github.com/yggdrasil-network/water v0.0.0-20190719211521-a76871ea954b/go.mod h1:R0SBCsugm+Sf1katgTb2t7GXMm+nRIv43tM4VDZbaOs=
 | 
				
			||||||
golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9 h1:mKdxBk7AujPs8kU4m80U72y/zjbZ3UcXC7dClwKbUI0=
 | 
					golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9 h1:mKdxBk7AujPs8kU4m80U72y/zjbZ3UcXC7dClwKbUI0=
 | 
				
			||||||
golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
 | 
					golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
 | 
				
			||||||
 | 
					golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
 | 
				
			||||||
 | 
					golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
				
			||||||
golang.org/x/net v0.0.0-20181207154023-610586996380 h1:zPQexyRtNYBc7bcHmehl1dH6TB3qn8zytv8cBGLDNY0=
 | 
					golang.org/x/net v0.0.0-20181207154023-610586996380 h1:zPQexyRtNYBc7bcHmehl1dH6TB3qn8zytv8cBGLDNY0=
 | 
				
			||||||
golang.org/x/net v0.0.0-20181207154023-610586996380/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 | 
					golang.org/x/net v0.0.0-20181207154023-610586996380/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 | 
				
			||||||
 | 
					golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 | 
				
			||||||
 | 
					golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
				
			||||||
 | 
					golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
				
			||||||
 | 
					golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 | 
				
			||||||
golang.org/x/sys v0.0.0-20181206074257-70b957f3b65e h1:njOxP/wVblhCLIUhjHXf6X+dzTt5OQ3vMQo9mkOIKIo=
 | 
					golang.org/x/sys v0.0.0-20181206074257-70b957f3b65e h1:njOxP/wVblhCLIUhjHXf6X+dzTt5OQ3vMQo9mkOIKIo=
 | 
				
			||||||
golang.org/x/sys v0.0.0-20181206074257-70b957f3b65e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 | 
					golang.org/x/sys v0.0.0-20181206074257-70b957f3b65e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 | 
				
			||||||
 | 
					golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 | 
				
			||||||
 | 
					golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 | 
				
			||||||
 | 
					golang.org/x/sys v0.0.0-20190712062909-fae7ac547cb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 | 
				
			||||||
golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
 | 
					golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
 | 
				
			||||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 | 
					golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 | 
				
			||||||
 | 
					golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
 | 
				
			||||||
 | 
					golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 | 
				
			||||||
 | 
					golang.org/x/tools v0.0.0-20190719005602-e377ae9d6386/go.mod h1:jcCCGcm9btYwXyDqrUWc6MKQKKGJCWEQ3AfLSRIbEuI=
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,6 +1,7 @@
 | 
				
			||||||
package tuntap
 | 
					package tuntap
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
 | 
						"errors"
 | 
				
			||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
	"os/exec"
 | 
						"os/exec"
 | 
				
			||||||
	"strings"
 | 
						"strings"
 | 
				
			||||||
| 
						 | 
					@ -27,23 +28,13 @@ func (tun *TunAdapter) setup(ifname string, iftapmode bool, addr string, mtu int
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	iface, err := water.New(config)
 | 
						iface, err := water.New(config)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		panic(err)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	// Disable/enable the interface to resets its configuration (invalidating iface)
 | 
					 | 
				
			||||||
	cmd := exec.Command("netsh", "interface", "set", "interface", iface.Name(), "admin=DISABLED")
 | 
					 | 
				
			||||||
	tun.log.Debugln("netsh command:", strings.Join(cmd.Args, " "))
 | 
					 | 
				
			||||||
	output, err := cmd.CombinedOutput()
 | 
					 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		tun.log.Errorln("Windows netsh failed:", err)
 | 
					 | 
				
			||||||
		tun.log.Traceln(string(output))
 | 
					 | 
				
			||||||
		return err
 | 
							return err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	cmd = exec.Command("netsh", "interface", "set", "interface", iface.Name(), "admin=ENABLED")
 | 
						if iface.Name() == "" {
 | 
				
			||||||
	tun.log.Debugln("netsh command:", strings.Join(cmd.Args, " "))
 | 
							return errors.New("unable to find TAP adapter with component ID " + config.PlatformSpecificParams.ComponentID)
 | 
				
			||||||
	output, err = cmd.CombinedOutput()
 | 
						}
 | 
				
			||||||
	if err != nil {
 | 
						// Reset the adapter - this invalidates iface so we'll need to get a new one
 | 
				
			||||||
		tun.log.Errorln("Windows netsh failed:", err)
 | 
						if err := tun.resetAdapter(); err != nil {
 | 
				
			||||||
		tun.log.Traceln(string(output))
 | 
					 | 
				
			||||||
		return err
 | 
							return err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	// Get a new iface
 | 
						// Get a new iface
 | 
				
			||||||
| 
						 | 
					@ -64,6 +55,29 @@ func (tun *TunAdapter) setup(ifname string, iftapmode bool, addr string, mtu int
 | 
				
			||||||
	return tun.setupAddress(addr)
 | 
						return tun.setupAddress(addr)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Disable/enable the interface to reset its configuration (invalidating iface).
 | 
				
			||||||
 | 
					func (tun *TunAdapter) resetAdapter() error {
 | 
				
			||||||
 | 
						// Bring down the interface first
 | 
				
			||||||
 | 
						cmd := exec.Command("netsh", "interface", "set", "interface", tun.iface.Name(), "admin=DISABLED")
 | 
				
			||||||
 | 
						tun.log.Debugln("netsh command:", strings.Join(cmd.Args, " "))
 | 
				
			||||||
 | 
						output, err := cmd.CombinedOutput()
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							tun.log.Errorln("Windows netsh failed:", err)
 | 
				
			||||||
 | 
							tun.log.Traceln(string(output))
 | 
				
			||||||
 | 
							return err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						// Bring the interface back up
 | 
				
			||||||
 | 
						cmd = exec.Command("netsh", "interface", "set", "interface", tun.iface.Name(), "admin=ENABLED")
 | 
				
			||||||
 | 
						tun.log.Debugln("netsh command:", strings.Join(cmd.Args, " "))
 | 
				
			||||||
 | 
						output, err = cmd.CombinedOutput()
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							tun.log.Errorln("Windows netsh failed:", err)
 | 
				
			||||||
 | 
							tun.log.Traceln(string(output))
 | 
				
			||||||
 | 
							return err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Sets the MTU of the TAP adapter.
 | 
					// Sets the MTU of the TAP adapter.
 | 
				
			||||||
func (tun *TunAdapter) setupMTU(mtu int) error {
 | 
					func (tun *TunAdapter) setupMTU(mtu int) error {
 | 
				
			||||||
	// Set MTU
 | 
						// Set MTU
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue