offset.go 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. package tracer
  2. import (
  3. "fmt"
  4. "io"
  5. "net"
  6. "strings"
  7. )
  8. const (
  9. offsetInferServerAddr = "127.0.0.1"
  10. offsetInferServerPort = 54583
  11. bufferSize = 16
  12. )
  13. func kernelOffsetInferServer(listener net.Listener) error {
  14. fmt.Println("[eBPF Kernel Adapt] kernel_offset_infer_server started.")
  15. //cpuOnlineCount := runtime.NumCPU()
  16. go func() {
  17. for {
  18. conn, err := listener.Accept()
  19. if err != nil {
  20. fmt.Printf("[eBPF Kernel Adapt] Fail to accept client request: %v\n", err)
  21. return
  22. }
  23. go handleConnection(conn)
  24. }
  25. }()
  26. return nil
  27. }
  28. func handleConnection(conn net.Conn) {
  29. defer conn.Close()
  30. buffer := make([]byte, bufferSize)
  31. for {
  32. n, err := conn.Read(buffer)
  33. if err != nil {
  34. if err == io.EOF {
  35. fmt.Printf("[eBPF Kernel Adapt] client connection closed: %v\n", err)
  36. return
  37. }
  38. fmt.Printf("[eBPF Kernel Adapt] Error reading from connection: %v\n", err)
  39. return
  40. }
  41. //if n == 0 {
  42. // *clientCount++
  43. // break
  44. //}
  45. request := strings.TrimSpace(string(buffer[:n]))
  46. fmt.Println(request)
  47. if request == "hello" {
  48. _, err := conn.Write([]byte("OK"))
  49. if err != nil {
  50. fmt.Printf("[eBPF Kernel Adapt] Error writing response: %v\n", err)
  51. break
  52. }
  53. }
  54. }
  55. }
  56. func kernelOffsetInferClient() error {
  57. conn, err := net.Dial("tcp", fmt.Sprintf("%s:%d", offsetInferServerAddr, offsetInferServerPort))
  58. if err != nil {
  59. return fmt.Errorf("failed to connect to server: %v", err)
  60. }
  61. defer conn.Close()
  62. fmt.Println("[eBPF Kernel Adapt] kernel_offset_infer_client started.")
  63. request := "hello"
  64. _, err = conn.Write([]byte(request))
  65. if err != nil {
  66. return fmt.Errorf("failed to send request to server: %v", err)
  67. }
  68. buffer := make([]byte, bufferSize)
  69. for {
  70. n, err := conn.Read(buffer)
  71. if err != nil {
  72. fmt.Printf("[eBPF Kernel Adapt] Error reading response from server: %v\n", err)
  73. break
  74. }
  75. if n == 0 {
  76. break
  77. }
  78. response := strings.TrimSpace(string(buffer[:n]))
  79. fmt.Println(response)
  80. if response == "OK" {
  81. break
  82. }
  83. }
  84. fmt.Println("[eBPF Kernel Adapt] kernel_offset_infer_client finished.")
  85. return nil
  86. }