This change allows to omit the tun interface name setting in FreeBSD. When name
is not set, kernel automatically picks up the tun name and index.

Signed-off-by: kayrus <[email protected]>
---
 tun/tun_freebsd.go | 34 ++++++++++++++++++----------------
 1 file changed, 18 insertions(+), 16 deletions(-)

diff --git a/tun/tun_freebsd.go b/tun/tun_freebsd.go
index 12b44da..1883aad 100644
--- a/tun/tun_freebsd.go
+++ b/tun/tun_freebsd.go
@@ -346,22 +346,24 @@ func CreateTUN(name string, mtu int) (Device, error) {
                return nil, fmt.Errorf("Unable to set nd6 flags for %s: %w", 
assignedName, errno)
        }
 
-       // Rename the interface
-       var newnp [unix.IFNAMSIZ]byte
-       copy(newnp[:], name)
-       var ifr ifreq_ptr
-       copy(ifr.Name[:], assignedName)
-       ifr.Data = uintptr(unsafe.Pointer(&newnp[0]))
-       _, _, errno = unix.Syscall(
-               unix.SYS_IOCTL,
-               uintptr(confd),
-               uintptr(unix.SIOCSIFNAME),
-               uintptr(unsafe.Pointer(&ifr)),
-       )
-       if errno != 0 {
-               tunFile.Close()
-               tunDestroy(assignedName)
-               return nil, fmt.Errorf("Failed to rename %s to %s: %w", 
assignedName, name, errno)
+       if name != "" {
+               // Rename the interface
+               var newnp [unix.IFNAMSIZ]byte
+               copy(newnp[:], name)
+               var ifr ifreq_ptr
+               copy(ifr.Name[:], assignedName)
+               ifr.Data = uintptr(unsafe.Pointer(&newnp[0]))
+               _, _, errno = unix.Syscall(
+                       unix.SYS_IOCTL,
+                       uintptr(confd),
+                       uintptr(unix.SIOCSIFNAME),
+                       uintptr(unsafe.Pointer(&ifr)),
+               )
+               if errno != 0 {
+                       tunFile.Close()
+                       tunDestroy(assignedName)
+                       return nil, fmt.Errorf("Failed to rename %s to %s: %w", 
assignedName, name, errno)
+               }
        }
 
        return CreateTUNFromFile(tunFile, mtu)
-- 
2.25.1

Reply via email to