tun: use errors.Is for unwrapping
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
This commit is contained in:
		
							parent
							
								
									5cdb862f15
								
							
						
					
					
						commit
						c040dea798
					
				@ -6,6 +6,7 @@
 | 
			
		||||
package tun
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"errors"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"io/ioutil"
 | 
			
		||||
	"net"
 | 
			
		||||
@ -31,13 +32,9 @@ type NativeTun struct {
 | 
			
		||||
func retryInterfaceByIndex(index int) (iface *net.Interface, err error) {
 | 
			
		||||
	for i := 0; i < 20; i++ {
 | 
			
		||||
		iface, err = net.InterfaceByIndex(index)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			if opErr, ok := err.(*net.OpError); ok {
 | 
			
		||||
				if syscallErr, ok := opErr.Err.(*os.SyscallError); ok && syscallErr.Err == syscall.ENOMEM {
 | 
			
		||||
					time.Sleep(time.Duration(i) * time.Second / 3)
 | 
			
		||||
					continue
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		if err != nil && errors.Is(err, syscall.ENOMEM) {
 | 
			
		||||
			time.Sleep(time.Duration(i) * time.Second / 3)
 | 
			
		||||
			continue
 | 
			
		||||
		}
 | 
			
		||||
		return iface, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@ -6,6 +6,7 @@
 | 
			
		||||
package tun
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"errors"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"io/ioutil"
 | 
			
		||||
	"net"
 | 
			
		||||
@ -99,16 +100,6 @@ func (tun *NativeTun) routineRouteListener(tunIfindex int) {
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func errorIsEBUSY(err error) bool {
 | 
			
		||||
	if pe, ok := err.(*os.PathError); ok {
 | 
			
		||||
		err = pe.Err
 | 
			
		||||
	}
 | 
			
		||||
	if errno, ok := err.(syscall.Errno); ok && errno == syscall.EBUSY {
 | 
			
		||||
		return true
 | 
			
		||||
	}
 | 
			
		||||
	return false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func CreateTUN(name string, mtu int) (Device, error) {
 | 
			
		||||
	ifIndex := -1
 | 
			
		||||
	if name != "tun" {
 | 
			
		||||
@ -126,7 +117,7 @@ func CreateTUN(name string, mtu int) (Device, error) {
 | 
			
		||||
	} else {
 | 
			
		||||
		for ifIndex = 0; ifIndex < 256; ifIndex++ {
 | 
			
		||||
			tunfile, err = os.OpenFile(fmt.Sprintf("/dev/tun%d", ifIndex), unix.O_RDWR, 0)
 | 
			
		||||
			if err == nil || !errorIsEBUSY(err) {
 | 
			
		||||
			if err == nil || !errors.Is(err, syscall.EBUSY) {
 | 
			
		||||
				break
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user