升级Ubuntu 16.04后,将无法再编译eBPF。 bpf.h
文件缺少关键结构,uapi
标头似乎未安装。
示例代码:
#include <linux/bpf.h>
int main()
{
return XDP_DROP;
}
编译为clang -target bpf -O2 -c xdp.c -o xdp.o
这将返回错误:
udp.c:13:12: error: use of undeclared identifier 'XDP_DROP'
return XDP_DROP;
^
1 error generated.
$ cat /etc/*release*
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION="Ubuntu 16.04.6 LTS"
NAME="Ubuntu"
VERSION="16.04.6 LTS (Xenial Xerus)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 16.04.6 LTS"
VERSION_ID="16.04"
HOME_URL="http://www.ubuntu.com/"
SUPPORT_URL="http://help.ubuntu.com/"
BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"
VERSION_CODENAME=xenial
UBUNTU_CODENAME=xenial
$ uname -r
4.4.0-148-generic
没有提及XDP
$ grep -r XDP_DROP /usr/include
$ grep -r XDP_DROP /lib/modules/
$
出什么问题了?
答案 0 :(得分:1)
您的内核是4.4.0-148,它太旧了,无法支持XDP。 XDP是在Linux 4.8 中引入的(请参见this document)。
不确定您从哪个系统升级。如果可以,尝试升级到Ubuntu 18.04吗?或尝试安装更新的内核(和相关的标头)。