[ovs-dev] [PATCH v3 12/18] datapath: conntrack NF_NAT_RANGE_PROTO_RANDOM_FULLY compat code.
Jarno Rajahalme
jarno at ovn.org
Sat Jun 18 01:44:25 UTC 2016
Linux kernel 3.13 and older do not have
NF_NAT_RANGE_PROTO_RANDOM_FULLY (unless backported by the
distribution). Silently fall back to NF_NAT_RANGE_PROTO_RANDOM to
maintain OVS API compatibility.
Signed-off-by: Jarno Rajahalme <jarno at ovn.org>
---
datapath/conntrack.c | 12 +++++++++++-
1 file changed, 11 insertions(+), 1 deletion(-)
diff --git a/datapath/conntrack.c b/datapath/conntrack.c
index 40e9843..c476533 100644
--- a/datapath/conntrack.c
+++ b/datapath/conntrack.c
@@ -71,6 +71,7 @@ struct ovs_conntrack_info {
struct nf_conn *ct;
u8 commit : 1;
u8 nat : 3; /* enum ovs_ct_nat */
+ u8 random_fully_compat : 1; /* bool */
u16 family;
struct md_mark mark;
struct md_labels labels;
@@ -1044,7 +1045,12 @@ static int parse_nat(const struct nlattr *attr,
break;
case OVS_NAT_ATTR_PROTO_RANDOM:
+#ifdef NF_NAT_RANGE_PROTO_RANDOM_FULLY
info->range.flags |= NF_NAT_RANGE_PROTO_RANDOM_FULLY;
+#else
+ info->range.flags |= NF_NAT_RANGE_PROTO_RANDOM;
+ info->random_fully_compat = true;
+#endif
break;
default:
@@ -1318,11 +1324,15 @@ static bool ovs_ct_nat_to_attr(const struct ovs_conntrack_info *info,
nla_put_flag(skb, OVS_NAT_ATTR_PERSISTENT))
return false;
if (info->range.flags & NF_NAT_RANGE_PROTO_RANDOM &&
- nla_put_flag(skb, OVS_NAT_ATTR_PROTO_HASH))
+ nla_put_flag(skb, info->random_fully_compat
+ ? OVS_NAT_ATTR_PROTO_RANDOM
+ : OVS_NAT_ATTR_PROTO_HASH))
return false;
+#ifdef NF_NAT_RANGE_PROTO_RANDOM_FULLY
if (info->range.flags & NF_NAT_RANGE_PROTO_RANDOM_FULLY &&
nla_put_flag(skb, OVS_NAT_ATTR_PROTO_RANDOM))
return false;
+#endif
out:
nla_nest_end(skb, start);
--
2.1.4
More information about the dev
mailing list