Selaa lähdekoodia

Feature #TASK_QT-18250 提交代码,解决bug

rock.wu 7 kuukautta sitten
vanhempi
säilyke
6a5d8e0ee7
1 muutettua tiedostoa jossa 34 lisäystä ja 34 poistoa
  1. 34 34
      ebpftracer/ebpf/utrace/go/net/grpc.server.probe.bpf.c

+ 34 - 34
ebpftracer/ebpf/utrace/go/net/grpc.server.probe.bpf.c

@@ -449,42 +449,42 @@ int uprobe_http2Server_operateHeader(struct pt_regs *ctx) {
     bpf_probe_read(&header_fields, sizeof(header_fields), (void *)(frame_ptr + frame_fields_pos));
     char key[W3C_KEY_LENGTH] = "traceparent";
     
-    // for (s32 i = 0; i < MAX_HEADERS; i++) {
-    //     if (i >= header_fields.len) {
-    //         break;
-    //     }
-    //     struct hpack_header_field hf = {};
-    //     long res =
-    //         bpf_probe_read(&hf, sizeof(hf), (void *)(header_fields.ptr + (i * sizeof(hf))));
-    //     if (hf.name.len == W3C_KEY_LENGTH && hf.value.len == W3C_VAL_LENGTH) {
-    //         char current_key[W3C_KEY_LENGTH];
-    //         bpf_probe_read(current_key, sizeof(current_key), hf.name.str);
-    //         if (bpf_memcmp(key, current_key, sizeof(key))) {
-    //             char val[W3C_VAL_LENGTH];
-    //             bpf_probe_read(val, W3C_VAL_LENGTH, hf.value.str);
-
-    //             // Get stream id
-    //             void *headers_frame = NULL;
-    //             bpf_probe_read(&headers_frame, sizeof(headers_frame), frame_ptr);
-    //             u32 stream_id = 0;
-    //             bpf_probe_read(
-    //                 &stream_id, sizeof(stream_id), (void *)(headers_frame + frame_stream_id_pod));
+    for (s32 i = 0; i < MAX_HEADERS; i++) {
+        if (i >= header_fields.len) {
+            break;
+        }
+        struct hpack_header_field hf = {};
+        long res =
+            bpf_probe_read(&hf, sizeof(hf), (void *)(header_fields.ptr + (i * sizeof(hf))));
+        if (hf.name.len == W3C_KEY_LENGTH && hf.value.len == W3C_VAL_LENGTH) {
+            char current_key[W3C_KEY_LENGTH];
+            bpf_probe_read(current_key, sizeof(current_key), hf.name.str);
+            if (bpf_memcmp(key, current_key, sizeof(key))) {
+                char val[W3C_VAL_LENGTH];
+                bpf_probe_read(val, W3C_VAL_LENGTH, hf.value.str);
+
+                // Get stream id
+                void *headers_frame = NULL;
+                bpf_probe_read(&headers_frame, sizeof(headers_frame), frame_ptr);
+                u32 stream_id = 0;
+                bpf_probe_read(
+                    &stream_id, sizeof(stream_id), (void *)(headers_frame + frame_stream_id_pod));
                 
-    //             // 使用 per-cpu array map 存储大变量,避免栈空间超限
-    //             u32 zero = 0;
-    //             struct grpc_request_t *grpcReq = bpf_map_lookup_elem(&operate_header_storage, &zero);
-    //             if (grpcReq == NULL) {
-    //                 bpf_printk("grpc:server:operateHeader: failed to get storage");
-    //                 return -1;
-    //             }
+                // 使用 per-cpu array map 存储大变量,避免栈空间超限
+                // u32 zero = 0;
+                // struct grpc_request_t *grpcReq = bpf_map_lookup_elem(&operate_header_storage, &zero);
+                // if (grpcReq == NULL) {
+                //     bpf_printk("grpc:server:operateHeader: failed to get storage");
+                //     return -1;
+                // }
                 
-    //             // 清零并初始化
-    //             __builtin_memset(grpcReq, 0, sizeof(struct grpc_request_t));
-    //             // w3c_string_to_span_context(val, &grpcReq->psc);
-    //             bpf_map_update_elem(&streamid_to_grpc_events, &stream_id, grpcReq, 0);
-    //         }
-    //     }
-    // }
+                // 清零并初始化
+                // __builtin_memset(grpcReq, 0, sizeof(struct grpc_request_t));
+                // w3c_string_to_span_context(val, &grpcReq->psc);
+                // bpf_map_update_elem(&streamid_to_grpc_events, &stream_id, grpcReq, 0);
+            }
+        }
+    }
 
     return 0;
 }