0

我想使用上述功能,因为我想使用 struct request_sock_queue 和 struct listen_sock 。有没有办法使用它们(也许是不同的功能)?

首先,我尝试制作一个使用 'tcp_synack_timer'(net/ipv4/tcp_timer.h) 的 BPF 程序转到另一个函数-> 'int_csk_reqsk_queue_prune'(net/ipv4/inet_connection_sock.c),这些都不起作用(我也搜索了这些/sys/kernel/debug/tracing/available_filtered_functions 中的函数来获取'struct listen_sock',然后我最终得到'qlen'(struct listen_sock,它位于'include/net/request_sock.h'中。

!/usr/local/bin/bpftrace

kprobe:tcp_synack_timer
{
        printf("-------------------\n");
        printf("\n");
        printf("tcp_synack_timer: %s pid: %d\n", comm, pid);
        printf("\n");
        printf("--------------------\n");
}

以及我尝试的另一个功能:

!/usr/local/bin/bpftrace

#include <net/sock.h>
#include <net/inet_connection_sock.h>
#include <net/request_sock.h>

kprobe:inet_csk_reqsk_queue_prune
{

    $sk = (struct sock *)arg0;
    $inet = (struct inet_connection_sock *)$sk;
    $rsq = (struct request_sock_queue *)$inet;
    $ls = (struct listen_sock *)$rsq;

    printf("-------------------\n");
    printf("\n");
    printf("net_csk_reqsk_queue_prune: %s pid: %d\n", comm, pid);
    printf("\n");
    printf("listen_sock: %d\n", $ls->qlen);
    printf("--------------------\n");
}
4

0 回答 0