[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