From: Joe Stringer <joestrin...@nicira.com> This is a partial backport of Linux commit 86ca02e77408 "netfilter: connlabels: Export setting connlabel length".
Signed-off-by: Joe Stringer <joestrin...@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 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev