Hi, Two issues occurred to me on FreeBSD 12.1-BETA2. The first issue is that an iflib device is statically compiled into GENERIC kernel while GENERIC configuration file for amd64 architecture does not contain the device in /usr/src/sys/amd64/conf/GENERIC, it makes a lot of confusion and causes an error during kernel compiling. The second issue is that I can not compile kernel with iflib module because of the same error. # uname -a FreeBSD test 12.1-BETA2 FreeBSD 12.1-BETA2 r352780 GENERIC amd64 # cat /usr/src/sys/amd64/conf/ROUTER include GENERIC ident ROUTER makeoptions MODULES_OVERRIDE="pf pflog iflib" options PF_DEFAULT_TO_DROP options ALTQ options ALTQ_HFSC options ALTQ_RED options ALTQ_RIO options ALTQ_NOPCC # rm -R /usr/obj/* ; cd /usr/src ; make KERNCONF=ROUTER buildkernel ... cc -target x86_64-unknown-freebsd12.1 --sysroot=/usr/obj/usr/src/amd64.amd64/tmp -B/usr/obj/usr/src/amd64.amd64/tmp/usr/bin -c -O2 -pipe -fno-strict-aliasing -g -nostdinc -I. -I/usr/src/sys -I/usr/src/sys/ contrib/ck/include -I/usr/src/sys/contrib/libfdt -D_KERNEL -DHAVE_KERNEL_OPTION_HEADERS -include opt_global.h -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -MD -MF.depend.if_em.o -MTif_em.o -fdebug- prefix-map=./machine=/usr/src/sys/amd64/include -fdebug-prefix-map=./x86=/usr/src/sys/x86/include -mcmodel=kernel -mno-red-zone -mno-mmx -mno-sse -msoft-float -fno-asynchronous-unwind-tables -ffreestanding -fwrapv -fstack-protector -gdwarf-2 -Wall -Wredundant-decls -Wnested-externs -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Wcast-qual -Wundef -Wno-pointer-sign -D__printf__=__freebsd_kprintf__ -W missing-include-dirs -fdiagnostics-show-option -Wno-unknown-pragmas -Wno-error-tautological-compare -Wno-error-empty-body -Wno-error-parentheses-equality -Wno-error-unused-function -Wno-error-pointer-sign -W no-error-shift-negative-value -Wno-address-of-packed-member -mno-aes -mno-avx -std=iso9899:1999 -Werror /usr/src/sys/dev/e1000/if_em.c -I/usr/src/sys/dev/e1000 In file included from /usr/src/sys/dev/e1000/if_em.c:30: /usr/src/sys/dev/e1000/if_em.h:91:10: fatal error: 'ifdi_if.h' file not found #include "ifdi_if.h" ^~~~~~~~~~~ 1 error generated. *** Error code 1 Stop. make[2]: stopped in /usr/obj/usr/src/amd64.amd64/sys/ROUTER *** Error code 1 Stop. make[1]: stopped in /usr/src *** Error code 1 Stop. make: stopped in /usr/src
I'm also encountering this on 12.0 upgraded to 12.1: --- if_em.o --- In file included from /usr/src12.1/sys/dev/e1000/if_em.c:30: /usr/src12.1/sys/dev/e1000/if_em.h:91:10: fatal error: 'ifdi_if.h' file not found #include "ifdi_if.h" ^~~~~~~~~~~ The 'ifdi_if.h' does not exist within src (r356738) per: find /usr/src12.1 -type f -name 'ifdi_if.h' Yet, specifying 'device iflib' in the kernel config does work while that entry does not exists in GENERIC nor needed in 12.0.
I did some digging and found: 12.0 sys/conf/files: net/ifdi_if.m optional ether pci 12.1 sys/conf/files: net/ifdi_if.m optional ether pci iflib I assume that 'device iflib' is now required going forward within the kernel configuration file?
I have the same kernel compile issue for 12.2-RELEASE: In file included from /usr/src/sys/dev/e1000/if_em.c:30: /usr/src/sys/dev/e1000/if_em.h:96:10: fatal error: 'ifdi_if.h' file not found #include "ifdi_if.h" ^~~~~~~~~~~ 1 error generated. *** Error code 1 Stop. make[2]: stopped in /usr/obj/usr/src/amd64.amd64/sys/ROUTER *** Error code 1 *** Error code 1 It's caused by: device em # Intel PRO/1000 Gigabit Ethernet Family Fixed by adding the iflib device: device iflib device em # Intel PRO/1000 Gigabit Ethernet Family Kernel compiled now without errors. Something else that changed and affected me was that: device tun has been deprecated and replaced with: device tuntap This is not a bug, just a change in the kernel requiring a new device because em now has dependency iflib. It's a little annoying that these changes happen but they make sense in order to be able to lighten the kernel if you are not using one of the NIC's. It's documented fine in GENERIC: # PCI/PCI-X/PCIe Ethernet NICs that use iflib infrastructure
cc -c -O2 -pipe -fno-strict-aliasing -g -nostdinc -I. -I../../.. -I../../../contrib/ck/include -I../../../contrib/libfdt -D_KERNEL -DHAVE_KERNEL_OPTION_HEADERS -include opt_global.h -fno-common -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -MD -MF.depend.efirtc.o -MTefirtc.o -fdebug-prefix-map=./machine=/usr/src/sys/amd64/include -fdebug-prefix-map=./x86=/usr/src/sys/x86/include -mcmodel=kernel -mno-red-zone -mno-mmx -mno-sse -msoft-float -fno-asynchronous-unwind-tables -ffreestanding -fwrapv -fstack-protector -gdwarf-2 -Wall -Wredundant-decls -Wnested-externs -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Wcast-qual -Wundef -Wno-pointer-sign -D__printf__=__freebsd_kprintf__ -Wmissing-include-dirs -fdiagnostics-show-option -Wno-unknown-pragmas -Wno-error-tautological-compare -Wno-error-empty-body -Wno-error-parentheses-equality -Wno-error-unused-function -Wno-error-pointer-sign -Wno-error-shift-negative-value -Wno-address-of-packed-member -mno-aes -mno-avx -std=iso9899:1999 -Werror ../../../dev/efidev/efirtc.c ctfconvert -L VERSION -g efirtc.o cc -c -O2 -pipe -fno-strict-aliasing -g -nostdinc -I. -I../../.. -I../../../contrib/ck/include -I../../../contrib/libfdt -D_KERNEL -DHAVE_KERNEL_OPTION_HEADERS -include opt_global.h -fno-common -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -MD -MF.depend.if_em.o -MTif_em.o -fdebug-prefix-map=./machine=/usr/src/sys/amd64/include -fdebug-prefix-map=./x86=/usr/src/sys/x86/include -mcmodel=kernel -mno-red-zone -mno-mmx -mno-sse -msoft-float -fno-asynchronous-unwind-tables -ffreestanding -fwrapv -fstack-protector -gdwarf-2 -Wall -Wredundant-decls -Wnested-externs -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Wcast-qual -Wundef -Wno-pointer-sign -D__printf__=__freebsd_kprintf__ -Wmissing-include-dirs -fdiagnostics-show-option -Wno-unknown-pragmas -Wno-error-tautological-compare -Wno-error-empty-body -Wno-error-parentheses-equality -Wno-error-unused-function -Wno-error-pointer-sign -Wno-error-shift-negative-value -Wno-address-of-packed-member -mno-aes -mno-avx -std=iso9899:1999 -Werror ../../../dev/e1000/if_em.c -I../../../dev/e1000 In file included from ../../../dev/e1000/if_em.c:30: ../../../dev/e1000/if_em.h:91:10: fatal error: 'ifdi_if.h' file not found #include "ifdi_if.h" ^~~~~~~~~~~ 1 error generated. *** Error code 1
# PCI/PCI-X/PCIe Ethernet NICs that use iflib infrastructure device<><------>iflib device<><------>em<----><------><------># Intel PRO/1000 Gigabit Ethernet Family #device><------>ix<----><------><------># Intel PRO/10GbE PCIE PF Ethernet #device><------>ixv<---><------><------># Intel PRO/10GbE PCIE VF Ethernet
FreeBSD 12.1-STABLE r362880 GENERIC amd64
It looks like the common theme here is you have custom kernels and need to add 'device iflib'. Let me see if there is some way to handle this in config(9).
I'll take a look at this to see if there's something we can do. There's a lot of ugly things, I'll see which one(s) need to be deployed here.
https://reviews.freebsd.org/D29848 https://reviews.freebsd.org/D29849 Contain my notion on how to fix this.
^Triage: FreeBSD 12 is now out of support.