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。