| /* |
| * Copyright 2015-present Open Networking Laboratory |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| 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. |
| * |
| * @param indirectLinkCost indirect link cost |
| */ |
| 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; |
| } |
| } |
| |