1. quic-go版本
# git logcommit 0f3c94f92d9370eba392db7258f9d22435199b6dMerge: 4a9bd79 c923158Author: Marten Seemann <martenseemann@gmail.com>Date: Mon Aug 16 23:43:41 2021 +0200 Merge pull request #3258 from lucas-clemente/go117 update to Go 1.17.x
2. example-echo
# 启动servercd quic-go/examplego run main.go# 启动clientcd quic-go/example/echogo run echo.go
3. quic-go与vpp通信
使用example/echo/echo.go(client)与vpp echo server(server)交互修改代码:【1】internal/protocol/version.go (line:30)var SupportedVersions = []VersionNumber{VersionDraft29}【2】internal/protocol/crypto_setup.go (line:273)EnforceNextProtoSelection:false【3】example/echo/echo.goquic-go client ---> vpp server1)修改19行:const addr为 vpp服务端监听的ip:port2)注释 func main()函数的 28行:go func() { log.Fatal(echoServer()) }()3)注释 func clientMain()函数的 55行:NextProtos: []string{"quic-echo-example"},将vpp的tls_test.h中的CERTIFICATE和PRIVATE KEY复制出来,形成文件cert_pem和priv_key,放到example/echo/文件夹下。vpp client ---> quic-go server中需要使用密钥1)注释原 func main()函数,重写 func main()函数func main() { listener, err := quic.ListenAddr(addr, generateServerTLSConfig(), nil) if err != nil { panic(err) } for true { sess, err := listener.Accept(context.Background()) if err != nil { panic(err) } stream, err := sess.AcceptStream(context.Background()) if err != nil { panic(err) } // Echo through the loggingWriter _, err = io.Copy(loggingWriter{stream}, stream) if err != nil { panic(err) } }}2)增加函数generateServerTLSConfigfunc generateServerTLSConfig() *tls.Config { certs, err := tls.LoadX509KeyPair("cert_pem", "priv_key") if err != nil { panic(err) } return &tls.Config{ Certificates: []tls.Certificate{certs}, }}
4. 参考文档