X-Git-Url: http://git.onelab.eu/?p=distributedratelimiting.git;a=blobdiff_plain;f=drl%2Fratetypes.h;h=319d0714cfd0880ea98a135e41beaaa46c7dff0e;hp=59a481ab6abb6d13bbe501975540824d2aa9eeac;hb=f83340496f632165030cc92cd98408a87082f6b1;hpb=74f52acf84cbf11faab8aa53e069464063ce11b9 diff --git a/drl/ratetypes.h b/drl/ratetypes.h index 59a481a..319d071 100644 --- a/drl/ratetypes.h +++ b/drl/ratetypes.h @@ -17,13 +17,14 @@ #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).