classify: increase metadata from 16- to 32-bits 38/37738/3
authorBenoît Ganne <bganne@cisco.com>
Thu, 1 Dec 2022 14:58:36 +0000 (15:58 +0100)
committerNeale Ranns <neale@graphiant.com>
Wed, 7 Dec 2022 03:02:46 +0000 (03:02 +0000)
The metadata in classifier entries is used to index a fib or a dpo in
the acl nodes which can exceeds UINT16_MAX in large configurations.
To maintain entries size and alignment, decrease next_index from 32- to
16-bits: next_index should not exceed 16-bits in VPP, as it is already
shown by vlib_buffer_enqueue_to_next() or dpo_id_t.dpoi_next_node.

Type: fix

Change-Id: I4fd1b3cd495319420044c219036b2d2ea952270a
Signed-off-by: Benoît Ganne <bganne@cisco.com>
src/vnet/classify/vnet_classify.c
src/vnet/classify/vnet_classify.h

index 8c3b290..c610c46 100644 (file)
@@ -2785,9 +2785,9 @@ unformat_classify_match (unformat_input_t * input, va_list * args)
 
 int
 vnet_classify_add_del_session (vnet_classify_main_t *cm, u32 table_index,
-                              const u8 *match, u32 hit_next_index,
+                              const u8 *match, u16 hit_next_index,
                               u32 opaque_index, i32 advance, u8 action,
-                              u16 metadata, int is_add)
+                              u32 metadata, int is_add)
 {
   vnet_classify_table_t *t;
   vnet_classify_entry_5_t _max_e __attribute__ ((aligned (16)));
index 143833d..768593c 100644 (file)
@@ -89,15 +89,17 @@ typedef struct _vnet_classify_entry
   /* last heard time */
   f64 last_heard;
 
+  u32 metadata;
+
+  /* Graph node next index */
+  u16 next_index;
+
+  vnet_classify_action_t action;
+
   /* Really only need 1 bit */
   u8 flags;
 #define VNET_CLASSIFY_ENTRY_FREE       (1<<0)
 
-  vnet_classify_action_t action;
-  u16 metadata;
-  /* Graph node next index */
-  u32 next_index;
-
   /* Must be aligned to a 16-octet boundary */
   u32x4 key[0];
 } vnet_classify_entry_t;
@@ -586,9 +588,9 @@ vnet_classify_table_t *vnet_classify_new_table (vnet_classify_main_t *cm,
                                                u32 match_n_vectors);
 
 int vnet_classify_add_del_session (vnet_classify_main_t *cm, u32 table_index,
-                                  const u8 *match, u32 hit_next_index,
+                                  const u8 *match, u16 hit_next_index,
                                   u32 opaque_index, i32 advance, u8 action,
-                                  u16 metadata, int is_add);
+                                  u32 metadata, int is_add);
 
 int vnet_classify_add_del_table (vnet_classify_main_t *cm, const u8 *mask,
                                 u32 nbuckets, u32 memory_size, u32 skip,