policer: improve policer struct
[vpp.git] / src / vnet / policer / police.h
index 6027845..f780bf6 100644 (file)
@@ -24,6 +24,13 @@ typedef enum
 
 #define NUM_POLICE_RESULTS 3
 
+typedef enum
+{
+  QOS_ACTION_DROP = 0,
+  QOS_ACTION_TRANSMIT,
+  QOS_ACTION_MARK_AND_TRANSMIT
+} __clib_packed qos_action_type_en;
+
 // This is the hardware representation of the policer.
 // To be multithread-safe, the policer is accessed through a spin-lock
 // on the lock field. (For a policer update operation, 24B needs to be
@@ -64,13 +71,13 @@ typedef enum
 
 typedef struct
 {
-
+  CLIB_CACHE_LINE_ALIGN_MARK (cacheline0);
   u32 lock;                    // for exclusive access to the struct
 
   u32 single_rate;             // 1 = single rate policer, 0 = two rate policer
   u32 color_aware;             // for hierarchical policing
   u32 scale;                   // power-of-2 shift amount for lower rates
-  u8 action[3];
+  qos_action_type_en action[3];
   ip_dscp_t mark_dscp[3];
   u8 pad[2];
 
@@ -90,11 +97,12 @@ typedef struct
   u32 thread_index;            // Tie policer to a thread, rather than lock
   u32 pad32;
 
-} policer_read_response_type_st;
+} policer_t;
+
+STATIC_ASSERT_SIZEOF (policer_t, CLIB_CACHE_LINE_BYTES);
 
 static inline policer_result_e
-vnet_police_packet (policer_read_response_type_st * policer,
-                   u32 packet_length,
+vnet_police_packet (policer_t *policer, u32 packet_length,
                    policer_result_e packet_color, u64 time)
 {
   u64 n_periods;