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