2.13 Android ebpf非网络相关帮助函数API汇总(十二 本章完)

1.long bpf_user_ringbuf_drain(struct bpf_map *map, void *callback_fn, void *ctx, u64 flags)
描述:从指定的用户环形缓冲区中排出样本,并为每个此类样本调用提供的回调:

long (*callback_fn)(struct bpf_dynptr *dynptr, void *ctx);

如果callback_fn返回0,帮助函数将继续尝试耗尽下一个样本,最多可达BPF_MAX_USER_RINGBUF_SAMPLES样本。如果返回值为1,则帮助函数将跳过其余样本并返回。其他返回值现在不使用,否则将被verifier拒绝。

返回值:如果在排出样本时未遇到错误,则返回排出的样本数;如果环形缓冲区中不存在样本,则为 0。如果用户空间生产者在此映射上等待 epoll,并且至少有一个样本被耗尽,他们将收到一个事件通知,通知他们环形缓冲区中的可用空间。如果将 BPF_RB_NO_WAKEUP 标志传递给此函数,则不会发送唤醒通知。如果传递了 BPF_RB_FORCE_WAKEUP 标志,即使没有样本被耗尽,也会发送唤醒通知。

如果失败,则返回下面几种:

-EBUSY:如果环形缓冲区存在竞争,并且另一个调用上下文正在同时耗尽环形缓冲区。

-EINVAL 如果用户空间由于生产者位置未与 8 字节对齐、样本未与 8 字节对齐或生产者位置与样本的广告长度不匹配而无法正确跟踪环形缓冲区。

-E2BIG 如果用户空间尝试发布大于环形缓冲区大小的样本,或者无法容纳在 struct bpf_dynptr 中。

2.u64 bpf_ktime_get_tai_ns(void)

描述:返回一个由墙上时钟时间派生的不可设置的系统范

猜你喜欢

转载自blog.csdn.net/huangyabin001/article/details/132128499