diff options
Diffstat (limited to 'framework/src/onos/apps/iptopology-api/src/main/java/org/onosproject/iptopology/api/LinkTed.java')
-rw-r--r-- | framework/src/onos/apps/iptopology-api/src/main/java/org/onosproject/iptopology/api/LinkTed.java | 349 |
1 files changed, 349 insertions, 0 deletions
diff --git a/framework/src/onos/apps/iptopology-api/src/main/java/org/onosproject/iptopology/api/LinkTed.java b/framework/src/onos/apps/iptopology-api/src/main/java/org/onosproject/iptopology/api/LinkTed.java new file mode 100644 index 00000000..3a686034 --- /dev/null +++ b/framework/src/onos/apps/iptopology-api/src/main/java/org/onosproject/iptopology/api/LinkTed.java @@ -0,0 +1,349 @@ +/* + * Copyright 2015 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.iptopology.api; + +import static com.google.common.base.MoreObjects.toStringHelper; + +import java.util.Iterator; +import java.util.List; +import java.util.Objects; + +import org.onlab.packet.Ip4Address; +import org.onlab.packet.Ip6Address; +import org.onlab.util.Bandwidth; + +/** + * Represents Link Traffic engineering parameters. + */ +public class LinkTed { + private final Bandwidth maximumLink; + private final Bandwidth maxReserved; + private final List<Bandwidth> maxUnResBandwidth; + private final Metric teMetric; + private final Metric igpMetric; + private final List<Ip4Address> ipv4LocRouterId; + private final List<Ip6Address> ipv6LocRouterId; + private final List<Ip4Address> ipv4RemRouterId; + private final List<Ip6Address> ipv6RemRouterId; + private final Color color; + private final Signalling signalType; + private final List<Srlg> srlgGroup; + private final ProtectionType protectType; + + /** + * Constructor to initialize its parameter. + * + * @param maximumLink maximum bandwidth can be used + * @param maxReserved max bandwidth that can be reserved + * @param maxUnResBandwidth amount of bandwidth reservable + * @param teMetric Traffic engineering metric + * @param igpMetric IGP metric + * @param color information on administrative group assigned to the interface + * @param signalType MPLS signaling protocols + * @param srlgGroup Shared Risk Link Group information + * @param protectType protection capabilities of the link + * @param ipv4LocRouterId IPv4 router-Id of local node + * @param ipv6LocRouterId IPv6 router-Id of local node + * @param ipv4RemRouterId IPv4 router-Id of remote node + * @param ipv6RemRouterId IPv6 router-Id of remote node + */ + public LinkTed(Bandwidth maximumLink, Bandwidth maxReserved, List<Bandwidth> maxUnResBandwidth, + Metric teMetric, Metric igpMetric, Color color, Signalling signalType, List<Srlg> srlgGroup, + ProtectionType protectType, List<Ip4Address> ipv4LocRouterId, List<Ip6Address> ipv6LocRouterId, + List<Ip4Address> ipv4RemRouterId, List<Ip6Address> ipv6RemRouterId) { + this.maximumLink = maximumLink; + this.maxReserved = maxReserved; + this.maxUnResBandwidth = maxUnResBandwidth; + this.teMetric = teMetric; + this.igpMetric = igpMetric; + this.color = color; + this.signalType = signalType; + this.srlgGroup = srlgGroup; + this.protectType = protectType; + this.ipv4LocRouterId = ipv4LocRouterId; + this.ipv6LocRouterId = ipv6LocRouterId; + this.ipv4RemRouterId = ipv4RemRouterId; + this.ipv6RemRouterId = ipv6RemRouterId; + } + + /** + * Provides maximum bandwidth can be used on the link. + * + * @return maximum bandwidth + */ + public Bandwidth maximumLink() { + return maximumLink; + } + + /** + * Amount of bandwidth reservable on the link. + * + * @return unreserved bandwidth + */ + public List<Bandwidth> maxUnResBandwidth() { + return maxUnResBandwidth; + } + + /** + * Provides max bandwidth that can be reserved on the link. + * + * @return max bandwidth reserved + */ + public Bandwidth maxReserved() { + return maxReserved; + } + + /** + * Provides Traffic engineering metric for the link. + * + * @return Traffic engineering metric + */ + public Metric teMetric() { + return teMetric; + } + + /** + * Provides IGP metric for the link. + * + * @return IGP metric + */ + public Metric igpMetric() { + return igpMetric; + } + + /** + * Provides protection capabilities of the link. + * + * @return link protection type + */ + public ProtectionType protectType() { + return protectType; + } + + /** + * Provides Shared Risk Link Group information. + * + * @return Shared Risk Link Group value + */ + public List<Srlg> srlgGroup() { + return srlgGroup; + } + + /** + * Provides which MPLS signaling protocols are enabled. + * + * @return signal type + */ + public Signalling signalType() { + return signalType; + } + + /** + * Provides information on administrative group assigned to the interface. + * + * @return 4-octect bit mask assigned by network administrator + */ + public Color color() { + return color; + } + + /** + * Provides IPv4 router-Id of local node. + * + * @return IPv4 router-Id of local node + */ + public List<Ip4Address> ipv4LocRouterId() { + return ipv4LocRouterId; + } + + /** + * Provides IPv6 router-Id of local node. + * + * @return IPv6 router-Id of local node + */ + public List<Ip6Address> ipv6LocRouterId() { + return ipv6LocRouterId; + } + + /** + * Provides IPv4 router-Id of remote node. + * + * @return IPv4 router-Id of remote node + */ + public List<Ip4Address> ipv4RemRouterId() { + return ipv4RemRouterId; + } + + /** + * Provides IPv6 router-Id of remote node. + * + * @return IPv6 router-Id of remote node + */ + public List<Ip6Address> ipv6RemRouterId() { + return ipv6RemRouterId; + } + + @Override + public int hashCode() { + return Objects.hash(maximumLink, maxReserved, maxUnResBandwidth, teMetric, igpMetric, + ipv4LocRouterId, ipv6LocRouterId, ipv4RemRouterId, ipv6RemRouterId, + color, signalType, srlgGroup, protectType); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + + if (obj instanceof LinkTed) { + int countCommonBandwidth = 0; + int countOtherCommonBandwidth = 0; + int countOther4LocRouterId = 0; + int countCommon4LocRouterId = 0; + int countOther6RemRouterId = 0; + int countCommon6RemRouterId = 0; + int countOther4RemRouterId = 0; + int countCommon4RemRouterId = 0; + int countCommon6LocRouterId = 0; + int countOther6LocRouterId = 0; + int countCommonSrlg = 0; + int countOtherSrlg = 0; + boolean isCommonBandwidth = true; + boolean isCommonIp4Loc = true; + boolean isCommonIp4Rem = true; + boolean isCommonIp6Loc = true; + boolean isCommonIp6Rem = true; + boolean isCommonSrlg = true; + LinkTed other = (LinkTed) obj; + Iterator<Bandwidth> objListIterator = other.maxUnResBandwidth.iterator(); + countOtherCommonBandwidth = other.maxUnResBandwidth.size(); + countCommonBandwidth = maxUnResBandwidth.size(); + + Iterator<Ip4Address> ipv4local = other.ipv4LocRouterId.iterator(); + countOther4LocRouterId = other.ipv4LocRouterId.size(); + countCommon4LocRouterId = ipv4LocRouterId.size(); + + Iterator<Ip4Address> ipv4remote = other.ipv4RemRouterId.iterator(); + countOther4RemRouterId = other.ipv4RemRouterId.size(); + countCommon4RemRouterId = ipv4RemRouterId.size(); + + Iterator<Ip6Address> ipv6local = other.ipv6LocRouterId.iterator(); + countOther6LocRouterId = other.ipv6LocRouterId.size(); + countCommon6LocRouterId = ipv6LocRouterId.size(); + + Iterator<Ip6Address> ipv6remote = other.ipv6RemRouterId.iterator(); + countOther6RemRouterId = other.ipv6RemRouterId.size(); + countCommon6RemRouterId = ipv6RemRouterId.size(); + + Iterator<Srlg> srlg = other.srlgGroup.iterator(); + countOtherSrlg = other.srlgGroup.size(); + countCommonSrlg = srlgGroup.size(); + + if (countOtherCommonBandwidth != countCommonBandwidth + || countOther4LocRouterId != countCommon4LocRouterId + || countOther4RemRouterId != countCommon4RemRouterId + || countOther6LocRouterId != countCommon6LocRouterId + || countOther6RemRouterId != countCommon6RemRouterId + || countOtherSrlg != countCommonSrlg) { + return false; + } else { + while (objListIterator.hasNext() && isCommonBandwidth) { + Bandwidth subTlv = objListIterator.next(); + if (maxUnResBandwidth.contains(subTlv) && other.maxUnResBandwidth.contains(subTlv)) { + isCommonBandwidth = Objects.equals(maxUnResBandwidth.get(maxUnResBandwidth.indexOf(subTlv)), + other.maxUnResBandwidth.get(other.maxUnResBandwidth.indexOf(subTlv))); + } else { + isCommonBandwidth = false; + } + } + while (ipv4local.hasNext() && isCommonIp4Loc) { + Ip4Address subTlv = ipv4local.next(); + if (ipv4LocRouterId.contains(subTlv) && other.ipv4LocRouterId.contains(subTlv)) { + isCommonIp4Loc = Objects.equals(ipv4LocRouterId.get(ipv4LocRouterId.indexOf(subTlv)), + other.ipv4LocRouterId.get(other.ipv4LocRouterId.indexOf(subTlv))); + } else { + isCommonIp4Loc = false; + } + } + while (ipv4remote.hasNext() && isCommonIp4Rem) { + Ip4Address subTlv = ipv4remote.next(); + if (ipv4RemRouterId.contains(subTlv) && other.ipv4RemRouterId.contains(subTlv)) { + isCommonIp4Rem = Objects.equals(ipv4RemRouterId.get(ipv4RemRouterId.indexOf(subTlv)), + other.ipv4RemRouterId.get(other.ipv4RemRouterId.indexOf(subTlv))); + } else { + isCommonIp4Rem = false; + } + } + while (ipv6remote.hasNext() && isCommonIp6Rem) { + Ip6Address subTlv = ipv6remote.next(); + if (ipv6RemRouterId.contains(subTlv) && other.ipv6RemRouterId.contains(subTlv)) { + isCommonIp6Rem = Objects.equals(ipv6RemRouterId.get(ipv6RemRouterId.indexOf(subTlv)), + other.ipv6RemRouterId.get(other.ipv6RemRouterId.indexOf(subTlv))); + } else { + isCommonIp6Rem = false; + } + } + while (ipv6local.hasNext() && isCommonIp6Loc) { + Ip6Address subTlv = ipv6local.next(); + if (ipv6LocRouterId.contains(subTlv) && other.ipv6LocRouterId.contains(subTlv)) { + isCommonIp6Loc = Objects.equals(ipv6LocRouterId.get(ipv6LocRouterId.indexOf(subTlv)), + other.ipv6LocRouterId.get(other.ipv6LocRouterId.indexOf(subTlv))); + } else { + isCommonIp6Loc = false; + } + } + while (srlg.hasNext() && isCommonIp6Loc) { + Srlg subTlv = srlg.next(); + if (srlgGroup.contains(subTlv) && other.srlgGroup.contains(subTlv)) { + isCommonSrlg = Objects.equals(srlgGroup.get(srlgGroup.indexOf(subTlv)), + other.srlgGroup.get(other.srlgGroup.indexOf(subTlv))); + } else { + isCommonSrlg = false; + } + } + return isCommonBandwidth && isCommonIp4Loc && isCommonIp4Rem && isCommonIp6Rem && isCommonIp6Loc + && isCommonSrlg + && Objects.equals(igpMetric, other.igpMetric) + && Objects.equals(teMetric, other.teMetric) + && Objects.equals(maximumLink, other.maximumLink) + && Objects.equals(protectType, other.protectType) + && Objects.equals(color, other.color) + && Objects.equals(signalType, other.signalType); + } + } + return false; + } + + @Override + public String toString() { + return toStringHelper(this) + .add("igpMetric", igpMetric) + .add("teMetric", teMetric) + .add("maximumLink", maximumLink) + .add("maxReserved", maxReserved) + .add("maxUnResBandwidth", maxUnResBandwidth) + .add("ipv4LocRouterId", ipv4LocRouterId) + .add("ipv4RemRouterId", ipv4RemRouterId) + .add("ipv6LocRouterId", ipv6LocRouterId) + .add("ipv6RemRouterId", ipv6RemRouterId) + .add("protectType", protectType) + .add("color", color) + .add("srlgGroup", srlgGroup) + .add("signalType", signalType) + .toString(); + } +}
\ No newline at end of file |