新TAP测试(TODO 解析arp)

This commit is contained in:
黄思敏 2022-09-01 14:59:30 +08:00
parent 7c2bbb5dcb
commit 1ab1d1c6fc
2 changed files with 29 additions and 32 deletions

View File

@ -133,7 +133,7 @@ func NewNetTunnel() *NetTunnel {
if v, ok := nt.clients.Load(ipv4key); ok { if v, ok := nt.clients.Load(ipv4key); ok {
client := v.(*RPCClient) client := v.(*RPCClient)
client.CheckConnect() client.CheckConnect()
client.Frame <- frame client.Push(frame)
log.Println(len(frame)) log.Println(len(frame))
} }
} }

View File

@ -6,25 +6,30 @@ import (
"log" "log"
gen "slimming/proto/gen" gen "slimming/proto/gen"
"sync" "sync"
"time"
"google.golang.org/grpc" "google.golang.org/grpc"
"google.golang.org/grpc/credentials/insecure" "google.golang.org/grpc/credentials/insecure"
) )
type RPCClient struct { type RPCClient struct {
Frame chan []byte Frames [][]byte
realAddr string realAddr string
conn *grpc.ClientConn conn *grpc.ClientConn
lock sync.Mutex lock sync.Mutex
trigger chan bool
} }
func NewRPCClient(realAddr string) *RPCClient { func NewRPCClient(realAddr string) *RPCClient {
return &RPCClient{ return &RPCClient{
realAddr: realAddr, realAddr: realAddr,
Frame: make(chan []byte, 1000),
conn: nil, Frames: make([][]byte, 0, 1000),
lock: sync.Mutex{}, conn: nil,
lock: sync.Mutex{},
trigger: make(chan bool),
} }
} }
@ -57,6 +62,15 @@ func (cli *RPCClient) CheckConnect() {
go cli.run() go cli.run()
} }
func (cli *RPCClient) Push(frame []byte) {
cli.lock.Lock()
defer cli.lock.Unlock()
cli.Frames = append(cli.Frames, frame)
if len(cli.Frames) >= 1000 {
cli.trigger <- true
}
}
func (cli *RPCClient) run() { func (cli *RPCClient) run() {
defer log.Println("rpcclient exit") defer log.Println("rpcclient exit")
defer func() { defer func() {
@ -80,18 +94,20 @@ func (cli *RPCClient) run() {
} }
defer stream.CloseSend() defer stream.CloseSend()
var ticker = time.NewTicker(time.Millisecond * 20)
var frames [][]byte var frames [][]byte
// var nextTime = time.Now().Add(time.Millisecond * 20)
// var now = time.Now()
buf := bytes.NewBuffer(nil) buf := bytes.NewBuffer(nil)
for { for {
select {
frames = append(frames, <-cli.Frame) case <-cli.trigger:
case <-ticker.C:
}
buf.Reset() buf.Reset()
Compress(buf, frames) cli.Lock(func() bool {
frames = nil Compress(buf, frames)
return true
})
// 发到对面的网卡 // 发到对面的网卡
err = stream.Send(&gen.RequestFrames{ err = stream.Send(&gen.RequestFrames{
@ -102,24 +118,5 @@ func (cli *RPCClient) run() {
log.Panic(err) log.Panic(err)
} }
// if len(frames) >= 1000 || nextTime.After(now) {
// nextTime = now
// // TODO:
// // Contact the server and print out its response.
// buf.Reset()
// Compress(buf, frames)
// frames = nil
// // 发到对面的网卡
// err = stream.Send(&gen.RequestFrames{
// Frames: buf.Bytes(),
// })
// if err != nil {
// log.Panic(err)
// }
// }
} }
} }