首先xdp是一种基于ebpf程序的应用,安装bcc就可以使用ebpf函数来编写xdp程序。然后ebpf需要更高的内核版本支持,xdp需要硬件网卡的支持。
XDP具有三种运行模式:
• 原生模式:
即驱动模式,在该模式下的XDP程序运行在网络驱动程序的早期路径,需要网卡驱动程序的支持,而10G及以上速率的大多数网卡基本都是支持的;
• 卸载模式:
该模式会直接将XDP程序卸载到网卡上,从而彻底释放主机CPU资源,相较于原生模式,具有更高的性能。目前支持的网卡似乎只有Netronome智能网卡。
• 通用模式:
该模式下的XDP程序运行于驱动之后的位置,无需驱动支持,但性能较差,一般用于测试。
suricata使用ebpf中的vlan模式来启动程序时,要先设定vlan id,return -1是正确返回,return 0是错误返回。