aabc / ipt-netflow

Netflow iptables module for Linux kernel (official)
https://github.com/aabc/ipt-netflow
503 stars 129 forks source link

DKMS builds failing against Linux kernel 5.0-rc5 #108

Open xtaran opened 5 years ago

xtaran commented 5 years ago

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
aabc commented 5 years ago

Can you try to build from the latest git head?

xtaran commented 5 years ago

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.

aabc commented 5 years ago

Thanks. I will look into it later.

xtaran commented 5 years ago

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;
                                           ^~