summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Pfaff <blp@ovn.org>2017-04-18 11:22:05 -0700
committerBen Pfaff <blp@ovn.org>2017-04-21 08:20:06 -0700
commit6846e91e6fb0c2da8b4ab6f64257bb259f221b77 (patch)
tree9b9c8e8962fe2ebca8da46662c427f333e8d1e2c
parentb02e6cf86aa2a01ab0717b390e1090269b2ff3cb (diff)
downloadopenvswitch-6846e91e6fb0c2da8b4ab6f64257bb259f221b77.tar.gz
flow: New function flow_clear_conntrack().
This will have a new user in an upcoming commit. Signed-off-by: Ben Pfaff <blp@ovn.org> Acked-by: Miguel Angel Ajo <majopela@redhat.com>
-rw-r--r--lib/flow.c21
-rw-r--r--lib/flow.h1
-rw-r--r--ofproto/ofproto-dpif-xlate.c18
3 files changed, 23 insertions, 17 deletions
diff --git a/lib/flow.c b/lib/flow.c
index 7552cd72a..2ba51214e 100644
--- a/lib/flow.c
+++ b/lib/flow.c
@@ -1024,6 +1024,27 @@ ct_state_from_string(const char *s)
return 0;
}
+/* Clears the fields in 'flow' associated with connection tracking. */
+void
+flow_clear_conntrack(struct flow *flow)
+{
+ flow->ct_state = 0;
+ flow->ct_zone = 0;
+ flow->ct_mark = 0;
+ flow->ct_label = OVS_U128_ZERO;
+
+ flow->ct_nw_proto = 0;
+ flow->ct_tp_src = 0;
+ flow->ct_tp_dst = 0;
+ if (flow->dl_type == htons(ETH_TYPE_IP)) {
+ flow->ct_nw_src = 0;
+ flow->ct_nw_dst = 0;
+ } else if (flow->dl_type == htons(ETH_TYPE_IPV6)) {
+ memset(&flow->ct_ipv6_src, 0, sizeof flow->ct_ipv6_src);
+ memset(&flow->ct_ipv6_dst, 0, sizeof flow->ct_ipv6_dst);
+ }
+}
+
char *
flow_to_string(const struct flow *flow)
{
diff --git a/lib/flow.h b/lib/flow.h
index 9d4ae49cc..2957108a6 100644
--- a/lib/flow.h
+++ b/lib/flow.h
@@ -74,6 +74,7 @@ void flow_get_metadata(const struct flow *, struct match *flow_metadata);
const char *ct_state_to_string(uint32_t state);
uint32_t ct_state_from_string(const char *);
+void flow_clear_conntrack(struct flow *);
char *flow_to_string(const struct flow *);
void format_flags(struct ds *ds, const char *(*bit_to_string)(uint32_t),
diff --git a/ofproto/ofproto-dpif-xlate.c b/ofproto/ofproto-dpif-xlate.c
index 238aae41b..64452ed20 100644
--- a/ofproto/ofproto-dpif-xlate.c
+++ b/ofproto/ofproto-dpif-xlate.c
@@ -3216,23 +3216,7 @@ static void
clear_conntrack(struct xlate_ctx *ctx)
{
ctx->conntracked = false;
-
- struct flow *flow = &ctx->xin->flow;
- flow->ct_state = 0;
- flow->ct_zone = 0;
- flow->ct_mark = 0;
- flow->ct_label = OVS_U128_ZERO;
-
- flow->ct_nw_proto = 0;
- flow->ct_tp_src = 0;
- flow->ct_tp_dst = 0;
- if (flow->dl_type == htons(ETH_TYPE_IP)) {
- flow->ct_nw_src = 0;
- flow->ct_nw_dst = 0;
- } if (flow->dl_type == htons(ETH_TYPE_IPV6)) {
- memset(&flow->ct_ipv6_src, 0, sizeof flow->ct_ipv6_src);
- memset(&flow->ct_ipv6_dst, 0, sizeof flow->ct_ipv6_dst);
- }
+ flow_clear_conntrack(&ctx->xin->flow);
}
static bool