|
@@ -9,15 +9,61 @@ type Interface struct {
|
|
name string
|
|
name string
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+// DeviceType is the type for specifying device types.
|
|
|
|
+type DeviceType int
|
|
|
|
+
|
|
|
|
+// TUN and TAP device types.
|
|
|
|
+const (
|
|
|
|
+ _ = iota
|
|
|
|
+ TUN
|
|
|
|
+ TAP
|
|
|
|
+)
|
|
|
|
+
|
|
|
|
+// Config defines parameters required to create a TUN/TAP interface. It's only
|
|
|
|
+// used when the device is initialized. A zero-value Config is a valid
|
|
|
|
+// configuration.
|
|
|
|
+type Config struct {
|
|
|
|
+ // DeviceType specifies whether the device is a TUN or TAP interface. A
|
|
|
|
+ // zero-value is treated as TUN.
|
|
|
|
+ DeviceType DeviceType
|
|
|
|
+
|
|
|
|
+ // PlatformSpecificParams defines parameters that differ on different
|
|
|
|
+ // platforms. See comments for the type for more details.
|
|
|
|
+ PlatformSpecificParams
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+func defaultConfig() Config {
|
|
|
|
+ return Config{
|
|
|
|
+ DeviceType: TUN,
|
|
|
|
+ PlatformSpecificParams: defaultPlatformSpecificParams(),
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+var zeroConfig Config
|
|
|
|
+
|
|
|
|
+// New creates a new TUN/TAP interface using config.
|
|
|
|
+func New(config Config) (ifce *Interface, err error) {
|
|
|
|
+ if zeroConfig == config {
|
|
|
|
+ config = defaultConfig()
|
|
|
|
+ }
|
|
|
|
+ return newDev(config)
|
|
|
|
+}
|
|
|
|
+
|
|
// NewTAP creates a new TAP interface whose name is ifName. If ifName is empty, a
|
|
// NewTAP creates a new TAP interface whose name is ifName. If ifName is empty, a
|
|
// default name (tap0, tap1, ... ) will be assigned. ifName should not exceed
|
|
// default name (tap0, tap1, ... ) will be assigned. ifName should not exceed
|
|
// 16 bytes. TAP interfaces are not supported on darwin.
|
|
// 16 bytes. TAP interfaces are not supported on darwin.
|
|
|
|
+//
|
|
|
|
+// Note: this function is deprecated and will be removed from the library.
|
|
|
|
+// Please use New() instead.
|
|
func NewTAP(ifName string) (ifce *Interface, err error) {
|
|
func NewTAP(ifName string) (ifce *Interface, err error) {
|
|
return newTAP(ifName)
|
|
return newTAP(ifName)
|
|
}
|
|
}
|
|
|
|
|
|
// NewTUN creates a new TUN interface whose name is ifName. If ifName is empty, a
|
|
// NewTUN creates a new TUN interface whose name is ifName. If ifName is empty, a
|
|
// default name (tap0, tap1, ... ) will be assigned. ifName should not exceed
|
|
// default name (tap0, tap1, ... ) will be assigned. ifName should not exceed
|
|
|
|
+//
|
|
|
|
+// Note: this function is deprecated and will be removed from the library.
|
|
|
|
+// Please use New() instead.
|
|
// 16 bytes. Setting interface name is NOT supported on darwin.
|
|
// 16 bytes. Setting interface name is NOT supported on darwin.
|
|
func NewTUN(ifName string) (ifce *Interface, err error) {
|
|
func NewTUN(ifName string) (ifce *Interface, err error) {
|
|
return newTUN(ifName)
|
|
return newTUN(ifName)
|