eBPF skb字段pkt_type

pkt_type取值范围

https://elixir.bootlin.com/linux/v6.5/source/include/uapi/linux/if_packet.h#L33

skb中pkt_type值,由网卡驱动层函数eth_type_trans,在tc ingress之前,根据目的mac决定。

https://elixir.bootlin.com/linux/v6.5/source/net/ethernet/eth.c#L155

如果目的mac与本机mac不同
1 如果目的mac是多播地址,那么根据本机广播地址,进一步区分广播或者多播。
2 否则,pkt_type值是PACKET_OTHERHOST。

如果发送给主机网卡的目的mac不是本机mac,那么ip_rcv_core函数会根据skb的pkt_type值是PACKET_OTHERHOST而丢弃。

https://elixir.bootlin.com/linux/v6.5/source/net/ipv4/ip_input.c#L456

解决方式1(推荐):目的mac设置为主机mac。
解决方式2:开启主机网卡混杂模式。
解决方式3:主机网卡tc ingress中,修改skb中pkt_type值是PACKET_HOST。

posted on 2024-07-29 09:14  王景迁  阅读(7)  评论(0编辑  收藏  举报

导航