|
|
@@ -26,6 +26,14 @@ struct {
|
|
|
__type(value, __u32); // placeholder
|
|
|
} sk_msg_map SEC(".maps");
|
|
|
|
|
|
+// cwother 开关:key=0, value=1 启用,0 或不存在则跳过
|
|
|
+struct {
|
|
|
+ __uint(type, BPF_MAP_TYPE_ARRAY);
|
|
|
+ __type(key, __u32);
|
|
|
+ __type(value, __u8);
|
|
|
+ __uint(max_entries, 1);
|
|
|
+} l4_cwother_enabled SEC(".maps");
|
|
|
+
|
|
|
//SEC("sk_msg")
|
|
|
//int sk_msg_handler(struct sk_msg_md *msg)
|
|
|
//{
|
|
|
@@ -265,7 +273,9 @@ int sk_msg_handler(struct sk_msg_md *msg)
|
|
|
// cwtrace 写完后,在 header_stream 后面拼接 cwother
|
|
|
__u32 ins_len = CW_STREAM_HEADER_LEN - 1; // cwtrace 内容长度(不含 '\0')= 134
|
|
|
|
|
|
- if (proc_info->sysvc[0] != '\0') {
|
|
|
+ __u32 _k0 = 0;
|
|
|
+ __u8 *cwother_flag = bpf_map_lookup_elem(&l4_cwother_enabled, &_k0);
|
|
|
+ if (cwother_flag && *cwother_flag && proc_info->sysvc[0] != '\0') {
|
|
|
// 计算 sysvc 实际长度
|
|
|
__u32 sys_val_len = 0;
|
|
|
#pragma clang loop unroll(full)
|
|
|
@@ -288,14 +298,14 @@ int sk_msg_handler(struct sk_msg_md *msg)
|
|
|
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);
|
|
|
+// 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 ins_len=%u\n", rport, lport, ins_len);
|
|
|
+// bpf_printk("sk_msg: rport=%u lport=%u ins_len=%u\n", rport, lport, ins_len);
|
|
|
|
|
|
__u32 header_offset = map_data->header_offset_idx;
|
|
|
if (header_offset > msg->size){
|
|
|
@@ -371,7 +381,7 @@ int sk_msg_handler(struct sk_msg_md *msg)
|
|
|
}
|
|
|
|
|
|
// save span context
|
|
|
- bpf_printk("sk_msg save: rip=0x%x rport=%u lport=%u\n", rip, rport, lport);
|
|
|
+// bpf_printk("sk_msg save: rip=0x%x rport=%u lport=%u\n", rip, rport, lport);
|
|
|
cw_save_current_span_context_by_ipport(rip, rport, lport, cw_sc);
|
|
|
|
|
|
return SK_PASS;
|