summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJozsef Kadlecsik <kadlec@blackhole.kfki.hu>2014-11-10 19:20:29 +0100
committerJozsef Kadlecsik <kadlec@blackhole.kfki.hu>2014-11-18 07:55:52 +0100
commit90e279db0cf55aeec710dbc5ae610f66a9ba3f70 (patch)
treea2dd960b03b992637ff1979b8d83171d07d15654
parent325a04f462745611abfb6f63fa981f351df9b677 (diff)
Add more compatibility checkings to support older kernel releases
-rw-r--r--configure.ac29
-rw-r--r--kernel/include/linux/netfilter/ipset/ip_set_compat.h.in4
-rw-r--r--kernel/net/netfilter/xt_set.c5
3 files changed, 32 insertions, 6 deletions
diff --git a/configure.ac b/configure.ac
index 8e5c270..985d592 100644
--- a/configure.ac
+++ b/configure.ac
@@ -200,6 +200,16 @@ else
AC_SUBST(HAVE_ETHER_ADDR_EQUAL, undef)
fi
+AC_MSG_CHECKING([kernel source for nla_put_be16])
+if test -f $ksourcedir/include/net/netlink.h && \
+ $GREP -q 'nla_put_be16' $ksourcedir/include/net/netlink.h; then
+ AC_MSG_RESULT(yes)
+ AC_SUBST(HAVE_NLA_PUT_BE16, define)
+else
+ AC_MSG_RESULT(no)
+ AC_SUBST(HAVE_NLA_PUT_BE16, undef)
+fi
+
AC_MSG_CHECKING([kernel source for nla_put_be64])
if test -f $ksourcedir/include/net/netlink.h && \
$GREP -q 'nla_put_be64' $ksourcedir/include/net/netlink.h; then
@@ -274,8 +284,8 @@ else
fi
AC_MSG_CHECKING([kernel source for bool checkentry function prototype])
-if test -f $ksourcedir/net/netfilter/xt_state.c && \
- $GREP -q 'bool state_mt_check' $ksourcedir/net/netfilter/xt_state.c; then
+if test -f $ksourcedir/include/linux/netfilter/x_tables.h && \
+ $GREP -q 'bool .\*checkentry.' $ksourcedir/include/linux/netfilter/x_tables.h; then
AC_MSG_RESULT(yes)
AC_SUBST(HAVE_CHECKENTRY_BOOL, define)
else
@@ -284,8 +294,8 @@ else
fi
AC_MSG_CHECKING([kernel source for old struct xt_target_param])
-if test -f $ksourcedir/net/netfilter/xt_TCPMSS.c && \
- $GREP -q 'const struct xt_target_param' $ksourcedir/net/netfilter/xt_TCPMSS.c; then
+if test -f $ksourcedir/include/linux/netfilter/x_tables.h && \
+ $GREP -q '^struct xt_target_param ' $ksourcedir/include/linux/netfilter/x_tables.h; then
AC_MSG_RESULT(yes)
AC_SUBST(HAVE_XT_TARGET_PARAM, define)
else
@@ -333,6 +343,17 @@ else
AC_SUBST(HAVE_KVFREE, undef)
fi
+AC_MSG_CHECKING([kernel source for struct net in struct xt_mtchk_param])
+if test -f $ksourcedir/include/linux/netfilter/x_tables.h && \
+ $AWK '/^struct xt_mtchk_param / {for(i=1; i<=5; i++) {getline; print}}' $ksourcedir/include/linux/netfilter/x_tables.h | \
+ $GREP -q 'struct net '; then
+ AC_MSG_RESULT(yes)
+ AC_SUBST(HAVE_XT_MTCHK_PARAM_STRUCT_NET, define)
+else
+ AC_MSG_RESULT(no)
+ AC_SUBST(HAVE_XT_MTCHK_PARAM_STRUCT_NET, undef)
+fi
+
AC_MSG_CHECKING([kernel source for struct net in the change function of tcf_ematch_ops])
if test -f $ksourcedir/include/net/pkt_cls.h && \
$AWK '/^struct tcf_ematch_ops / {for(i=1; i<=5; i++) {getline; print}}' $ksourcedir/include/net/pkt_cls.h | \
diff --git a/kernel/include/linux/netfilter/ipset/ip_set_compat.h.in b/kernel/include/linux/netfilter/ipset/ip_set_compat.h.in
index 9809e2a..862504b 100644
--- a/kernel/include/linux/netfilter/ipset/ip_set_compat.h.in
+++ b/kernel/include/linux/netfilter/ipset/ip_set_compat.h.in
@@ -23,6 +23,7 @@
#@HAVE_STRUCT_XT_ACTION_PARAM@ HAVE_STRUCT_XT_ACTION_PARAM
#@HAVE_VZALLOC@ HAVE_VZALLOC
#@HAVE_ETHER_ADDR_EQUAL@ HAVE_ETHER_ADDR_EQUAL
+#@HAVE_NLA_PUT_BE16@ HAVE_NLA_PUT_BE16
#@HAVE_NLA_PUT_BE64@ HAVE_NLA_PUT_BE64
#@HAVE_NL_INFO_PORTID@ HAVE_NL_INFO_PORTID
#define HAVE_NETLINK_DUMP_START_ARGS @HAVE_NETLINK_DUMP_START_ARGS@
@@ -36,6 +37,7 @@
#@HAVE_USER_NS_IN_STRUCT_NET@ HAVE_USER_NS_IN_STRUCT_NET
#@HAVE_RBTREE_POSTORDER_FOR_EACH_ENTRY_SAFE@ HAVE_RBTREE_POSTORDER_FOR_EACH_ENTRY_SAFE
#@HAVE_KVFREE@ HAVE_KVFREE
+#@HAVE_XT_MTCHK_PARAM_STRUCT_NET@ HAVE_XT_MTCHK_PARAM_STRUCT_NET
#@HAVE_TCF_EMATCH_OPS_CHANGE_ARG_NET@ HAVE_TCF_EMATCH_OPS_CHANGE_ARG_NET
#@HAVE_TCF_EMATCH_STRUCT_NET@ HAVE_TCF_EMATCH_STRUCT_NET
@@ -128,7 +130,7 @@ static inline void kvfree(const void *addr)
}
#endif
-#ifdef NLA_PUT_NET16
+#ifndef HAVE_NLA_PUT_BE16
static inline int nla_put_be16(struct sk_buff *skb, int attrtype, __be16 value)
{
return nla_put(skb, attrtype, sizeof(__be16), &value);
diff --git a/kernel/net/netfilter/xt_set.c b/kernel/net/netfilter/xt_set.c
index 7be5c34..39eee43 100644
--- a/kernel/net/netfilter/xt_set.c
+++ b/kernel/net/netfilter/xt_set.c
@@ -33,13 +33,16 @@ MODULE_ALIAS("ip6t_SET");
#define CHECK_FAIL(err) 0
#define CONST const
#define FTYPE bool
-#define XT_PAR_NET(par) NULL
#else /* LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35) */
#define CHECK_OK 0
#define CHECK_FAIL(err) (err)
#define CONST
#define FTYPE int
+#endif
+#ifdef HAVE_XT_MTCHK_PARAM_STRUCT_NET
#define XT_PAR_NET(par) (par)->net
+#else
+#define XT_PAR_NET(par) NULL
#endif
static inline int