[ovs-dev] [PATCHv2 03/20] compat: Backport nf_connlabels_{get, put}().
Joe Stringer
joe at ovn.org
Thu Dec 3 07:53:39 UTC 2015
From: Joe Stringer <joestringer at nicira.com>
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 29a90ea1dd8b..02bab71c1861 100644
--- a/datapath/linux/Modules.mk
+++ b/datapath/linux/Modules.mk
@@ -93,6 +93,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