bpf_redirect_map 重定向介绍

发布时间 2023-03-29 10:55:38作者: salami_china

bpf_redirect_map 支持的map类型有三种:

  • BPF_MAP_TYPE_DEVMAP
  • BPF_MAP_TYPE_CPUMAP
  • BPF_MAP_TYPE_XSKMAP

kernel 源码中(kernel/bpf/verifier.c),除了这三种其他都会被拒绝

 

 1)BPF_MAP_TYPE_DEVMAP

https://github.com/dropbox/goebpf/blob/master/examples/xdp/bpf_redirect_map/ebpf_prog/xdp.c

2)BPF_MAP_TYPE_XSKMAP

https://github.com/xdp-project/xdp-tutorial/blob/master/advanced03-AF_XDP/af_xdp_kern.c

3)BPF_MAP_TYPE_CPUMAP

https://cregit.linuxsources.org/code/4.17/samples/bpf/xdp_redirect_cpu_kern.c.html

 

bpf_redirect 和 bpf_redirect_map 都是eBPF程序中使用的指令,它们的作用是将来自某个网络接口的数据包重定向到另一个网络接口。但是,bpf_redirect_map与bpf_redirect的区别在于:

  1. bpf_redirect只能将数据包重定向到一个指定的网络接口,而bpf_redirect_map可以将数据包重定向到多个网络接口,这取决于在eBPF程序中指定的映射表。

  2. bpf_redirect_map可以在eBPF程序执行期间动态更改映射表中的条目,从而可以更灵活地控制数据包的重定向。

因此,如果需要将数据包重定向到多个网络接口并且需要在程序执行期间更改重定向规则,则应该使用bpf_redirect_map。如果只需要将数据包重定向到一个特定的网络接口,则可以使用bpf_redirect。