package main
import (
+ "flag"
"fmt"
"log"
"net"
"strings"
"git.fd.io/govpp.git"
+ "git.fd.io/govpp.git/adapter/socketclient"
"git.fd.io/govpp.git/api"
"git.fd.io/govpp.git/core"
- "git.fd.io/govpp.git/examples/bin_api/acl"
- "git.fd.io/govpp.git/examples/bin_api/interfaces"
- "git.fd.io/govpp.git/examples/bin_api/ip"
+ "git.fd.io/govpp.git/examples/binapi/acl"
+ "git.fd.io/govpp.git/examples/binapi/interfaces"
+ "git.fd.io/govpp.git/examples/binapi/ip"
+)
+
+var (
+ sockAddr = flag.String("sock", socketclient.DefaultSocketName, "Path to VPP binary API socket file")
)
func main() {
- fmt.Println("Starting simple VPP client...")
+ flag.Parse()
+
+ fmt.Println("Starting simple client example")
// connect to VPP
- conn, conev, err := govpp.AsyncConnect("", core.DefaultMaxReconnectAttempts, core.DefaultReconnectInterval)
+ conn, conev, err := govpp.AsyncConnect(*sockAddr, core.DefaultMaxReconnectAttempts, core.DefaultReconnectInterval)
if err != nil {
log.Fatalln("ERROR:", err)
}
select {
case e := <-conev:
if e.State != core.Connected {
- log.Fatalf("failed to connect: %v", e.Error)
+ log.Fatalln("ERROR: connecting to VPP failed:", e.Error)
}
}
// create an API channel that will be used in the examples
ch, err := conn.NewAPIChannel()
if err != nil {
- log.Fatalln("ERROR:", err)
+ log.Fatalln("ERROR: creating channel failed:", err)
}
defer ch.Close()
fmt.Println("ERROR:", err)
return
}
- if reply.Retval != 0 {
- fmt.Println("Retval:", reply.Retval)
- return
- }
fmt.Printf("ACL add replace reply: %+v\n", reply)
}
if err != nil {
fmt.Println("ERROR:", err)
+ return
}
ifaceName := strings.TrimFunc(string(msg.InterfaceName), func(r rune) bool {
return r == 0x00
}
if err != nil {
fmt.Println("ERROR:", err)
+ return
}
fmt.Printf("ip address details: %d %+v\n", msg.SwIfIndex, msg)
}
}
if err != nil {
fmt.Println("ERROR:", err)
+ return
}
fmt.Printf("IP unnumbered details: %+v\n", msg)
}