|
|
@@ -261,34 +261,43 @@ int sk_msg_handler(struct sk_msg_md *msg)
|
|
|
|
|
|
|
|
|
span_context_to_cw_string_stream(cw_sc, map_data->header_stream, code_type_to_code(proc_info->code_type));
|
|
|
-// for (int i = 0; i < APM_ASSUMED_APP_ID_SIZE; i++) {
|
|
|
-// bpf_printk("cw-assumed_app_id[%d] = %02x", i, cw_sc->assumed_app_id[i]);
|
|
|
-// }
|
|
|
|
|
|
-// bpf_printk("[client] header:[%s],sizeof %d ", map_data->header_stream, sizeof(map_data->header_stream));
|
|
|
- __u32 tid = (__u32)bpf_get_current_pid_tgid();
|
|
|
-// bpf_printk("tid-set %llu",tid);
|
|
|
+ // cwtrace 写完后,在 header_stream 后面拼接 cwother
|
|
|
+ __u32 ins_len = CW_STREAM_HEADER_LEN - 1; // cwtrace 内容长度(不含 '\0')= 134
|
|
|
+
|
|
|
+ if (proc_info->sysvc[0] != '\0') {
|
|
|
+ // 计算 sysvc 实际长度
|
|
|
+ __u32 sys_val_len = 0;
|
|
|
+#pragma clang loop unroll(full)
|
|
|
+ for (int i = 0; i < CW_SYS_HEADER_VAL_LENGTH; i++) {
|
|
|
+ if (proc_info->sysvc[i] == '\0') {
|
|
|
+ sys_val_len = i;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ if (i == CW_SYS_HEADER_VAL_LENGTH - 1)
|
|
|
+ sys_val_len = CW_SYS_HEADER_VAL_LENGTH;
|
|
|
+ }
|
|
|
|
|
|
-// __u32 raw = msg->remote_port;
|
|
|
-// bpf_printk("raw_port=0x%x low_net=0x%x high_net=0x%x\n",raw, (raw & 0xffff), ((raw >> 16) & 0xffff));
|
|
|
- __u16 port_host = ( __u16 )( __builtin_bswap32(msg->remote_port) & 0xffff );
|
|
|
+ if (sys_val_len > 0) {
|
|
|
+ __u32 off = ins_len;
|
|
|
+ __builtin_memcpy(&map_data->header_stream[off], "cwother: ", CW_SYS_HEADER_KEY_LENGTH + 2);
|
|
|
+ off += CW_SYS_HEADER_KEY_LENGTH + 2;
|
|
|
+ __builtin_memcpy(&map_data->header_stream[off], proc_info->sysvc, CW_SYS_HEADER_VAL_LENGTH);
|
|
|
+ off += sys_val_len;
|
|
|
+ map_data->header_stream[off] = '\r';
|
|
|
+ map_data->header_stream[off + 1] = '\n';
|
|
|
+ off += 2;
|
|
|
+ ins_len = off;
|
|
|
+ bpf_printk("sk_msg cwother: ins_len=%u sys_val_len=%u\n", ins_len, sys_val_len);
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
__u32 rip = __builtin_bswap32(msg->remote_ip4); // host order
|
|
|
__u16 rport = __builtin_bswap32(msg->remote_port);
|
|
|
__u16 lport = (__u16)(msg->local_port); // host order
|
|
|
- bpf_printk("sk_msg: rport=%u lport=%u\n", rport, lport);
|
|
|
-// __u8 b0 = (rip >> 24) & 0xff;
|
|
|
-// __u8 b1 = (rip >> 16) & 0xff;
|
|
|
-// __u8 b2 = (rip >> 8) & 0xff;
|
|
|
-// __u8 b3 = rip & 0xff;
|
|
|
-// bpf_printk("remote %u.%u.%u\n", b0, b1, b2);
|
|
|
-// bpf_printk("remote port %u:%u\n", b3, rport);
|
|
|
-// bpf_printk("remote port %u\n", rport);
|
|
|
+ bpf_printk("sk_msg: rport=%u lport=%u ins_len=%u\n", rport, lport, ins_len);
|
|
|
|
|
|
-
|
|
|
- __u32 ins_len = sizeof(map_data->header_stream) - 1;
|
|
|
__u32 header_offset = map_data->header_offset_idx;
|
|
|
-
|
|
|
if (header_offset > msg->size){
|
|
|
return SK_PASS;
|
|
|
}
|
|
|
@@ -329,10 +338,10 @@ int sk_msg_handler(struct sk_msg_md *msg)
|
|
|
for (int i = 0; i < MAX_L7_IOVEC_BUF_SIZE; i++) {
|
|
|
/*test1*/
|
|
|
if (i >= header_offset) {
|
|
|
- for (int j = 0; j < ins_len; j++) {
|
|
|
+ for (int j = 0; j < CW_COMBINED_STREAM_MAX_LEN; j++) { // 编译期上界 221
|
|
|
+ if (j >= ins_len) break; // 运行时退出
|
|
|
if (data + i + 1 > data_end) break;
|
|
|
*(char *) (data + i) = map_data->header_stream[j];
|
|
|
-// bpf_printk("set-%d %d", i, j);
|
|
|
i++;
|
|
|
}
|
|
|
break;
|