Flow statistics telling how much flow should be sent along a link. More...
#include <station_base.h>
Public Types | |
typedef std::map< uint32, StationID > | SharesMap |
Public Member Functions | |
FlowStat (StationID st, uint flow) | |
void | AddShare (StationID st, uint flow) |
Add some flow. | |
uint | GetShare (StationID st) const |
Get flow for a station. | |
void | EraseShare (StationID st) |
Erase shares for specified station. | |
const SharesMap * | GetShares () const |
StationID | GetVia () const |
Get a station a package can be routed to. | |
StationID | GetVia (StationID excluded) const |
Get a station a package can be routed to, but exclude the given one. | |
Private Attributes | |
SharesMap | shares |
Shares of flow to be sent via specified station (or consumed locally). |
Flow statistics telling how much flow should be sent along a link.
This is done by creating "flow shares" and using std::map's upper_bound() method to look them up with a random number. A flow share is the difference between a key in a map and the previous key. So one key in the map doesn't actually mean anything by itself.
Definition at line 170 of file station_base.h.
void FlowStat::AddShare | ( | StationID | st, | |
uint | flow | |||
) | [inline] |
Add some flow.
st | Remote station. | |
flow | Amount of flow to be added. |
Definition at line 187 of file station_base.h.
References shares.
Referenced by Node::ExportFlows().
void FlowStat::EraseShare | ( | StationID | st | ) |
Erase shares for specified station.
st | Next Hop to be removed. |
Definition at line 4009 of file station_cmd.cpp.
References shares.
Referenced by DeleteStaleFlows().
uint FlowStat::GetShare | ( | StationID | st | ) | const |
Get flow for a station.
st | Station to get flow for. |
Definition at line 3966 of file station_cmd.cpp.
References shares.
StationID FlowStat::GetVia | ( | StationID | excluded | ) | const |
Get a station a package can be routed to, but exclude the given one.
excluded | StationID not to be selected. |
Definition at line 3984 of file station_cmd.cpp.
StationID FlowStat::GetVia | ( | ) | const [inline] |
Get a station a package can be routed to.
This done by drawing a random number between 0 and sum_shares and then looking that up in the map with lower_bound. So each share gets selected with a probability dependent on its flow.
Definition at line 206 of file station_base.h.
References shares.