diff mbox series

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

Message ID 1564097054-72663-7-git-send-email-yihung.wei@gmail.com
State Changes Requested
Headers show
Series Support zone-based conntrack timeout policy | expand

Commit Message

Yi-Hung Wei July 25, 2019, 11:24 p.m. UTC
These functions will be useful in the following patches.

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

Comments

William Tu July 26, 2019, 4:04 p.m. UTC | #1
On Thu, Jul 25, 2019 at 04:24:08PM -0700, Yi-Hung Wei wrote:
> These functions will be useful in the following patches.
> 
> Signed-off-by: Yi-Hung Wei <yihung.wei@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)

There is a little mis-aligned above.

Otherwise LGTM
Acked-by: William Tu <u9012063@gmail.com>

> +{
> +    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
> 
> _______________________________________________
> dev mailing list
> dev@openvswitch.org
> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
Yi-Hung Wei July 29, 2019, 7:39 p.m. UTC | #2
On Fri, Jul 26, 2019 at 9:04 AM William Tu <u9012063@gmail.com> wrote:
> > --- a/lib/ct-dpif.c
> > +++ b/lib/ct-dpif.c
> > +static bool
> > +ct_dpif_set_timeout_policy_attr(struct ct_dpif_timeout_policy *tp,
> > +                                  uint32_t attr, uint32_t value)
>
> There is a little mis-aligned above.
>
> Otherwise LGTM
> Acked-by: William Tu <u9012063@gmail.com>

Thanks for review, I will fix the indention issue in v2.




-Yi-Hung
diff mbox series

Patch

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,