cnat: Add maglev support
[vpp.git] / src / plugins / cnat / cnat_translation.h
index 8bec739..af0b948 100644 (file)
@@ -28,6 +28,7 @@ extern vlib_combined_counter_main_t cnat_translation_counters;
 typedef enum cnat_trk_flag_t_
 {
   CNAT_TRK_ACTIVE = (1 << 0),
+  CNAT_TRK_FLAG_NO_NAT = (1 << 1),
 } cnat_trk_flag_t;
 
 /**
@@ -80,6 +81,12 @@ typedef enum
   CNAT_ADDR_N_RESOLUTIONS,
 } cnat_addr_resol_type_t;
 
+typedef enum __attribute__ ((__packed__))
+{
+  CNAT_LB_DEFAULT,
+  CNAT_LB_MAGLEV,
+} cnat_lb_type_t;
+
 /**
  * Entry used to account for a translation's backend
  * waiting for address resolution
@@ -159,6 +166,16 @@ typedef struct cnat_translation_t_
    * Translation flags
    */
   u8 flags;
+
+  /**
+   * Type of load balancing
+   */
+  cnat_lb_type_t lb_type;
+
+  union
+  {
+    u32 *lb_maglev;
+  };
 } cnat_translation_t;
 
 extern cnat_translation_t *cnat_translation_pool;
@@ -174,10 +191,10 @@ extern u8 *format_cnat_translation (u8 * s, va_list * args);
  *
  * @return the ID of the translation. used to delete and gather stats
  */
-extern u32 cnat_translation_update (cnat_endpoint_t * vip,
+extern u32 cnat_translation_update (cnat_endpoint_t *vip,
                                    ip_protocol_t ip_proto,
-                                   cnat_endpoint_tuple_t *
-                                   backends, u8 flags);
+                                   cnat_endpoint_tuple_t *backends, u8 flags,
+                                   cnat_lb_type_t lb_type);
 
 /**
  * Delete a translation