From 6fed9dd0dd62718f78eca11e30a71c2712636fbd Mon Sep 17 00:00:00 2001 From: Mikhail Osipov Date: Wed, 16 Dec 2020 15:27:48 +0300 Subject: hook and socket args check fix, tests --- pkg/server/socket/tun.go | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) (limited to 'pkg/server/socket/tun.go') 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{}) +} -- cgit v1.2.3-70-g09d2