我如何确定 BPF_PROG_TYPE_SK_SKB 判断程序中数据包的方向?

How can I determine the direction of a packet in a BPF_PROG_TYPE_SK_SKB verdict program?

我正在编写一个 BPF_PROG_TYPE_SK_SKB 判断程序来做出重定向决定。我怎样才能计算出数据包的方向(ingress/egress)?

我可以访问每个数据包的 local and remote port,但我无法确定哪个是源端口或目标端口,因此无法确定方向。这应该是可能的吗?如果不是,那为什么不呢?

uname -a: Linux ubuntu-bionic 4.18.0-16-generic #17~18.04.1-Ubuntu SMP 2 月 12 日星期二 13:35:51 世界协调时 2019 x86_64 x86_64 x86_64 GNU/Linux

可能有一些非常优雅的解决方案。我通过使用只有 2 个元素的 sockmap 解决了这个问题:这样,你就不必处理方向,因为它很简单。遗憾的是,使用这种方法,您必须为每个套接字对创建一个 sockmap。