ip: reassembly - fixing stepping index in a better way 78/36178/3
authorVijayabhaskar Katamreddy <vkatamre@cisco.com>
Thu, 19 May 2022 17:07:22 +0000 (17:07 +0000)
committerOle Tr�an <otroan@employees.org>
Mon, 23 May 2022 09:40:18 +0000 (09:40 +0000)
Type: fix

pool_is_free_index() check is performed only for the first element

Signed-off-by: Vijayabhaskar Katamreddy <vkatamre@cisco.com>
Change-Id: Icadc715a9b54761ec69805a134a69a262137536d

src/vnet/ip/reass/ip4_full_reass.c
src/vppinfra/pool.h

index 1ac2261..becfc46 100644 (file)
@@ -1724,14 +1724,14 @@ ip4_full_reass_walk_expired (vlib_main_t *vm, vlib_node_runtime_t *node,
              rt->last_id = end;
            }
 
-         pool_foreach_stepping_index (
-           index, beg, end, rt->pool, ({
-             reass = pool_elt_at_index (rt->pool, index);
-             if (now > reass->last_heard + rm->timeout)
-               {
-                 vec_add1 (pool_indexes_to_free, index);
-               }
-           }));
+         pool_foreach_stepping_index (index, beg, end, rt->pool)
+         {
+           reass = pool_elt_at_index (rt->pool, index);
+           if (now > reass->last_heard + rm->timeout)
+             {
+               vec_add1 (pool_indexes_to_free, index);
+             }
+         }
 
          if (vec_len (pool_indexes_to_free))
            vlib_node_increment_counter (vm, node->node_index,
index dd581ef..ef81609 100644 (file)
@@ -561,16 +561,11 @@ do {                                                                      \
         i = pool_get_next_index (v, i))
 
 /* Iterate pool by index from s to e */
-#define pool_foreach_stepping_index(i, s, e, v, body)                         \
-  for ((i) = (s); (i) < (e); (i) = pool_get_next_index (v, i))                \
-    {                                                                         \
-      if (!pool_is_free_index ((v), (i)))                                     \
-       do                                                                    \
-         {                                                                   \
-           body;                                                             \
-         }                                                                   \
-       while (0);                                                            \
-    }
+#define pool_foreach_stepping_index(i, s, e, v)                               \
+  for ((i) =                                                                  \
+        (pool_is_free_index ((v), (s)) ? pool_get_next_index ((v), (s)) :    \
+                                               (s));                               \
+       (i) < (e); (i) = pool_get_next_index ((v), (i)))
 
 /**
  * @brief Remove all elements from a pool in a safe way