DKMS builds failing against Linux kernel 5.0-rc5
This is basically a forward of this bug report in Ubuntu.
The Debian package of ipt_NETFLOW no more builds with DKMS when being build against the Linux Kernel 5.0-rc5. Following the DKMS build log:
DKMS make.log for ipt-netflow-2.3 for kernel 5.0.0-3-generic (x86_64)
Wed Feb 6 15:37:01 UTC 2019
Compiling for kernel 5.0.0-3-generic
make -C /lib/modules/5.0.0-3-generic/build M=/var/lib/dkms/ipt-netflow/2.3/build modules CONFIG_DEBUG_INFO=y
make[1]: warning: jobserver unavailable: using -j1. Add '+' to parent make rule.
make[1]: Entering directory '/usr/src/linux-headers-5.0.0-3-generic'
CC [M] /var/lib/dkms/ipt-netflow/2.3/build/ipt_NETFLOW.o
/var/lib/dkms/ipt-netflow/2.3/build/ipt_NETFLOW.c: In function 'nf_seq_show':
/var/lib/dkms/ipt-netflow/2.3/build/ipt_NETFLOW.c:749:39: warning: format '%lu' expects argument of type 'long unsigned int', but argument 3 has type 's64' {aka 'long long int'} [-Wformat=]
seq_printf(seq, " Flows selected %lu, discarded %lu.",
~~^
%llu
atomic64_read(&flows_selected),
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/var/lib/dkms/ipt-netflow/2.3/build/ipt_NETFLOW.c:749:54: warning: format '%lu' expects argument of type 'long unsigned int', but argument 4 has type 's64' {aka 'long long int'} [-Wformat=]
seq_printf(seq, " Flows selected %lu, discarded %lu.",
~~^
%llu
/var/lib/dkms/ipt-netflow/2.3/build/ipt_NETFLOW.c:751:8:
atomic64_read(&flows_observed) - atomic64_read(&flows_selected));
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/var/lib/dkms/ipt-netflow/2.3/build/ipt_NETFLOW.c:753:39: warning: format '%lu' expects argument of type 'long unsigned int', but argument 3 has type 's64' {aka 'long long int'} [-Wformat=]
seq_printf(seq, " Flows selected %lu.", atomic64_read(&flows_selected));
~~^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
%llu
/var/lib/dkms/ipt-netflow/2.3/build/ipt_NETFLOW.c: In function 'netflow_export_pdu_v5':
/var/lib/dkms/ipt-netflow/2.3/build/ipt_NETFLOW.c:2621:2: error: implicit declaration of function 'do_gettimeofday'; did you mean 'do_settimeofday64'? [-Werror=implicit-function-declaration]
do_gettimeofday(&tv);
^~~~~~~~~~~~~~~
do_settimeofday64
/var/lib/dkms/ipt-netflow/2.3/build/ipt_NETFLOW.c: In function 'netflow_target':
/var/lib/dkms/ipt-netflow/2.3/build/ipt_NETFLOW.c:5213:12: error: 'struct sk_buff' has no member named 'nf_bridge'; did you mean 'nf_trace'?
if (skb->nf_bridge && skb->nf_bridge->physdev) \
^~~~~~~~~
/var/lib/dkms/ipt-netflow/2.3/build/ipt_NETFLOW.c:5218:3: note: in expansion of macro 'copy_dev'
copy_dev(nf->o_ifphys, physoutdev, if_out);
^~~~~~~~
/var/lib/dkms/ipt-netflow/2.3/build/ipt_NETFLOW.c:5213:30: error: 'struct sk_buff' has no member named 'nf_bridge'; did you mean 'nf_trace'?
if (skb->nf_bridge && skb->nf_bridge->physdev) \
^~~~~~~~~
/var/lib/dkms/ipt-netflow/2.3/build/ipt_NETFLOW.c:5218:3: note: in expansion of macro 'copy_dev'
copy_dev(nf->o_ifphys, physoutdev, if_out);
^~~~~~~~
/var/lib/dkms/ipt-netflow/2.3/build/ipt_NETFLOW.c:5214:28: error: 'struct sk_buff' has no member named 'nf_bridge'; did you mean 'nf_trace'?
out = resolve_snmp(skb->nf_bridge->physdev); \
^~~~~~~~~
/var/lib/dkms/ipt-netflow/2.3/build/ipt_NETFLOW.c:5218:3: note: in expansion of macro 'copy_dev'
copy_dev(nf->o_ifphys, physoutdev, if_out);
^~~~~~~~
/var/lib/dkms/ipt-netflow/2.3/build/ipt_NETFLOW.c:5213:12: error: 'struct sk_buff' has no member named 'nf_bridge'; did you mean 'nf_trace'?
if (skb->nf_bridge && skb->nf_bridge->physdev) \
^~~~~~~~~
/var/lib/dkms/ipt-netflow/2.3/build/ipt_NETFLOW.c:5219:3: note: in expansion of macro 'copy_dev'
copy_dev(nf->i_ifphys, physindev, if_in);
^~~~~~~~
/var/lib/dkms/ipt-netflow/2.3/build/ipt_NETFLOW.c:5213:30: error: 'struct sk_buff' has no member named 'nf_bridge'; did you mean 'nf_trace'?
if (skb->nf_bridge && skb->nf_bridge->physdev) \
^~~~~~~~~
/var/lib/dkms/ipt-netflow/2.3/build/ipt_NETFLOW.c:5219:3: note: in expansion of macro 'copy_dev'
copy_dev(nf->i_ifphys, physindev, if_in);
^~~~~~~~
/var/lib/dkms/ipt-netflow/2.3/build/ipt_NETFLOW.c:5214:28: error: 'struct sk_buff' has no member named 'nf_bridge'; did you mean 'nf_trace'?
out = resolve_snmp(skb->nf_bridge->physdev); \
^~~~~~~~~
/var/lib/dkms/ipt-netflow/2.3/build/ipt_NETFLOW.c:5219:3: note: in expansion of macro 'copy_dev'
copy_dev(nf->i_ifphys, physindev, if_in);
^~~~~~~~
/var/lib/dkms/ipt-netflow/2.3/build/ipt_NETFLOW.c: In function 'ipt_netflow_init':
/var/lib/dkms/ipt-netflow/2.3/build/ipt_NETFLOW.c:5510:43: error: invalid operands to binary << (have 'long unsigned int (*)(void)' and 'int')
unsigned long memksize = (num_physpages << PAGE_SHIFT) / 1024;
^~
cc1: some warnings being treated as errors
make[2]: *** [scripts/Makefile.build:293: /var/lib/dkms/ipt-netflow/2.3/build/ipt_NETFLOW.o] Error 1
make[1]: *** [Makefile:1582: _module_/var/lib/dkms/ipt-netflow/2.3/build] Error 2
make[1]: Leaving directory '/usr/src/linux-headers-5.0.0-3-generic'
make: *** [Makefile:25: ipt_NETFLOW.ko] Error 2
Can you try to build from the latest git head?
The log failure looks more or less the same, just some line numbers seem different. There's also no simple_strtoul or is_vlan_dev involved:
DKMS make.log for ipt-netflow-2.3 for kernel 5.0.0-3-generic (x86_64)
Wed Feb 6 16:33:12 UTC 2019
Compiling for kernel 5.0.0-3-generic
make -C /lib/modules/5.0.0-3-generic/build M=/var/lib/dkms/ipt-netflow/2.3/build modules CONFIG_DEBUG_INFO=y
make[1]: warning: jobserver unavailable: using -j1. Add '+' to parent make rule.
make[1]: Entering directory '/usr/src/linux-headers-5.0.0-3-generic'
CC [M] /var/lib/dkms/ipt-netflow/2.3/build/ipt_NETFLOW.o
/var/lib/dkms/ipt-netflow/2.3/build/ipt_NETFLOW.c: In function 'nf_seq_show':
/var/lib/dkms/ipt-netflow/2.3/build/ipt_NETFLOW.c:753:39: warning: format '%lu' expects argument of type 'long unsigned int', but argument 3 has type 's64' {aka 'long long int'} [-Wformat=]
seq_printf(seq, " Flows selected %lu, discarded %lu.",
~~^
%llu
atomic64_read(&flows_selected),
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/var/lib/dkms/ipt-netflow/2.3/build/ipt_NETFLOW.c:753:54: warning: format '%lu' expects argument of type 'long unsigned int', but argument 4 has type 's64' {aka 'long long int'} [-Wformat=]
seq_printf(seq, " Flows selected %lu, discarded %lu.",
~~^
%llu
/var/lib/dkms/ipt-netflow/2.3/build/ipt_NETFLOW.c:755:8:
atomic64_read(&flows_observed) - atomic64_read(&flows_selected));
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/var/lib/dkms/ipt-netflow/2.3/build/ipt_NETFLOW.c:757:39: warning: format '%lu' expects argument of type 'long unsigned int', but argument 3 has type 's64' {aka 'long long int'} [-Wformat=]
seq_printf(seq, " Flows selected %lu.", atomic64_read(&flows_selected));
~~^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
%llu
/var/lib/dkms/ipt-netflow/2.3/build/ipt_NETFLOW.c: In function 'netflow_export_pdu_v5':
/var/lib/dkms/ipt-netflow/2.3/build/ipt_NETFLOW.c:2632:2: error: implicit declaration of function 'do_gettimeofday'; did you mean 'do_settimeofday64'? [-Werror=implicit-function-declaration]
do_gettimeofday(&tv);
^~~~~~~~~~~~~~~
do_settimeofday64
/var/lib/dkms/ipt-netflow/2.3/build/ipt_NETFLOW.c: In function 'netflow_target':
/var/lib/dkms/ipt-netflow/2.3/build/ipt_NETFLOW.c:5241:12: error: 'struct sk_buff' has no member named 'nf_bridge'; did you mean 'nf_trace'?
if (skb->nf_bridge && skb->nf_bridge->physdev) \
^~~~~~~~~
/var/lib/dkms/ipt-netflow/2.3/build/ipt_NETFLOW.c:5246:3: note: in expansion of macro 'copy_dev'
copy_dev(nf->o_ifphys, physoutdev, if_out);
^~~~~~~~
/var/lib/dkms/ipt-netflow/2.3/build/ipt_NETFLOW.c:5241:30: error: 'struct sk_buff' has no member named 'nf_bridge'; did you mean 'nf_trace'?
if (skb->nf_bridge && skb->nf_bridge->physdev) \
^~~~~~~~~
/var/lib/dkms/ipt-netflow/2.3/build/ipt_NETFLOW.c:5246:3: note: in expansion of macro 'copy_dev'
copy_dev(nf->o_ifphys, physoutdev, if_out);
^~~~~~~~
/var/lib/dkms/ipt-netflow/2.3/build/ipt_NETFLOW.c:5242:28: error: 'struct sk_buff' has no member named 'nf_bridge'; did you mean 'nf_trace'?
out = resolve_snmp(skb->nf_bridge->physdev); \
^~~~~~~~~
/var/lib/dkms/ipt-netflow/2.3/build/ipt_NETFLOW.c:5246:3: note: in expansion of macro 'copy_dev'
copy_dev(nf->o_ifphys, physoutdev, if_out);
^~~~~~~~
/var/lib/dkms/ipt-netflow/2.3/build/ipt_NETFLOW.c:5241:12: error: 'struct sk_buff' has no member named 'nf_bridge'; did you mean 'nf_trace'?
if (skb->nf_bridge && skb->nf_bridge->physdev) \
^~~~~~~~~
/var/lib/dkms/ipt-netflow/2.3/build/ipt_NETFLOW.c:5247:3: note: in expansion of macro 'copy_dev'
copy_dev(nf->i_ifphys, physindev, if_in);
^~~~~~~~
/var/lib/dkms/ipt-netflow/2.3/build/ipt_NETFLOW.c:5241:30: error: 'struct sk_buff' has no member named 'nf_bridge'; did you mean 'nf_trace'?
if (skb->nf_bridge && skb->nf_bridge->physdev) \
^~~~~~~~~
/var/lib/dkms/ipt-netflow/2.3/build/ipt_NETFLOW.c:5247:3: note: in expansion of macro 'copy_dev'
copy_dev(nf->i_ifphys, physindev, if_in);
^~~~~~~~
/var/lib/dkms/ipt-netflow/2.3/build/ipt_NETFLOW.c:5242:28: error: 'struct sk_buff' has no member named 'nf_bridge'; did you mean 'nf_trace'?
out = resolve_snmp(skb->nf_bridge->physdev); \
^~~~~~~~~
/var/lib/dkms/ipt-netflow/2.3/build/ipt_NETFLOW.c:5247:3: note: in expansion of macro 'copy_dev'
copy_dev(nf->i_ifphys, physindev, if_in);
^~~~~~~~
/var/lib/dkms/ipt-netflow/2.3/build/ipt_NETFLOW.c: In function 'ipt_netflow_init':
/var/lib/dkms/ipt-netflow/2.3/build/ipt_NETFLOW.c:5538:43: error: invalid operands to binary << (have 'long unsigned int (*)(void)' and 'int')
unsigned long memksize = (num_physpages << PAGE_SHIFT) / 1024;
^~
cc1: some warnings being treated as errors
make[2]: *** [scripts/Makefile.build:293: /var/lib/dkms/ipt-netflow/2.3/build/ipt_NETFLOW.o] Error 1
make[1]: *** [Makefile:1582: _module_/var/lib/dkms/ipt-netflow/2.3/build] Error 2
make[1]: Leaving directory '/usr/src/linux-headers-5.0.0-3-generic'
make: *** [Makefile:25: ipt_NETFLOW.ko] Error 2
I suspect that https://github.com/torvalds/linux/commit/de8bda1d22d38b7d5cd08b33f86efd94d4c86630#diff-ce59bbd8b4efd2475bfd7b50fe420671 is causing this as it removes skb->nf_bridge.
Thanks. I will look into it later.
torvalds/linux@de8bda1 is only one part of the cause.
Another cause is that do_gettimeofday() is gone, too. ktime_get_real_ts64() seems a direct replacement.
A third cause seems this error:
/var/lib/dkms/ipt-netflow/2.3/build/ipt_NETFLOW.c: In function 'ipt_netflow_init':
/var/lib/dkms/ipt-netflow/2.3/build/ipt_NETFLOW.c:5541:43: error: invalid operands to binary << (have 'long unsigned int (*)(void)' and 'int')
unsigned long memksize = (num_physpages << PAGE_SHIFT) / 1024;
^~