|
@@ -157,13 +157,13 @@ static __always_inline struct span_context *extract_context_from_req_headers(voi
|
|
|
if (map_value->tophash[i] == 0) {
|
|
if (map_value->tophash[i] == 0) {
|
|
|
continue;
|
|
continue;
|
|
|
}
|
|
}
|
|
|
- if (map_value->keys[i].len != W3C_KEY_LENGTH) {
|
|
|
|
|
|
|
+ if (map_value->keys[i].len != CW_HEADER_KEY_LENGTH) {
|
|
|
continue;
|
|
continue;
|
|
|
}
|
|
}
|
|
|
- char current_header_key[W3C_KEY_LENGTH];
|
|
|
|
|
|
|
+ char current_header_key[CW_HEADER_KEY_LENGTH];
|
|
|
bpf_probe_read(current_header_key, sizeof(current_header_key), map_value->keys[i].str);
|
|
bpf_probe_read(current_header_key, sizeof(current_header_key), map_value->keys[i].str);
|
|
|
- for (int i = 0; i < W3C_KEY_LENGTH; i++) {
|
|
|
|
|
- if (current_header_key[i] != "Traceparent"[i] && current_header_key[i] != "traceparent"[i]) {
|
|
|
|
|
|
|
+ for (int i = 0; i < CW_HEADER_KEY_LENGTH; i++) {
|
|
|
|
|
+ if (current_header_key[i] != CW_HEADER_KEY_VAL[i] && current_header_key[i] != CW_HEADER_KEY_UFIRST_VAL[i]) {
|
|
|
goto outer_loop;
|
|
goto outer_loop;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
@@ -349,7 +349,7 @@ void read_go_string(void *base, int offset, char *output, int maxLen, const char
|
|
|
SEC("uprobe/HandlerFunc_ServeHTTP")
|
|
SEC("uprobe/HandlerFunc_ServeHTTP")
|
|
|
int uprobe_HandlerFunc_ServeHTTP_Returns(struct pt_regs *ctx) {
|
|
int uprobe_HandlerFunc_ServeHTTP_Returns(struct pt_regs *ctx) {
|
|
|
cw_bpf_debug("[uprobe_HandlerFunc_ServeHTTP_Returns]");
|
|
cw_bpf_debug("[uprobe_HandlerFunc_ServeHTTP_Returns]");
|
|
|
- u64 end_time = bpf_ktime_get_ns();
|
|
|
|
|
|
|
+// u64 end_time = bpf_ktime_get_ns();
|
|
|
void *req_ctx_ptr = get_Go_context(ctx, 4, ctx_ptr_pos, false);
|
|
void *req_ctx_ptr = get_Go_context(ctx, 4, ctx_ptr_pos, false);
|
|
|
void *key = get_consistent_key(ctx, req_ctx_ptr);
|
|
void *key = get_consistent_key(ctx, req_ctx_ptr);
|
|
|
|
|
|
|
@@ -361,30 +361,30 @@ int uprobe_HandlerFunc_ServeHTTP_Returns(struct pt_regs *ctx) {
|
|
|
bpf_map_delete_elem(&http_server_uprobes, &key);
|
|
bpf_map_delete_elem(&http_server_uprobes, &key);
|
|
|
|
|
|
|
|
struct http_server_span_t *http_server_span = &uprobe_data->span;
|
|
struct http_server_span_t *http_server_span = &uprobe_data->span;
|
|
|
- void *resp_ptr = (void *) uprobe_data->resp_ptr;
|
|
|
|
|
- void *req_ptr = NULL;
|
|
|
|
|
- bpf_probe_read(&req_ptr, sizeof(req_ptr), (void *) (resp_ptr + req_ptr_pos));
|
|
|
|
|
-
|
|
|
|
|
- http_server_span->end_time = end_time;
|
|
|
|
|
-
|
|
|
|
|
- void *url_ptr = 0;
|
|
|
|
|
- bpf_probe_read(&url_ptr, sizeof(url_ptr), (void *) (req_ptr + url_ptr_pos));
|
|
|
|
|
- // Collect fields from response
|
|
|
|
|
- read_go_string(req_ptr, method_ptr_pos, http_server_span->method, sizeof(http_server_span->method),
|
|
|
|
|
- "method from request");
|
|
|
|
|
- read_go_string(url_ptr, path_ptr_pos, http_server_span->path, sizeof(http_server_span->path),
|
|
|
|
|
- "path from Request.URL");
|
|
|
|
|
- read_go_string(req_ptr, remote_addr_pos, http_server_span->remote_addr, sizeof(http_server_span->remote_addr),
|
|
|
|
|
- "remote addr from Request.RemoteAddr");
|
|
|
|
|
- read_go_string(req_ptr, host_pos, http_server_span->host, sizeof(http_server_span->host), "host from Request.Host");
|
|
|
|
|
- read_go_string(req_ptr, proto_pos, http_server_span->proto, sizeof(http_server_span->proto),
|
|
|
|
|
- "proto from Request.Proto");
|
|
|
|
|
-
|
|
|
|
|
- // status code
|
|
|
|
|
- bpf_probe_read(&http_server_span->status_code, sizeof(http_server_span->status_code),
|
|
|
|
|
- (void *) (resp_ptr + status_code_pos));
|
|
|
|
|
-
|
|
|
|
|
- bpf_perf_event_output(ctx, &events, BPF_F_CURRENT_CPU, http_server_span, sizeof(*http_server_span));
|
|
|
|
|
|
|
+// void *resp_ptr = (void *) uprobe_data->resp_ptr;
|
|
|
|
|
+// void *req_ptr = NULL;
|
|
|
|
|
+// bpf_probe_read(&req_ptr, sizeof(req_ptr), (void *) (resp_ptr + req_ptr_pos));
|
|
|
|
|
+
|
|
|
|
|
+// http_server_span->end_time = end_time;
|
|
|
|
|
+//
|
|
|
|
|
+// void *url_ptr = 0;
|
|
|
|
|
+// bpf_probe_read(&url_ptr, sizeof(url_ptr), (void *) (req_ptr + url_ptr_pos));
|
|
|
|
|
+// // Collect fields from response
|
|
|
|
|
+// read_go_string(req_ptr, method_ptr_pos, http_server_span->method, sizeof(http_server_span->method),
|
|
|
|
|
+// "method from request");
|
|
|
|
|
+// read_go_string(url_ptr, path_ptr_pos, http_server_span->path, sizeof(http_server_span->path),
|
|
|
|
|
+// "path from Request.URL");
|
|
|
|
|
+// read_go_string(req_ptr, remote_addr_pos, http_server_span->remote_addr, sizeof(http_server_span->remote_addr),
|
|
|
|
|
+// "remote addr from Request.RemoteAddr");
|
|
|
|
|
+// read_go_string(req_ptr, host_pos, http_server_span->host, sizeof(http_server_span->host), "host from Request.Host");
|
|
|
|
|
+// read_go_string(req_ptr, proto_pos, http_server_span->proto, sizeof(http_server_span->proto),
|
|
|
|
|
+// "proto from Request.Proto");
|
|
|
|
|
+//
|
|
|
|
|
+// // status code
|
|
|
|
|
+// bpf_probe_read(&http_server_span->status_code, sizeof(http_server_span->status_code),
|
|
|
|
|
+// (void *) (resp_ptr + status_code_pos));
|
|
|
|
|
+//
|
|
|
|
|
+// bpf_perf_event_output(ctx, &events, BPF_F_CURRENT_CPU, http_server_span, sizeof(*http_server_span));
|
|
|
stop_tracking_span(&http_server_span->sc, &http_server_span->psc);
|
|
stop_tracking_span(&http_server_span->sc, &http_server_span->psc);
|
|
|
|
|
|
|
|
|
|
|