commit:     2839798db8f159e92e64a37d83b9899e1570926c
Author:     Sergey Popov <pinkbyte <AT> gentoo <DOT> org>
AuthorDate: Tue May 16 16:18:31 2017 +0000
Commit:     Sergey Popov <pinkbyte <AT> gentoo <DOT> org>
CommitDate: Tue May 16 16:18:31 2017 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=2839798d

net-firewall/ipt_netflow: backport upstream fix for building with kernel 4.10

Reported-by: Toralf Förster <toralf.foerster <AT> gmx.de>
Gentoo-Bug: 617484

Package-Manager: Portage-2.3.5, Repoman-2.3.1

 .../files/ipt_netflow-2.2-linux-4.10.patch         | 137 +++++++++++++++++++++
 net-firewall/ipt_netflow/ipt_netflow-2.2-r1.ebuild |   5 +-
 2 files changed, 141 insertions(+), 1 deletion(-)

diff --git a/net-firewall/ipt_netflow/files/ipt_netflow-2.2-linux-4.10.patch 
b/net-firewall/ipt_netflow/files/ipt_netflow-2.2-linux-4.10.patch
new file mode 100644
index 00000000000..7e8f62840a9
--- /dev/null
+++ b/net-firewall/ipt_netflow/files/ipt_netflow-2.2-linux-4.10.patch
@@ -0,0 +1,137 @@
+commit 5d71c94c400d91633f6d3c3be9e785bb23d4ca1a
+Author: ABC <[email protected]>
+Date:   Sun Mar 5 11:27:39 2017 +0300
+
+    Compilation compatibility with kernel 4.10.
+    
+    Fixes #70.
+    Resolves incompatibilities introduced by
+     2456e855354415bfaeb7badaa14e11b3e02c8466 and
+     613dbd95723aee7abd16860745691b6c7bda20dc for kernel 4.10.
+
+diff --git a/compat.h b/compat.h
+index 3f27977..47176ef 100644
+--- a/compat.h
++++ b/compat.h
+@@ -600,4 +600,29 @@ out:
+ # define __GNUC_PREREQ(maj, min) 0
+ #endif
+ 
++/* ktime is not union anymore, since 2456e855354415bfaeb7badaa14e11b3e02c8466 
*/
++#if LINUX_VERSION_CODE < KERNEL_VERSION(4,10,0)
++# define first_tv64   first.tv64
++# define last_tv64    last.tv64
++#else
++# define first_tv64   first
++# define last_tv64    last
++#endif
++
++/* Offset changes made in 613dbd95723aee7abd16860745691b6c7bda20dc */
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,28) && LINUX_VERSION_CODE < 
KERNEL_VERSION(4,10,0)
++static inline u_int8_t xt_family(const struct xt_action_param *par)
++{
++      return par->family;
++}
++static inline const struct net_device *xt_in(const struct xt_action_param 
*par)
++{
++      return par->in;
++}
++static inline const struct net_device *xt_out(const struct xt_action_param 
*par)
++{
++      return par->out;
++}
++#endif
++
+ #endif /* COMPAT_NETFLOW_H */
+diff --git a/ipt_NETFLOW.c b/ipt_NETFLOW.c
+index 781b284..0d1ac55 100644
+--- a/ipt_NETFLOW.c
++++ b/ipt_NETFLOW.c
+@@ -3863,10 +3863,10 @@ static void netflow_export_stats(void)
+               t.pkts_selected += st->pkts_selected;
+               t.pkts_observed += st->pkts_observed;
+ #endif
+-              t.drop.first.tv64 = min_not_zero(t.drop.first.tv64, 
st->drop.first.tv64);
+-              t.drop.last.tv64  = max(t.drop.last.tv64, st->drop.last.tv64);
+-              t.lost.first.tv64 = min_not_zero(t.lost.first.tv64, 
st->lost.first.tv64);
+-              t.lost.last.tv64  = max(t.lost.last.tv64, st->lost.last.tv64);
++              t.drop.first_tv64 = min_not_zero(t.drop.first_tv64, 
st->drop.first_tv64);
++              t.drop.last_tv64  = max(t.drop.last_tv64, st->drop.last_tv64);
++              t.lost.first_tv64 = min_not_zero(t.lost.first_tv64, 
st->lost.first_tv64);
++              t.lost.last_tv64  = max(t.lost.last_tv64, st->lost.last_tv64);
+       }
+ 
+       export_stat_st(OTPL_MPSTAT, &t);
+@@ -4781,8 +4781,8 @@ static unsigned int netflow_target(
+                          const void *targinfo
+ # endif
+ #else /* since 2.6.28 */
+-# define if_in  par->in
+-# define if_out par->out
++# define if_in  xt_in(par)
++# define if_out xt_out(par)
+ # if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,35)
+                          const struct xt_target_param *par
+ # else
+@@ -4809,7 +4809,7 @@ static unsigned int netflow_target(
+ #ifdef ENABLE_DIRECTION
+       const int hooknum = par->hooknum;
+ #endif
+-      const int family = par->family;
++      const int family = xt_family(par);
+ #endif
+       struct ipt_netflow_tuple tuple;
+       struct ipt_netflow *nf;
+diff --git a/ipt_NETFLOW.h b/ipt_NETFLOW.h
+index eb00e94..3ee44a8 100644
+--- a/ipt_NETFLOW.h
++++ b/ipt_NETFLOW.h
+@@ -414,7 +414,7 @@ struct netflow_aggr_p {
+ #define NETFLOW_STAT_TS(count)                                                
         \
+       do {                                                                    
 \
+               ktime_t kts = ktime_get_real();                                 
 \
+-              if (!(__get_cpu_var(ipt_netflow_stat)).count.first.tv64)        
 \
++              if (!(__get_cpu_var(ipt_netflow_stat)).count.first_tv64)        
 \
+                       __get_cpu_var(ipt_netflow_stat).count.first = kts;      
 \
+               __get_cpu_var(ipt_netflow_stat).count.last = kts;               
 \
+       } while (0);
+commit 5dec6355f151a5c9fa4393c43388b22d9c720fae
+Author: ABC <[email protected]>
+Date:   Tue Mar 14 21:55:29 2017 +0300
+
+    More compatibility with kernel 4.10.
+    
+    Thanks to cREoz @ gitnub. Resolves #70 once more.
+
+diff --git a/compat.h b/compat.h
+index 47176ef..867e7f2 100644
+--- a/compat.h
++++ b/compat.h
+@@ -623,6 +623,10 @@ static inline const struct net_device *xt_out(const 
struct xt_action_param *par)
+ {
+       return par->out;
+ }
++static inline unsigned int xt_hooknum(const struct xt_action_param *par)
++{
++      return par->hooknum;
++}
+ #endif
+ 
+ #endif /* COMPAT_NETFLOW_H */
+diff --git a/ipt_NETFLOW.c b/ipt_NETFLOW.c
+index 0d1ac55..6d3122e 100644
+--- a/ipt_NETFLOW.c
++++ b/ipt_NETFLOW.c
+@@ -4806,9 +4806,9 @@ static unsigned int netflow_target(
+ #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,28)
+       const int family = target->family;
+ #else
+-#ifdef ENABLE_DIRECTION
+-      const int hooknum = par->hooknum;
+-#endif
++# ifdef ENABLE_DIRECTION
++      const int hooknum = xt_hooknum(par);
++# endif
+       const int family = xt_family(par);
+ #endif
+       struct ipt_netflow_tuple tuple;

diff --git a/net-firewall/ipt_netflow/ipt_netflow-2.2-r1.ebuild 
b/net-firewall/ipt_netflow/ipt_netflow-2.2-r1.ebuild
index 74e5cbc2dae..d7f364065e3 100644
--- a/net-firewall/ipt_netflow/ipt_netflow-2.2-r1.ebuild
+++ b/net-firewall/ipt_netflow/ipt_netflow-2.2-r1.ebuild
@@ -1,4 +1,4 @@
-# Copyright 1999-2016 Gentoo Foundation
+# Copyright 1999-2017 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
 EAPI=6
@@ -53,6 +53,9 @@ src_prepare() {
        # Compatibility with kernel 4.6
        eapply "${FILESDIR}/${P}-linux-4.6.patch"
 
+       # Compatibility with kernel 4.10, bug #617484
+       eapply "${FILESDIR}/${P}-linux-4.10.patch"
+
        eapply_user
 }
 

Reply via email to