1. quic-go版本

  1. # git log
  2. commit 0f3c94f92d9370eba392db7258f9d22435199b6d
  3. Merge: 4a9bd79 c923158
  4. Author: Marten Seemann <martenseemann@gmail.com>
  5. Date: Mon Aug 16 23:43:41 2021 +0200
  6. Merge pull request #3258 from lucas-clemente/go117
  7. update to Go 1.17.x

2. example-echo

  1. # 启动server
  2. cd quic-go/example
  3. go run main.go
  4. # 启动client
  5. cd quic-go/example/echo
  6. go run echo.go

3. quic-go与vpp通信

  1. 使用example/echo/echo.goclient)与vpp echo serverserver)交互
  2. 修改代码:
  3. 1internal/protocol/version.go (line30)
  4. var SupportedVersions = []VersionNumber{VersionDraft29}
  5. 2internal/protocol/crypto_setup.go (line273)
  6. EnforceNextProtoSelectionfalse
  7. 3example/echo/echo.go
  8. quic-go client ---> vpp server
  9. 1)修改19行:const addr vpp服务端监听的ip:port
  10. 2)注释 func main()函数的 28行:go func() { log.Fatal(echoServer()) }()
  11. 3)注释 func clientMain()函数的 55行:NextProtos: []string{"quic-echo-example"},
  12. vpptls_test.h中的CERTIFICATEPRIVATE KEY复制出来,形成文件cert_pempriv_key,放到example/echo/文件夹下。
  13. vpp client ---> quic-go server中需要使用密钥
  14. 1)注释原 func main()函数,重写 func main()函数
  15. func main() {
  16. listener, err := quic.ListenAddr(addr, generateServerTLSConfig(), nil)
  17. if err != nil {
  18. panic(err)
  19. }
  20. for true {
  21. sess, err := listener.Accept(context.Background())
  22. if err != nil {
  23. panic(err)
  24. }
  25. stream, err := sess.AcceptStream(context.Background())
  26. if err != nil {
  27. panic(err)
  28. }
  29. // Echo through the loggingWriter
  30. _, err = io.Copy(loggingWriter{stream}, stream)
  31. if err != nil {
  32. panic(err)
  33. }
  34. }
  35. }
  36. 2)增加函数generateServerTLSConfig
  37. func generateServerTLSConfig() *tls.Config {
  38. certs, err := tls.LoadX509KeyPair("cert_pem", "priv_key")
  39. if err != nil {
  40. panic(err)
  41. }
  42. return &tls.Config{
  43. Certificates: []tls.Certificate{certs},
  44. }
  45. }

4. 参考文档