diff --git a/src/common/container.c b/src/common/container.c index 9be1b55e16900f49967d106301e205655a1d6801..783a2809927b584dc134057b63541c1dd57b3e2c 100644 --- a/src/common/container.c +++ b/src/common/container.c @@ -713,6 +713,10 @@ static enum id_ret_t get_pod_container_id_by_type(const char *cgrp_path, char *p int i,j; bool is_containerd = false; + if (strcmp(cgrp_path, "/") == 0) { + return ID_FAILED; + } + if (strstr(cgrp_path, "containerd") != NULL) { is_containerd = true; } diff --git a/src/probes/extends/ebpf.probe/src/endpointprobe/endpoint.c b/src/probes/extends/ebpf.probe/src/endpointprobe/endpoint.c index 4cdaf418f5c368e32180fbe5d91083a70c7bd219..4aa7a1bef146ca1f5338db8f8d7fa5015daaae14 100644 --- a/src/probes/extends/ebpf.probe/src/endpointprobe/endpoint.c +++ b/src/probes/extends/ebpf.probe/src/endpointprobe/endpoint.c @@ -833,7 +833,7 @@ err: static void reload_listen_port(struct endpoint_probe_s *probe) { int ret, netns_fd; - struct snooper_con_info_s *container; + u32 proc_id; struct ipc_body_s *ipc_body = &probe->ipc_body; destroy_tcp_listens(probe); @@ -847,15 +847,17 @@ static void reload_listen_port(struct endpoint_probe_s *probe) load_tcp_listens(probe); for (int i = 0; i < ipc_body->snooper_obj_num && i < SNOOPER_MAX; i++) { - if (ipc_body->snooper_objs[i].type != SNOOPER_OBJ_CON) { + if (ipc_body->snooper_objs[i].type != SNOOPER_OBJ_PROC) { continue; } - container = &(ipc_body->snooper_objs[i].obj.con_info); - ret = enter_container_netns((const char *)container->con_id); - if (ret) { - ERROR("[EPPROBE]: Enter container netns failed.(container_id = %s)\n", container->con_id); - continue; + proc_id = ipc_body->snooper_objs[i].obj.proc.proc_id; + if (is_container_proc(proc_id)) { + ret = enter_proc_netns(proc_id); + if (ret) { + ERROR("[EPPROBE]: Enter container netns failed.(%u, ret = %d)\n", proc_id, ret); + continue; + } } load_tcp_listens(probe); @@ -1211,6 +1213,7 @@ static void clean_endpoint_pin_map() int main(int argc, char **argv) { int ret = -1, msq_id; + static int listen_port_loaded = 0; struct ipc_body_s ipc_body; memset(&g_ep_probe, 0, sizeof(g_ep_probe)); @@ -1254,8 +1257,12 @@ int main(int argc, char **argv) destroy_ipc_body(&(g_ep_probe.ipc_body)); (void)memcpy(&(g_ep_probe.ipc_body), &ipc_body, sizeof(g_ep_probe.ipc_body)); - reload_listen_port(&g_ep_probe); - reload_listen_map(&g_ep_probe); + + if (listen_port_loaded == 0) { + reload_listen_port(&g_ep_probe); + reload_listen_map(&g_ep_probe); + listen_port_loaded = 1; + } } if (poll_endpoint_pb(&g_ep_probe)) {