From 8e914c87e006865424ab08ab725b62cb96bea421 Mon Sep 17 00:00:00 2001 From: ginuerzh Date: Fri, 3 Jan 2020 11:09:41 +0800 Subject: [PATCH] tap: fix createTap --- tuntap_darwin.go | 2 +- tuntap_unix.go | 9 +++++++-- tuntap_windows.go | 7 ++++++- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/tuntap_darwin.go b/tuntap_darwin.go index 4bf0ed2..14a802e 100644 --- a/tuntap_darwin.go +++ b/tuntap_darwin.go @@ -48,7 +48,7 @@ func createTun(cfg TunConfig) (conn net.Conn, ipNet *net.IPNet, err error) { return } -func createTap(cfg TapConfig) (conn net.Conn, ipNet *net.IPNet, err error) { +func createTap(cfg TapConfig) (conn net.Conn, itf *net.Interface, err error) { err = errors.New("tap is not supported on darwin") return } diff --git a/tuntap_unix.go b/tuntap_unix.go index e7a3f34..8ea1d5c 100644 --- a/tuntap_unix.go +++ b/tuntap_unix.go @@ -49,8 +49,8 @@ func createTun(cfg TunConfig) (conn net.Conn, ipNet *net.IPNet, err error) { return } -func createTap(cfg TapConfig) (conn net.Conn, ipNet *net.IPNet, err error) { - ip, ipNet, err := net.ParseCIDR(cfg.Addr) +func createTap(cfg TapConfig) (conn net.Conn, itf *net.Interface, err error) { + ip, _, err := net.ParseCIDR(cfg.Addr) if err != nil { return } @@ -79,6 +79,11 @@ func createTap(cfg TapConfig) (conn net.Conn, ipNet *net.IPNet, err error) { return } + itf, err = net.InterfaceByName(ifce.Name()) + if err != nil { + return + } + conn = &tunTapConn{ ifce: ifce, addr: &net.IPAddr{IP: ip}, diff --git a/tuntap_windows.go b/tuntap_windows.go index b3d447e..86b4826 100644 --- a/tuntap_windows.go +++ b/tuntap_windows.go @@ -49,7 +49,7 @@ func createTun(cfg TunConfig) (conn net.Conn, ipNet *net.IPNet, err error) { return } -func createTap(cfg TapConfig) (conn net.Conn, ipNet *net.IPNet, err error) { +func createTap(cfg TapConfig) (conn net.Conn, itf *net.Interface, err error) { ip, ipNet, err := net.ParseCIDR(cfg.Addr) if err != nil { return @@ -81,6 +81,11 @@ func createTap(cfg TapConfig) (conn net.Conn, ipNet *net.IPNet, err error) { return } + itf, err = net.InterfaceByName(ifce.Name()) + if err != nil { + return + } + conn = &tunTapConn{ ifce: ifce, addr: &net.IPAddr{IP: ip},