新TAP测试(TODO 解析arp)
This commit is contained in:
parent
7c2bbb5dcb
commit
1ab1d1c6fc
|
@ -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))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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)
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user