diff --git a/main.go b/main.go index 34fd6b9..f302671 100644 --- a/main.go +++ b/main.go @@ -26,31 +26,28 @@ var ( flagAddr = flag.String("addr", "", "addr set") ) +func startCard() { + cmdstr := fmt.Sprintf("ip addr add %s dev stun", *flagAddr) + log.Println(cmdstr) + cmd := strings.Split(cmdstr, " ") + err := exec.Command(cmd[0], cmd[1:]...).Run() + if err != nil { + log.Panic(err) + } + + cmdstr = "ip link set dev stun up" + cmd = strings.Split(cmdstr, " ") + err = exec.Command(cmd[0], cmd[1:]...).Run() + if err != nil { + log.Panic(err) + } +} func testmain() { flag.Parse() - var a chan bool = make(chan bool) - go func() { - <-a - cmdstr := fmt.Sprintf("ip addr add %s dev stun", *flagAddr) - log.Println(cmdstr) - cmd := strings.Split(cmdstr, " ") - err := exec.Command(cmd[0], cmd[1:]...).Run() - if err != nil { - log.Panic(err) - } - - cmdstr = "ip link set dev stun up" - cmd = strings.Split(cmdstr, " ") - err = exec.Command(cmd[0], cmd[1:]...).Run() - if err != nil { - log.Panic(err) - } - }() - config := water.Config{ - DeviceType: water.TUN, + DeviceType: water.TAP, } config.Name = "stun" @@ -58,10 +55,12 @@ func testmain() { if err != nil { log.Fatal(err) } - a <- true - var frame ethernet.Frame + startCard() + + var frame ethernet.Frame for { + frame.Resize(1500) n, err := ifce.Read([]byte(frame)) if err != nil { diff --git a/netcard.go b/netcard.go index d0438a3..65f2327 100644 --- a/netcard.go +++ b/netcard.go @@ -145,8 +145,9 @@ func NewNetCard() *NetCard { config := water.Config{ DeviceType: water.TUN, PlatformSpecificParams: water.PlatformSpecificParams{ - Name: "stun", - Persist: true, + Name: "stun", + Persist: true, + MultiQueue: true, }, } @@ -219,6 +220,7 @@ func (nc *NetCard) runRead() { bytesMap[realAddr] = buffer } + ifce.Write([]byte(rframe)) buffer.BytesArray = append(buffer.BytesArray, []byte(rframe)) }