INET Framework for OMNeT++/OMNEST
inet::eigrp::EigrpMetricHelper Class Reference

Class for EIGRP metric computation. More...

#include <EigrpMetricHelper.h>

Public Member Functions

 EigrpMetricHelper ()
 
virtual ~EigrpMetricHelper ()
 
EigrpWideMetricPar getParam (EigrpInterface *eigrpIface)
 Sets parameters from interface for metric computation. More...
 
EigrpWideMetricPar adjustParam (const EigrpWideMetricPar &ifParam, const EigrpWideMetricPar &neighParam)
 Adjust parameters of metric by interface parameters. More...
 
uint64_t computeClassicMetric (const EigrpWideMetricPar &par, const EigrpKValues &kValues)
 Computes classic metric. More...
 
uint64_t computeWideMetric (const EigrpWideMetricPar &par, const EigrpKValues &kValues)
 Computes wide metric. More...
 
bool compareParameters (const EigrpWideMetricPar &par1, const EigrpWideMetricPar &par2, EigrpKValues &kValues)
 Compares metric enabled parameters. More...
 
bool isParamMaximal (const EigrpWideMetricPar &par)
 Returns true, if parameters are set to infinite, otherwise false. More...
 

Static Public Attributes

static const uint64_t DELAY_INF = 0xFFFFFFFFFFFF
 
static const uint64_t BANDWIDTH_INF = 0xFFFFFFFFFFFF
 
static const uint64_t METRIC_INF = 0xFFFFFFFFFFFFFF
 

Private Member Functions

unsigned int getMin (unsigned int p1, unsigned int p2)
 Returns smaller of two parameters. More...
 
unsigned int getMax (unsigned int p1, unsigned int p2)
 Returns greater of two parameters. More...
 

Private Attributes

const uint32_t DELAY_PICO
 
const uint32_t BANDWIDTH
 
const uint32_t CLASSIC_SCALE
 
const uint32_t WIDE_SCALE
 

Detailed Description

Class for EIGRP metric computation.

Constructor & Destructor Documentation

◆ EigrpMetricHelper()

inet::eigrp::EigrpMetricHelper::EigrpMetricHelper ( )
25  :
26  DELAY_PICO(1000000), BANDWIDTH(10000000), CLASSIC_SCALE(256), WIDE_SCALE(65536)
27 {
28 }

◆ ~EigrpMetricHelper()

inet::eigrp::EigrpMetricHelper::~EigrpMetricHelper ( )
virtual
31 {
32 }

Member Function Documentation

◆ adjustParam()

EigrpWideMetricPar inet::eigrp::EigrpMetricHelper::adjustParam ( const EigrpWideMetricPar ifParam,
const EigrpWideMetricPar neighParam 
)

Adjust parameters of metric by interface parameters.

49 {
50  EigrpWideMetricPar newMetricPar;
51 
52  newMetricPar.load = getMax(ifParam.load, neighParam.delay);
53  newMetricPar.reliability = getMin(ifParam.reliability, neighParam.reliability);
54  newMetricPar.mtu = getMin(ifParam.mtu, neighParam.mtu);
55  newMetricPar.hopCount = neighParam.hopCount + 1;
56 
57  if (isParamMaximal(neighParam)) {
58  newMetricPar.delay = DELAY_INF;
59  newMetricPar.bandwidth = BANDWIDTH_INF;
60  }
61  else {
62  newMetricPar.delay = ifParam.delay + neighParam.delay;
63  newMetricPar.bandwidth = getMin(ifParam.bandwidth, neighParam.bandwidth);
64  }
65 
66  return newMetricPar;
67 }

Referenced by inet::eigrp::EigrpIpv4Pdm::processIfaceConfigChange(), inet::eigrp::EigrpIpv6Pdm::processIfaceConfigChange(), inet::eigrp::EigrpIpv4Pdm::processInterRoute(), and inet::eigrp::EigrpIpv6Pdm::processInterRoute().

◆ compareParameters()

bool inet::eigrp::EigrpMetricHelper::compareParameters ( const EigrpWideMetricPar par1,
const EigrpWideMetricPar par2,
EigrpKValues kValues 
)

Compares metric enabled parameters.

115 {
116  if (kValues.K1 && par1.bandwidth != par2.bandwidth)
117  return false;
118  if (kValues.K2 && par1.load != par2.load)
119  return false;
120  if (kValues.K3 && par1.delay != par2.delay)
121  return false;
122  if (kValues.K5 && par1.reliability != par2.reliability)
123  return false;
124 
125  return true;
126 }

Referenced by inet::eigrp::EigrpIpv4Pdm::processInterRoute(), and inet::eigrp::EigrpIpv6Pdm::processInterRoute().

◆ computeClassicMetric()

uint64_t inet::eigrp::EigrpMetricHelper::computeClassicMetric ( const EigrpWideMetricPar par,
const EigrpKValues kValues 
)

Computes classic metric.

70 {
71  uint32_t metric;
72  uint32_t classicDelay = 0, classicBw = 0;
73 
74  if (isParamMaximal(par))
75  return METRIC_INF;
76 
77  // Adjust delay and bandwidth
78  if (kValues.K3) { // Note: delay is in pico seconds and must be converted to micro seconds for classic metric
79  classicDelay = par.delay / 10000000;
80  classicDelay = classicDelay * CLASSIC_SCALE;
81  }
82  ASSERT(par.bandwidth > 0);
83 
84  if (kValues.K1)
85  classicBw = BANDWIDTH / par.bandwidth * CLASSIC_SCALE;
86 
87  metric = kValues.K1 * classicBw + kValues.K2 * classicBw / (256 - par.load) + kValues.K3 * classicDelay;
88  if (kValues.K5 != 0)
89  metric = metric * kValues.K5 / (par.reliability + kValues.K4);
90 
91  return metric;
92 }

Referenced by inet::eigrp::EigrpIpv4Pdm::enableInterface(), inet::eigrp::EigrpIpv6Pdm::enableInterface(), inet::eigrp::EigrpIpv4Pdm::processIfaceConfigChange(), inet::eigrp::EigrpIpv6Pdm::processIfaceConfigChange(), inet::eigrp::EigrpIpv4Pdm::processInterRoute(), and inet::eigrp::EigrpIpv6Pdm::processInterRoute().

◆ computeWideMetric()

uint64_t inet::eigrp::EigrpMetricHelper::computeWideMetric ( const EigrpWideMetricPar par,
const EigrpKValues kValues 
)

Computes wide metric.

95 {
96  uint64_t metric, throughput, latency;
97 
98  if (isParamMaximal(par))
99  return METRIC_INF;
100 
101  // TODO compute delay from bandwidth if bandwidth is greater than 1 Gb/s
102  // TODO include also additional parameters associated with K6
103 
104  throughput = (BANDWIDTH * WIDE_SCALE) / par.bandwidth;
105  latency = (par.delay * WIDE_SCALE) / DELAY_PICO;
106 
107  metric = kValues.K1 * throughput + kValues.K2 * kValues.K1 * throughput / (256 - par.load) + kValues.K3 * latency /*+ kValues.K6*extAttr*/;
108  if (kValues.K5 != 0)
109  metric = metric * kValues.K5 / (par.reliability + kValues.K4);
110 
111  return metric;
112 }

◆ getMax()

unsigned int inet::eigrp::EigrpMetricHelper::getMax ( unsigned int  p1,
unsigned int  p2 
)
inlineprivate

Returns greater of two parameters.

44 { return (p1 < p2) ? p2 : p1; }

Referenced by adjustParam().

◆ getMin()

unsigned int inet::eigrp::EigrpMetricHelper::getMin ( unsigned int  p1,
unsigned int  p2 
)
inlineprivate

Returns smaller of two parameters.

40 { return (p1 < p2) ? p1 : p2; }

Referenced by adjustParam().

◆ getParam()

EigrpWideMetricPar inet::eigrp::EigrpMetricHelper::getParam ( EigrpInterface eigrpIface)

Sets parameters from interface for metric computation.

35 {
36  EigrpWideMetricPar newMetricPar;
37 
38  newMetricPar.bandwidth = eigrpIface->getBandwidth();
39  newMetricPar.delay = eigrpIface->getDelay() * DELAY_PICO;
40  newMetricPar.load = eigrpIface->getLoad();
41  newMetricPar.reliability = eigrpIface->getReliability();
42  newMetricPar.hopCount = 0;
43  newMetricPar.mtu = eigrpIface->getMtu();
44 
45  return newMetricPar;
46 }

Referenced by inet::eigrp::EigrpIpv4Pdm::enableInterface(), inet::eigrp::EigrpIpv6Pdm::enableInterface(), inet::eigrp::EigrpIpv4Pdm::processIfaceConfigChange(), inet::eigrp::EigrpIpv6Pdm::processIfaceConfigChange(), inet::eigrp::EigrpIpv4Pdm::processInterRoute(), and inet::eigrp::EigrpIpv6Pdm::processInterRoute().

◆ isParamMaximal()

bool inet::eigrp::EigrpMetricHelper::isParamMaximal ( const EigrpWideMetricPar par)
inline

Member Data Documentation

◆ BANDWIDTH

const uint32_t inet::eigrp::EigrpMetricHelper::BANDWIDTH
private

◆ BANDWIDTH_INF

◆ CLASSIC_SCALE

const uint32_t inet::eigrp::EigrpMetricHelper::CLASSIC_SCALE
private

Referenced by computeClassicMetric().

◆ DELAY_INF

◆ DELAY_PICO

const uint32_t inet::eigrp::EigrpMetricHelper::DELAY_PICO
private

Referenced by computeWideMetric(), and getParam().

◆ METRIC_INF

◆ WIDE_SCALE

const uint32_t inet::eigrp::EigrpMetricHelper::WIDE_SCALE
private

Referenced by computeWideMetric().


The documentation for this class was generated from the following files:
inet::eigrp::EigrpMetricHelper::CLASSIC_SCALE
const uint32_t CLASSIC_SCALE
Definition: EigrpMetricHelper.h:34
inet::eigrp::EigrpMetricHelper::WIDE_SCALE
const uint32_t WIDE_SCALE
Definition: EigrpMetricHelper.h:35
inet::eigrp::EigrpMetricHelper::getMin
unsigned int getMin(unsigned int p1, unsigned int p2)
Returns smaller of two parameters.
Definition: EigrpMetricHelper.h:40
inet::eigrp::EigrpMetricHelper::isParamMaximal
bool isParamMaximal(const EigrpWideMetricPar &par)
Returns true, if parameters are set to infinite, otherwise false.
Definition: EigrpMetricHelper.h:78
if
if(cwndVector) cwndVector -> record(state->snd_cwnd)
inet::eigrp::EigrpMetricHelper::BANDWIDTH_INF
static const uint64_t BANDWIDTH_INF
Definition: EigrpMetricHelper.h:49
inet::eigrp::EigrpMetricHelper::getMax
unsigned int getMax(unsigned int p1, unsigned int p2)
Returns greater of two parameters.
Definition: EigrpMetricHelper.h:44
inet::eigrp::EigrpMetricHelper::METRIC_INF
static const uint64_t METRIC_INF
Definition: EigrpMetricHelper.h:50
inet::eigrp::EigrpMetricHelper::BANDWIDTH
const uint32_t BANDWIDTH
Definition: EigrpMetricHelper.h:33
inet::eigrp::EigrpMetricHelper::DELAY_INF
static const uint64_t DELAY_INF
Definition: EigrpMetricHelper.h:48
inet::eigrp::EigrpMetricHelper::DELAY_PICO
const uint32_t DELAY_PICO
Definition: EigrpMetricHelper.h:32