Getting nfqueue library error during webfilter-ng building

Hi i am trying to build webfilter-ng on OpenWrt 21.02.3 webfilter-ng is a Transparent Web Filtering for Linux

I got a fatal error when i started to build this program:

root@OpenWrt:~/nfqueue# gcc webfilter-ng.c -g -Wall -Wextra -Wformat-security -O3 -fstack-protector-all -lnetfilter_queue -lnfnetlink  -o webfilter

webfilter-ng.c:9:10: fatal error: <libnetfilter_queue/libnetfilter_queue.h>: No such file or directory
 #include "<libnetfilter_queue/libnetfilter_queue.h>"
          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

i was installed below libraries =

libnetfilter-queue1 - 1.0.5-4
libnfnetlink0 - 1.0.1-4
libnftnl11 - 1.1.8-1

and tried to add libnetfilter_queue and libnfnetlink libraries to /usr/include

root@OpenWrt:/usr/include# ls libnetfilter_queue/
Makefile.am                libnetfilter_queue_icmp.h  libnetfilter_queue_ipv6.h  libnetfilter_queue_udp.h   pktbuff.h

libnetfilter_queue.h       libnetfilter_queue_ipv4.h  libnetfilter_queue_tcp.h   linux_nfnetlink_queue.h
root@OpenWrt:/usr/include# ls libnfnetlink/
Makefile.am               libnfnetlink.h            linux_nfnetlink.h         linux_nfnetlink_compat.h

How can i solve this problem? Thanks for help..

I'd say you need devel packages.

1 Like

As frollic already implied, you would need (lots of-) build-dependencies for your package to build, but as OpenWrt is not self-hosting, those simply do not exist for the runtime system. You would have to use the buildsystem (at its source level) or at least the SDK for this to work.

1 Like

thanks i tried to use build system
but it complains about tcphdr not having certain fields
I checked header file usr/include/linux/tcp.h and the definition is correct

make package/network/utils/webfilter-ng/compile V=s

make[1]: Entering directory '/media/alfa/WrtTest/source'
make[2]: Entering directory '/media/alfa/WrtTest/source/package/libs/toolchain'
echo "libc" >> /media/alfa/WrtTest/source/staging_dir/target-x86_64_musl/pkginfo/toolchain.default.install
echo "libgcc" >> /media/alfa/WrtTest/source/staging_dir/target-x86_64_musl/pkginfo/toolchain.default.install
echo "libpthread" >> /media/alfa/WrtTest/source/staging_dir/target-x86_64_musl/pkginfo/toolchain.default.install
echo "librt" >> /media/alfa/WrtTest/source/staging_dir/target-x86_64_musl/pkginfo/toolchain.default.install
make[2]: Leaving directory '/media/alfa/WrtTest/source/package/libs/toolchain'
time: package/libs/toolchain/compile#0.12#0.04#0.15
make[2]: Entering directory '/media/alfa/WrtTest/source/package/network/utils/webfilter-ng'
touch /media/alfa/WrtTest/source/build_dir/target-x86_64_musl/webfilter-ng-1.0/.prepared_4df8768d3eaffce5088d8eaa76063e64_6664517399ebbbc92a37c5bb081b5c53_check
mkdir -p /media/alfa/WrtTest/source/build_dir/target-x86_64_musl/webfilter-ng-1.0
cp /media/alfa/WrtTest/webfilter-ng-master/* /media/alfa/WrtTest/source/build_dir/target-x86_64_musl/webfilter-ng-1.0
touch /media/alfa/WrtTest/source/build_dir/target-x86_64_musl/webfilter-ng-1.0/.prepared_4df8768d3eaffce5088d8eaa76063e64_6664517399ebbbc92a37c5bb081b5c53
rm -f /media/alfa/WrtTest/source/build_dir/target-x86_64_musl/webfilter-ng-1.0/.configured_*
rm -f /media/alfa/WrtTest/source/staging_dir/target-x86_64_musl/stamp/.webfilter-ng_installed
(cd /media/alfa/WrtTest/source/build_dir/target-x86_64_musl/webfilter-ng-1.0/./; if [ -x ./configure ]; then find /media/alfa/WrtTest/source/build_dir/target-x86_64_musl/webfilter-ng-1.0/ -name config.guess | xargs -r chmod u+w; find /media/alfa/WrtTest/source/build_dir/target-x86_64_musl/webfilter-ng-1.0/ -name config.guess | xargs -r -n1 cp --remove-destination /media/alfa/WrtTest/source/scripts/config.guess; find /media/alfa/WrtTest/source/build_dir/target-x86_64_musl/webfilter-ng-1.0/ -name config.sub | xargs -r chmod u+w; find /media/alfa/WrtTest/source/build_dir/target-x86_64_musl/webfilter-ng-1.0/ -name config.sub | xargs -r -n1 cp --remove-destination /media/alfa/WrtTest/source/scripts/config.sub; AR="x86_64-openwrt-linux-musl-gcc-ar" AS="x86_64-openwrt-linux-musl-gcc -c -Os -pipe -fno-caller-saves -fno-plt -fhonour-copts -Wno-error=unused-but-set-variable -Wno-error=unused-result -fmacro-prefix-map=/media/alfa/WrtTest/source/build_dir/target-x86_64_musl/webfilter-ng-1.0=webfilter-ng-1.0 -Wformat -Werror=format-security -fstack-protector -D_FORTIFY_SOURCE=1 -Wl,-z,now -Wl,-z,relro" LD=x86_64-openwrt-linux-musl-ld NM="x86_64-openwrt-linux-musl-gcc-nm" CC="x86_64-openwrt-linux-musl-gcc" GCC="x86_64-openwrt-linux-musl-gcc" CXX="x86_64-openwrt-linux-musl-g++" RANLIB="x86_64-openwrt-linux-musl-gcc-ranlib" STRIP=x86_64-openwrt-linux-musl-strip OBJCOPY=x86_64-openwrt-linux-musl-objcopy OBJDUMP=x86_64-openwrt-linux-musl-objdump SIZE=x86_64-openwrt-linux-musl-size CFLAGS="-Os -pipe -fno-caller-saves -fno-plt -fhonour-copts -Wno-error=unused-but-set-variable -Wno-error=unused-result -fmacro-prefix-map=/media/alfa/WrtTest/source/build_dir/target-x86_64_musl/webfilter-ng-1.0=webfilter-ng-1.0 -Wformat -Werror=format-security -fstack-protector -D_FORTIFY_SOURCE=1 -Wl,-z,now -Wl,-z,relro " CXXFLAGS="-Os -pipe -fno-caller-saves -fno-plt -fhonour-copts -Wno-error=unused-but-set-variable -Wno-error=unused-result -fmacro-prefix-map=/media/alfa/WrtTest/source/build_dir/target-x86_64_musl/webfilter-ng-1.0=webfilter-ng-1.0 -Wformat -Werror=format-security -fstack-protector -D_FORTIFY_SOURCE=1 -Wl,-z,now -Wl,-z,relro " CPPFLAGS="-I/media/alfa/WrtTest/source/staging_dir/toolchain-x86_64_gcc-8.4.0_musl/usr/include -I/media/alfa/WrtTest/source/staging_dir/toolchain-x86_64_gcc-8.4.0_musl/include/fortify -I/media/alfa/WrtTest/source/staging_dir/toolchain-x86_64_gcc-8.4.0_musl/include " LDFLAGS="-L/media/alfa/WrtTest/source/staging_dir/toolchain-x86_64_gcc-8.4.0_musl/usr/lib -L/media/alfa/WrtTest/source/staging_dir/toolchain-x86_64_gcc-8.4.0_musl/lib -znow -zrelro "   ./configure --target=x86_64-openwrt-linux --host=x86_64-openwrt-linux --build=x86_64-pc-linux-gnu --program-prefix="" --program-suffix="" --prefix=/usr --exec-prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin --libexecdir=/usr/lib --sysconfdir=/etc --datadir=/usr/share --localstatedir=/var --mandir=/usr/man --infodir=/usr/info --disable-nls  ; fi; )
touch /media/alfa/WrtTest/source/build_dir/target-x86_64_musl/webfilter-ng-1.0/.configured_68b329da9893e34099c7d8ad5cb9c940
rm -f /media/alfa/WrtTest/source/build_dir/target-x86_64_musl/webfilter-ng-1.0/.built
touch /media/alfa/WrtTest/source/build_dir/target-x86_64_musl/webfilter-ng-1.0/.built_check
x86_64-openwrt-linux-musl-gcc -Os -pipe -fno-caller-saves -fno-plt -fhonour-copts -Wno-error=unused-but-set-variable -Wno-error=unused-result -fmacro-prefix-map=/media/alfa/WrtTest/source/build_dir/target-x86_64_musl/webfilter-ng-1.0=webfilter-ng-1.0 -Wformat -Werror=format-security -fstack-protector -D_FORTIFY_SOURCE=1 -Wl,-z,now -Wl,-z,relro -o /media/alfa/WrtTest/source/build_dir/target-x86_64_musl/webfilter-ng-1.0/webfilter-ng.o -c /media/alfa/WrtTest/source/build_dir/target-x86_64_musl/webfilter-ng-1.0/webfilter-ng.c
/media/alfa/WrtTest/source/build_dir/target-x86_64_musl/webfilter-ng-1.0/webfilter-ng.c: In function 'tcp_checksum':
/media/alfa/WrtTest/source/build_dir/target-x86_64_musl/webfilter-ng-1.0/webfilter-ng.c:99:14: error: 'struct tcphdr' has no member named 'check'; did you mean 'th_ack'?
     tcphdrp->check = 0;
              ^~~~~
              th_ack
/media/alfa/WrtTest/source/build_dir/target-x86_64_musl/webfilter-ng-1.0/webfilter-ng.c:112:14: error: 'struct tcphdr' has no member named 'check'; did you mean 'th_ack'?
     tcphdrp->check = (unsigned short)sum;
              ^~~~~
              th_ack
/media/alfa/WrtTest/source/build_dir/target-x86_64_musl/webfilter-ng-1.0/webfilter-ng.c: In function 'check_packet_against_hostname':
/media/alfa/WrtTest/source/build_dir/target-x86_64_musl/webfilter-ng-1.0/webfilter-ng.c:145:59: error: 'struct tcphdr' has no member named 'doff'; did you mean 'th_off'?
   u_int tcpdatalen = ntohs(iphdr->tot_len) - (tcp_header->doff * 4) - (iphdr->ihl * 4);
                                                           ^~~~
                                                           th_off
/media/alfa/WrtTest/source/build_dir/target-x86_64_musl/webfilter-ng-1.0/webfilter-ng.c:160:62: error: 'struct tcphdr' has no member named 'doff'; did you mean 'th_off'?
   data = (char *)((unsigned char *)tcp_header + (tcp_header->doff * 4));
                                                              ^~~~
                                                              th_off
/media/alfa/WrtTest/source/build_dir/target-x86_64_musl/webfilter-ng-1.0/webfilter-ng.c:338:38: error: 'struct udphdr' has no member named 'len'
   u_int udpdatalen = ntohs(udp_header->len);
                                      ^~
make[2]: *** [Makefile:51: /media/alfa/WrtTest/source/build_dir/target-x86_64_musl/webfilter-ng-1.0/.built] Error 1
make[2]: Leaving directory '/media/alfa/WrtTest/source/package/network/utils/webfilter-ng'
time: package/network/utils/webfilter-ng/compile#0.63#0.08#0.90
    ERROR: package/network/utils/webfilter-ng failed to build.
make[1]: *** [package/Makefile:116: package/network/utils/webfilter-ng/compile] Error 1
make[1]: Leaving directory '/media/alfa/WrtTest/source'
make: *** [/media/alfa/WrtTest/source/include/toplevel.mk:230: package/network/utils/webfilter-ng/compile] Error 2

I added -D_GNU_SOURCE and theheader problem solved but this time netfilter_queue and nfnetlink libraries not found

x86_64-openwrt-linux-gcc -D_GNU_SOURCE webfilter-ng.c -g -Wall -Wextra -Wformat-security -O3 -fstack-protector-all -lnetfilter_queue -lnfnetlink -o webfilter

In file included from /opt/toolchain-x86_64_gcc-8.4.0_musl/usr/include/libnetfilter_queue/libnetfilter_queue.h:19,
                 from webfilter-ng.c:9:
/opt/toolchain-x86_64_gcc-8.4.0_musl/usr/include/libnetfilter_queue/linux_nfnetlink_queue.h:4:2: warning: #warning "libnetfilter_queue/linux_nfnetlink_queue.h is deprecated, add #include <linux/netfilter/nfnetlink_queue.h> to your source code before #include <libnetfilter_queue/libnetfilter_queue.h>" [-Wcpp]
 #warning "libnetfilter_queue/linux_nfnetlink_queue.h is deprecated, add #include <linux/netfilter/nfnetlink_queue.h> to your source code before #include <libnetfilter_queue/libnetfilter_queue.h>"
  ^~~~~~~
/opt/toolchain-x86_64_gcc-8.4.0_musl/bin/../lib/gcc/x86_64-openwrt-linux-musl/8.4.0/../../../../x86_64-openwrt-linux-musl/bin/ld: cannot find -lnetfilter_queue
/opt/toolchain-x86_64_gcc-8.4.0_musl/bin/../lib/gcc/x86_64-openwrt-linux-musl/8.4.0/../../../../x86_64-openwrt-linux-musl/bin/ld: cannot find -lnfnetlink```

I successfully run webfilter-ng on OpenWrt at least

On build system :
I created OpenWrt package Makefile for webfilter-ng based on Hello World! package example

and then
i added below webfilter-ng package and
nfqueue&nfnetlink libraries via make menuconfig

CONFIG_PACKAGE_webfilter-ng=m
CONFIG_PACKAGE_libnetfilter-queue=y
CONFIG_PACKAGE_libnfnetlink=y
CONFIG_PACKAGE_libnftnl=y

moved webfilter-ng/Makefile to /source/package/utils/network/

make package/utils/network/webfilter-ng/compile V=s

opkg install webfilter-ng_1.0-1_x86_64.ipk

root@OpenWrt:~# opkg install webfilter-ng_1.0-1_mipsel_24kc.ipk 
Installing webfilter-ng (1.0-1) to root...
Installing libnfnetlink0 (1.0.1-4) to root...
Downloading https://downloads.openwrt.org/releases/21.02.3/packages/mipsel_24kc/base/libnfnetlink0_1.0.1-4_mipsel_24kc.ipk
Installing libnetfilter-queue1 (1.0.5-4) to root...
Downloading https://downloads.openwrt.org/releases/21.02.3/packages/mipsel_24kc/packages/libnetfilter-queue1_1.0.5-4_mipsel_24kc.ipk
Installing iptables-mod-nfqueue (1.8.7-1) to root...
Downloading https://downloads.openwrt.org/releases/21.02.3/targets/ramips/mt7621/packages/iptables-mod-nfqueue_1.8.7-1_mipsel_24kc.ipk
Configuring libnfnetlink0.
Configuring libnetfilter-queue1.
Configuring iptables-mod-nfqueue.
Configuring webfilter-ng.


root@OpenWrt:~# webfilter-ng 
SNI: downloads.openwrt.org
SNI: downloads.openwrt.org
SNI: downloads.openwrt.org

This topic was automatically closed 10 days after the last reply. New replies are no longer allowed.