aboutsummaryrefslogtreecommitdiffstats
path: root/framework/src/onos/core/api/src/main/java/org/onosproject/net/topology/HopCountLinkWeight.java
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;
    }
}