#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. */
* 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. */
/** 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).