首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >cgroup skb egress ebpf钩子->cb->cb[0-4]更新的值在tc egress ebpf钩子中重置。

cgroup skb egress ebpf钩子->cb->cb[0-4]更新的值在tc egress ebpf钩子中重置。
EN

Stack Overflow用户
提问于 2022-03-03 14:44:11
回答 1查看 191关注 0票数 1

我只是使用常量值(0xfeed)更新skb->cb,并试图在出口tc层ebpf挂钩处获取相同的数据包数据。都是零。我是不是漏掉了什么?不管怎么说,有没有用skb本身在钩子之间发送元数据(LRU_HASH映射可能会有所帮助,但我认为拥有带内元数据会更快)。

代码语言:javascript
复制
SEC("cgroup/skb")
int cgrp_dump_pkt(struct __sk_buff *skb) {

void *data_end = (void *) (long) skb->data_end;
void *data     = (void *) (long) skb->data;

if(data < data_end)
{   

    skb->cb[0] = 0xfeed;
    skb->cb[1] = 0xfeed;
    skb->cb[2] = 0xfeed;
    skb->cb[3] = 0xfeed;
    skb->cb[4] = 0xfeed;
           bpf_printk("hash:%x  mark:%x pri:%x", skb->hash, skb->mark, skb->priority);
    bpf_printk("cb0:%x cb1:%x cb2:%x", skb->cb[0], skb->cb[1], skb->cb[2]);
    bpf_printk("cb3:%x cb4:%x", skb->cb[3], skb->cb[4]);
}

return 1;
}

上面的钩子连接到一个码头实例cgroup,我试图通过在tc出口中附加钩子来查看相同的数据包(将只打印包含cb0-4的数据包信息)。cb0-4值显示为0。这是一种预期的行为吗?如何将ebpf钩子之间的元数据从cgroup skb传递到tc出口或较低层?

EN

回答 1

Stack Overflow用户

发布于 2022-03-03 15:11:53

我只使用过cb字段在BPF尾调用之间传递数据。要将数据从一个挂钩点传递到堆栈中的另一个挂钩点,可以使用skb->mark (32位值)。

请确保没有其他软件正在使用您想要使用的相同位元。例如,请参见https://github.com/fwmark/registry

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71339027

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档