diff options
author | Ben Pfaff <blp@ovn.org> | 2017-04-18 11:22:05 -0700 |
---|---|---|
committer | Ben Pfaff <blp@ovn.org> | 2017-04-21 08:20:06 -0700 |
commit | 6846e91e6fb0c2da8b4ab6f64257bb259f221b77 (patch) | |
tree | 9b9c8e8962fe2ebca8da46662c427f333e8d1e2c | |
parent | b02e6cf86aa2a01ab0717b390e1090269b2ff3cb (diff) | |
download | openvswitch-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.c | 21 | ||||
-rw-r--r-- | lib/flow.h | 1 | ||||
-rw-r--r-- | ofproto/ofproto-dpif-xlate.c | 18 |
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 |