blob: c557016b6d139af91f60333716415e857020b7ad (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
package org.onosproject.net.topology;
import static org.onosproject.net.Link.State.ACTIVE;
import static org.onosproject.net.Link.Type.INDIRECT;
/**
* Link weight for measuring link cost as hop count with indirect links
* being as expensive as traversing the entire graph to assume the worst.
*/
public class HopCountLinkWeight implements LinkWeight {
private final int indirectLinkCost;
/**
* Creates a new hop-count weight.
*/
public HopCountLinkWeight() {
this.indirectLinkCost = Short.MAX_VALUE;
}
/**
* Creates a new hop-count weight with the specified cost of indirect links.
*/
public HopCountLinkWeight(int indirectLinkCost) {
this.indirectLinkCost = indirectLinkCost;
}
@Override
public double weight(TopologyEdge edge) {
// To force preference to use direct paths first, make indirect
// links as expensive as the linear vertex traversal.
return edge.link().state() ==
ACTIVE ? (edge.link().type() ==
INDIRECT ? indirectLinkCost : 1) : -1;
}
}
|