AC_SUBST(HAVE_NFNL_MSG_TYPE, undef)
fi
+AC_MSG_CHECKING([kernel source for netlink extended ACK])
+if test -f $ksourcedir/include/linux/netlink.h && \
+ $AWK '/^extern void netlink_ack/ {for(i=1; i<=2; i++) {getline; print}}' $ksourcedir/include/linux/netlink.h | $GREP -q 'const struct netlink_ext_ack'; then
+ AC_MSG_RESULT(yes)
+ AC_SUBST(HAVE_NETLINK_EXTENDED_ACK, define)
+else
+ AC_MSG_RESULT(no)
+ AC_SUBST(HAVE_NETLINK_EXTENDED_ACK, undef)
+fi
+
AC_MSG_CHECKING([kernel source for struct net_generic])
if test -f $ksourcedir/include/net/netns/generic.h && \
$GREP -q 'struct net_generic' $ksourcedir/include/net/netns/generic.h; then
#@HAVE_XT_FAMILY@ HAVE_XT_FAMILY
#@HAVE_XT_NET@ HAVE_XT_NET
#@HAVE_NFNL_MSG_TYPE@ HAVE_NFNL_MSG_TYPE
+#@HAVE_NETLINK_EXTENDED_ACK@ HAVE_NETLINK_EXTENDED_ACK
#ifdef HAVE_EXPORT_SYMBOL_GPL_IN_MODULE_H
#include <linux/module.h>
}
#endif
+#ifdef HAVE_NETLINK_EXTENDED_ACK
+#define NETLINK_ACK(in_skb, nlh, err, extack) netlink_ack(in_skb, nlh, err, extack)
+#else
+#define NETLINK_ACK(in_skb, nlh, err, extack) netlink_ack(in_skb, nlh, err)
+#endif
+
#ifdef HAVE_STATE_IN_XT_ACTION_PARAM
#define XAP_STATE(par) (par->state)
#else
* manually :-(
*/
if (nlh->nlmsg_flags & NLM_F_ACK)
- netlink_ack(cb->skb, nlh, ret);
+ NETLINK_ACK(cb->skb, nlh, ret, NULL);
return ret;
}
}