c - BPF:结构__skbuff中的标记不可写



我有一个BPF代码(第"classifier节"(。我使用它使用 tc(流量控制器(实用程序加载到接口。我的代码更改了 __skbuff 中的标记。后来,当我尝试使用 iptables 捕获此标记时,我观察到我编辑的标记已经消失了。

法典:

__section("classifier")
int function(struct __sk_buff *skb)
{
    skb->mark = 0x123;

我使用 iptable mangle 表的以下规则来查看标记是否正确书写。

# iptables -t mangle -A PREROUTING -i <my_interface> 
    -m mark --mark 0x123 
    -j LOG --log-prefix "MY_PRINTS" --log-level 7

以下是我用来加载 bpf 程序的 TC 命令;

# tc qdisc add dev <myInterface> root handle 1: prio
# tc filter add dev <myInterface> parent 1: bpf obj bpf.o flowid 1:1 direct-action

问题出在您的tc命令中。您将过滤器连接到出口端。

root父级是指出口端,用于流量整形。相反,如果您想在入口侧连接过滤器,则应使用类似以下内容(无需句柄(:

# tc qdisc add dev <myInterface> ingress
# tc filter add dev <myInterface> ingress bpf obj bpf.o direct-action

或者,更好的做法是使用 BPF 特定的 qdisc clsact,它可用于为入口和出口附加过滤器(除了它的提交日志和 Cilium 的 BPF 文档(搜索clsact(之外,没有太多关于它的文档(:

# tc qdisc add dev <myInterface> clsact
# tc filter add dev <myInterface> ingress bpf obj bpf.o direct-action

相关内容

  • 没有找到相关文章

最新更新