[ovs-dev] [PATCH 06/12] ct-dpif: Add timeout policy related utility functions.

Yi-Hung Wei yihung.wei at gmail.com
Thu Jul 25 23:24:08 UTC 2019


These functions will be useful in the following patches.

Signed-off-by: Yi-Hung Wei <yihung.wei at gmail.com>
---
 lib/ct-dpif.c | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 lib/ct-dpif.h |  3 +++
 2 files changed, 56 insertions(+)

diff --git a/lib/ct-dpif.c b/lib/ct-dpif.c
index ae347a9bb46d..1625754e2441 100644
--- a/lib/ct-dpif.c
+++ b/lib/ct-dpif.c
@@ -761,6 +761,59 @@ ct_dpif_format_zone_limits(uint32_t default_limit,
     }
 }
 
+static const char *const ct_dpif_tp_attr_string[] = {
+#define CT_DPIF_TP_TCP_ATTR(ATTR) \
+    [CT_DPIF_TP_ATTR_TCP_##ATTR] = "TCP_"#ATTR,
+    CT_DPIF_TP_TCP_ATTRS
+#undef CT_DPIF_TP_TCP_ATTR
+#define CT_DPIF_TP_UDP_ATTR(ATTR) \
+    [CT_DPIF_TP_ATTR_UDP_##ATTR] = "UDP_"#ATTR,
+    CT_DPIF_TP_UDP_ATTRS
+#undef CT_DPIF_TP_UDP_ATTR
+#define CT_DPIF_TP_ICMP_ATTR(ATTR) \
+    [CT_DPIF_TP_ATTR_ICMP_##ATTR] = "ICMP_"#ATTR,
+    CT_DPIF_TP_ICMP_ATTRS
+#undef CT_DPIF_TP_ICMP_ATTR
+};
+
+static bool
+ct_dpif_set_timeout_policy_attr(struct ct_dpif_timeout_policy *tp,
+                                  uint32_t attr, uint32_t value)
+{
+    if (tp->present & (1 << attr) && tp->attrs[attr] == value) {
+        return false;
+    }
+    tp->attrs[attr] = value;
+    tp->present |= 1 << attr;
+    return true;
+}
+
+/* Sets a timeout value identified by '*name' to 'value'.
+ * Returns true if the attribute is changed */
+bool
+ct_dpif_set_timeout_policy_attr_by_name(struct ct_dpif_timeout_policy *tp,
+                                        const char *name, uint32_t value)
+{
+    uint32_t i;
+
+    for (i = 0; i < CT_DPIF_TP_ATTR_MAX; ++i) {
+        if (!strcasecmp(name, ct_dpif_tp_attr_string[i])) {
+            return ct_dpif_set_timeout_policy_attr(tp, i, value);
+        }
+    }
+    return false;
+}
+
+bool
+ct_dpif_timeout_policy_support_ipproto(uint8_t ipproto)
+{
+    if (ipproto == IPPROTO_TCP || ipproto == IPPROTO_UDP ||
+        ipproto == IPPROTO_ICMP || ipproto == IPPROTO_ICMPV6) {
+        return true;
+    }
+    return false;
+}
+
 int
 ct_dpif_add_timeout_policy(struct dpif *dpif, bool is_default,
                            const struct ct_dpif_timeout_policy *tp)
diff --git a/lib/ct-dpif.h b/lib/ct-dpif.h
index 9dc33bede527..de032cc416ce 100644
--- a/lib/ct-dpif.h
+++ b/lib/ct-dpif.h
@@ -305,6 +305,9 @@ bool ct_dpif_parse_zone_limit_tuple(const char *s, uint16_t *pzone,
                                     uint32_t *plimit, struct ds *);
 void ct_dpif_format_zone_limits(uint32_t default_limit,
                                 const struct ovs_list *, struct ds *);
+bool ct_dpif_set_timeout_policy_attr_by_name(struct ct_dpif_timeout_policy *tp,
+                                             const char *key, uint32_t value);
+bool ct_dpif_timeout_policy_support_ipproto(uint8_t ipproto);
 int ct_dpif_add_timeout_policy(struct dpif *dpif, bool is_default,
                                const struct ct_dpif_timeout_policy *tp);
 int ct_dpif_get_timeout_policy(struct dpif *dpif, bool is_default,
-- 
2.7.4



More information about the dev mailing list