Sticky Load-balance
[vpp.git] / src / vnet / dpo / load_balance.h
index dd9589f..3f0d5ac 100644 (file)
@@ -76,6 +76,28 @@ typedef struct load_balance_path_t_ {
     u32 path_weight;
 } load_balance_path_t;
 
+/**
+ * Flags controlling load-balance creation and modification
+ */
+typedef enum load_balance_attr_t_ {
+    LOAD_BALANCE_ATTR_USES_MAP = 0,
+    LOAD_BALANCE_ATTR_STICKY = 1,
+} load_balance_attr_t;
+
+#define LOAD_BALANCE_ATTR_NAMES  {                  \
+    [LOAD_BALANCE_ATTR_USES_MAP] = "uses-map",      \
+    [LOAD_BALANCE_ATTR_STICKY] = "sticky",          \
+}
+
+#define FOR_EACH_LOAD_BALANCE_ATTR(_attr)                       \
+    for (_attr = 0; _attr <= LOAD_BALANCE_ATTR_STICKY; _attr++)
+
+typedef enum load_balance_flags_t_ {
+    LOAD_BALANCE_FLAG_NONE = 0,
+    LOAD_BALANCE_FLAG_USES_MAP = (1 << 0),
+    LOAD_BALANCE_FLAG_STICKY = (1 << 1),
+} __attribute__((packed)) load_balance_flags_t;
+
 /**
  * The FIB DPO provieds;
  *  - load-balancing over the next DPOs in the chain/graph
@@ -105,6 +127,11 @@ typedef struct load_balance_t_ {
      */
     dpo_proto_t lb_proto;
 
+    /**
+     * Flags concenring the LB's creation and modification
+     */
+    load_balance_flags_t lb_flags;
+
     /**
      * Flags from the load-balance's associated fib_entry_t
      */
@@ -158,14 +185,6 @@ typedef enum load_balance_format_flags_t_ {
     LOAD_BALANCE_FORMAT_DETAIL = (1 << 0),
 } load_balance_format_flags_t;
 
-/**
- * Flags controlling load-balance creation and modification
- */
-typedef enum load_balance_flags_t_ {
-    LOAD_BALANCE_FLAG_NONE = 0,
-    LOAD_BALANCE_FLAG_USES_MAP = (1 << 0),
-} load_balance_flags_t;
-
 extern index_t load_balance_create(u32 num_buckets,
                                   dpo_proto_t lb_proto,
                                   flow_hash_config_t fhc);