[ovs-dev] [PATCH 03/23] compat: Backport nf_connlabels_{get, put}().

Joe Stringer joestringer at nicira.com
Sat Nov 7 19:59:41 UTC 2015


This is a partial backport of Linux commit 86ca02e77408
"netfilter: connlabels: Export setting connlabel length".

Signed-off-by: Joe Stringer <joestringer at nicira.com>
---
 datapath/linux/Modules.mk                          |  1 +
 .../include/net/netfilter/nf_conntrack_labels.h    | 41 ++++++++++++++++++++++
 2 files changed, 42 insertions(+)
 create mode 100644 datapath/linux/compat/include/net/netfilter/nf_conntrack_labels.h

diff --git a/datapath/linux/Modules.mk b/datapath/linux/Modules.mk
index db5af0f7f65f..ac1870fc0fb7 100644
--- a/datapath/linux/Modules.mk
+++ b/datapath/linux/Modules.mk
@@ -94,6 +94,7 @@ openvswitch_headers += \
 	linux/compat/include/net/vxlan.h \
 	linux/compat/include/net/netfilter/nf_conntrack_core.h \
 	linux/compat/include/net/netfilter/nf_conntrack_expect.h \
+	linux/compat/include/net/netfilter/nf_conntrack_labels.h \
 	linux/compat/include/net/netfilter/nf_conntrack_zones.h \
 	linux/compat/include/net/sctp/checksum.h
 EXTRA_DIST += linux/compat/build-aux/export-check-whitelist
diff --git a/datapath/linux/compat/include/net/netfilter/nf_conntrack_labels.h b/datapath/linux/compat/include/net/netfilter/nf_conntrack_labels.h
new file mode 100644
index 000000000000..e49a289c5388
--- /dev/null
+++ b/datapath/linux/compat/include/net/netfilter/nf_conntrack_labels.h
@@ -0,0 +1,41 @@
+#ifndef _NF_CONNTRACK_LABELS_WRAPPER_H
+#define _NF_CONNTRACK_LABELS_WRAPPER_H
+
+#include <linux/kconfig.h>
+#include <linux/version.h>
+#include_next <net/netfilter/nf_conntrack_labels.h>
+
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4,3,0) && \
+    IS_ENABLED(CONFIG_NF_CONNTRACK_LABELS)
+
+#ifndef NF_CT_LABELS_MAX_SIZE
+#define NF_CT_LABELS_MAX_SIZE ((XT_CONNLABEL_MAXBIT + 1) / BITS_PER_BYTE)
+#endif
+
+/* XXX: This doesn't lock others out from doing the same configuration
+ *	simultaneously. */
+static inline int nf_connlabels_get(struct net *net, unsigned int n_bits)
+{
+	size_t words;
+
+	if (n_bits > (NF_CT_LABELS_MAX_SIZE * BITS_PER_BYTE))
+		return -ERANGE;
+
+	words = BITS_TO_LONGS(n_bits);
+
+	net->ct.labels_used++;
+	if (words > net->ct.label_words)
+		net->ct.label_words = words;
+
+	return 0;
+}
+
+static inline void nf_connlabels_put(struct net *net)
+{
+	net->ct.labels_used--;
+	if (net->ct.labels_used == 0)
+		net->ct.label_words = 0;
+}
+
+#endif
+#endif /* _NF_CONNTRACK_LABELS_WRAPPER_H */
-- 
2.1.4




More information about the dev mailing list