From ad62744cab5be7751fb56d2476b8427fc9938fe2 Mon Sep 17 00:00:00 2001 From: Jozsef Kadlecsik Date: Mon, 11 Sep 2017 20:30:21 +0200 Subject: Backport patch netlink: extended ACK reporting --- configure.ac | 10 ++++++++++ kernel/include/linux/netfilter/ipset/ip_set_compat.h.in | 7 +++++++ kernel/net/netfilter/ipset/ip_set_core.c | 2 +- 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index 6482670..2c6354f 100644 --- a/configure.ac +++ b/configure.ac @@ -549,6 +549,16 @@ else 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 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 002e3db..fd1696b 100644 --- a/kernel/include/linux/netfilter/ipset/ip_set_compat.h.in +++ b/kernel/include/linux/netfilter/ipset/ip_set_compat.h.in @@ -39,6 +39,7 @@ #@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 @@ -304,6 +305,12 @@ static inline u16 nfnl_msg_type(u8 subsys, u8 msg_type) } #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 diff --git a/kernel/net/netfilter/ipset/ip_set_core.c b/kernel/net/netfilter/ipset/ip_set_core.c index fbb8df1..d7ef329 100644 --- a/kernel/net/netfilter/ipset/ip_set_core.c +++ b/kernel/net/netfilter/ipset/ip_set_core.c @@ -1317,7 +1317,7 @@ ip_set_dump_start(struct sk_buff *skb, struct netlink_callback *cb) * manually :-( */ if (nlh->nlmsg_flags & NLM_F_ACK) - netlink_ack(cb->skb, nlh, ret); + NETLINK_ACK(cb->skb, nlh, ret, NULL); return ret; } } -- cgit v1.2.3