测试
This commit is contained in:
parent
c6f340a5ae
commit
eead5b9d5f
36
tap.go
36
tap.go
|
@ -6,11 +6,13 @@ import (
|
|||
"os/exec"
|
||||
gen "slimming/proto/gen"
|
||||
"strings"
|
||||
"sync/atomic"
|
||||
"time"
|
||||
|
||||
"github.com/songgao/packets/ethernet"
|
||||
"github.com/songgao/water"
|
||||
"google.golang.org/grpc"
|
||||
"google.golang.org/grpc/connectivity"
|
||||
"google.golang.org/grpc/credentials/insecure"
|
||||
)
|
||||
|
||||
|
@ -37,18 +39,31 @@ func (cli *RPCClient) connect() {
|
|||
log.Printf("did not connect: %v", err)
|
||||
return
|
||||
}
|
||||
|
||||
ctx, cancel := context.WithTimeout(context.Background(), time.Second*10)
|
||||
defer cancel()
|
||||
|
||||
log.Println(conn.WaitForStateChange(ctx, connectivity.Idle))
|
||||
cli.conn = conn
|
||||
go cli.run()
|
||||
time.Sleep(time.Millisecond)
|
||||
}
|
||||
|
||||
func (cli *RPCClient) run() {
|
||||
|
||||
defer func() {
|
||||
if err := recover(); err != nil {
|
||||
log.Println("recover")
|
||||
cli.conn = nil
|
||||
}
|
||||
}()
|
||||
|
||||
c := gen.NewFrameServiceClient(cli.conn)
|
||||
ctx, cancel := context.WithTimeout(context.Background(), time.Second*10)
|
||||
defer cancel()
|
||||
stream, err := c.SendFrames(ctx)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
log.Panic(err)
|
||||
}
|
||||
|
||||
for {
|
||||
|
@ -60,7 +75,7 @@ func (cli *RPCClient) run() {
|
|||
})
|
||||
|
||||
if err != nil {
|
||||
panic(err)
|
||||
log.Panic(err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -73,12 +88,12 @@ func (nc *NetCard) Run() {
|
|||
cmd := strings.Split("ip addr add 10.10.10.10/24 dev stap", " ")
|
||||
err := exec.Command(cmd[0], cmd[1:]...).Run()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
log.Panic(err)
|
||||
}
|
||||
cmd = strings.Split("ip link set dev stap up", " ")
|
||||
err = exec.Command(cmd[0], cmd[1:]...).Run()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
log.Panic(err)
|
||||
}
|
||||
nc.server.run()
|
||||
}
|
||||
|
@ -92,7 +107,7 @@ func NewNetCard() *NetCard {
|
|||
|
||||
ifce, err := water.New(config)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
log.Panic(err)
|
||||
}
|
||||
|
||||
nc := &NetCard{
|
||||
|
@ -105,13 +120,20 @@ func NewNetCard() *NetCard {
|
|||
}
|
||||
|
||||
func (nc *NetCard) runRead() {
|
||||
log.Println("start netcard read")
|
||||
|
||||
var ifce *water.Interface = nc.ifce
|
||||
var ticker time.Ticker = *time.NewTicker(time.Millisecond * 20)
|
||||
|
||||
for {
|
||||
|
||||
var framesBytes [][]byte
|
||||
for range ticker.C {
|
||||
var isLoop int32 = 1
|
||||
go func() {
|
||||
var after = time.NewTimer(time.Millisecond * 20)
|
||||
<-after.C
|
||||
atomic.StoreInt32(&isLoop, 0)
|
||||
}()
|
||||
for atomic.LoadInt32(&isLoop) > 0 {
|
||||
var rframe ethernet.Frame
|
||||
rframe.Resize(1500)
|
||||
n, err := ifce.Read([]byte(rframe))
|
||||
|
|
Loading…
Reference in New Issue
Block a user