Lots of changes. In no particular order:
[distributedratelimiting.git] / drl / ratetypes.h
index 59a481a..319d071 100644 (file)
 #include "rate_accounting/simple.h"
 #endif
 
-#include "calendar.h"
+#include "bsd_queue.h"
 #include "config.h"
 #include "drl_state.h"
 #include "common_accounting.h"
 #include "standard.h"
 #include "samplehold.h"
 #include "simple.h"
+#include "multipleinterval.h"
 
 
 /** Represents a DRL entitiy/group. */
@@ -85,6 +86,9 @@ typedef struct identity {
      * flows to grow before incurring losses. */
     int flowstart;
 
+    /** Keeps track of the state of FPS dampening for this identity. */
+    enum dampenings dampen_state;
+
     /* GRD */
 
     /** GRD drop probability information. */
@@ -126,17 +130,47 @@ typedef struct identity {
     /** Function to call when the table should be destroyed. */
     void (*table_destroy_function)(void *);
 
+#ifdef SHADOW_ACCTING
+
+    common_accounting_t shadow_common;
+
+    void *shadow_table;
+
+    double localweight_copy;
+    double last_localweight_copy;
+
+    enum dampenings dampen_state_copy;
+
+#endif
+
     /* Scheduling bookkeeping. */
 
-    /* Pointers to other identities in the scheduling calendar. */
-    TAILQ_ENTRY(identity) calendar;
+    /** Scheduling unit that tells the limiter when to execute the main loop.*/
+    struct ident_action *loop_action;
 
-    /* The number of limiter ticks at which this identity should be scheduled.
-     */
-    uint32_t intervals;
+    /** Scheduling unit that tells the limiter when to communicate.*/
+    struct ident_action *comm_action;
+
+    /** The number of limiter ticks that should pass before this identity should
+     * be scheduled to execute its main estimate/allocate/enforce loop. */
+    uint32_t mainloop_intervals; 
+
+    /** The number of limiter ticks that should pass before this identity should
+     * be scheduled for communication. */
+    uint32_t communication_intervals;
 
 } identity_t;
 
+enum identity_actions { ACTION_MAINLOOP = 1, ACTION_COMMUNICATE = 2 };
+
+typedef struct ident_action {
+    struct identity *ident;
+    enum identity_actions action;
+    int valid;
+
+    TAILQ_ENTRY(ident_action) calendar;
+} identity_action;
+
 /**
  * Represents the bottom most entity in the HTB hierarchy.  For PlanetLab,
  * this corresponds to sliver (identified by Vserver context id, or xid).