package main
import (
- "git.zx2c4.com/wireguard-go/internal/events"
"os"
"sync/atomic"
)
const DefaultMTU = 1420
+type TUNEvent int
+
const (
TUNEventUp = 1 << iota
TUNEventDown
Write([]byte, int) (int, error) // writes a packet to the device (without any additional headers)
MTU() (int, error) // returns the MTU of the device
Name() string // returns the current name
- Events() chan events.Event // returns a constant channel of events related to the device
+ Events() chan TUNEvent // returns a constant channel of events related to the device
Close() error // stops the device and closes the event channel
}
logError := device.log.Error
for event := range device.tun.device.Events() {
-
- if event.Contains(TUNEventMTUUpdate) {
+ if event&TUNEventMTUUpdate != 0 {
mtu, err := device.tun.device.MTU()
old := atomic.LoadInt32(&device.tun.mtu)
if err != nil {
}
}
- if event.Contains(TUNEventUp) && !device.isUp.Get() {
+ if event&TUNEventUp != 0 && !device.isUp.Get() {
logInfo.Println("Interface set up")
device.Up()
}
- if event.Contains(TUNEventDown) && device.isUp.Get() {
+ if event&TUNEventDown != 0 && device.isUp.Get() {
logInfo.Println("Interface set down")
device.Down()
}
-
- event.Processed()
}
}
"encoding/binary"
"errors"
"fmt"
- "git.zx2c4.com/wireguard-go/internal/events"
"golang.org/x/net/ipv6"
"golang.org/x/sys/unix"
"net"
type NativeTun struct {
fd *os.File
- index int32 // if index
- name string // name of interface
- errors chan error // async error handling
- events chan events.Event // device related events
+ index int32 // if index
+ name string // name of interface
+ errors chan error // async error handling
+ events chan TUNEvent // device related events
}
func (tun *NativeTun) File() *os.File {
_, err := unix.Write(fd, nil)
switch err {
case unix.EINVAL:
- tun.events <- events.NewEvent(TUNEventUp)
+ tun.events <- TUNEventUp
case unix.EIO:
- tun.events <- events.NewEvent(TUNEventDown)
+ tun.events <- TUNEventDown
default:
}
time.Sleep(time.Second / 10)
}
if info.Flags&unix.IFF_RUNNING != 0 {
- tun.events <- events.NewEvent(TUNEventUp)
+ tun.events <- TUNEventUp
}
if info.Flags&unix.IFF_RUNNING == 0 {
- tun.events <- events.NewEvent(TUNEventDown)
+ tun.events <- TUNEventDown
}
- tun.events <- events.NewEvent(TUNEventMTUUpdate)
+ tun.events <- TUNEventMTUUpdate
default:
remain = remain[hdr.Len:]
}
}
-func (tun *NativeTun) Events() chan events.Event {
+func (tun *NativeTun) Events() chan TUNEvent {
return tun.events
}
device := &NativeTun{
fd: fd,
name: name,
- events: make(chan events.Event, 5),
+ events: make(chan TUNEvent, 5),
errors: make(chan error, 5),
}
device := &NativeTun{
fd: fd,
name: newName,
- events: make(chan events.Event, 5),
+ events: make(chan TUNEvent, 5),
errors: make(chan error, 5),
}