|
|
@@ -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;
|
|
|
}
|