eBPF Talk:变量声明的位置

据了解(未查证),从 clang12 开始,eBPF 代码中的变量声明不再要求写在函数体的最前方,而是可以按需声明并初始化。

写法一:一次性声明全部的变量

static __always_inline void
set_output_headers(struct __sk_buff *skb, struct event *ev)
{
    struct ethhdr *eth;
    struct vlan_hdr *vh;
    struct iphdr *iph;
    struct udphdr *udph;
    struct tcphdr *tcph;
    struct icmphdr *icmph;
    int l3_off = 0, l4_off, var_off = 0, cpy_off = 0;

    // ...
}

如上代码片段,将所有需要处理的协议头对应的 struct 变量放在一起声明。如果后续需要处理其它协议,则需要在此处添加对应的 struct 变量的声明。

先声明后使用

我不喜欢这种写法,不过这种写法能在编码的时候有一个好处:使用 typeof(hdr) 获取类型、使用 sizeof(*hdr) 获取协议头大小,而无需啰嗦地再写一遍 struct xxxhdr

写法二:按需声明并初始化

static __always_inline __u16
calc_l3_off(struct sk_buff *s
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值