KHDR_INCLUDES is typically used to include headers from the kernel
source directory instead of only relying on the ones from the host: they
can be missing or outdated. See the issue reported in [1] where users
have to set USERCFLAGS instead, which shouldn't be needed.
The kselftest doc [2] recommends assigning KHDR_INCLUDES to CFLAGS in a
target Makefile. lib.mk will set KHDR_INCLUDES to "-isystem
$(top_srcdir)/usr/include" if the user didn't set it, e.g. if the kernel
was built in a different build directory.
Other net targets have KHDR_INCLUDES added to their CFLAGS.
Link: https://lore.kernel.org/275ba183-49fd-45b1-881d-0f362b4c74c0@ovn.org [1]
Link: https://docs.kernel.org/dev-tools/kselftest.html#contributing-new-tests-details [2]
Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
---
Note: this series is targeting net to help CI and devs validating Linus
tree or the stable ones. These are not critical fixes for the kernel,
but still useful for the tests. If preferred, the series can be applied
on net-next.
---
Matthieu Baerts (NGI0) (2):
selftests: netfilter: use KHDR_INCLUDES in CFLAGS
selftests: forwarding: use KHDR_INCLUDES in CFLAGS
tools/testing/selftests/net/forwarding/Makefile | 2 ++
tools/testing/selftests/net/netfilter/Makefile | 2 ++
2 files changed, 4 insertions(+)
---
base-commit: 641d03105cc0d2437e32fdeec164f91a4ccef6c4
change-id: 20260904-net-sft-nf-khdr_includes-07aa6b61143d
Best regards,
--
Matthieu Baerts (NGI0) [off-list ref]
KHDR_INCLUDES is typically used to include headers from the kernel
source directory instead of only relying on the ones from the host: they
can be missing or outdated.
The kselftest doc recommends assigning KHDR_INCLUDES to CFLAGS in a
target Makefile. lib.mk will set KHDR_INCLUDES to "-isystem
$(top_srcdir)/usr/include" if the user didn't set it, e.g. if the kernel
was built in a different build directory.
Other net targets have KHDR_INCLUDES added to their CFLAGS.
Fixes: 3f189349e52a ("selftests: netfilter: move to net subdir")
Link: https://docs.kernel.org/dev-tools/kselftest.html#contributing-new-tests-details
Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
---
tools/testing/selftests/net/netfilter/Makefile | 2 ++
1 file changed, 2 insertions(+)
KHDR_INCLUDES is typically used to include headers from the kernel
source directory instead of only relying on the ones from the host: they
can be missing or outdated.
The kselftest doc recommends assigning KHDR_INCLUDES to CFLAGS in a
target Makefile. lib.mk will set KHDR_INCLUDES to "-isystem
$(top_srcdir)/usr/include" if the user didn't set it, e.g. if the kernel
was built in a different build directory.
Other net targets have KHDR_INCLUDES added to their CFLAGS.
Fixes: 05068eaa67b2 ("selftest: net: Add basic functionality tests for ipmr.")
Link: https://docs.kernel.org/dev-tools/kselftest.html#contributing-new-tests-details
Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
---
tools/testing/selftests/net/forwarding/Makefile | 2 ++
1 file changed, 2 insertions(+)
KHDR_INCLUDES is typically used to include headers from the kernel
source directory instead of only relying on the ones from the host: they
can be missing or outdated.
The kselftest doc recommends assigning KHDR_INCLUDES to CFLAGS in a
target Makefile. lib.mk will set KHDR_INCLUDES to "-isystem
$(top_srcdir)/usr/include" if the user didn't set it, e.g. if the kernel
was built in a different build directory.
Other net targets have KHDR_INCLUDES added to their CFLAGS.
Fixes: 3f189349e52a ("selftests: netfilter: move to net subdir")
I think, this should point to a commit that added the first C test:
Fixes: a64d558d8cf9 ("selftests: netfilter: add nfqueue test case")
This solves my problem with building netfilter tests locally with uAPI
modifications. Beside the Fixes tag, LGTM.
Reviewed-by: Ilya Maximets <i.maximets@ovn.org>
KHDR_INCLUDES is typically used to include headers from the kernel
source directory instead of only relying on the ones from the host: they
can be missing or outdated.
The kselftest doc recommends assigning KHDR_INCLUDES to CFLAGS in a
target Makefile. lib.mk will set KHDR_INCLUDES to "-isystem
$(top_srcdir)/usr/include" if the user didn't set it, e.g. if the kernel
was built in a different build directory.
Other net targets have KHDR_INCLUDES added to their CFLAGS.
Fixes: 05068eaa67b2 ("selftest: net: Add basic functionality tests for ipmr.")
Link: https://docs.kernel.org/dev-tools/kselftest.html#contributing-new-tests-details
Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
---
tools/testing/selftests/net/forwarding/Makefile | 2 ++
1 file changed, 2 insertions(+)
Hi Ilya,
On 04/09/2026 18:41, Ilya Maximets wrote:
On 9/4/26 6:13 PM, Matthieu Baerts (NGI0) wrote:
quoted
KHDR_INCLUDES is typically used to include headers from the kernel
source directory instead of only relying on the ones from the host: they
can be missing or outdated.
The kselftest doc recommends assigning KHDR_INCLUDES to CFLAGS in a
target Makefile. lib.mk will set KHDR_INCLUDES to "-isystem
$(top_srcdir)/usr/include" if the user didn't set it, e.g. if the kernel
was built in a different build directory.
Other net targets have KHDR_INCLUDES added to their CFLAGS.
Fixes: 3f189349e52a ("selftests: netfilter: move to net subdir")
I think, this should point to a commit that added the first C test:
Fixes: a64d558d8cf9 ("selftests: netfilter: add nfqueue test case")
Good catch! I saw that CFLAGS was set before, but indeed, KHDR_INCLUDES
wasn't.
If we want to change the Fixes tag, we will also need to add:
Fixes: a52540522c95 ("selftests/landlock: Fix out-of-tree builds")
Which is when KHDR_INCLUDES got introduced. (Or it is enough with the
current Fixes tag, as long as it is included in the last stable version:
that's probably enough for CIs using kselftests from the last stable
version on older ones.)
@Net maintainers: please tell me if I need to change the Fixes tag in a v2.
Hi Jakub,
On 04/09/2026 18:13, Matthieu Baerts (NGI0) wrote:
KHDR_INCLUDES is typically used to include headers from the kernel
source directory instead of only relying on the ones from the host: they
can be missing or outdated. See the issue reported in [1] where users
have to set USERCFLAGS instead, which shouldn't be needed.
The kselftest doc [2] recommends assigning KHDR_INCLUDES to CFLAGS in a
target Makefile. lib.mk will set KHDR_INCLUDES to "-isystem
$(top_srcdir)/usr/include" if the user didn't set it, e.g. if the kernel
was built in a different build directory.
Other net targets have KHDR_INCLUDES added to their CFLAGS.
These patches didn't get picked up in the tests because the Clang build
failed with Rust code:
https://netdev-ctrl.bots.linux.dev/logs/build/1158213/14791779/build_clang/stderr
I only modified the selftests here. Other patches sent before me have
the same issue, but some sent after don't. One of those "random" issues
on the build server?
Cheers,
Matt
From: Jakub Kicinski <kuba@kernel.org> Date: 2026-09-04 18:51:29
On Fri, 4 Sep 2026 20:20:44 +0200 Matthieu Baerts wrote:
These patches didn't get picked up in the tests because the Clang build
failed with Rust code:
https://netdev-ctrl.bots.linux.dev/logs/build/1158213/14791779/build_clang/stderr
I only modified the selftests here. Other patches sent before me have
the same issue, but some sent after don't. One of those "random" issues
on the build server?
kbuild / tools build likes to sometimes pick up the wrong source tree
if you have a worktree nested inside a git repo :/
Here the Rust build was partially using the sources from the main repo
and partially from the work tree.
I'll push a NIPA workaround to sync the main repo to something recent
it should paper over this bug. It's not the first time it happened.
Hi Jakub,
On 04/09/2026 20:51, Jakub Kicinski wrote:
On Fri, 4 Sep 2026 20:20:44 +0200 Matthieu Baerts wrote:
quoted
These patches didn't get picked up in the tests because the Clang build
failed with Rust code:
https://netdev-ctrl.bots.linux.dev/logs/build/1158213/14791779/build_clang/stderr
I only modified the selftests here. Other patches sent before me have
the same issue, but some sent after don't. One of those "random" issues
on the build server?
kbuild / tools build likes to sometimes pick up the wrong source tree
if you have a worktree nested inside a git repo :/
Here the Rust build was partially using the sources from the main repo
and partially from the work tree.
I'll push a NIPA workaround to sync the main repo to something recent
it should paper over this bug. It's not the first time it happened.
Thank you for the explanation, and for the fix!
I was checking if I had to resend this series for the CI, but it looks
like these patches have been taken by the "brancher" service, e.g.
- https://github.com/linux-netdev/testing/commit/93408c0627c0
- https://github.com/linux-netdev/testing/commit/82fe019a07b0
Maybe they are there after the few hickups due to PW's update?
(It is not clear why it says there is a conflict, but I guess that's
because the contest job didn't override the status for the same reasons.)
Anyway, no need to re-send them then. Or should I?
Cheers,
Matt
Hello:
This series was applied to netdev/net-next.git (main)
by Jakub Kicinski [off-list ref]:
On Fri, 04 Sep 2026 18:13:01 +0200 you wrote:
KHDR_INCLUDES is typically used to include headers from the kernel
source directory instead of only relying on the ones from the host: they
can be missing or outdated. See the issue reported in [1] where users
have to set USERCFLAGS instead, which shouldn't be needed.
The kselftest doc [2] recommends assigning KHDR_INCLUDES to CFLAGS in a
target Makefile. lib.mk will set KHDR_INCLUDES to "-isystem
$(top_srcdir)/usr/include" if the user didn't set it, e.g. if the kernel
was built in a different build directory.
[...]