mirror of
https://github.com/wlynxg/NetHive.git
synced 2025-09-26 19:11:14 +08:00
feat: add IFF_MULTI_QUEUE
This commit is contained in:
@@ -193,9 +193,11 @@ func CreateTUN(name string, mtu int) (Device, error) {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// unix.IFF_TUN: TUN device
|
||||
// unix.IFF_NO_PI: no need to provide package information
|
||||
ifreq.SetUint16(unix.IFF_TUN | unix.IFF_NO_PI)
|
||||
// unix.IFF_TUN: TUN device (no Ethernet headers)
|
||||
// unix.IFF_NO_PI: Do not provide packet information
|
||||
// unix.IFF_MULTI_QUEUE: Create a queue of multiqueue device
|
||||
ifreq.SetUint16(unix.IFF_TUN | unix.IFF_NO_PI | unix.IFF_MULTI_QUEUE)
|
||||
//ifreq.SetUint16(unix.IFF_TUN | unix.IFF_NO_PI)
|
||||
err = unix.IoctlIfreq(tfd, unix.TUNSETIFF, ifreq)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
@@ -1,8 +1,6 @@
|
||||
package engine
|
||||
|
||||
import (
|
||||
"net/netip"
|
||||
|
||||
"github.com/wlynxg/NetHive/core/protocol"
|
||||
)
|
||||
|
||||
@@ -25,11 +23,12 @@ func (e *Engine) RoutineTUNReader() {
|
||||
ip, err := protocol.ParseIP(buff[:n])
|
||||
if err != nil {
|
||||
e.log.Warnf("[RoutineTUNReader] drop packet, because %s", err)
|
||||
e.log.Warnf("invalid packet: %v", buff[:n])
|
||||
continue
|
||||
}
|
||||
|
||||
if (ip.Dst().IsLinkLocalMulticast() || ip.Dst().IsMulticast()) && !e.cfg.EnableBroadcast {
|
||||
e.log.Debugf("discard broadcast packets: %s -> %s", ip.Src(), ip.Dst())
|
||||
e.log.Infof("discard broadcast packets: %s -> %s", ip.Src(), ip.Dst())
|
||||
continue
|
||||
}
|
||||
|
||||
@@ -77,25 +76,25 @@ func (e *Engine) RoutineRouteTableWriter() {
|
||||
|
||||
for payload = range e.devReader {
|
||||
if (payload.Dst.IsLinkLocalMulticast() || payload.Dst.IsMulticast()) && e.cfg.EnableBroadcast {
|
||||
e.routeTable.m.Range(func(key string, value netip.Prefix) bool {
|
||||
conn, ok := e.routeTable.id.Load(key)
|
||||
if !ok {
|
||||
conn := make(PacketChan, ChanSize)
|
||||
e.routeTable.id.Store(key, conn)
|
||||
e.routeTable.addr.Store(value.Addr(), conn)
|
||||
go func() {
|
||||
defer e.routeTable.id.Delete(key)
|
||||
defer e.routeTable.addr.Delete(value.Addr())
|
||||
e.addConn(conn, key)
|
||||
}()
|
||||
}
|
||||
select {
|
||||
case conn <- payload:
|
||||
default:
|
||||
e.log.Warnf("[RoutineRouteTableWriter] drop packet: %s, because the sending queue is already full", payload.Dst)
|
||||
}
|
||||
return true
|
||||
})
|
||||
//e.routeTable.m.Range(func(key string, value netip.Prefix) bool {
|
||||
// conn, ok := e.routeTable.id.Load(key)
|
||||
// if !ok {
|
||||
// conn := make(PacketChan, ChanSize)
|
||||
// e.routeTable.id.Store(key, conn)
|
||||
// e.routeTable.addr.Store(value.Addr(), conn)
|
||||
// go func() {
|
||||
// defer e.routeTable.id.Delete(key)
|
||||
// defer e.routeTable.addr.Delete(value.Addr())
|
||||
// e.addConn(conn, key)
|
||||
// }()
|
||||
// }
|
||||
// select {
|
||||
// case conn <- payload:
|
||||
// default:
|
||||
// e.log.Warnf("[RoutineRouteTableWriter] drop packet: %s, because the sending queue is already full", payload.Dst)
|
||||
// }
|
||||
// return true
|
||||
//})
|
||||
continue
|
||||
}
|
||||
|
||||
|
4
go.mod
4
go.mod
@@ -6,9 +6,11 @@ toolchain go1.22.4
|
||||
|
||||
require (
|
||||
github.com/gogf/gf/v2 v2.7.0
|
||||
github.com/libp2p/go-buffer-pool v0.1.0
|
||||
github.com/libp2p/go-cidranger v1.1.0
|
||||
github.com/libp2p/go-libp2p v0.36.3
|
||||
github.com/libp2p/go-libp2p-kad-dht v0.25.2
|
||||
github.com/libp2p/go-msgio v0.3.0
|
||||
github.com/mr-tron/base58 v1.2.0
|
||||
github.com/pkg/errors v0.9.1
|
||||
go.uber.org/zap v1.27.0
|
||||
@@ -56,13 +58,11 @@ require (
|
||||
github.com/klauspost/compress v1.17.9 // indirect
|
||||
github.com/klauspost/cpuid/v2 v2.2.8 // indirect
|
||||
github.com/koron/go-ssdp v0.0.4 // indirect
|
||||
github.com/libp2p/go-buffer-pool v0.1.0 // indirect
|
||||
github.com/libp2p/go-flow-metrics v0.1.0 // indirect
|
||||
github.com/libp2p/go-libp2p-asn-util v0.4.1 // indirect
|
||||
github.com/libp2p/go-libp2p-kbucket v0.6.3 // indirect
|
||||
github.com/libp2p/go-libp2p-record v0.2.0 // indirect
|
||||
github.com/libp2p/go-libp2p-routing-helpers v0.7.2 // indirect
|
||||
github.com/libp2p/go-msgio v0.3.0 // indirect
|
||||
github.com/libp2p/go-nat v0.2.0 // indirect
|
||||
github.com/libp2p/go-netroute v0.2.1 // indirect
|
||||
github.com/libp2p/go-reuseport v0.4.0 // indirect
|
||||
|
Reference in New Issue
Block a user