Committed by
Gerrit Code Review
ONOS-4107: ISIS Provider - Bug Fixes
Change-Id: I3c5cb3d1f45f7cf417267fe975256cba2dd066ab
Showing
6 changed files
with
74 additions
and
32 deletions
... | @@ -45,8 +45,6 @@ import java.util.concurrent.BlockingQueue; | ... | @@ -45,8 +45,6 @@ import java.util.concurrent.BlockingQueue; |
45 | public class LspEventConsumer implements Runnable { | 45 | public class LspEventConsumer implements Runnable { |
46 | private static final Logger log = LoggerFactory.getLogger(LspEventConsumer.class); | 46 | private static final Logger log = LoggerFactory.getLogger(LspEventConsumer.class); |
47 | public static List<LsPdu> lsPdus = new ArrayList<>(); | 47 | public static List<LsPdu> lsPdus = new ArrayList<>(); |
48 | - private String lspAdded = "LSP_ADDED"; | ||
49 | - private String lspRemoved = "LSP_REMOVED"; | ||
50 | private BlockingQueue queue = null; | 48 | private BlockingQueue queue = null; |
51 | private Controller controller = null; | 49 | private Controller controller = null; |
52 | private TopologyForDeviceAndLinkImpl deviceAndLink = new TopologyForDeviceAndLinkImpl(); | 50 | private TopologyForDeviceAndLinkImpl deviceAndLink = new TopologyForDeviceAndLinkImpl(); |
... | @@ -64,24 +62,21 @@ public class LspEventConsumer implements Runnable { | ... | @@ -64,24 +62,21 @@ public class LspEventConsumer implements Runnable { |
64 | 62 | ||
65 | @Override | 63 | @Override |
66 | public void run() { | 64 | public void run() { |
67 | - log.debug("LspsForProvider:run...!!!"); | ||
68 | try { | 65 | try { |
69 | while (true) { | 66 | while (true) { |
70 | if (!queue.isEmpty()) { | 67 | if (!queue.isEmpty()) { |
71 | LspWrapper wrapper = (LspWrapper) queue.take(); | 68 | LspWrapper wrapper = (LspWrapper) queue.take(); |
72 | LsPdu lsPdu = (LsPdu) wrapper.lsPdu(); | 69 | LsPdu lsPdu = (LsPdu) wrapper.lsPdu(); |
73 | - for (IsisTlv isisTlv : lsPdu.tlvs()) { | 70 | + if (wrapper.lspProcessing().equals(IsisConstants.LSPREMOVED)) { |
74 | - if ((isisTlv instanceof IpExtendedReachabilityTlv) || | 71 | + callTopologyToRemoveInfo(lsPdu); |
75 | - (isisTlv instanceof IsExtendedReachability)) { | 72 | + } else if (wrapper.lspProcessing().equals(IsisConstants.LSPADDED)) { |
76 | - lsPdus.add(lsPdu); | 73 | + for (IsisTlv isisTlv : lsPdu.tlvs()) { |
77 | - if (wrapper.lspProcessing().equals(lspAdded)) { | 74 | + if ((isisTlv instanceof IpExtendedReachabilityTlv) || |
75 | + (isisTlv instanceof IsExtendedReachability)) { | ||
78 | callTopologyToSendInfo(lsPdu, wrapper.isisInterface().networkType(), | 76 | callTopologyToSendInfo(lsPdu, wrapper.isisInterface().networkType(), |
79 | wrapper.isisInterface().systemId() + ".00"); | 77 | wrapper.isisInterface().systemId() + ".00"); |
78 | + break; | ||
80 | } | 79 | } |
81 | - if (wrapper.lspProcessing().equals(lspRemoved)) { | ||
82 | - callTopologyToRemoveInfo(lsPdu); | ||
83 | - } | ||
84 | - break; | ||
85 | } | 80 | } |
86 | } | 81 | } |
87 | } | 82 | } |
... | @@ -99,6 +94,9 @@ public class LspEventConsumer implements Runnable { | ... | @@ -99,6 +94,9 @@ public class LspEventConsumer implements Runnable { |
99 | */ | 94 | */ |
100 | private void callTopologyToSendInfo(LsPdu lsPdu, IsisNetworkType isisNetworkType, | 95 | private void callTopologyToSendInfo(LsPdu lsPdu, IsisNetworkType isisNetworkType, |
101 | String ownSystemId) { | 96 | String ownSystemId) { |
97 | + if ((lsPdu.lspId().equals(ownSystemId + "-00"))) { | ||
98 | + return; | ||
99 | + } | ||
102 | if (isisNetworkType.equals(IsisNetworkType.BROADCAST)) { | 100 | if (isisNetworkType.equals(IsisNetworkType.BROADCAST)) { |
103 | sendDeviceInfo(lsPdu); | 101 | sendDeviceInfo(lsPdu); |
104 | boolean isDis = IsisUtil.checkIsDis(lsPdu.lspId()); | 102 | boolean isDis = IsisUtil.checkIsDis(lsPdu.lspId()); |
... | @@ -106,9 +104,7 @@ public class LspEventConsumer implements Runnable { | ... | @@ -106,9 +104,7 @@ public class LspEventConsumer implements Runnable { |
106 | sendLinkInfo(lsPdu, ownSystemId); | 104 | sendLinkInfo(lsPdu, ownSystemId); |
107 | } | 105 | } |
108 | } else if (isisNetworkType.equals(IsisNetworkType.P2P)) { | 106 | } else if (isisNetworkType.equals(IsisNetworkType.P2P)) { |
109 | - | ||
110 | sendDeviceInfo(lsPdu); | 107 | sendDeviceInfo(lsPdu); |
111 | - | ||
112 | for (LsPdu wrapper : lsPdus) { | 108 | for (LsPdu wrapper : lsPdus) { |
113 | LsPdu lsPduStored = wrapper; | 109 | LsPdu lsPduStored = wrapper; |
114 | List<String> neStringList = neighborList(lsPduStored, ownSystemId); | 110 | List<String> neStringList = neighborList(lsPduStored, ownSystemId); |
... | @@ -117,7 +113,6 @@ public class LspEventConsumer implements Runnable { | ... | @@ -117,7 +113,6 @@ public class LspEventConsumer implements Runnable { |
117 | sendLinkInfo(lsPduStored, ownSystemId); | 113 | sendLinkInfo(lsPduStored, ownSystemId); |
118 | } | 114 | } |
119 | } | 115 | } |
120 | - | ||
121 | List<String> neStringList = neighborList(lsPdu, ownSystemId); | 116 | List<String> neStringList = neighborList(lsPdu, ownSystemId); |
122 | Map<String, IsisRouter> routerPresence = deviceAndLink.isisDeviceList(); | 117 | Map<String, IsisRouter> routerPresence = deviceAndLink.isisDeviceList(); |
123 | for (String neighbor : neStringList) { | 118 | for (String neighbor : neStringList) { |
... | @@ -137,7 +132,8 @@ public class LspEventConsumer implements Runnable { | ... | @@ -137,7 +132,8 @@ public class LspEventConsumer implements Runnable { |
137 | * @param lsPdu ls pdu instance | 132 | * @param lsPdu ls pdu instance |
138 | */ | 133 | */ |
139 | private void callTopologyToRemoveInfo(LsPdu lsPdu) { | 134 | private void callTopologyToRemoveInfo(LsPdu lsPdu) { |
140 | - removeDeviceInfo(lsPdu); | 135 | + IsisRouter isisRouter = deviceAndLink.isisRouter(lsPdu.lspId()); |
136 | + removeDeviceInfo(isisRouter); | ||
141 | removeLinkInfo(lsPdu); | 137 | removeLinkInfo(lsPdu); |
142 | } | 138 | } |
143 | 139 | ||
... | @@ -195,13 +191,13 @@ public class LspEventConsumer implements Runnable { | ... | @@ -195,13 +191,13 @@ public class LspEventConsumer implements Runnable { |
195 | /** | 191 | /** |
196 | * Removes the device information from topology provider. | 192 | * Removes the device information from topology provider. |
197 | * | 193 | * |
198 | - * @param lsPdu ls pdu instance | 194 | + * @param isisRouter ISIS router instance |
199 | */ | 195 | */ |
200 | - private void removeDeviceInfo(LsPdu lsPdu) { | 196 | + private void removeDeviceInfo(IsisRouter isisRouter) { |
201 | - IsisRouter isisRouter = deviceAndLink.removeDeviceAndLinkInfo(lsPdu); | ||
202 | if (isisRouter.systemId() != null) { | 197 | if (isisRouter.systemId() != null) { |
203 | controller.removeDeviceDetails(isisRouter); | 198 | controller.removeDeviceDetails(isisRouter); |
204 | } | 199 | } |
200 | + deviceAndLink.removeRouter(isisRouter.systemId()); | ||
205 | } | 201 | } |
206 | 202 | ||
207 | /** | 203 | /** |
... | @@ -228,7 +224,7 @@ public class LspEventConsumer implements Runnable { | ... | @@ -228,7 +224,7 @@ public class LspEventConsumer implements Runnable { |
228 | * @param lsPdu ls pdu instance | 224 | * @param lsPdu ls pdu instance |
229 | */ | 225 | */ |
230 | private void removeLinkInfo(LsPdu lsPdu) { | 226 | private void removeLinkInfo(LsPdu lsPdu) { |
231 | - Map<String, LinkInformation> linkInformationList = deviceAndLink.removeLinkInfo(lsPdu); | 227 | + Map<String, LinkInformation> linkInformationList = deviceAndLink.removeLinkInfo(lsPdu.lspId()); |
232 | for (String key : linkInformationList.keySet()) { | 228 | for (String key : linkInformationList.keySet()) { |
233 | LinkInformation linkInformation = linkInformationList.get(key); | 229 | LinkInformation linkInformation = linkInformationList.get(key); |
234 | controller.removeLinkDetails(createIsisLink(linkInformation, lsPdu)); | 230 | controller.removeLinkDetails(createIsisLink(linkInformation, lsPdu)); | ... | ... |
This diff is collapsed. Click to expand it.
... | @@ -46,6 +46,15 @@ public class NeighborForExtendedIs { | ... | @@ -46,6 +46,15 @@ public class NeighborForExtendedIs { |
46 | } | 46 | } |
47 | 47 | ||
48 | /** | 48 | /** |
49 | + * Returns list of sub tlvs. | ||
50 | + * | ||
51 | + * @return teSubTlv list of sub tlvs | ||
52 | + */ | ||
53 | + public List<TrafficEngineeringSubTlv> teSubTlv() { | ||
54 | + return teSubTlv; | ||
55 | + } | ||
56 | + | ||
57 | + /** | ||
49 | * Sets neighbor ID. | 58 | * Sets neighbor ID. |
50 | * | 59 | * |
51 | * @param neighborId neighbor ID | 60 | * @param neighborId neighbor ID | ... | ... |
... | @@ -67,10 +67,15 @@ public final class SubTlvFinder { | ... | @@ -67,10 +67,15 @@ public final class SubTlvFinder { |
67 | subTlv = unreservedBandwidth; | 67 | subTlv = unreservedBandwidth; |
68 | break; | 68 | break; |
69 | case INTERFACEADDRESS: | 69 | case INTERFACEADDRESS: |
70 | - NeighborIpAddress ipInterfaceAddressTlv = new NeighborIpAddress(tlvHeader); | 70 | + InterfaceIpAddress ipInterfaceAddressTlv = new InterfaceIpAddress(tlvHeader); |
71 | ipInterfaceAddressTlv.readFrom(channelBuffer); | 71 | ipInterfaceAddressTlv.readFrom(channelBuffer); |
72 | subTlv = ipInterfaceAddressTlv; | 72 | subTlv = ipInterfaceAddressTlv; |
73 | break; | 73 | break; |
74 | + case NEIGHBORADDRESS: | ||
75 | + NeighborIpAddress ipNeighborAddressTlv = new NeighborIpAddress(tlvHeader); | ||
76 | + ipNeighborAddressTlv.readFrom(channelBuffer); | ||
77 | + subTlv = ipNeighborAddressTlv; | ||
78 | + break; | ||
74 | default: | 79 | default: |
75 | //TODO | 80 | //TODO |
76 | break; | 81 | break; | ... | ... |
... | @@ -54,7 +54,7 @@ public class UnreservedBandwidth extends TlvHeader implements TrafficEngineering | ... | @@ -54,7 +54,7 @@ public class UnreservedBandwidth extends TlvHeader implements TrafficEngineering |
54 | * | 54 | * |
55 | * @return List of un reserved bandwidth | 55 | * @return List of un reserved bandwidth |
56 | */ | 56 | */ |
57 | - public List<Float> getUnReservedBandwidthValue() { | 57 | + public List<Float> unReservedBandwidthValue() { |
58 | return this.unReservedBandwidth; | 58 | return this.unReservedBandwidth; |
59 | } | 59 | } |
60 | 60 | ... | ... |
... | @@ -59,6 +59,7 @@ import org.slf4j.Logger; | ... | @@ -59,6 +59,7 @@ import org.slf4j.Logger; |
59 | import java.util.ArrayList; | 59 | import java.util.ArrayList; |
60 | import java.util.HashMap; | 60 | import java.util.HashMap; |
61 | import java.util.List; | 61 | import java.util.List; |
62 | +import java.util.StringTokenizer; | ||
62 | 63 | ||
63 | import static org.slf4j.LoggerFactory.getLogger; | 64 | import static org.slf4j.LoggerFactory.getLogger; |
64 | 65 | ||
... | @@ -132,7 +133,7 @@ public class IsisTopologyProvider extends AbstractProvider implements DeviceProv | ... | @@ -132,7 +133,7 @@ public class IsisTopologyProvider extends AbstractProvider implements DeviceProv |
132 | @Override | 133 | @Override |
133 | public boolean isReachable(DeviceId deviceId) { | 134 | public boolean isReachable(DeviceId deviceId) { |
134 | log.debug("IsisDeviceProvider::isReachable...!!!!"); | 135 | log.debug("IsisDeviceProvider::isReachable...!!!!"); |
135 | - return false; | 136 | + return true; |
136 | } | 137 | } |
137 | 138 | ||
138 | @Override | 139 | @Override |
... | @@ -149,6 +150,8 @@ public class IsisTopologyProvider extends AbstractProvider implements DeviceProv | ... | @@ -149,6 +150,8 @@ public class IsisTopologyProvider extends AbstractProvider implements DeviceProv |
149 | private LinkDescription buildLinkDes(IsisLink isisLink) { | 150 | private LinkDescription buildLinkDes(IsisLink isisLink) { |
150 | long srcAddress = 0; | 151 | long srcAddress = 0; |
151 | long dstAddress = 0; | 152 | long dstAddress = 0; |
153 | + boolean localPseduo = false; | ||
154 | + boolean remotePseduo = false; | ||
152 | String localSystemId = isisLink.localSystemId(); | 155 | String localSystemId = isisLink.localSystemId(); |
153 | String remoteSystemId = isisLink.remoteSystemId(); | 156 | String remoteSystemId = isisLink.remoteSystemId(); |
154 | //Changing of port numbers | 157 | //Changing of port numbers |
... | @@ -156,9 +159,17 @@ public class IsisTopologyProvider extends AbstractProvider implements DeviceProv | ... | @@ -156,9 +159,17 @@ public class IsisTopologyProvider extends AbstractProvider implements DeviceProv |
156 | dstAddress = isisLink.neighborIp().toInt(); | 159 | dstAddress = isisLink.neighborIp().toInt(); |
157 | DeviceId srcId = DeviceId.deviceId(IsisRouterId.uri(localSystemId)); | 160 | DeviceId srcId = DeviceId.deviceId(IsisRouterId.uri(localSystemId)); |
158 | DeviceId dstId = DeviceId.deviceId(IsisRouterId.uri(remoteSystemId)); | 161 | DeviceId dstId = DeviceId.deviceId(IsisRouterId.uri(remoteSystemId)); |
159 | - if (srcAddress == 0) { | 162 | + if (checkIsDis(isisLink.localSystemId())) { |
163 | + localPseduo = true; | ||
164 | + } else if (checkIsDis(isisLink.remoteSystemId())) { | ||
165 | + remotePseduo = true; | ||
166 | + } else { | ||
167 | + log.debug("IsisDeviceProvider::buildLinkDes : unknown type.!"); | ||
168 | + } | ||
169 | + | ||
170 | + if (localPseduo && srcAddress == 0) { | ||
160 | srcAddress = PSEUDO_PORT; | 171 | srcAddress = PSEUDO_PORT; |
161 | - } else if (dstAddress == 0) { | 172 | + } else if (remotePseduo && dstAddress == 0) { |
162 | dstAddress = PSEUDO_PORT; | 173 | dstAddress = PSEUDO_PORT; |
163 | } | 174 | } |
164 | 175 | ||
... | @@ -173,6 +184,28 @@ public class IsisTopologyProvider extends AbstractProvider implements DeviceProv | ... | @@ -173,6 +184,28 @@ public class IsisTopologyProvider extends AbstractProvider implements DeviceProv |
173 | } | 184 | } |
174 | 185 | ||
175 | /** | 186 | /** |
187 | + * Return the DIS value from the systemId. | ||
188 | + * | ||
189 | + * @param systemId system Id. | ||
190 | + * @return return true if DIS else false | ||
191 | + */ | ||
192 | + public static boolean checkIsDis(String systemId) { | ||
193 | + StringTokenizer stringTokenizer = new StringTokenizer(systemId, "." + "-"); | ||
194 | + int count = 0; | ||
195 | + while (stringTokenizer.hasMoreTokens()) { | ||
196 | + String str = stringTokenizer.nextToken(); | ||
197 | + if (count == 3) { | ||
198 | + int x = Integer.parseInt(str); | ||
199 | + if (x > 0) { | ||
200 | + return true; | ||
201 | + } | ||
202 | + } | ||
203 | + count++; | ||
204 | + } | ||
205 | + return false; | ||
206 | + } | ||
207 | + | ||
208 | + /** | ||
176 | * Builds port description. | 209 | * Builds port description. |
177 | * | 210 | * |
178 | * @param deviceId device ID for the port | 211 | * @param deviceId device ID for the port |
... | @@ -181,9 +214,7 @@ public class IsisTopologyProvider extends AbstractProvider implements DeviceProv | ... | @@ -181,9 +214,7 @@ public class IsisTopologyProvider extends AbstractProvider implements DeviceProv |
181 | */ | 214 | */ |
182 | private List<PortDescription> buildPortDescriptions(DeviceId deviceId, | 215 | private List<PortDescription> buildPortDescriptions(DeviceId deviceId, |
183 | PortNumber portNumber) { | 216 | PortNumber portNumber) { |
184 | - | ||
185 | List<PortDescription> portList; | 217 | List<PortDescription> portList; |
186 | - | ||
187 | if (portMap.containsKey(deviceId)) { | 218 | if (portMap.containsKey(deviceId)) { |
188 | portList = portMap.get(deviceId); | 219 | portList = portMap.get(deviceId); |
189 | } else { | 220 | } else { |
... | @@ -193,8 +224,8 @@ public class IsisTopologyProvider extends AbstractProvider implements DeviceProv | ... | @@ -193,8 +224,8 @@ public class IsisTopologyProvider extends AbstractProvider implements DeviceProv |
193 | PortDescription portDescriptions = new DefaultPortDescription(portNumber, true); | 224 | PortDescription portDescriptions = new DefaultPortDescription(portNumber, true); |
194 | portList.add(portDescriptions); | 225 | portList.add(portDescriptions); |
195 | } | 226 | } |
196 | - | ||
197 | portMap.put(deviceId, portList); | 227 | portMap.put(deviceId, portList); |
228 | + | ||
198 | return portList; | 229 | return portList; |
199 | } | 230 | } |
200 | 231 | ||
... | @@ -215,6 +246,7 @@ public class IsisTopologyProvider extends AbstractProvider implements DeviceProv | ... | @@ -215,6 +246,7 @@ public class IsisTopologyProvider extends AbstractProvider implements DeviceProv |
215 | 246 | ||
216 | //TE Info | 247 | //TE Info |
217 | IsisLinkTed isisLinkTed = isisLink.linkTed(); | 248 | IsisLinkTed isisLinkTed = isisLink.linkTed(); |
249 | + log.info("Ted Information: {}", isisLinkTed.toString()); | ||
218 | administrativeGroup = isisLinkTed.administrativeGroup(); | 250 | administrativeGroup = isisLinkTed.administrativeGroup(); |
219 | teMetric = isisLinkTed.teDefaultMetric(); | 251 | teMetric = isisLinkTed.teDefaultMetric(); |
220 | maxReservableBandwidth = isisLinkTed.maximumReservableLinkBandwidth(); | 252 | maxReservableBandwidth = isisLinkTed.maximumReservableLinkBandwidth(); |
... | @@ -251,7 +283,7 @@ public class IsisTopologyProvider extends AbstractProvider implements DeviceProv | ... | @@ -251,7 +283,7 @@ public class IsisTopologyProvider extends AbstractProvider implements DeviceProv |
251 | newBuilder.set("RouterId", systemId); | 283 | newBuilder.set("RouterId", systemId); |
252 | DeviceDescription description = | 284 | DeviceDescription description = |
253 | new DefaultDeviceDescription(IsisRouterId.uri(systemId), deviceType, UNKNOWN, UNKNOWN, UNKNOWN, | 285 | new DefaultDeviceDescription(IsisRouterId.uri(systemId), deviceType, UNKNOWN, UNKNOWN, UNKNOWN, |
254 | - UNKNOWN, cId, newBuilder.build()); | 286 | + UNKNOWN, cId, newBuilder.build()); |
255 | deviceProviderService.deviceConnected(deviceId, description); | 287 | deviceProviderService.deviceConnected(deviceId, description); |
256 | } | 288 | } |
257 | 289 | ||
... | @@ -276,9 +308,9 @@ public class IsisTopologyProvider extends AbstractProvider implements DeviceProv | ... | @@ -276,9 +308,9 @@ public class IsisTopologyProvider extends AbstractProvider implements DeviceProv |
276 | LinkDescription linkDes = buildLinkDes(isisLink); | 308 | LinkDescription linkDes = buildLinkDes(isisLink); |
277 | //Updating ports of the link | 309 | //Updating ports of the link |
278 | deviceProviderService.updatePorts(linkDes.src().deviceId(), buildPortDescriptions(linkDes.src().deviceId(), | 310 | deviceProviderService.updatePorts(linkDes.src().deviceId(), buildPortDescriptions(linkDes.src().deviceId(), |
279 | - linkDes.src().port())); | 311 | + linkDes.src().port())); |
280 | deviceProviderService.updatePorts(linkDes.dst().deviceId(), buildPortDescriptions(linkDes.dst().deviceId(), | 312 | deviceProviderService.updatePorts(linkDes.dst().deviceId(), buildPortDescriptions(linkDes.dst().deviceId(), |
281 | - linkDes.dst().port())); | 313 | + linkDes.dst().port())); |
282 | registerBandwidth(linkDes, isisLink); | 314 | registerBandwidth(linkDes, isisLink); |
283 | linkProviderService.linkDetected(linkDes); | 315 | linkProviderService.linkDetected(linkDes); |
284 | } | 316 | } |
... | @@ -319,4 +351,4 @@ public class IsisTopologyProvider extends AbstractProvider implements DeviceProv | ... | @@ -319,4 +351,4 @@ public class IsisTopologyProvider extends AbstractProvider implements DeviceProv |
319 | } | 351 | } |
320 | } | 352 | } |
321 | } | 353 | } |
322 | -} | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
354 | +} | ... | ... |
-
Please register or login to post a comment