All of lore.kernel.org
 help / color / mirror / Atom feed
From: Neutron Soutmun <neo.neutron@gmail.com>
To: netfilter-devel@vger.kernel.org
Subject: [PATCH] ipset: Backports for the nla_put_net64() API changes
Date: Thu, 23 Jun 2016 17:22:11 +0700	[thread overview]
Message-ID: <20160623102211.GA31272@hydrogen> (raw)

[-- Attachment #1: Type: text/plain, Size: 5303 bytes --]

* Backports the patch "libnl: nla_put_net64():align on a 64-bit area" [1]
  by Nicolas Dichtel <nicolas.dichtel@6wind.com>

* Since the nla_put_net64() API has been changed, therefore, the
  ip_set_compat.h.in should provides the macro IPSET_NLA_PUT_NET64 that
  point to the nla_put_net64() with appropriate number of arguments.

  The build script should distinguish the API changes by detect for
  the existence of nla_put_64bit() function in include/net/netlink.h.
  This function was added in the same patches set and called by
  the nla_put_be64() that called by nla_put_net64() respectively.

[1] https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit?id=e9bbe898cbe89b17ad3993c136aa13d0431cd537

Signed-off-by: Neutron Soutmun <neo.neutron@gmail.com>
---
 configure.ac                                            | 10 ++++++++++
 kernel/include/linux/netfilter/ipset/ip_set_compat.h.in |  7 +++++++
 kernel/include/linux/netfilter/ipset/ip_set_counter.h   | 10 ++++++----
 kernel/include/linux/netfilter/ipset/ip_set_skbinfo.h   |  7 ++++---
 kernel/include/uapi/linux/netfilter/ipset/ip_set.h      |  1 +
 5 files changed, 28 insertions(+), 7 deletions(-)

diff --git a/configure.ac b/configure.ac
index 7156ab8..b73b3cc 100644
--- a/configure.ac
+++ b/configure.ac
@@ -250,6 +250,16 @@ else
 	AC_SUBST(HAVE_NLA_PUT_BE64, undef)
 fi
 
+AC_MSG_CHECKING([kernel source for nla_put_64bit])
+if test -f $ksourcedir/include/net/netlink.h && \
+   $GREP -q 'nla_put_64bit' $ksourcedir/include/net/netlink.h; then
+	AC_MSG_RESULT(yes)
+	AC_SUBST(HAVE_NLA_PUT_64BIT, define)
+else
+	AC_MSG_RESULT(no)
+	AC_SUBST(HAVE_NLA_PUT_64BIT, undef)
+fi
+
 AC_MSG_CHECKING([kernel source for portid in nl_info])
 if test -f $ksourcedir/include/linux/netlink.h && \
    $AWK '/^struct netlink_skb_parms/ {for(i=1; i<=5; i++) {getline; print}}' $ksourcedir/include/linux/netlink.h | $GREP -q 'portid;'; 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 15d0763..fe24255 100644
--- a/kernel/include/linux/netfilter/ipset/ip_set_compat.h.in
+++ b/kernel/include/linux/netfilter/ipset/ip_set_compat.h.in
@@ -10,6 +10,7 @@
 #@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_NLA_PUT_64BIT@ HAVE_NLA_PUT_64BIT
 #@HAVE_NL_INFO_PORTID@ HAVE_NL_INFO_PORTID
 #define HAVE_NETLINK_DUMP_START_ARGS	@HAVE_NETLINK_DUMP_START_ARGS@
 #@HAVE_NS_CAPABLE@ HAVE_NS_CAPABLE
@@ -160,6 +161,12 @@ static inline int nla_put_net64(struct sk_buff *skb, int attrtype, __be64 value)
 }
 #endif
 
+#ifdef HAVE_NLA_PUT_64BIT
+#define IPSET_NLA_PUT_NET64(skb, t, v, pa) nla_put_be64(skb, t, v, pa)
+#else
+#define IPSET_NLA_PUT_NET64(skb, t, v, pa) nla_put_be64(skb, t, v)
+#endif
+
 #ifdef HAVE_NL_INFO_PORTID
 #define NETLINK_PORTID(skb)	NETLINK_CB(skb).portid
 #else
diff --git a/kernel/include/linux/netfilter/ipset/ip_set_counter.h b/kernel/include/linux/netfilter/ipset/ip_set_counter.h
index d61e0e5..f2f1e8f 100644
--- a/kernel/include/linux/netfilter/ipset/ip_set_counter.h
+++ b/kernel/include/linux/netfilter/ipset/ip_set_counter.h
@@ -53,10 +53,12 @@ ip_set_update_counter(struct ip_set_counter *counter,
 static inline bool
 ip_set_put_counter(struct sk_buff *skb, const struct ip_set_counter *counter)
 {
-	return nla_put_net64(skb, IPSET_ATTR_BYTES,
-			     cpu_to_be64(ip_set_get_bytes(counter))) ||
-	       nla_put_net64(skb, IPSET_ATTR_PACKETS,
-			     cpu_to_be64(ip_set_get_packets(counter)));
+	return IPSET_NLA_PUT_NET64(skb, IPSET_ATTR_BYTES,
+				   cpu_to_be64(ip_set_get_bytes(counter)),
+				   IPSET_ATTR_PAD) ||
+	       IPSET_NLA_PUT_NET64(skb, IPSET_ATTR_PACKETS,
+				   cpu_to_be64(ip_set_get_packets(counter)),
+				   IPSET_ATTR_PAD);
 }
 
 static inline void
diff --git a/kernel/include/linux/netfilter/ipset/ip_set_skbinfo.h b/kernel/include/linux/netfilter/ipset/ip_set_skbinfo.h
index b03dd6a..c6df3a1 100644
--- a/kernel/include/linux/netfilter/ipset/ip_set_skbinfo.h
+++ b/kernel/include/linux/netfilter/ipset/ip_set_skbinfo.h
@@ -23,9 +23,10 @@ ip_set_put_skbinfo(struct sk_buff *skb, const struct ip_set_skbinfo *skbinfo)
 {
 	/* Send nonzero parameters only */
 	return ((skbinfo->skbmark || skbinfo->skbmarkmask) &&
-		nla_put_net64(skb, IPSET_ATTR_SKBMARK,
-			      cpu_to_be64((u64)skbinfo->skbmark << 32 |
-					  skbinfo->skbmarkmask))) ||
+		IPSET_NLA_PUT_NET64(skb, IPSET_ATTR_SKBMARK,
+				    cpu_to_be64((u64)skbinfo->skbmark << 32 |
+						skbinfo->skbmarkmask),
+				    IPSET_ATTR_PAD)) ||
 	       (skbinfo->skbprio &&
 		nla_put_net32(skb, IPSET_ATTR_SKBPRIO,
 			      cpu_to_be32(skbinfo->skbprio))) ||
diff --git a/kernel/include/uapi/linux/netfilter/ipset/ip_set.h b/kernel/include/uapi/linux/netfilter/ipset/ip_set.h
index def91b9..4a6776f 100644
--- a/kernel/include/uapi/linux/netfilter/ipset/ip_set.h
+++ b/kernel/include/uapi/linux/netfilter/ipset/ip_set.h
@@ -118,6 +118,7 @@ enum {
 	IPSET_ATTR_SKBMARK,
 	IPSET_ATTR_SKBPRIO,
 	IPSET_ATTR_SKBQUEUE,
+	IPSET_ATTR_PAD,
 	__IPSET_ATTR_ADT_MAX,
 };
 #define IPSET_ATTR_ADT_MAX	(__IPSET_ATTR_ADT_MAX - 1)
-- 
2.8.1


[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 819 bytes --]

             reply	other threads:[~2016-06-23 10:22 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-06-23 10:22 Neutron Soutmun [this message]
2016-06-23 10:37 ` [PATCH] ipset: Backports for the nla_put_net64() API changes Pablo Neira Ayuso
2016-06-23 11:41   ` Neutron Soutmun
2016-06-23 18:04     ` Pablo Neira Ayuso
2016-06-23 22:55       ` Neutron Soutmun
2016-07-01 14:34         ` Pablo Neira Ayuso
2016-07-01 19:19           ` Jozsef Kadlecsik
2016-06-28  8:23 ` Jozsef Kadlecsik

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20160623102211.GA31272@hydrogen \
    --to=neo.neutron@gmail.com \
    --cc=netfilter-devel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.