eBPF BPF_ARRAY 查找
eBPF BPF_ARRAY lookup
我正在尝试使用 eBPF 和 XDP 构建一个数据包计数器。我需要一种方法来跟踪收到的数据包总数。因为我使用的是 XDP,所以我使用 BPF_ARRAY 并在每次收到数据包时递增它。问题是我似乎无法使用提供的 lookup() 函数访问存储的值。
下面是我如何创建 BPF_ARRAY。
BPF_ARRAY(counter, u64, 1);
以下是我尝试访问和使用存储值的方式。 output.avg 的类型是 u64.
int cindex = 0;
counter.increment(&cindex);
long current_count = counter.lookup(&cindex);
output.avg = current_count;
BPF 给了我这个警告并且编译失败。
warning: incompatible pointer to integer conversion initializing 'long' with
an expression of type 'u64 *' (aka 'unsigned long long *') [-Wint-conversion]
long current_count = counter.lookup(&cindex);
我想出了解决错误的方法。我是 C 的新手,所以指针让我有点困惑。
int cindex = 0;
counter.increment(cindex);
unsigned long long *current_count = counter.lookup(&cindex);
if(current_count != NULL){
output.avg = *current_count;
}
我正在尝试使用 eBPF 和 XDP 构建一个数据包计数器。我需要一种方法来跟踪收到的数据包总数。因为我使用的是 XDP,所以我使用 BPF_ARRAY 并在每次收到数据包时递增它。问题是我似乎无法使用提供的 lookup() 函数访问存储的值。
下面是我如何创建 BPF_ARRAY。
BPF_ARRAY(counter, u64, 1);
以下是我尝试访问和使用存储值的方式。 output.avg 的类型是 u64.
int cindex = 0;
counter.increment(&cindex);
long current_count = counter.lookup(&cindex);
output.avg = current_count;
BPF 给了我这个警告并且编译失败。
warning: incompatible pointer to integer conversion initializing 'long' with
an expression of type 'u64 *' (aka 'unsigned long long *') [-Wint-conversion]
long current_count = counter.lookup(&cindex);
我想出了解决错误的方法。我是 C 的新手,所以指针让我有点困惑。
int cindex = 0;
counter.increment(cindex);
unsigned long long *current_count = counter.lookup(&cindex);
if(current_count != NULL){
output.avg = *current_count;
}