From 90e279db0cf55aeec710dbc5ae610f66a9ba3f70 Mon Sep 17 00:00:00 2001 From: Jozsef Kadlecsik Date: Mon, 10 Nov 2014 19:20:29 +0100 Subject: Add more compatibility checkings to support older kernel releases --- configure.ac | 29 +++++++++++++++++++--- .../linux/netfilter/ipset/ip_set_compat.h.in | 4 ++- kernel/net/netfilter/xt_set.c | 5 +++- 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 -- cgit v1.2.3