summaryrefslogtreecommitdiff
path: root/pkg/server/socket/tun.go
diff options
context:
space:
mode:
authorMikhail Osipov <mike.osipov@gmail.com>2020-12-16 15:27:48 +0300
committerMikhail Osipov <mike.osipov@gmail.com>2020-12-16 15:27:48 +0300
commit6fed9dd0dd62718f78eca11e30a71c2712636fbd (patch)
tree8d1f90b96efbe8ea8aea350c283325adc216ef9d /pkg/server/socket/tun.go
parent050ea053dd549f0dd01beddfcd74989858391fd7 (diff)
hook and socket args check fix, tests
Diffstat (limited to 'pkg/server/socket/tun.go')
-rw-r--r--pkg/server/socket/tun.go24
1 files changed, 12 insertions, 12 deletions
diff --git a/pkg/server/socket/tun.go b/pkg/server/socket/tun.go
index d48c30c..3e673eb 100644
--- a/pkg/server/socket/tun.go
+++ b/pkg/server/socket/tun.go
@@ -8,10 +8,11 @@ import (
"os"
"strings"
"sync"
+ "unsafe"
+
"tunnel/pkg/pack"
"tunnel/pkg/server/env"
"tunnel/pkg/server/queue"
- "unsafe"
)
const maxTunBufSize = 65535
@@ -24,7 +25,7 @@ type ifReq struct {
}
type tunSocket struct {
- name string
+ Name string `opts:"required"`
}
type tunConn struct {
@@ -34,35 +35,30 @@ type tunConn struct {
once sync.Once
}
-func newTunSocket(name string) (S, error) {
- return &tunSocket{name: name}, nil
-
-}
-
func (s *tunSocket) String() string {
- return fmt.Sprintf("tun/%s", s.name)
+ return fmt.Sprintf("tun/%s", s.Name)
}
func (s *tunSocket) Single() {}
-func (s *tunSocket) Open(env.Env) (Conn, error) {
+func (s *tunSocket) New(env.Env) (Conn, error) {
fd, err := unix.Open("/dev/net/tun", unix.O_RDWR, 0)
if err != nil {
return nil, err
}
ifr := &ifReq{}
- copy(ifr.name[:], s.name)
+ copy(ifr.name[:], s.Name)
ifr.flags = unix.IFF_TUN | unix.IFF_NO_PI
if err := ioctl(fd, unix.TUNSETIFF, unsafe.Pointer(ifr)); err != nil {
unix.Close(fd)
- return nil, fmt.Errorf("ioctl TUNSETIFF %s: %w", s.name, err)
+ return nil, fmt.Errorf("ioctl TUNSETIFF %s: %w", s.Name, err)
}
if err := unix.SetNonblock(fd, true); err != nil {
unix.Close(fd)
- return nil, fmt.Errorf("set nonblock %s: %w", s.name, err)
+ return nil, fmt.Errorf("set nonblock %s: %w", s.Name, err)
}
c := &tunConn{
@@ -124,3 +120,7 @@ func (c *tunConn) Close() error {
return err
}
+
+func init() {
+ register("tun", tunSocket{})
+}