github.com/mysteriumnetwork/node@v0.0.0-20240516044423-365054f76801/services/wireguard/endpoint/userspace/tun.go (about)

     1  //go:build !windows
     2  
     3  /*
     4   * Copyright (C) 2019 The "MysteriumNetwork/node" Authors.
     5   *
     6   * This program is free software: you can redistribute it and/or modify
     7   * it under the terms of the GNU General Public License as published by
     8   * the Free Software Foundation, either version 3 of the License, or
     9   * (at your option) any later version.
    10   *
    11   * This program is distributed in the hope that it will be useful,
    12   * but WITHOUT ANY WARRANTY; without even the implied warranty of
    13   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    14   * GNU General Public License for more details.
    15   *
    16   * You should have received a copy of the GNU General Public License
    17   * along with this program.  If not, see <http://www.gnu.org/licenses/>.
    18   */
    19  
    20  package userspace
    21  
    22  import (
    23  	"net"
    24  
    25  	"github.com/mysteriumnetwork/node/utils/netutil"
    26  	"github.com/pkg/errors"
    27  	"golang.zx2c4.com/wireguard/device"
    28  	"golang.zx2c4.com/wireguard/tun"
    29  )
    30  
    31  // CreateTUN creates native TUN device for wireguard.
    32  func CreateTUN(name string, subnet net.IPNet) (tunDevice tun.Device, err error) {
    33  	if tunDevice, err = tun.CreateTUN(name, device.DefaultMTU); err != nil {
    34  		return nil, errors.Wrap(err, "failed to create TUN device")
    35  	}
    36  	if err = netutil.AssignIP(name, subnet); err != nil {
    37  		return nil, errors.Wrap(err, "failed to assign IP address")
    38  	}
    39  	return tunDevice, nil
    40  }