Committed by
Gerrit Code Review
PrefixTed code fix
Change-Id: I857ceb2b04e3af479fed769501c5a6bd5704e4b3
Showing
1 changed file
with
43 additions
and
19 deletions
| ... | @@ -17,6 +17,8 @@ package org.onosproject.iptopology.api; | ... | @@ -17,6 +17,8 @@ package org.onosproject.iptopology.api; |
| 17 | 17 | ||
| 18 | import static com.google.common.base.MoreObjects.toStringHelper; | 18 | import static com.google.common.base.MoreObjects.toStringHelper; |
| 19 | 19 | ||
| 20 | +import java.util.Iterator; | ||
| 21 | +import java.util.List; | ||
| 20 | import java.util.Objects; | 22 | import java.util.Objects; |
| 21 | 23 | ||
| 22 | import org.onlab.packet.IpAddress; | 24 | import org.onlab.packet.IpAddress; |
| ... | @@ -26,22 +28,13 @@ import org.onlab.packet.IpAddress; | ... | @@ -26,22 +28,13 @@ import org.onlab.packet.IpAddress; |
| 26 | */ | 28 | */ |
| 27 | public class PrefixTed { | 29 | public class PrefixTed { |
| 28 | private final IgpFlags igpFlags; | 30 | private final IgpFlags igpFlags; |
| 29 | - private final RouteTag routeTag; | 31 | + private final List<RouteTag> routeTag; |
| 30 | - private final ExtendedRouteTag extendedRouteTag; | 32 | + private final List<ExtendedRouteTag> extendedRouteTag; |
| 31 | private final Metric metric; | 33 | private final Metric metric; |
| 32 | private final IpAddress fwdingAddress; | 34 | private final IpAddress fwdingAddress; |
| 33 | 35 | ||
| 34 | /** | 36 | /** |
| 35 | - * Constructor to initialize its parameters. | 37 | + * Constructor to initialize its fields. |
| 36 | - * | ||
| 37 | - * @param igpFlags igp flags | ||
| 38 | - * @param routeTag ospf route tag | ||
| 39 | - * @param extendedRouteTag isis route tag | ||
| 40 | - * @param metric prefix metric | ||
| 41 | - * @param fwdingAddress forwarding address | ||
| 42 | - */ | ||
| 43 | - /** | ||
| 44 | - * Constructor to initialize its parameters. | ||
| 45 | * | 38 | * |
| 46 | * @param igpFlags IS-IS and OSPF flags assigned to the prefix | 39 | * @param igpFlags IS-IS and OSPF flags assigned to the prefix |
| 47 | * @param routeTag IGP (ISIS or OSPF) tags of the prefix | 40 | * @param routeTag IGP (ISIS or OSPF) tags of the prefix |
| ... | @@ -49,7 +42,7 @@ public class PrefixTed { | ... | @@ -49,7 +42,7 @@ public class PrefixTed { |
| 49 | * @param metric metric of the prefix | 42 | * @param metric metric of the prefix |
| 50 | * @param fwdingAddress OSPF forwarding address | 43 | * @param fwdingAddress OSPF forwarding address |
| 51 | */ | 44 | */ |
| 52 | - public PrefixTed(IgpFlags igpFlags, RouteTag routeTag, ExtendedRouteTag extendedRouteTag, | 45 | + public PrefixTed(IgpFlags igpFlags, List<RouteTag> routeTag, List<ExtendedRouteTag> extendedRouteTag, |
| 53 | Metric metric, IpAddress fwdingAddress) { | 46 | Metric metric, IpAddress fwdingAddress) { |
| 54 | this.igpFlags = igpFlags; | 47 | this.igpFlags = igpFlags; |
| 55 | this.routeTag = routeTag; | 48 | this.routeTag = routeTag; |
| ... | @@ -72,7 +65,7 @@ public class PrefixTed { | ... | @@ -72,7 +65,7 @@ public class PrefixTed { |
| 72 | * | 65 | * |
| 73 | * @return IGP route tag. | 66 | * @return IGP route tag. |
| 74 | */ | 67 | */ |
| 75 | - public RouteTag routeTag() { | 68 | + public List<RouteTag> routeTag() { |
| 76 | return routeTag; | 69 | return routeTag; |
| 77 | } | 70 | } |
| 78 | 71 | ||
| ... | @@ -81,7 +74,7 @@ public class PrefixTed { | ... | @@ -81,7 +74,7 @@ public class PrefixTed { |
| 81 | * | 74 | * |
| 82 | * @return extended IS-IS route tag | 75 | * @return extended IS-IS route tag |
| 83 | */ | 76 | */ |
| 84 | - public ExtendedRouteTag extendedRouteTag() { | 77 | + public List<ExtendedRouteTag> extendedRouteTag() { |
| 85 | return extendedRouteTag; | 78 | return extendedRouteTag; |
| 86 | } | 79 | } |
| 87 | 80 | ||
| ... | @@ -103,7 +96,6 @@ public class PrefixTed { | ... | @@ -103,7 +96,6 @@ public class PrefixTed { |
| 103 | return fwdingAddress; | 96 | return fwdingAddress; |
| 104 | } | 97 | } |
| 105 | 98 | ||
| 106 | - | ||
| 107 | @Override | 99 | @Override |
| 108 | public int hashCode() { | 100 | public int hashCode() { |
| 109 | return Objects.hash(igpFlags, routeTag, extendedRouteTag, metric, fwdingAddress); | 101 | return Objects.hash(igpFlags, routeTag, extendedRouteTag, metric, fwdingAddress); |
| ... | @@ -117,9 +109,41 @@ public class PrefixTed { | ... | @@ -117,9 +109,41 @@ public class PrefixTed { |
| 117 | 109 | ||
| 118 | if (obj instanceof PrefixTed) { | 110 | if (obj instanceof PrefixTed) { |
| 119 | PrefixTed other = (PrefixTed) obj; | 111 | PrefixTed other = (PrefixTed) obj; |
| 120 | - return Objects.equals(igpFlags, other.igpFlags) && Objects.equals(extendedRouteTag, other.extendedRouteTag) | 112 | + Iterator<RouteTag> objListIterator = other.routeTag.iterator(); |
| 121 | - && Objects.equals(routeTag, other.routeTag) && Objects.equals(metric, other.metric) | 113 | + int countOtherCommonRouteTag = other.routeTag.size(); |
| 122 | - && Objects.equals(fwdingAddress, other.fwdingAddress); | 114 | + int countCommonRouteTag = routeTag.size(); |
| 115 | + | ||
| 116 | + Iterator<ExtendedRouteTag> objListIterator1 = other.extendedRouteTag.iterator(); | ||
| 117 | + int countOtherCommonExtRouteTag = other.extendedRouteTag.size(); | ||
| 118 | + int countCommonExtRouteTag = extendedRouteTag.size(); | ||
| 119 | + | ||
| 120 | + boolean isCommonRouteType = true; | ||
| 121 | + boolean isCommonExtRouteType = true; | ||
| 122 | + if (countOtherCommonRouteTag != countCommonRouteTag | ||
| 123 | + || countOtherCommonExtRouteTag != countCommonExtRouteTag) { | ||
| 124 | + return false; | ||
| 125 | + } else { | ||
| 126 | + while (objListIterator.hasNext() && isCommonRouteType) { | ||
| 127 | + RouteTag subTlv = objListIterator.next(); | ||
| 128 | + if (routeTag.contains(subTlv) && other.routeTag.contains(subTlv)) { | ||
| 129 | + isCommonRouteType = Objects.equals(routeTag.get(routeTag.indexOf(subTlv)), | ||
| 130 | + other.routeTag.get(other.routeTag.indexOf(subTlv))); | ||
| 131 | + } else { | ||
| 132 | + isCommonRouteType = false; | ||
| 133 | + } | ||
| 134 | + } | ||
| 135 | + while (objListIterator1.hasNext() && isCommonExtRouteType) { | ||
| 136 | + ExtendedRouteTag subTlv = objListIterator1.next(); | ||
| 137 | + if (extendedRouteTag.contains(subTlv) && other.extendedRouteTag.contains(subTlv)) { | ||
| 138 | + isCommonExtRouteType = Objects.equals(extendedRouteTag.get(extendedRouteTag.indexOf(subTlv)), | ||
| 139 | + other.extendedRouteTag.get(other.extendedRouteTag.indexOf(subTlv))); | ||
| 140 | + } else { | ||
| 141 | + isCommonExtRouteType = false; | ||
| 142 | + } | ||
| 143 | + } | ||
| 144 | + return isCommonRouteType && isCommonExtRouteType && Objects.equals(igpFlags, other.igpFlags) | ||
| 145 | + && Objects.equals(metric, other.metric) && Objects.equals(fwdingAddress, other.fwdingAddress); | ||
| 146 | + } | ||
| 123 | } | 147 | } |
| 124 | return false; | 148 | return false; |
| 125 | } | 149 | } | ... | ... |
-
Please register or login to post a comment