Committed by
Gerrit Code Review
ONOS-4505: Bug Fixes
Change-Id: Ia030aa3aff9e2ad34a5e27fbe4ba088dda65bfa7
Showing
34 changed files
with
1490 additions
and
239 deletions
... | @@ -195,13 +195,6 @@ public interface IsisInterface { | ... | @@ -195,13 +195,6 @@ public interface IsisInterface { |
195 | void setAreaLength(int areaLength); | 195 | void setAreaLength(int areaLength); |
196 | 196 | ||
197 | /** | 197 | /** |
198 | - * Sets link state packet ID. | ||
199 | - * | ||
200 | - * @param lspId link state packet ID | ||
201 | - */ | ||
202 | - void setLspId(String lspId); | ||
203 | - | ||
204 | - /** | ||
205 | * Returns holding time. | 198 | * Returns holding time. |
206 | * | 199 | * |
207 | * @return holding time | 200 | * @return holding time |
... | @@ -251,6 +244,11 @@ public interface IsisInterface { | ... | @@ -251,6 +244,11 @@ public interface IsisInterface { |
251 | void startHelloSender(Channel channel); | 244 | void startHelloSender(Channel channel); |
252 | 245 | ||
253 | /** | 246 | /** |
247 | + * Stops the hello timer which sends hello packet every configured seconds. | ||
248 | + */ | ||
249 | + void stopHelloSender(); | ||
250 | + | ||
251 | + /** | ||
254 | * Processes an ISIS message which is received on this interface. | 252 | * Processes an ISIS message which is received on this interface. |
255 | * | 253 | * |
256 | * @param isisMessage ISIS message instance | 254 | * @param isisMessage ISIS message instance |
... | @@ -315,4 +313,9 @@ public interface IsisInterface { | ... | @@ -315,4 +313,9 @@ public interface IsisInterface { |
315 | * @param isisNeighbor ISIS neighbor instance | 313 | * @param isisNeighbor ISIS neighbor instance |
316 | */ | 314 | */ |
317 | void removeNeighbor(IsisNeighbor isisNeighbor); | 315 | void removeNeighbor(IsisNeighbor isisNeighbor); |
316 | + | ||
317 | + /** | ||
318 | + * Removes all the neighbors. | ||
319 | + */ | ||
320 | + void removeNeighbors(); | ||
318 | } | 321 | } | ... | ... |
... | @@ -108,4 +108,18 @@ public interface IsisLsdb { | ... | @@ -108,4 +108,18 @@ public interface IsisLsdb { |
108 | * @return neighbor database information | 108 | * @return neighbor database information |
109 | */ | 109 | */ |
110 | Map<String, LspWrapper> getL2Db(); | 110 | Map<String, LspWrapper> getL2Db(); |
111 | + | ||
112 | + /** | ||
113 | + * Sets the level 1 link state sequence number. | ||
114 | + * | ||
115 | + * @param l1LspSeqNo link state sequence number | ||
116 | + */ | ||
117 | + void setL1LspSeqNo(int l1LspSeqNo); | ||
118 | + | ||
119 | + /** | ||
120 | + * Sets the level 2 link state sequence number. | ||
121 | + * | ||
122 | + * @param l2LspSeqNo link state sequence number | ||
123 | + */ | ||
124 | + void setL2LspSeqNo(int l2LspSeqNo); | ||
111 | } | 125 | } |
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
... | @@ -108,4 +108,16 @@ public interface IsisNeighbor { | ... | @@ -108,4 +108,16 @@ public interface IsisNeighbor { |
108 | * Stops the inactivity timer. | 108 | * Stops the inactivity timer. |
109 | */ | 109 | */ |
110 | void stopInactivityTimeCheck(); | 110 | void stopInactivityTimeCheck(); |
111 | + | ||
112 | + /** | ||
113 | + * Stops the holding time check timer. | ||
114 | + */ | ||
115 | + void stopHoldingTimeCheck(); | ||
116 | + | ||
117 | + /** | ||
118 | + * Returns router type. | ||
119 | + * | ||
120 | + * @return router type | ||
121 | + */ | ||
122 | + IsisRouterType routerType(); | ||
111 | } | 123 | } |
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
protocols/isis/ctl/src/main/java/org/onosproject/isis/controller/impl/Controller.java
100755 → 100644
... | @@ -19,6 +19,7 @@ import com.fasterxml.jackson.databind.JsonNode; | ... | @@ -19,6 +19,7 @@ import com.fasterxml.jackson.databind.JsonNode; |
19 | import org.jboss.netty.bootstrap.ClientBootstrap; | 19 | import org.jboss.netty.bootstrap.ClientBootstrap; |
20 | import org.jboss.netty.channel.AdaptiveReceiveBufferSizePredictor; | 20 | import org.jboss.netty.channel.AdaptiveReceiveBufferSizePredictor; |
21 | import org.jboss.netty.channel.ChannelFuture; | 21 | import org.jboss.netty.channel.ChannelFuture; |
22 | +import org.jboss.netty.channel.ChannelFutureListener; | ||
22 | import org.jboss.netty.channel.ChannelPipelineFactory; | 23 | import org.jboss.netty.channel.ChannelPipelineFactory; |
23 | import org.jboss.netty.channel.FixedReceiveBufferSizePredictorFactory; | 24 | import org.jboss.netty.channel.FixedReceiveBufferSizePredictorFactory; |
24 | import org.jboss.netty.channel.socket.nio.NioClientSocketChannelFactory; | 25 | import org.jboss.netty.channel.socket.nio.NioClientSocketChannelFactory; |
... | @@ -35,10 +36,14 @@ import org.slf4j.LoggerFactory; | ... | @@ -35,10 +36,14 @@ import org.slf4j.LoggerFactory; |
35 | 36 | ||
36 | import java.net.InetAddress; | 37 | import java.net.InetAddress; |
37 | import java.net.InetSocketAddress; | 38 | import java.net.InetSocketAddress; |
39 | +import java.net.NetworkInterface; | ||
38 | import java.net.UnknownHostException; | 40 | import java.net.UnknownHostException; |
39 | import java.util.ArrayList; | 41 | import java.util.ArrayList; |
42 | +import java.util.Enumeration; | ||
40 | import java.util.List; | 43 | import java.util.List; |
41 | import java.util.concurrent.Executors; | 44 | import java.util.concurrent.Executors; |
45 | +import java.util.concurrent.ScheduledExecutorService; | ||
46 | +import java.util.concurrent.TimeUnit; | ||
42 | 47 | ||
43 | import static org.onlab.util.Tools.groupedThreads; | 48 | import static org.onlab.util.Tools.groupedThreads; |
44 | 49 | ||
... | @@ -48,12 +53,17 @@ import static org.onlab.util.Tools.groupedThreads; | ... | @@ -48,12 +53,17 @@ import static org.onlab.util.Tools.groupedThreads; |
48 | public class Controller { | 53 | public class Controller { |
49 | protected static final int BUFFER_SIZE = 4 * 1024 * 1024; | 54 | protected static final int BUFFER_SIZE = 4 * 1024 * 1024; |
50 | private static final Logger log = LoggerFactory.getLogger(Controller.class); | 55 | private static final Logger log = LoggerFactory.getLogger(Controller.class); |
56 | + private static final int RETRY_INTERVAL = 4; | ||
51 | private final int peerWorkerThreads = 16; | 57 | private final int peerWorkerThreads = 16; |
58 | + byte[] configPacket = null; | ||
52 | private List<IsisProcess> processes = null; | 59 | private List<IsisProcess> processes = null; |
53 | private IsisChannelHandler isisChannelHandler; | 60 | private IsisChannelHandler isisChannelHandler; |
54 | private NioClientSocketChannelFactory peerExecFactory; | 61 | private NioClientSocketChannelFactory peerExecFactory; |
55 | private ClientBootstrap peerBootstrap = null; | 62 | private ClientBootstrap peerBootstrap = null; |
56 | private TpPort isisPort = TpPort.tpPort(IsisConstants.SPORT); | 63 | private TpPort isisPort = TpPort.tpPort(IsisConstants.SPORT); |
64 | + private ScheduledExecutorService connectExecutor = null; | ||
65 | + private int connectRetryCounter = 0; | ||
66 | + private int connectRetryTime; | ||
57 | 67 | ||
58 | /** | 68 | /** |
59 | * Deactivates ISIS controller. | 69 | * Deactivates ISIS controller. |
... | @@ -70,12 +80,11 @@ public class Controller { | ... | @@ -70,12 +80,11 @@ public class Controller { |
70 | */ | 80 | */ |
71 | public void updateConfig(JsonNode jsonNode) throws Exception { | 81 | public void updateConfig(JsonNode jsonNode) throws Exception { |
72 | log.debug("Controller::UpdateConfig called"); | 82 | log.debug("Controller::UpdateConfig called"); |
73 | - byte[] configPacket = new byte[IsisConstants.CONFIG_LENGTH]; | 83 | + configPacket = new byte[IsisConstants.CONFIG_LENGTH]; |
74 | byte numberOfInterface = 0; // number of interfaces to configure | 84 | byte numberOfInterface = 0; // number of interfaces to configure |
75 | 85 | ||
76 | configPacket[0] = (byte) 0xFF; // its a conf packet - identifier | 86 | configPacket[0] = (byte) 0xFF; // its a conf packet - identifier |
77 | List<IsisProcess> isisProcesses = getConfig(jsonNode); | 87 | List<IsisProcess> isisProcesses = getConfig(jsonNode); |
78 | - | ||
79 | for (IsisProcess isisProcess : isisProcesses) { | 88 | for (IsisProcess isisProcess : isisProcesses) { |
80 | log.debug("IsisProcessDetails : " + isisProcess); | 89 | log.debug("IsisProcessDetails : " + isisProcess); |
81 | for (IsisInterface isisInterface : isisProcess.isisInterfaceList()) { | 90 | for (IsisInterface isisInterface : isisProcess.isisInterfaceList()) { |
... | @@ -100,17 +109,20 @@ public class Controller { | ... | @@ -100,17 +109,20 @@ public class Controller { |
100 | configPacket[1] = numberOfInterface; | 109 | configPacket[1] = numberOfInterface; |
101 | //First time configuration | 110 | //First time configuration |
102 | if (processes == null) { | 111 | if (processes == null) { |
112 | + if (isisProcesses.size() > 0) { | ||
103 | processes = isisProcesses; | 113 | processes = isisProcesses; |
104 | - //Initialize connection by creating a channel handler instance and sent the config packet); | 114 | + connectPeer(); |
105 | - initConnection(); | ||
106 | //Initializing the interface map in channel handler | 115 | //Initializing the interface map in channel handler |
116 | + if (isisChannelHandler != null) { | ||
107 | isisChannelHandler.initializeInterfaceMap(); | 117 | isisChannelHandler.initializeInterfaceMap(); |
118 | + } | ||
119 | + } | ||
108 | } else { | 120 | } else { |
109 | isisChannelHandler.updateInterfaceMap(isisProcesses); | 121 | isisChannelHandler.updateInterfaceMap(isisProcesses); |
110 | - } | ||
111 | //Send the config packet | 122 | //Send the config packet |
112 | isisChannelHandler.sentConfigPacket(configPacket); | 123 | isisChannelHandler.sentConfigPacket(configPacket); |
113 | } | 124 | } |
125 | + } | ||
114 | 126 | ||
115 | /** | 127 | /** |
116 | * Initializes the netty client channel connection. | 128 | * Initializes the netty client channel connection. |
... | @@ -182,10 +194,8 @@ public class Controller { | ... | @@ -182,10 +194,8 @@ public class Controller { |
182 | * @return list of processes configured | 194 | * @return list of processes configured |
183 | */ | 195 | */ |
184 | private List<IsisProcess> getConfig(JsonNode json) throws Exception { | 196 | private List<IsisProcess> getConfig(JsonNode json) throws Exception { |
185 | - | ||
186 | List<IsisProcess> isisProcessesList = new ArrayList<>(); | 197 | List<IsisProcess> isisProcessesList = new ArrayList<>(); |
187 | JsonNode jsonNodes = json; | 198 | JsonNode jsonNodes = json; |
188 | - | ||
189 | if (jsonNodes == null) { | 199 | if (jsonNodes == null) { |
190 | return isisProcessesList; | 200 | return isisProcessesList; |
191 | } | 201 | } |
... | @@ -193,49 +203,335 @@ public class Controller { | ... | @@ -193,49 +203,335 @@ public class Controller { |
193 | List<IsisInterface> interfaceList = new ArrayList<>(); | 203 | List<IsisInterface> interfaceList = new ArrayList<>(); |
194 | for (JsonNode jsonNode1 : jsonNode.path(IsisConstants.INTERFACE)) { | 204 | for (JsonNode jsonNode1 : jsonNode.path(IsisConstants.INTERFACE)) { |
195 | IsisInterface isisInterface = new DefaultIsisInterface(); | 205 | IsisInterface isisInterface = new DefaultIsisInterface(); |
196 | - isisInterface.setInterfaceIndex(jsonNode1.path(IsisConstants.INTERFACEINDEX).asInt()); | 206 | + String index = jsonNode1.path(IsisConstants.INTERFACEINDEX).asText(); |
197 | - isisInterface.setInterfaceIpAddress(Ip4Address.valueOf(jsonNode1 | 207 | + if (isPrimitive(index)) { |
198 | - .path(IsisConstants.INTERFACEIP) | 208 | + int input = Integer.parseInt(index); |
199 | - .asText())); | 209 | + if (input < 1 || input > 255) { |
210 | + log.debug("Wrong interface index: {}", index); | ||
211 | + continue; | ||
212 | + } | ||
213 | + isisInterface.setInterfaceIndex(Integer.parseInt(index)); | ||
214 | + } else { | ||
215 | + log.debug("Wrong interface index {}", index); | ||
216 | + continue; | ||
217 | + } | ||
218 | + Ip4Address ipAddress = getInterfaceIp(isisInterface.interfaceIndex()); | ||
219 | + if (ipAddress != null && !ipAddress.equals(IsisConstants.DEFAULTIP)) { | ||
220 | + isisInterface.setInterfaceIpAddress(ipAddress); | ||
221 | + } else { | ||
222 | + log.debug("Wrong interface index {}. No matching interface in system.", index); | ||
223 | + continue; | ||
224 | + } | ||
225 | + MacAddress macAddress = getInterfaceMac(isisInterface.interfaceIndex()); | ||
226 | + if (macAddress != null) { | ||
227 | + isisInterface.setInterfaceMacAddress(macAddress); | ||
228 | + } else { | ||
229 | + log.debug("Wrong interface index {}. No matching interface in system.", index); | ||
230 | + continue; | ||
231 | + } | ||
232 | + String mask = getInterfaceMask(isisInterface.interfaceIndex()); | ||
233 | + if (mask != null) { | ||
200 | try { | 234 | try { |
201 | - isisInterface.setNetworkMask(InetAddress.getByName((jsonNode1 | 235 | + isisInterface.setNetworkMask(InetAddress.getByName(mask).getAddress()); |
202 | - .path(IsisConstants.NETWORKMASK).asText())).getAddress()); | ||
203 | } catch (UnknownHostException e) { | 236 | } catch (UnknownHostException e) { |
204 | - log.debug("Error:: Parsing network mask"); | 237 | + log.debug("Wrong interface index {}. Error while getting network mask.", index); |
238 | + } | ||
239 | + } else { | ||
240 | + log.debug("Wrong interface index {}. Error while getting network mask.", index); | ||
241 | + continue; | ||
205 | } | 242 | } |
206 | - isisInterface.setInterfaceMacAddress(MacAddress.valueOf(jsonNode1 | ||
207 | - .path(IsisConstants.MACADDRESS) | ||
208 | - .asText())); | ||
209 | isisInterface.setIntermediateSystemName(jsonNode1 | 243 | isisInterface.setIntermediateSystemName(jsonNode1 |
210 | .path(IsisConstants.INTERMEDIATESYSTEMNAME) | 244 | .path(IsisConstants.INTERMEDIATESYSTEMNAME) |
211 | .asText()); | 245 | .asText()); |
212 | - isisInterface.setSystemId(jsonNode1.path(IsisConstants.SYSTEMID).asText()); | 246 | + String systemId = jsonNode1.path(IsisConstants.SYSTEMID).asText(); |
213 | - isisInterface.setReservedPacketCircuitType(jsonNode1 | 247 | + if (isValidSystemId(systemId)) { |
214 | - .path(IsisConstants.RESERVEDPACKETCIRCUITTYPE) | 248 | + isisInterface.setSystemId(systemId); |
215 | - .asInt()); | 249 | + } else { |
216 | - if (isisInterface.reservedPacketCircuitType() == IsisRouterType.L1.value()) { | 250 | + log.debug("Wrong systemId: {} for interface index {}.", systemId, index); |
217 | - isisInterface.setL1LanId(jsonNode1.path(IsisConstants.LANID).asText()); | 251 | + continue; |
218 | - } | 252 | + } |
219 | - isisInterface.setIdLength(jsonNode1.path(IsisConstants.IDLENGTH).asInt()); | 253 | + String circuitType = jsonNode1.path(IsisConstants.RESERVEDPACKETCIRCUITTYPE).asText(); |
220 | - isisInterface.setMaxAreaAddresses(jsonNode1.path(IsisConstants.MAXAREAADDRESSES).asInt()); | 254 | + if (isPrimitive(circuitType)) { |
221 | - isisInterface.setNetworkType(IsisNetworkType.get(jsonNode1 | 255 | + int input = Integer.parseInt(circuitType); |
222 | - .path(IsisConstants.NETWORKTYPE) | 256 | + if (input < 1 || input > 3) { |
223 | - .asInt())); | 257 | + log.debug("Wrong ReservedPacketCircuitType: {} for interface index {}.", circuitType, index); |
224 | - isisInterface.setAreaAddress(jsonNode1.path(IsisConstants.AREAADDRESS).asText()); | 258 | + continue; |
225 | - isisInterface.setAreaLength(jsonNode1.path(IsisConstants.AREALENGTH).asInt()); | 259 | + } |
226 | - isisInterface.setLspId(jsonNode1.path(IsisConstants.LSPID).asText()); | 260 | + isisInterface.setReservedPacketCircuitType(input); |
227 | - isisInterface.setCircuitId(jsonNode1.path(IsisConstants.CIRCUITID).asText()); | 261 | + } else { |
228 | - isisInterface.setHoldingTime(jsonNode1.path(IsisConstants.HOLDINGTIME).asInt()); | 262 | + log.debug("Wrong ReservedPacketCircuitType: {} for interface index {}.", circuitType, index); |
229 | - isisInterface.setPriority(jsonNode1.path(IsisConstants.PRIORITY).asInt()); | 263 | + continue; |
230 | - isisInterface.setHelloInterval(jsonNode1.path(IsisConstants.HELLOINTERVAL).asInt()); | 264 | + } |
265 | + String networkType = jsonNode1.path(IsisConstants.NETWORKTYPE).asText(); | ||
266 | + if (isPrimitive(networkType)) { | ||
267 | + int input = Integer.parseInt(networkType); | ||
268 | + if (input < 1 || input > 2) { | ||
269 | + log.debug("Wrong networkType: {} for interface index {}.", networkType, index); | ||
270 | + continue; | ||
271 | + } | ||
272 | + isisInterface.setNetworkType(IsisNetworkType.get(input)); | ||
273 | + } else { | ||
274 | + log.debug("Wrong networkType: {} for interface index {}.", networkType, index); | ||
275 | + continue; | ||
276 | + } | ||
277 | + String areaAddress = jsonNode1.path(IsisConstants.AREAADDRESS).asText(); | ||
278 | + if (isPrimitive(areaAddress)) { | ||
279 | + if (areaAddress.length() > 7) { | ||
280 | + log.debug("Wrong areaAddress: {} for interface index {}.", areaAddress, index); | ||
281 | + continue; | ||
282 | + } | ||
283 | + isisInterface.setAreaAddress(areaAddress); | ||
284 | + } else { | ||
285 | + log.debug("Wrong areaAddress: {} for interface index {}.", areaAddress, index); | ||
286 | + continue; | ||
287 | + } | ||
288 | + String circuitId = jsonNode1.path(IsisConstants.CIRCUITID).asText(); | ||
289 | + if (isPrimitive(circuitId)) { | ||
290 | + int input = Integer.parseInt(circuitId); | ||
291 | + if (input < 1) { | ||
292 | + log.debug("Wrong circuitId: {} for interface index {}.", circuitId, index); | ||
293 | + continue; | ||
294 | + } | ||
295 | + isisInterface.setCircuitId(circuitId); | ||
296 | + } else { | ||
297 | + log.debug("Wrong circuitId: {} for interface index {}.", circuitId, index); | ||
298 | + continue; | ||
299 | + } | ||
300 | + String holdingTime = jsonNode1.path(IsisConstants.HOLDINGTIME).asText(); | ||
301 | + if (isPrimitive(holdingTime)) { | ||
302 | + int input = Integer.parseInt(holdingTime); | ||
303 | + if (input < 1 || input > 255) { | ||
304 | + log.debug("Wrong holdingTime: {} for interface index {}.", holdingTime, index); | ||
305 | + continue; | ||
306 | + } | ||
307 | + isisInterface.setHoldingTime(input); | ||
308 | + } else { | ||
309 | + log.debug("Wrong holdingTime: {} for interface index {}.", holdingTime, index); | ||
310 | + continue; | ||
311 | + } | ||
312 | + String helloInterval = jsonNode1.path(IsisConstants.HELLOINTERVAL).asText(); | ||
313 | + if (isPrimitive(helloInterval)) { | ||
314 | + int interval = Integer.parseInt(helloInterval); | ||
315 | + if (interval > 0 && interval <= 255) { | ||
316 | + isisInterface.setHelloInterval(interval); | ||
317 | + } else { | ||
318 | + log.debug("Wrong hello interval: {} for interface index {}.", helloInterval, index); | ||
319 | + continue; | ||
320 | + } | ||
321 | + } else { | ||
322 | + log.debug("Wrong hello interval: {} for interface index {}.", helloInterval, index); | ||
323 | + continue; | ||
324 | + } | ||
231 | interfaceList.add(isisInterface); | 325 | interfaceList.add(isisInterface); |
232 | } | 326 | } |
327 | + if (interfaceList.size() > 0) { | ||
233 | IsisProcess process = new DefaultIsisProcess(); | 328 | IsisProcess process = new DefaultIsisProcess(); |
234 | process.setProcessId(jsonNode.path(IsisConstants.PROCESSESID).asText()); | 329 | process.setProcessId(jsonNode.path(IsisConstants.PROCESSESID).asText()); |
235 | process.setIsisInterfaceList(interfaceList); | 330 | process.setIsisInterfaceList(interfaceList); |
236 | isisProcessesList.add(process); | 331 | isisProcessesList.add(process); |
332 | + } | ||
237 | }); | 333 | }); |
238 | 334 | ||
239 | return isisProcessesList; | 335 | return isisProcessesList; |
240 | } | 336 | } |
337 | + | ||
338 | + /** | ||
339 | + * Returns interface MAC by index. | ||
340 | + * | ||
341 | + * @param interfaceIndex interface index | ||
342 | + * @return interface IP by index | ||
343 | + */ | ||
344 | + private MacAddress getInterfaceMac(int interfaceIndex) { | ||
345 | + MacAddress macAddress = null; | ||
346 | + try { | ||
347 | + NetworkInterface networkInterface = NetworkInterface.getByIndex(interfaceIndex); | ||
348 | + macAddress = MacAddress.valueOf(networkInterface.getHardwareAddress()); | ||
349 | + } catch (Exception e) { | ||
350 | + log.debug("Error while getting Interface IP by index"); | ||
351 | + return macAddress; | ||
352 | + } | ||
353 | + | ||
354 | + return macAddress; | ||
355 | + } | ||
356 | + | ||
357 | + /** | ||
358 | + * Returns interface IP by index. | ||
359 | + * | ||
360 | + * @param interfaceIndex interface index | ||
361 | + * @return interface IP by index | ||
362 | + */ | ||
363 | + private Ip4Address getInterfaceIp(int interfaceIndex) { | ||
364 | + Ip4Address ipAddress = null; | ||
365 | + try { | ||
366 | + NetworkInterface networkInterface = NetworkInterface.getByIndex(interfaceIndex); | ||
367 | + Enumeration ipAddresses = networkInterface.getInetAddresses(); | ||
368 | + while (ipAddresses.hasMoreElements()) { | ||
369 | + InetAddress address = (InetAddress) ipAddresses.nextElement(); | ||
370 | + if (!address.isLinkLocalAddress()) { | ||
371 | + ipAddress = Ip4Address.valueOf(address.getAddress()); | ||
372 | + break; | ||
373 | + } | ||
374 | + } | ||
375 | + } catch (Exception e) { | ||
376 | + log.debug("Error while getting Interface IP by index"); | ||
377 | + return IsisConstants.DEFAULTIP; | ||
378 | + } | ||
379 | + return ipAddress; | ||
380 | + } | ||
381 | + | ||
382 | + /** | ||
383 | + * Returns interface MAC by index. | ||
384 | + * | ||
385 | + * @param interfaceIndex interface index | ||
386 | + * @return interface IP by index | ||
387 | + */ | ||
388 | + private String getInterfaceMask(int interfaceIndex) { | ||
389 | + String subnetMask = null; | ||
390 | + try { | ||
391 | + Ip4Address ipAddress = getInterfaceIp(interfaceIndex); | ||
392 | + NetworkInterface networkInterface = NetworkInterface.getByInetAddress( | ||
393 | + InetAddress.getByName(ipAddress.toString())); | ||
394 | + Enumeration ipAddresses = networkInterface.getInetAddresses(); | ||
395 | + int index = 0; | ||
396 | + while (ipAddresses.hasMoreElements()) { | ||
397 | + InetAddress address = (InetAddress) ipAddresses.nextElement(); | ||
398 | + if (!address.isLinkLocalAddress()) { | ||
399 | + break; | ||
400 | + } | ||
401 | + index++; | ||
402 | + } | ||
403 | + int prfLen = networkInterface.getInterfaceAddresses().get(index).getNetworkPrefixLength(); | ||
404 | + int shft = 0xffffffff << (32 - prfLen); | ||
405 | + int oct1 = ((byte) ((shft & 0xff000000) >> 24)) & 0xff; | ||
406 | + int oct2 = ((byte) ((shft & 0x00ff0000) >> 16)) & 0xff; | ||
407 | + int oct3 = ((byte) ((shft & 0x0000ff00) >> 8)) & 0xff; | ||
408 | + int oct4 = ((byte) (shft & 0x000000ff)) & 0xff; | ||
409 | + subnetMask = oct1 + "." + oct2 + "." + oct3 + "." + oct4; | ||
410 | + } catch (Exception e) { | ||
411 | + log.debug("Error while getting Interface network mask by index"); | ||
412 | + return subnetMask; | ||
413 | + } | ||
414 | + return subnetMask; | ||
415 | + } | ||
416 | + | ||
417 | + /** | ||
418 | + * Checks if primitive or not. | ||
419 | + * | ||
420 | + * @param value input value | ||
421 | + * @return true if number else false | ||
422 | + */ | ||
423 | + private boolean isPrimitive(String value) { | ||
424 | + boolean status = true; | ||
425 | + value = value.trim(); | ||
426 | + if (value.length() < 1) { | ||
427 | + return false; | ||
428 | + } | ||
429 | + for (int i = 0; i < value.length(); i++) { | ||
430 | + char c = value.charAt(i); | ||
431 | + if (!Character.isDigit(c)) { | ||
432 | + status = false; | ||
433 | + break; | ||
434 | + } | ||
435 | + } | ||
436 | + | ||
437 | + return status; | ||
438 | + } | ||
439 | + | ||
440 | + /** | ||
441 | + * Checks if system id is valid or not. | ||
442 | + * | ||
443 | + * @param value input value | ||
444 | + * @return true if valid else false | ||
445 | + */ | ||
446 | + private boolean isValidSystemId(String value) { | ||
447 | + value = value.trim(); | ||
448 | + boolean status = true; | ||
449 | + if (value.length() != 14) { | ||
450 | + return false; | ||
451 | + } | ||
452 | + for (int i = 0; i < value.length(); i++) { | ||
453 | + char c = value.charAt(i); | ||
454 | + if (!Character.isDigit(c)) { | ||
455 | + if (!((i == 4 || i == 9) && c == '.')) { | ||
456 | + status = false; | ||
457 | + break; | ||
458 | + } | ||
459 | + } | ||
460 | + } | ||
461 | + | ||
462 | + return status; | ||
463 | + } | ||
464 | + | ||
465 | + /** | ||
466 | + * Disconnects the executor. | ||
467 | + */ | ||
468 | + public void disconnectExecutor() { | ||
469 | + if (connectExecutor != null) { | ||
470 | + connectExecutor.shutdown(); | ||
471 | + connectExecutor = null; | ||
472 | + } | ||
473 | + } | ||
474 | + | ||
475 | + /** | ||
476 | + * Connects to peer. | ||
477 | + */ | ||
478 | + public void connectPeer() { | ||
479 | + scheduleConnectionRetry(this.connectRetryTime); | ||
480 | + } | ||
481 | + | ||
482 | + /** | ||
483 | + * Retry connection with exponential back-off mechanism. | ||
484 | + * | ||
485 | + * @param retryDelay retry delay | ||
486 | + */ | ||
487 | + private void scheduleConnectionRetry(long retryDelay) { | ||
488 | + if (this.connectExecutor == null) { | ||
489 | + this.connectExecutor = Executors.newSingleThreadScheduledExecutor(); | ||
490 | + } | ||
491 | + this.connectExecutor.schedule(new ConnectionRetry(), retryDelay, TimeUnit.MINUTES); | ||
492 | + } | ||
493 | + | ||
494 | + /** | ||
495 | + * Implements ISIS connection and manages connection to peer with back-off mechanism in case of failure. | ||
496 | + */ | ||
497 | + class ConnectionRetry implements Runnable { | ||
498 | + @Override | ||
499 | + public void run() { | ||
500 | + log.debug("Connect to peer {}", IsisConstants.SHOST); | ||
501 | + initConnection(); | ||
502 | + InetSocketAddress connectToSocket = new InetSocketAddress(IsisConstants.SHOST, isisPort.toInt()); | ||
503 | + try { | ||
504 | + peerBootstrap.connect(connectToSocket).addListener(new ChannelFutureListener() { | ||
505 | + @Override | ||
506 | + public void operationComplete(ChannelFuture future) throws Exception { | ||
507 | + if (!future.isSuccess()) { | ||
508 | + connectRetryCounter++; | ||
509 | + log.error("Connection failed, ConnectRetryCounter {} remote host {}", connectRetryCounter, | ||
510 | + IsisConstants.SHOST); | ||
511 | + /* | ||
512 | + * Reconnect to peer on failure is exponential till 4 mins, later on retry after every 4 | ||
513 | + * mins. | ||
514 | + */ | ||
515 | + if (connectRetryTime < RETRY_INTERVAL) { | ||
516 | + connectRetryTime = (connectRetryTime != 0) ? connectRetryTime * 2 : 1; | ||
517 | + } | ||
518 | + scheduleConnectionRetry(connectRetryTime); | ||
519 | + } else { | ||
520 | + connectRetryCounter++; | ||
521 | + log.info("Connected to remote host {}, Connect Counter {}", IsisConstants.SHOST, | ||
522 | + connectRetryCounter); | ||
523 | + disconnectExecutor(); | ||
524 | + isisChannelHandler.initializeInterfaceMap(); | ||
525 | + //Send the config packet | ||
526 | + isisChannelHandler.sentConfigPacket(configPacket); | ||
527 | + return; | ||
528 | + } | ||
529 | + } | ||
530 | + }); | ||
531 | + } catch (Exception e) { | ||
532 | + log.info("Connect peer exception : " + e.toString()); | ||
533 | + disconnectExecutor(); | ||
534 | + } | ||
535 | + } | ||
536 | + } | ||
241 | } | 537 | } |
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
protocols/isis/ctl/src/main/java/org/onosproject/isis/controller/impl/DefaultIsisController.java
100755 → 100644
File mode changed
protocols/isis/ctl/src/main/java/org/onosproject/isis/controller/impl/DefaultIsisInterface.java
100755 → 100644
... | @@ -69,15 +69,14 @@ public class DefaultIsisInterface implements IsisInterface { | ... | @@ -69,15 +69,14 @@ public class DefaultIsisInterface implements IsisInterface { |
69 | private MacAddress interfaceMacAddress; | 69 | private MacAddress interfaceMacAddress; |
70 | private String intermediateSystemName; | 70 | private String intermediateSystemName; |
71 | private String systemId; | 71 | private String systemId; |
72 | - private String l1LanId; | 72 | + private String l1LanId = IsisConstants.DEFAULTLANID; |
73 | - private String l2LanId; | 73 | + private String l2LanId = IsisConstants.DEFAULTLANID; |
74 | private int idLength; | 74 | private int idLength; |
75 | private int maxAreaAddresses; | 75 | private int maxAreaAddresses; |
76 | private int reservedPacketCircuitType; | 76 | private int reservedPacketCircuitType; |
77 | private IsisNetworkType networkType; | 77 | private IsisNetworkType networkType; |
78 | private String areaAddress; | 78 | private String areaAddress; |
79 | private int areaLength; | 79 | private int areaLength; |
80 | - private String lspId; | ||
81 | private int holdingTime; | 80 | private int holdingTime; |
82 | private int priority; | 81 | private int priority; |
83 | private String circuitId; | 82 | private String circuitId; |
... | @@ -114,10 +113,25 @@ public class DefaultIsisInterface implements IsisInterface { | ... | @@ -114,10 +113,25 @@ public class DefaultIsisInterface implements IsisInterface { |
114 | * @param isisNeighbor ISIS neighbor instance | 113 | * @param isisNeighbor ISIS neighbor instance |
115 | */ | 114 | */ |
116 | public void removeNeighbor(IsisNeighbor isisNeighbor) { | 115 | public void removeNeighbor(IsisNeighbor isisNeighbor) { |
116 | + log.debug("Neighbor removed - {}", isisNeighbor.neighborMacAddress()); | ||
117 | + isisNeighbor.stopHoldingTimeCheck(); | ||
118 | + isisNeighbor.stopInactivityTimeCheck(); | ||
117 | neighborList.remove(isisNeighbor.neighborMacAddress()); | 119 | neighborList.remove(isisNeighbor.neighborMacAddress()); |
118 | } | 120 | } |
119 | 121 | ||
120 | /** | 122 | /** |
123 | + * Removes all the neighbors. | ||
124 | + */ | ||
125 | + public void removeNeighbors() { | ||
126 | + Set<MacAddress> neighbors = neighbors(); | ||
127 | + for (MacAddress mac : neighbors) { | ||
128 | + removeNeighbor(lookup(mac)); | ||
129 | + log.debug("Neighbor removed - {}", mac); | ||
130 | + } | ||
131 | + neighborList.clear(); | ||
132 | + } | ||
133 | + | ||
134 | + /** | ||
121 | * Returns the ISIS neighbor instance if exists. | 135 | * Returns the ISIS neighbor instance if exists. |
122 | * | 136 | * |
123 | * @param isisNeighborMac mac address of the neighbor router | 137 | * @param isisNeighborMac mac address of the neighbor router |
... | @@ -400,24 +414,6 @@ public class DefaultIsisInterface implements IsisInterface { | ... | @@ -400,24 +414,6 @@ public class DefaultIsisInterface implements IsisInterface { |
400 | } | 414 | } |
401 | 415 | ||
402 | /** | 416 | /** |
403 | - * Returns LSP ID. | ||
404 | - * | ||
405 | - * @return LSP ID | ||
406 | - */ | ||
407 | - public String getLspId() { | ||
408 | - return lspId; | ||
409 | - } | ||
410 | - | ||
411 | - /** | ||
412 | - * Sets LSP ID. | ||
413 | - * | ||
414 | - * @param lspId link state packet ID | ||
415 | - */ | ||
416 | - public void setLspId(String lspId) { | ||
417 | - this.lspId = lspId; | ||
418 | - } | ||
419 | - | ||
420 | - /** | ||
421 | * Returns holding time. | 417 | * Returns holding time. |
422 | * | 418 | * |
423 | * @return holding time | 419 | * @return holding time |
... | @@ -518,9 +514,21 @@ public class DefaultIsisInterface implements IsisInterface { | ... | @@ -518,9 +514,21 @@ public class DefaultIsisInterface implements IsisInterface { |
518 | */ | 514 | */ |
519 | public void processIsisMessage(IsisMessage isisMessage, IsisLsdb isisLsdb, Channel channel) { | 515 | public void processIsisMessage(IsisMessage isisMessage, IsisLsdb isisLsdb, Channel channel) { |
520 | log.debug("IsisInterfaceImpl::processIsisMessage...!!!"); | 516 | log.debug("IsisInterfaceImpl::processIsisMessage...!!!"); |
521 | - if (channel == null) { | ||
522 | this.channel = channel; | 517 | this.channel = channel; |
518 | + | ||
519 | + if (isisMessage.sourceMac().equals(interfaceMacAddress)) { | ||
520 | + log.debug("Received our own message {}...!!!", isisMessage.isisPduType()); | ||
521 | + return; | ||
523 | } | 522 | } |
523 | + | ||
524 | + if (isisMessage.isisPduType() == IsisPduType.P2PHELLOPDU && networkType.equals(IsisNetworkType.BROADCAST)) { | ||
525 | + return; | ||
526 | + } else if ((isisMessage.isisPduType() == IsisPduType.L1HELLOPDU || | ||
527 | + isisMessage.isisPduType() == IsisPduType.L2HELLOPDU) | ||
528 | + && networkType.equals(IsisNetworkType.P2P)) { | ||
529 | + return; | ||
530 | + } | ||
531 | + | ||
524 | if (this.isisLsdb == null) { | 532 | if (this.isisLsdb == null) { |
525 | this.isisLsdb = isisLsdb; | 533 | this.isisLsdb = isisLsdb; |
526 | } | 534 | } |
... | @@ -543,7 +551,7 @@ public class DefaultIsisInterface implements IsisInterface { | ... | @@ -543,7 +551,7 @@ public class DefaultIsisInterface implements IsisInterface { |
543 | break; | 551 | break; |
544 | case L1PSNP: | 552 | case L1PSNP: |
545 | case L2PSNP: | 553 | case L2PSNP: |
546 | - log.debug("Received a PSNP packet...!!!"); | 554 | + processPsnPduMessage(isisMessage, channel); |
547 | break; | 555 | break; |
548 | default: | 556 | default: |
549 | log.debug("Unknown packet to process...!!!"); | 557 | log.debug("Unknown packet to process...!!!"); |
... | @@ -560,6 +568,13 @@ public class DefaultIsisInterface implements IsisInterface { | ... | @@ -560,6 +568,13 @@ public class DefaultIsisInterface implements IsisInterface { |
560 | public boolean validateHelloMessage(HelloPdu helloPdu) { | 568 | public boolean validateHelloMessage(HelloPdu helloPdu) { |
561 | boolean isValid = false; | 569 | boolean isValid = false; |
562 | 570 | ||
571 | + if ((helloPdu.circuitType() == IsisRouterType.L1.value() && | ||
572 | + reservedPacketCircuitType == IsisRouterType.L2.value()) || | ||
573 | + (helloPdu.circuitType() == IsisRouterType.L2.value() && | ||
574 | + reservedPacketCircuitType == IsisRouterType.L1.value())) { | ||
575 | + return false; | ||
576 | + } | ||
577 | + | ||
563 | //Local InterfaceAddress TLV and compare with the IP Interface address and check if they are in same subnet | 578 | //Local InterfaceAddress TLV and compare with the IP Interface address and check if they are in same subnet |
564 | List<Ip4Address> interfaceIpAddresses = helloPdu.interfaceIpAddresses(); | 579 | List<Ip4Address> interfaceIpAddresses = helloPdu.interfaceIpAddresses(); |
565 | Ip4Address neighborIp = (helloPdu.interfaceIpAddresses() != null) ? | 580 | Ip4Address neighborIp = (helloPdu.interfaceIpAddresses() != null) ? |
... | @@ -569,12 +584,17 @@ public class DefaultIsisInterface implements IsisInterface { | ... | @@ -569,12 +584,17 @@ public class DefaultIsisInterface implements IsisInterface { |
569 | } | 584 | } |
570 | 585 | ||
571 | //Verify if it's in same area, Areas which the router belongs to | 586 | //Verify if it's in same area, Areas which the router belongs to |
587 | + if (helloPdu.circuitType() == IsisRouterType.L1.value()) { | ||
572 | List<String> areas = helloPdu.areaAddress(); | 588 | List<String> areas = helloPdu.areaAddress(); |
573 | for (String area : areas) { | 589 | for (String area : areas) { |
574 | if (areaAddress.equals(area)) { | 590 | if (areaAddress.equals(area)) { |
575 | isValid = true; | 591 | isValid = true; |
576 | } | 592 | } |
577 | } | 593 | } |
594 | + } else if (helloPdu.circuitType() == IsisRouterType.L2.value() || | ||
595 | + helloPdu.circuitType() == IsisRouterType.L1L2.value()) { | ||
596 | + isValid = true; | ||
597 | + } | ||
578 | 598 | ||
579 | return isValid; | 599 | return isValid; |
580 | } | 600 | } |
... | @@ -585,6 +605,7 @@ public class DefaultIsisInterface implements IsisInterface { | ... | @@ -585,6 +605,7 @@ public class DefaultIsisInterface implements IsisInterface { |
585 | * @param neighborMac neighbor MAc address | 605 | * @param neighborMac neighbor MAc address |
586 | * @return true if neighbor exist else false | 606 | * @return true if neighbor exist else false |
587 | */ | 607 | */ |
608 | + | ||
588 | private boolean isNeighborInList(MacAddress neighborMac) { | 609 | private boolean isNeighborInList(MacAddress neighborMac) { |
589 | return neighborList.containsKey(neighborMac); | 610 | return neighborList.containsKey(neighborMac); |
590 | } | 611 | } |
... | @@ -623,9 +644,8 @@ public class DefaultIsisInterface implements IsisInterface { | ... | @@ -623,9 +644,8 @@ public class DefaultIsisInterface implements IsisInterface { |
623 | log.debug("IsisInterfaceImpl::processHelloMessage::Interface Type {} ISISInterfaceState {} ", | 644 | log.debug("IsisInterfaceImpl::processHelloMessage::Interface Type {} ISISInterfaceState {} ", |
624 | networkType, interfaceState); | 645 | networkType, interfaceState); |
625 | 646 | ||
626 | - //If L1 Hello, validate the area, network and max address | 647 | + //If validate the area, network and max address |
627 | - if (IsisPduType.get(helloPacket.pduType()) == IsisPduType.L1HELLOPDU && | 648 | + if (!validateHelloMessage(helloPacket)) { |
628 | - !validateHelloMessage(helloPacket)) { | ||
629 | return; | 649 | return; |
630 | } | 650 | } |
631 | 651 | ||
... | @@ -637,6 +657,7 @@ public class DefaultIsisInterface implements IsisInterface { | ... | @@ -637,6 +657,7 @@ public class DefaultIsisInterface implements IsisInterface { |
637 | addNeighbouringRouter(neighbor); | 657 | addNeighbouringRouter(neighbor); |
638 | } | 658 | } |
639 | 659 | ||
660 | + neighbor.setHoldingTime(helloPacket.holdingTime()); | ||
640 | neighbor.stopInactivityTimeCheck(); | 661 | neighbor.stopInactivityTimeCheck(); |
641 | neighbor.startInactivityTimeCheck(); | 662 | neighbor.startInactivityTimeCheck(); |
642 | 663 | ||
... | @@ -644,34 +665,40 @@ public class DefaultIsisInterface implements IsisInterface { | ... | @@ -644,34 +665,40 @@ public class DefaultIsisInterface implements IsisInterface { |
644 | String lanId = helloPacket.lanId(); | 665 | String lanId = helloPacket.lanId(); |
645 | 666 | ||
646 | if (IsisPduType.L1HELLOPDU == helloPacket.isisPduType()) { | 667 | if (IsisPduType.L1HELLOPDU == helloPacket.isisPduType()) { |
647 | - buildUpdateAndSendSelfGeneratedLspIfDisChange(l1LanId, lanId, channel); | 668 | + buildUpdateAndSendSelfGeneratedLspIfDisChange(l1LanId, lanId, channel, |
669 | + IsisRouterType.get(helloPacket.circuitType())); | ||
648 | l1LanId = lanId; | 670 | l1LanId = lanId; |
649 | neighbor.setL1LanId(lanId); | 671 | neighbor.setL1LanId(lanId); |
650 | //if a change in lanid | 672 | //if a change in lanid |
651 | } else if (IsisPduType.L2HELLOPDU == helloPacket.isisPduType()) { | 673 | } else if (IsisPduType.L2HELLOPDU == helloPacket.isisPduType()) { |
652 | - buildUpdateAndSendSelfGeneratedLspIfDisChange(l1LanId, lanId, channel); | 674 | + buildUpdateAndSendSelfGeneratedLspIfDisChange(l2LanId, lanId, channel, |
675 | + IsisRouterType.get(helloPacket.circuitType())); | ||
653 | l2LanId = lanId; | 676 | l2LanId = lanId; |
654 | neighbor.setL2LanId(lanId); | 677 | neighbor.setL2LanId(lanId); |
655 | } | 678 | } |
656 | 679 | ||
657 | //Check in neighbors list our MAC address present | 680 | //Check in neighbors list our MAC address present |
658 | List<MacAddress> neighbors = helloPacket.neighborList(); | 681 | List<MacAddress> neighbors = helloPacket.neighborList(); |
682 | + if (neighbors != null) { | ||
659 | for (MacAddress macAddress : neighbors) { | 683 | for (MacAddress macAddress : neighbors) { |
660 | if (interfaceMacAddress.equals(macAddress)) { | 684 | if (interfaceMacAddress.equals(macAddress)) { |
661 | neighbor.setNeighborState(IsisInterfaceState.UP); | 685 | neighbor.setNeighborState(IsisInterfaceState.UP); |
662 | //Build Self LSP add in LSDB and sent it. | 686 | //Build Self LSP add in LSDB and sent it. |
663 | - buildStoreAndSendSelfGeneratedLspIfNotExistInDb(channel); | 687 | + buildStoreAndSendSelfGeneratedLspIfNotExistInDb(channel, |
688 | + IsisRouterType.get(helloPacket.circuitType())); | ||
664 | break; | 689 | break; |
665 | } | 690 | } |
666 | } | 691 | } |
667 | } | 692 | } |
693 | + } | ||
668 | 694 | ||
669 | /** | 695 | /** |
670 | * Builds and store and send self generated LSP. | 696 | * Builds and store and send self generated LSP. |
671 | * | 697 | * |
672 | * @param channel netty channel instance | 698 | * @param channel netty channel instance |
673 | */ | 699 | */ |
674 | - private void buildStoreAndSendSelfGeneratedLspIfNotExistInDb(Channel channel) { | 700 | + private void buildStoreAndSendSelfGeneratedLspIfNotExistInDb(Channel channel, IsisRouterType neighborRouterType) { |
701 | + this.channel = channel; | ||
675 | //Check our LSP is present in DB. else create a self LSP and store it and sent it | 702 | //Check our LSP is present in DB. else create a self LSP and store it and sent it |
676 | String lspKey = isisLsdb.lspKey(systemId); | 703 | String lspKey = isisLsdb.lspKey(systemId); |
677 | LspWrapper wrapper = null; | 704 | LspWrapper wrapper = null; |
... | @@ -690,21 +717,28 @@ public class DefaultIsisInterface implements IsisInterface { | ... | @@ -690,21 +717,28 @@ public class DefaultIsisInterface implements IsisInterface { |
690 | sendLsp(lsp, channel); | 717 | sendLsp(lsp, channel); |
691 | } | 718 | } |
692 | } else if (reservedPacketCircuitType == IsisRouterType.L1L2.value()) { | 719 | } else if (reservedPacketCircuitType == IsisRouterType.L1L2.value()) { |
720 | + if ((neighborRouterType == IsisRouterType.L1 || neighborRouterType == IsisRouterType.L1L2)) { | ||
721 | + | ||
693 | wrapper = isisLsdb.findLsp(IsisPduType.L1LSPDU, lspKey); | 722 | wrapper = isisLsdb.findLsp(IsisPduType.L1LSPDU, lspKey); |
694 | if (wrapper == null) { | 723 | if (wrapper == null) { |
695 | - LsPdu lsp = new LspGenerator().getLsp(this, lspKey, IsisPduType.L1LSPDU, allConfiguredInterfaceIps); | 724 | + LsPdu lsp = new LspGenerator().getLsp(this, lspKey, IsisPduType.L1LSPDU, |
725 | + allConfiguredInterfaceIps); | ||
696 | isisLsdb.addLsp(lsp, true, this); | 726 | isisLsdb.addLsp(lsp, true, this); |
697 | sendLsp(lsp, channel); | 727 | sendLsp(lsp, channel); |
698 | } | 728 | } |
729 | + } | ||
699 | 730 | ||
731 | + if ((neighborRouterType == IsisRouterType.L2 || neighborRouterType == IsisRouterType.L1L2)) { | ||
700 | wrapper = isisLsdb.findLsp(IsisPduType.L2LSPDU, lspKey); | 732 | wrapper = isisLsdb.findLsp(IsisPduType.L2LSPDU, lspKey); |
701 | if (wrapper == null) { | 733 | if (wrapper == null) { |
702 | - LsPdu lsp = new LspGenerator().getLsp(this, lspKey, IsisPduType.L2LSPDU, allConfiguredInterfaceIps); | 734 | + LsPdu lsp = new LspGenerator().getLsp(this, lspKey, IsisPduType.L2LSPDU, |
735 | + allConfiguredInterfaceIps); | ||
703 | isisLsdb.addLsp(lsp, true, this); | 736 | isisLsdb.addLsp(lsp, true, this); |
704 | sendLsp(lsp, channel); | 737 | sendLsp(lsp, channel); |
705 | } | 738 | } |
706 | } | 739 | } |
707 | } | 740 | } |
741 | + } | ||
708 | 742 | ||
709 | /** | 743 | /** |
710 | * Builds and update in DB and send self generated LSP. | 744 | * Builds and update in DB and send self generated LSP. |
... | @@ -714,31 +748,37 @@ public class DefaultIsisInterface implements IsisInterface { | ... | @@ -714,31 +748,37 @@ public class DefaultIsisInterface implements IsisInterface { |
714 | * @param channel netty channel instance | 748 | * @param channel netty channel instance |
715 | */ | 749 | */ |
716 | private void buildUpdateAndSendSelfGeneratedLspIfDisChange(String previousLanId, | 750 | private void buildUpdateAndSendSelfGeneratedLspIfDisChange(String previousLanId, |
717 | - String latestLanId, Channel channel) { | 751 | + String latestLanId, Channel channel, |
752 | + IsisRouterType neighborRouterType) { | ||
753 | + this.channel = channel; | ||
718 | //If DIS change then build and sent LSP | 754 | //If DIS change then build and sent LSP |
719 | - if (previousLanId != null && !previousLanId.equals(IsisConstants.DEFAULTLANID) && | 755 | + if (!previousLanId.equals(latestLanId)) { |
720 | - !previousLanId.equals(latestLanId)) { | ||
721 | //Create a self LSP and Update it in DB and sent it | 756 | //Create a self LSP and Update it in DB and sent it |
722 | String lspKey = isisLsdb.lspKey(systemId); | 757 | String lspKey = isisLsdb.lspKey(systemId); |
723 | if (reservedPacketCircuitType == IsisRouterType.L1.value()) { | 758 | if (reservedPacketCircuitType == IsisRouterType.L1.value()) { |
724 | LsPdu lsp = new LspGenerator().getLsp(this, lspKey, IsisPduType.L1LSPDU, allConfiguredInterfaceIps); | 759 | LsPdu lsp = new LspGenerator().getLsp(this, lspKey, IsisPduType.L1LSPDU, allConfiguredInterfaceIps); |
725 | isisLsdb.addLsp(lsp, true, this); | 760 | isisLsdb.addLsp(lsp, true, this); |
726 | sendLsp(lsp, channel); | 761 | sendLsp(lsp, channel); |
727 | - } else if (reservedPacketCircuitType == IsisRouterType.L2.value()) { | 762 | + } else if (reservedPacketCircuitType == IsisRouterType.L2.value() && |
763 | + (neighborRouterType == IsisRouterType.L2 || neighborRouterType == IsisRouterType.L1L2)) { | ||
728 | LsPdu lsp = new LspGenerator().getLsp(this, lspKey, IsisPduType.L2LSPDU, allConfiguredInterfaceIps); | 764 | LsPdu lsp = new LspGenerator().getLsp(this, lspKey, IsisPduType.L2LSPDU, allConfiguredInterfaceIps); |
729 | isisLsdb.addLsp(lsp, true, this); | 765 | isisLsdb.addLsp(lsp, true, this); |
730 | sendLsp(lsp, channel); | 766 | sendLsp(lsp, channel); |
731 | } else if (reservedPacketCircuitType == IsisRouterType.L1L2.value()) { | 767 | } else if (reservedPacketCircuitType == IsisRouterType.L1L2.value()) { |
732 | //L1 LSPDU | 768 | //L1 LSPDU |
769 | + if (neighborRouterType == IsisRouterType.L1 || neighborRouterType == IsisRouterType.L1L2) { | ||
733 | LsPdu lsp = new LspGenerator().getLsp(this, lspKey, IsisPduType.L1LSPDU, allConfiguredInterfaceIps); | 770 | LsPdu lsp = new LspGenerator().getLsp(this, lspKey, IsisPduType.L1LSPDU, allConfiguredInterfaceIps); |
734 | isisLsdb.addLsp(lsp, true, this); | 771 | isisLsdb.addLsp(lsp, true, this); |
735 | sendLsp(lsp, channel); | 772 | sendLsp(lsp, channel); |
773 | + } | ||
736 | //L1 LSPDU | 774 | //L1 LSPDU |
737 | - lsp = new LspGenerator().getLsp(this, lspKey, IsisPduType.L2LSPDU, allConfiguredInterfaceIps); | 775 | + if (neighborRouterType == IsisRouterType.L2 || neighborRouterType == IsisRouterType.L1L2) { |
776 | + LsPdu lsp = new LspGenerator().getLsp(this, lspKey, IsisPduType.L2LSPDU, allConfiguredInterfaceIps); | ||
738 | isisLsdb.addLsp(lsp, true, this); | 777 | isisLsdb.addLsp(lsp, true, this); |
739 | sendLsp(lsp, channel); | 778 | sendLsp(lsp, channel); |
740 | } | 779 | } |
741 | } | 780 | } |
781 | + } | ||
742 | 782 | ||
743 | } | 783 | } |
744 | 784 | ||
... | @@ -756,8 +796,10 @@ public class DefaultIsisInterface implements IsisInterface { | ... | @@ -756,8 +796,10 @@ public class DefaultIsisInterface implements IsisInterface { |
756 | lspBytes = IsisUtil.addChecksum(lspBytes, IsisConstants.CHECKSUMPOSITION, | 796 | lspBytes = IsisUtil.addChecksum(lspBytes, IsisConstants.CHECKSUMPOSITION, |
757 | IsisConstants.CHECKSUMPOSITION + 1); | 797 | IsisConstants.CHECKSUMPOSITION + 1); |
758 | //write to the channel | 798 | //write to the channel |
799 | + if (channel != null && channel.isConnected() && channel.isOpen()) { | ||
759 | channel.write(IsisUtil.framePacket(lspBytes, interfaceIndex)); | 800 | channel.write(IsisUtil.framePacket(lspBytes, interfaceIndex)); |
760 | } | 801 | } |
802 | + } | ||
761 | 803 | ||
762 | /** | 804 | /** |
763 | * Processes P2P hello message. | 805 | * Processes P2P hello message. |
... | @@ -794,7 +836,7 @@ public class DefaultIsisInterface implements IsisInterface { | ... | @@ -794,7 +836,7 @@ public class DefaultIsisInterface implements IsisInterface { |
794 | addNeighbouringRouter(neighbor); | 836 | addNeighbouringRouter(neighbor); |
795 | } | 837 | } |
796 | neighbor.setNeighborState(IsisInterfaceState.DOWN); | 838 | neighbor.setNeighborState(IsisInterfaceState.DOWN); |
797 | - buildStoreAndSendSelfGeneratedLspIfNotExistInDb(channel); | 839 | + buildStoreAndSendSelfGeneratedLspIfNotExistInDb(channel, IsisRouterType.get(helloPacket.circuitType())); |
798 | } else if (stateTlv.adjacencyType() == IsisInterfaceState.DOWN.value()) { | 840 | } else if (stateTlv.adjacencyType() == IsisInterfaceState.DOWN.value()) { |
799 | neighbor = neighbouringRouter(isisMessage.sourceMac()); | 841 | neighbor = neighbouringRouter(isisMessage.sourceMac()); |
800 | if (neighbor == null) { | 842 | if (neighbor == null) { |
... | @@ -805,6 +847,10 @@ public class DefaultIsisInterface implements IsisInterface { | ... | @@ -805,6 +847,10 @@ public class DefaultIsisInterface implements IsisInterface { |
805 | } else if (stateTlv.adjacencyType() == IsisInterfaceState.INITIAL.value()) { | 847 | } else if (stateTlv.adjacencyType() == IsisInterfaceState.INITIAL.value()) { |
806 | //Neighbor already present in the list | 848 | //Neighbor already present in the list |
807 | neighbor = neighbouringRouter(isisMessage.sourceMac()); | 849 | neighbor = neighbouringRouter(isisMessage.sourceMac()); |
850 | + if (neighbor == null) { | ||
851 | + neighbor = new DefaultIsisNeighbor(helloPacket, this); | ||
852 | + addNeighbouringRouter(neighbor); | ||
853 | + } | ||
808 | neighbor.setNeighborState(IsisInterfaceState.INITIAL); | 854 | neighbor.setNeighborState(IsisInterfaceState.INITIAL); |
809 | neighbor.setLocalExtendedCircuitId(stateTlv.localCircuitId()); | 855 | neighbor.setLocalExtendedCircuitId(stateTlv.localCircuitId()); |
810 | //interfaceState = IsisInterfaceState.UP; | 856 | //interfaceState = IsisInterfaceState.UP; |
... | @@ -813,9 +859,10 @@ public class DefaultIsisInterface implements IsisInterface { | ... | @@ -813,9 +859,10 @@ public class DefaultIsisInterface implements IsisInterface { |
813 | neighbor = neighbouringRouter(isisMessage.sourceMac()); | 859 | neighbor = neighbouringRouter(isisMessage.sourceMac()); |
814 | neighbor.setNeighborState(IsisInterfaceState.UP); | 860 | neighbor.setNeighborState(IsisInterfaceState.UP); |
815 | neighbor.setLocalExtendedCircuitId(stateTlv.localCircuitId()); | 861 | neighbor.setLocalExtendedCircuitId(stateTlv.localCircuitId()); |
816 | - buildStoreAndSendSelfGeneratedLspIfNotExistInDb(channel); | 862 | + buildStoreAndSendSelfGeneratedLspIfNotExistInDb(channel, IsisRouterType.get(helloPacket.circuitType())); |
817 | } | 863 | } |
818 | 864 | ||
865 | + neighbor.setHoldingTime(helloPacket.holdingTime()); | ||
819 | neighbor.stopInactivityTimeCheck(); | 866 | neighbor.stopInactivityTimeCheck(); |
820 | neighbor.startInactivityTimeCheck(); | 867 | neighbor.startInactivityTimeCheck(); |
821 | } | 868 | } |
... | @@ -828,12 +875,37 @@ public class DefaultIsisInterface implements IsisInterface { | ... | @@ -828,12 +875,37 @@ public class DefaultIsisInterface implements IsisInterface { |
828 | */ | 875 | */ |
829 | public void processLsPduMessage(IsisMessage isisMessage, Channel channel) { | 876 | public void processLsPduMessage(IsisMessage isisMessage, Channel channel) { |
830 | log.debug("Enters processLsPduMessage ...!!!"); | 877 | log.debug("Enters processLsPduMessage ...!!!"); |
878 | + IsisNeighbor neighbor = neighbouringRouter(isisMessage.sourceMac()); | ||
879 | + if (networkType == IsisNetworkType.BROADCAST && neighbor == null) { | ||
880 | + return; | ||
881 | + } | ||
882 | + | ||
831 | LsPdu lsPdu = (LsPdu) isisMessage; | 883 | LsPdu lsPdu = (LsPdu) isisMessage; |
832 | LspWrapper wrapper = isisLsdb.findLsp(lsPdu.isisPduType(), lsPdu.lspId()); | 884 | LspWrapper wrapper = isisLsdb.findLsp(lsPdu.isisPduType(), lsPdu.lspId()); |
833 | if (wrapper == null || isisLsdb.isNewerOrSameLsp(lsPdu, wrapper.lsPdu()).equalsIgnoreCase("latest")) { | 885 | if (wrapper == null || isisLsdb.isNewerOrSameLsp(lsPdu, wrapper.lsPdu()).equalsIgnoreCase("latest")) { |
886 | + if (wrapper != null) { // verify if the LSA - is your own LSA - get system ID and compare LSP | ||
887 | + String lspKey = isisLsdb.lspKey(systemId); | ||
888 | + if (lsPdu.lspId().equals(lspKey)) { | ||
889 | + lsPdu.setSequenceNumber(lsPdu.sequenceNumber() + 1); | ||
890 | + if (lsPdu.pduType() == IsisPduType.L1LSPDU.value()) { | ||
891 | + // setting the ls sequence number | ||
892 | + isisLsdb.setL1LspSeqNo(lsPdu.sequenceNumber()); | ||
893 | + } else if (lsPdu.pduType() == IsisPduType.L2LSPDU.value()) { | ||
894 | + // setting the ls sequence number | ||
895 | + isisLsdb.setL2LspSeqNo(lsPdu.sequenceNumber()); | ||
896 | + } | ||
897 | + isisLsdb.addLsp(lsPdu, true, this); | ||
898 | + sendLsp(lsPdu, channel); | ||
899 | + } else { | ||
900 | + isisLsdb.addLsp(lsPdu, false, this); | ||
901 | + } | ||
902 | + | ||
903 | + | ||
904 | + } else { | ||
834 | //not exist in the database or latest, then add it in database | 905 | //not exist in the database or latest, then add it in database |
835 | isisLsdb.addLsp(lsPdu, false, this); | 906 | isisLsdb.addLsp(lsPdu, false, this); |
836 | } | 907 | } |
908 | + } | ||
837 | 909 | ||
838 | //If network type is P2P, acknowledge with a PSNP | 910 | //If network type is P2P, acknowledge with a PSNP |
839 | if (networkType() == IsisNetworkType.P2P) { | 911 | if (networkType() == IsisNetworkType.P2P) { |
... | @@ -865,39 +937,29 @@ public class DefaultIsisInterface implements IsisInterface { | ... | @@ -865,39 +937,29 @@ public class DefaultIsisInterface implements IsisInterface { |
865 | IsisConstants.RESERVEDPOSITION); | 937 | IsisConstants.RESERVEDPOSITION); |
866 | flagValue = false; | 938 | flagValue = false; |
867 | //write to the channel | 939 | //write to the channel |
940 | + if (channel != null && channel.isConnected() && channel.isOpen()) { | ||
868 | channel.write(IsisUtil.framePacket(psnpBytes, interfaceIndex)); | 941 | channel.write(IsisUtil.framePacket(psnpBytes, interfaceIndex)); |
869 | } | 942 | } |
870 | } | 943 | } |
944 | + } | ||
871 | 945 | ||
872 | /** | 946 | /** |
873 | - * Processes CSN PDU message. | 947 | + * Processes PSN PDU message. |
948 | + * Checks for self originated LSP entries in PSNP message and sends the missing LSP. | ||
874 | * | 949 | * |
875 | - * @param isisMessage CSN PDU message instance | 950 | + * @param isisMessage PSN PDU message instance |
876 | * @param channel channel instance | 951 | * @param channel channel instance |
877 | */ | 952 | */ |
878 | - public void processCsnPduMessage(IsisMessage isisMessage, Channel channel) { | 953 | + public void processPsnPduMessage(IsisMessage isisMessage, Channel channel) { |
879 | - log.debug("Enters processCsnPduMessage ...!!!"); | 954 | + log.debug("Enters processPsnPduMessage ...!!!"); |
880 | - if (reservedPacketCircuitType == IsisRouterType.L1.value()) { | 955 | + //If adjacency not formed don't process. |
881 | - processOnL1CsnPdu(isisMessage, channel); | 956 | + IsisNeighbor neighbor = neighbouringRouter(isisMessage.sourceMac()); |
882 | - } else if (reservedPacketCircuitType == IsisRouterType.L2.value()) { | 957 | + if (networkType == IsisNetworkType.BROADCAST && neighbor == null) { |
883 | - processOnL2CsnPdu(isisMessage, channel); | 958 | + return; |
884 | - } | ||
885 | } | 959 | } |
886 | 960 | ||
887 | - /** | 961 | + Psnp psnPacket = (Psnp) isisMessage; |
888 | - * Process the isisMessage which belongs to L1 CSN PDU. | 962 | + List<IsisTlv> isisTlvs = psnPacket.getAllTlv(); |
889 | - * checks the database for this LsPdu if it exists further check for sequence number | ||
890 | - * sequence number is greater will send PsnPdu. | ||
891 | - * | ||
892 | - * @param isisMessage CSN PDU message instance | ||
893 | - * @param channel netty channel instance | ||
894 | - */ | ||
895 | - private void processOnL1CsnPdu(IsisMessage isisMessage, Channel channel) { | ||
896 | - Csnp csnPacket = (Csnp) isisMessage; | ||
897 | - List<LspEntry> lspEntryRequestList = new ArrayList<>(); | ||
898 | - boolean selfOriginatedFound = false; | ||
899 | - if (IsisPduType.L1CSNP.equals(csnPacket.isisPduType())) { | ||
900 | - List<IsisTlv> isisTlvs = csnPacket.getAllTlv(); | ||
901 | Iterator iterator = isisTlvs.iterator(); | 963 | Iterator iterator = isisTlvs.iterator(); |
902 | while (iterator.hasNext()) { | 964 | while (iterator.hasNext()) { |
903 | IsisTlv isisTlv = (IsisTlv) iterator.next(); | 965 | IsisTlv isisTlv = (IsisTlv) iterator.next(); |
... | @@ -908,52 +970,39 @@ public class DefaultIsisInterface implements IsisInterface { | ... | @@ -908,52 +970,39 @@ public class DefaultIsisInterface implements IsisInterface { |
908 | while (lspEntryListIterator.hasNext()) { | 970 | while (lspEntryListIterator.hasNext()) { |
909 | LspEntry lspEntry = (LspEntry) lspEntryListIterator.next(); | 971 | LspEntry lspEntry = (LspEntry) lspEntryListIterator.next(); |
910 | String lspKey = lspEntry.lspId(); | 972 | String lspKey = lspEntry.lspId(); |
911 | - LspWrapper lspWrapper = isisLsdb.findLsp(IsisPduType.L1LSPDU, lspKey); | 973 | + LspWrapper lspWrapper = isisLsdb.findLsp(psnPacket.isisPduType(), lspKey); |
912 | if (lspWrapper != null) { | 974 | if (lspWrapper != null) { |
913 | - LsPdu lsPdu = (LsPdu) lspWrapper.lsPdu(); | ||
914 | if (lspWrapper.isSelfOriginated()) { | 975 | if (lspWrapper.isSelfOriginated()) { |
915 | - selfOriginatedFound = true; | 976 | + //Sent the LSP |
916 | - if (lspEntry.lspSequenceNumber() > lsPdu.sequenceNumber()) { | 977 | + sendLsp((LsPdu) lspWrapper.lsPdu(), channel); |
917 | - sendLsPduMessage(lspEntry.lspSequenceNumber(), csnPacket.isisPduType(), channel); | ||
918 | - } | ||
919 | - } else { | ||
920 | - if (lsPdu.sequenceNumber() < lspEntry.lspSequenceNumber()) { | ||
921 | - lspEntryRequestList.add(lspEntry); | ||
922 | - flagValue = true; | ||
923 | } | 978 | } |
924 | } | 979 | } |
925 | - } else { | ||
926 | - lspEntryRequestList.add(lspEntry); | ||
927 | - flagValue = true; | ||
928 | } | 980 | } |
929 | } | 981 | } |
930 | } | 982 | } |
931 | } | 983 | } |
932 | - if (flagValue) { | ||
933 | - sendPsnPduMessage(lspEntryRequestList, csnPacket.isisPduType(), channel); | ||
934 | - } | ||
935 | - | ||
936 | - if (!selfOriginatedFound) { | ||
937 | - String lspKey = isisLsdb.lspKey(systemId); | ||
938 | - LspWrapper wrapper = isisLsdb.findLsp(IsisPduType.L1LSPDU, lspKey); | ||
939 | - sendLsp((LsPdu) wrapper.lsPdu(), channel); | ||
940 | - } | ||
941 | - } | ||
942 | - } | ||
943 | 984 | ||
944 | /** | 985 | /** |
945 | - * Process the isisMessage which belongs to L2 CSNP. | 986 | + * Processes CSN PDU message. |
946 | - * checks the database for this LsPdu if it exists further check for sequence number | ||
947 | - * sequence number is greater will send PsnPdu. | ||
948 | * | 987 | * |
949 | - * @param isisMessage received CSNP message | 988 | + * @param isisMessage CSN PDU message instance |
950 | - * @param channel netty channel instance | 989 | + * @param channel channel instance |
951 | */ | 990 | */ |
952 | - private void processOnL2CsnPdu(IsisMessage isisMessage, Channel channel) { | 991 | + public void processCsnPduMessage(IsisMessage isisMessage, Channel channel) { |
992 | + log.debug("Enters processCsnPduMessage ...!!!"); | ||
993 | + IsisNeighbor neighbor = neighbouringRouter(isisMessage.sourceMac()); | ||
994 | + if (networkType == IsisNetworkType.BROADCAST && neighbor == null) { | ||
995 | + return; | ||
996 | + } | ||
997 | + | ||
953 | Csnp csnPacket = (Csnp) isisMessage; | 998 | Csnp csnPacket = (Csnp) isisMessage; |
999 | + IsisPduType psnPduType = (IsisPduType.L2CSNP.equals(csnPacket.isisPduType())) ? | ||
1000 | + IsisPduType.L2PSNP : IsisPduType.L1PSNP; | ||
1001 | + IsisPduType lsPduType = (IsisPduType.L2CSNP.equals(csnPacket.isisPduType())) ? | ||
1002 | + IsisPduType.L2LSPDU : IsisPduType.L1LSPDU; | ||
1003 | + | ||
954 | List<LspEntry> lspEntryRequestList = new ArrayList<>(); | 1004 | List<LspEntry> lspEntryRequestList = new ArrayList<>(); |
955 | boolean selfOriginatedFound = false; | 1005 | boolean selfOriginatedFound = false; |
956 | - if (IsisPduType.L2CSNP.equals(csnPacket.isisPduType())) { | ||
957 | List<IsisTlv> isisTlvs = csnPacket.getAllTlv(); | 1006 | List<IsisTlv> isisTlvs = csnPacket.getAllTlv(); |
958 | Iterator iterator = isisTlvs.iterator(); | 1007 | Iterator iterator = isisTlvs.iterator(); |
959 | while (iterator.hasNext()) { | 1008 | while (iterator.hasNext()) { |
... | @@ -965,13 +1014,13 @@ public class DefaultIsisInterface implements IsisInterface { | ... | @@ -965,13 +1014,13 @@ public class DefaultIsisInterface implements IsisInterface { |
965 | while (lspEntryListIterator.hasNext()) { | 1014 | while (lspEntryListIterator.hasNext()) { |
966 | LspEntry lspEntry = (LspEntry) lspEntryListIterator.next(); | 1015 | LspEntry lspEntry = (LspEntry) lspEntryListIterator.next(); |
967 | String lspKey = lspEntry.lspId(); | 1016 | String lspKey = lspEntry.lspId(); |
968 | - LspWrapper lspWrapper = isisLsdb.findLsp(IsisPduType.L2LSPDU, lspKey); | 1017 | + LspWrapper lspWrapper = isisLsdb.findLsp(lsPduType, lspKey); |
969 | if (lspWrapper != null) { | 1018 | if (lspWrapper != null) { |
970 | LsPdu lsPdu = (LsPdu) lspWrapper.lsPdu(); | 1019 | LsPdu lsPdu = (LsPdu) lspWrapper.lsPdu(); |
971 | if (lspWrapper.isSelfOriginated()) { | 1020 | if (lspWrapper.isSelfOriginated()) { |
972 | selfOriginatedFound = true; | 1021 | selfOriginatedFound = true; |
973 | - if (lspEntry.lspSequenceNumber() > lsPdu.sequenceNumber()) { | 1022 | + if (lspEntry.lspSequenceNumber() < lsPdu.sequenceNumber()) { |
974 | - sendLsPduMessage(lspEntry.lspSequenceNumber(), csnPacket.isisPduType(), channel); | 1023 | + sendLsp(lsPdu, channel); |
975 | } | 1024 | } |
976 | } else { | 1025 | } else { |
977 | if (lsPdu.sequenceNumber() < lspEntry.lspSequenceNumber()) { | 1026 | if (lsPdu.sequenceNumber() < lspEntry.lspSequenceNumber()) { |
... | @@ -987,13 +1036,14 @@ public class DefaultIsisInterface implements IsisInterface { | ... | @@ -987,13 +1036,14 @@ public class DefaultIsisInterface implements IsisInterface { |
987 | } | 1036 | } |
988 | } | 1037 | } |
989 | if (flagValue) { | 1038 | if (flagValue) { |
990 | - sendPsnPduMessage(lspEntryRequestList, csnPacket.isisPduType(), channel); | 1039 | + sendPsnPduMessage(lspEntryRequestList, psnPduType, channel); |
991 | lspEntryRequestList.clear(); | 1040 | lspEntryRequestList.clear(); |
992 | } | 1041 | } |
993 | 1042 | ||
994 | if (!selfOriginatedFound) { | 1043 | if (!selfOriginatedFound) { |
995 | String lspKey = isisLsdb.lspKey(systemId); | 1044 | String lspKey = isisLsdb.lspKey(systemId); |
996 | - LspWrapper wrapper = isisLsdb.findLsp(IsisPduType.L2LSPDU, lspKey); | 1045 | + LspWrapper wrapper = isisLsdb.findLsp(lsPduType, lspKey); |
1046 | + if (wrapper != null) { | ||
997 | sendLsp((LsPdu) wrapper.lsPdu(), channel); | 1047 | sendLsp((LsPdu) wrapper.lsPdu(), channel); |
998 | } | 1048 | } |
999 | } | 1049 | } |
... | @@ -1007,13 +1057,7 @@ public class DefaultIsisInterface implements IsisInterface { | ... | @@ -1007,13 +1057,7 @@ public class DefaultIsisInterface implements IsisInterface { |
1007 | * @param channel netty channel instance | 1057 | * @param channel netty channel instance |
1008 | */ | 1058 | */ |
1009 | private void sendPsnPduMessage(List<LspEntry> lspEntryRequestList, IsisPduType isisPduType, Channel channel) { | 1059 | private void sendPsnPduMessage(List<LspEntry> lspEntryRequestList, IsisPduType isisPduType, Channel channel) { |
1010 | - IsisPduType psnpType = null; | 1060 | + IsisHeader isisHeader = new LspGenerator().getHeader(isisPduType); |
1011 | - if (isisPduType == IsisPduType.L1CSNP) { | ||
1012 | - psnpType = IsisPduType.L1PSNP; | ||
1013 | - } else if (reservedPacketCircuitType == IsisRouterType.L2.value()) { | ||
1014 | - psnpType = IsisPduType.L2PSNP; | ||
1015 | - } | ||
1016 | - IsisHeader isisHeader = new LspGenerator().getHeader(psnpType); | ||
1017 | Psnp psnp = new Psnp(isisHeader); | 1061 | Psnp psnp = new Psnp(isisHeader); |
1018 | psnp.setSourceId(lspKeyP2P(this.systemId)); | 1062 | psnp.setSourceId(lspKeyP2P(this.systemId)); |
1019 | TlvHeader tlvHeader = new TlvHeader(); | 1063 | TlvHeader tlvHeader = new TlvHeader(); |
... | @@ -1021,6 +1065,9 @@ public class DefaultIsisInterface implements IsisInterface { | ... | @@ -1021,6 +1065,9 @@ public class DefaultIsisInterface implements IsisInterface { |
1021 | tlvHeader.setTlvLength(0); | 1065 | tlvHeader.setTlvLength(0); |
1022 | LspEntriesTlv lspEntriesTlv = new LspEntriesTlv(tlvHeader); | 1066 | LspEntriesTlv lspEntriesTlv = new LspEntriesTlv(tlvHeader); |
1023 | for (LspEntry lspEntry : lspEntryRequestList) { | 1067 | for (LspEntry lspEntry : lspEntryRequestList) { |
1068 | + lspEntry.setLspChecksum(0); | ||
1069 | + lspEntry.setLspSequenceNumber(0); | ||
1070 | + lspEntry.setRemainingTime(0); | ||
1024 | lspEntriesTlv.addLspEntry(lspEntry); | 1071 | lspEntriesTlv.addLspEntry(lspEntry); |
1025 | } | 1072 | } |
1026 | psnp.addTlv(lspEntriesTlv); | 1073 | psnp.addTlv(lspEntriesTlv); |
... | @@ -1031,8 +1078,10 @@ public class DefaultIsisInterface implements IsisInterface { | ... | @@ -1031,8 +1078,10 @@ public class DefaultIsisInterface implements IsisInterface { |
1031 | IsisConstants.RESERVEDPOSITION); | 1078 | IsisConstants.RESERVEDPOSITION); |
1032 | flagValue = false; | 1079 | flagValue = false; |
1033 | //write to the channel | 1080 | //write to the channel |
1081 | + if (channel != null && channel.isConnected() && channel.isOpen()) { | ||
1034 | channel.write(IsisUtil.framePacket(psnpBytes, interfaceIndex)); | 1082 | channel.write(IsisUtil.framePacket(psnpBytes, interfaceIndex)); |
1035 | } | 1083 | } |
1084 | + } | ||
1036 | 1085 | ||
1037 | /** | 1086 | /** |
1038 | * Gets the LSP key. | 1087 | * Gets the LSP key. |
... | @@ -1048,28 +1097,6 @@ public class DefaultIsisInterface implements IsisInterface { | ... | @@ -1048,28 +1097,6 @@ public class DefaultIsisInterface implements IsisInterface { |
1048 | } | 1097 | } |
1049 | 1098 | ||
1050 | /** | 1099 | /** |
1051 | - * Sends the link state PDU with latest self generated lsp entry. | ||
1052 | - * | ||
1053 | - * @param sequenceNumber sequence number of the self generated lsp | ||
1054 | - * @param isisPduType intermediate system type | ||
1055 | - * @param channel netty channel instance | ||
1056 | - */ | ||
1057 | - private void sendLsPduMessage(int sequenceNumber, IsisPduType isisPduType, Channel channel) { | ||
1058 | - String lspKey = isisLsdb.lspKey(systemId); | ||
1059 | - LsPdu lsp = new LspGenerator().getLsp(this, lspKey, isisPduType, allConfiguredInterfaceIps); | ||
1060 | - lsp.setSequenceNumber(sequenceNumber); | ||
1061 | - byte[] lspBytes = lsp.asBytes(); | ||
1062 | - lspBytes = IsisUtil.addLengthAndMarkItInReserved(lspBytes, IsisConstants.LENGTHPOSITION, | ||
1063 | - IsisConstants.LENGTHPOSITION + 1, | ||
1064 | - IsisConstants.RESERVEDPOSITION); | ||
1065 | - lspBytes = IsisUtil.addChecksum(lspBytes, IsisConstants.CHECKSUMPOSITION, | ||
1066 | - IsisConstants.CHECKSUMPOSITION + 1); | ||
1067 | - //write to the channel | ||
1068 | - channel.write(IsisUtil.framePacket(lspBytes, interfaceIndex)); | ||
1069 | - } | ||
1070 | - | ||
1071 | - | ||
1072 | - /** | ||
1073 | * Starts the hello timer which sends hello packet every configured seconds. | 1100 | * Starts the hello timer which sends hello packet every configured seconds. |
1074 | * | 1101 | * |
1075 | * @param channel netty channel instance | 1102 | * @param channel netty channel instance |
... | @@ -1083,4 +1110,12 @@ public class DefaultIsisInterface implements IsisInterface { | ... | @@ -1083,4 +1110,12 @@ public class DefaultIsisInterface implements IsisInterface { |
1083 | exServiceHello.scheduleAtFixedRate(isisHelloPduSender, 0, | 1110 | exServiceHello.scheduleAtFixedRate(isisHelloPduSender, 0, |
1084 | helloInterval, TimeUnit.SECONDS); | 1111 | helloInterval, TimeUnit.SECONDS); |
1085 | } | 1112 | } |
1113 | + | ||
1114 | + /** | ||
1115 | + * Stops the hello timer which sends hello packet every configured seconds. | ||
1116 | + */ | ||
1117 | + public void stopHelloSender() { | ||
1118 | + log.debug("IsisInterfaceImpl::stopHelloSender"); | ||
1119 | + exServiceHello.shutdown(); | ||
1120 | + } | ||
1086 | } | 1121 | } |
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
protocols/isis/ctl/src/main/java/org/onosproject/isis/controller/impl/DefaultIsisNeighbor.java
100755 → 100644
... | @@ -88,6 +88,7 @@ public class DefaultIsisNeighbor implements IsisNeighbor { | ... | @@ -88,6 +88,7 @@ public class DefaultIsisNeighbor implements IsisNeighbor { |
88 | } | 88 | } |
89 | this.isisInterface = isisInterface; | 89 | this.isisInterface = isisInterface; |
90 | startHoldingTimeCheck(); | 90 | startHoldingTimeCheck(); |
91 | + log.debug("Neighbor added - {}", neighborMacAddress); | ||
91 | } | 92 | } |
92 | 93 | ||
93 | /** | 94 | /** |
... | @@ -387,6 +388,10 @@ public class DefaultIsisNeighbor implements IsisNeighbor { | ... | @@ -387,6 +388,10 @@ public class DefaultIsisNeighbor implements IsisNeighbor { |
387 | @Override | 388 | @Override |
388 | public void run() { | 389 | public void run() { |
389 | holdingTime--; | 390 | holdingTime--; |
391 | + if (holdingTime <= 0) { | ||
392 | + log.debug("Calling neighbor down. Holding time is 0."); | ||
393 | + neighborDown(); | ||
394 | + } | ||
390 | } | 395 | } |
391 | } | 396 | } |
392 | } | 397 | } |
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
protocols/isis/ctl/src/main/java/org/onosproject/isis/controller/impl/DefaultIsisProcess.java
100755 → 100644
File mode changed
protocols/isis/ctl/src/main/java/org/onosproject/isis/controller/impl/IsisChannelHandler.java
100755 → 100644
... | @@ -94,13 +94,35 @@ public class IsisChannelHandler extends IdleStateAwareChannelHandler { | ... | @@ -94,13 +94,35 @@ public class IsisChannelHandler extends IdleStateAwareChannelHandler { |
94 | for (IsisInterface isisUpdatedInterface : isisUpdatedProcess.isisInterfaceList()) { | 94 | for (IsisInterface isisUpdatedInterface : isisUpdatedProcess.isisInterfaceList()) { |
95 | IsisInterface isisInterface = isisInterfaceMap.get(isisUpdatedInterface.interfaceIndex()); | 95 | IsisInterface isisInterface = isisInterfaceMap.get(isisUpdatedInterface.interfaceIndex()); |
96 | if (isisInterface == null) { | 96 | if (isisInterface == null) { |
97 | - isisInterfaceMap.put(isisInterface.interfaceIndex(), isisInterface); | 97 | + isisInterfaceMap.put(isisUpdatedInterface.interfaceIndex(), isisUpdatedInterface); |
98 | - interfaceIps.add(isisInterface.interfaceIpAddress()); | 98 | + interfaceIps.add(isisUpdatedInterface.interfaceIpAddress()); |
99 | } else { | 99 | } else { |
100 | + if (isisInterface.intermediateSystemName() != isisUpdatedInterface.intermediateSystemName()) { | ||
101 | + isisInterface.setIntermediateSystemName(isisUpdatedInterface.intermediateSystemName()); | ||
102 | + } | ||
103 | + if (isisInterface.reservedPacketCircuitType() != isisUpdatedInterface.reservedPacketCircuitType()) { | ||
100 | isisInterface.setReservedPacketCircuitType(isisUpdatedInterface.reservedPacketCircuitType()); | 104 | isisInterface.setReservedPacketCircuitType(isisUpdatedInterface.reservedPacketCircuitType()); |
105 | + isisInterface.removeNeighbors(); | ||
106 | + } | ||
107 | + if (isisInterface.circuitId() != isisUpdatedInterface.circuitId()) { | ||
108 | + isisInterface.setCircuitId(isisUpdatedInterface.circuitId()); | ||
109 | + } | ||
110 | + if (isisInterface.networkType() != isisUpdatedInterface.networkType()) { | ||
101 | isisInterface.setNetworkType(isisUpdatedInterface.networkType()); | 111 | isisInterface.setNetworkType(isisUpdatedInterface.networkType()); |
112 | + isisInterface.removeNeighbors(); | ||
113 | + } | ||
114 | + if (isisInterface.areaAddress() != isisUpdatedInterface.areaAddress()) { | ||
115 | + isisInterface.setAreaAddress(isisUpdatedInterface.areaAddress()); | ||
116 | + } | ||
117 | + if (isisInterface.holdingTime() != isisUpdatedInterface.holdingTime()) { | ||
102 | isisInterface.setHoldingTime(isisUpdatedInterface.holdingTime()); | 118 | isisInterface.setHoldingTime(isisUpdatedInterface.holdingTime()); |
119 | + } | ||
120 | + if (isisInterface.helloInterval() != isisUpdatedInterface.helloInterval()) { | ||
103 | isisInterface.setHelloInterval(isisUpdatedInterface.helloInterval()); | 121 | isisInterface.setHelloInterval(isisUpdatedInterface.helloInterval()); |
122 | + isisInterface.stopHelloSender(); | ||
123 | + isisInterface.startHelloSender(channel); | ||
124 | + } | ||
125 | + | ||
104 | isisInterfaceMap.put(isisInterface.interfaceIndex(), isisInterface); | 126 | isisInterfaceMap.put(isisInterface.interfaceIndex(), isisInterface); |
105 | } | 127 | } |
106 | } | 128 | } |
... | @@ -144,6 +166,9 @@ public class IsisChannelHandler extends IdleStateAwareChannelHandler { | ... | @@ -144,6 +166,9 @@ public class IsisChannelHandler extends IdleStateAwareChannelHandler { |
144 | @Override | 166 | @Override |
145 | public void channelDisconnected(ChannelHandlerContext ctx, ChannelStateEvent evt) { | 167 | public void channelDisconnected(ChannelHandlerContext ctx, ChannelStateEvent evt) { |
146 | log.debug("IsisChannelHandler::channelDisconnected...!!!"); | 168 | log.debug("IsisChannelHandler::channelDisconnected...!!!"); |
169 | + if (controller != null) { | ||
170 | + controller.connectPeer(); | ||
171 | + } | ||
147 | } | 172 | } |
148 | 173 | ||
149 | @Override | 174 | @Override |
... | @@ -169,8 +194,9 @@ public class IsisChannelHandler extends IdleStateAwareChannelHandler { | ... | @@ -169,8 +194,9 @@ public class IsisChannelHandler extends IdleStateAwareChannelHandler { |
169 | } else if (e.getCause() instanceof RejectedExecutionException) { | 194 | } else if (e.getCause() instanceof RejectedExecutionException) { |
170 | log.warn("Could not process message: queue full"); | 195 | log.warn("Could not process message: queue full"); |
171 | } else { | 196 | } else { |
172 | - log.error("Error while processing message from ISIS {}", | 197 | + log.error("Error while processing message from ISIS {}, {}", |
173 | - e.getChannel().getRemoteAddress()); | 198 | + e.getChannel().getRemoteAddress(), e.getCause().getMessage()); |
199 | + e.getCause().printStackTrace(); | ||
174 | } | 200 | } |
175 | } | 201 | } |
176 | 202 | ... | ... |
protocols/isis/ctl/src/main/java/org/onosproject/isis/controller/impl/IsisHelloPduSender.java
100755 → 100644
... | @@ -45,7 +45,7 @@ public class IsisHelloPduSender implements Runnable { | ... | @@ -45,7 +45,7 @@ public class IsisHelloPduSender implements Runnable { |
45 | 45 | ||
46 | @Override | 46 | @Override |
47 | public void run() { | 47 | public void run() { |
48 | - if (channel != null) { | 48 | + if (channel != null && channel.isConnected() && channel.isOpen()) { |
49 | try { | 49 | try { |
50 | byte[] helloPdu = null; | 50 | byte[] helloPdu = null; |
51 | byte[] interfaceIndex = {(byte) isisInterface.interfaceIndex()}; | 51 | byte[] interfaceIndex = {(byte) isisInterface.interfaceIndex()}; | ... | ... |
protocols/isis/ctl/src/main/java/org/onosproject/isis/controller/impl/IsisMessageDecoder.java
100755 → 100644
... | @@ -44,7 +44,6 @@ public class IsisMessageDecoder extends FrameDecoder { | ... | @@ -44,7 +44,6 @@ public class IsisMessageDecoder extends FrameDecoder { |
44 | log.info("Channel is not connected."); | 44 | log.info("Channel is not connected."); |
45 | return null; | 45 | return null; |
46 | } | 46 | } |
47 | - | ||
48 | IsisMessageReader messageReader = new IsisMessageReader(); | 47 | IsisMessageReader messageReader = new IsisMessageReader(); |
49 | List<IsisMessage> isisMessageList = new LinkedList<>(); | 48 | List<IsisMessage> isisMessageList = new LinkedList<>(); |
50 | int dataLength = buffer.readableBytes(); | 49 | int dataLength = buffer.readableBytes(); |
... | @@ -74,8 +73,7 @@ public class IsisMessageDecoder extends FrameDecoder { | ... | @@ -74,8 +73,7 @@ public class IsisMessageDecoder extends FrameDecoder { |
74 | isisMessageList.add(message); | 73 | isisMessageList.add(message); |
75 | } | 74 | } |
76 | } | 75 | } |
77 | - | 76 | + return (isisMessageList.size() > 0) ? isisMessageList : null; |
78 | - return isisMessageList; | ||
79 | } | 77 | } |
80 | 78 | ||
81 | /** | 79 | /** | ... | ... |
protocols/isis/ctl/src/main/java/org/onosproject/isis/controller/impl/IsisMessageEncoder.java
100755 → 100644
File mode changed
protocols/isis/ctl/src/main/java/org/onosproject/isis/controller/impl/IsisPipelineFactory.java
100755 → 100644
File mode changed
protocols/isis/ctl/src/main/java/org/onosproject/isis/controller/impl/lsdb/DefaultIsisLsdb.java
100755 → 100644
... | @@ -45,7 +45,6 @@ public class DefaultIsisLsdb implements IsisLsdb { | ... | @@ -45,7 +45,6 @@ public class DefaultIsisLsdb implements IsisLsdb { |
45 | private IsisLsdbAge lsdbAge = null; | 45 | private IsisLsdbAge lsdbAge = null; |
46 | 46 | ||
47 | 47 | ||
48 | - | ||
49 | private int l1LspSeqNo = IsisConstants.STARTLSSEQUENCENUM; | 48 | private int l1LspSeqNo = IsisConstants.STARTLSSEQUENCENUM; |
50 | private int l2LspSeqNo = IsisConstants.STARTLSSEQUENCENUM; | 49 | private int l2LspSeqNo = IsisConstants.STARTLSSEQUENCENUM; |
51 | 50 | ||
... | @@ -80,6 +79,7 @@ public class DefaultIsisLsdb implements IsisLsdb { | ... | @@ -80,6 +79,7 @@ public class DefaultIsisLsdb implements IsisLsdb { |
80 | public void setL2LspSeqNo(int l2LspSeqNo) { | 79 | public void setL2LspSeqNo(int l2LspSeqNo) { |
81 | this.l2LspSeqNo = l2LspSeqNo; | 80 | this.l2LspSeqNo = l2LspSeqNo; |
82 | } | 81 | } |
82 | + | ||
83 | /** | 83 | /** |
84 | * Returns the LSDB LSP key. | 84 | * Returns the LSDB LSP key. |
85 | * | 85 | * |
... | @@ -96,6 +96,7 @@ public class DefaultIsisLsdb implements IsisLsdb { | ... | @@ -96,6 +96,7 @@ public class DefaultIsisLsdb implements IsisLsdb { |
96 | return lspKey.toString(); | 96 | return lspKey.toString(); |
97 | } | 97 | } |
98 | 98 | ||
99 | + | ||
99 | /** | 100 | /** |
100 | * Returns the neighbor L1 database information. | 101 | * Returns the neighbor L1 database information. |
101 | * | 102 | * |
... | @@ -218,7 +219,12 @@ public class DefaultIsisLsdb implements IsisLsdb { | ... | @@ -218,7 +219,12 @@ public class DefaultIsisLsdb implements IsisLsdb { |
218 | byte[] checkSum = {lspBytes[IsisConstants.CHECKSUMPOSITION], lspBytes[IsisConstants.CHECKSUMPOSITION + 1]}; | 219 | byte[] checkSum = {lspBytes[IsisConstants.CHECKSUMPOSITION], lspBytes[IsisConstants.CHECKSUMPOSITION + 1]}; |
219 | lspdu.setCheckSum(ChannelBuffers.copiedBuffer(checkSum).readUnsignedShort()); | 220 | lspdu.setCheckSum(ChannelBuffers.copiedBuffer(checkSum).readUnsignedShort()); |
220 | } | 221 | } |
221 | - DefaultLspWrapper lspWrapper = new DefaultLspWrapper(); | 222 | + |
223 | + DefaultLspWrapper lspWrapper = (DefaultLspWrapper) findLsp(lspdu.isisPduType(), lspdu.lspId()); | ||
224 | + if (lspWrapper == null) { | ||
225 | + lspWrapper = new DefaultLspWrapper(); | ||
226 | + } | ||
227 | + | ||
222 | lspWrapper.setLspAgeReceived(IsisConstants.LSPMAXAGE - lspdu.remainingLifeTime()); | 228 | lspWrapper.setLspAgeReceived(IsisConstants.LSPMAXAGE - lspdu.remainingLifeTime()); |
223 | lspWrapper.setLspType(IsisPduType.get(lspdu.pduType())); | 229 | lspWrapper.setLspType(IsisPduType.get(lspdu.pduType())); |
224 | lspWrapper.setLsPdu(lspdu); | 230 | lspWrapper.setLsPdu(lspdu); |
... | @@ -228,8 +234,8 @@ public class DefaultIsisLsdb implements IsisLsdb { | ... | @@ -228,8 +234,8 @@ public class DefaultIsisLsdb implements IsisLsdb { |
228 | lspWrapper.setIsisInterface(isisInterface); | 234 | lspWrapper.setIsisInterface(isisInterface); |
229 | lspWrapper.setLsdbAge(lsdbAge); | 235 | lspWrapper.setLsdbAge(lsdbAge); |
230 | addLsp(lspWrapper, lspdu.lspId()); | 236 | addLsp(lspWrapper, lspdu.lspId()); |
231 | - log.debug("Added LSp In LSDB: {}", lspWrapper); | ||
232 | 237 | ||
238 | + log.debug("Added LSp In LSDB: {}", lspWrapper); | ||
233 | return true; | 239 | return true; |
234 | } | 240 | } |
235 | 241 | ||
... | @@ -270,7 +276,6 @@ public class DefaultIsisLsdb implements IsisLsdb { | ... | @@ -270,7 +276,6 @@ public class DefaultIsisLsdb implements IsisLsdb { |
270 | lspWrapper.lsPdu().isisPduType(), | 276 | lspWrapper.lsPdu().isisPduType(), |
271 | binNumber, lspWrapper.remainingLifetime()); | 277 | binNumber, lspWrapper.remainingLifetime()); |
272 | } | 278 | } |
273 | - | ||
274 | return false; | 279 | return false; |
275 | } | 280 | } |
276 | 281 | ... | ... |
protocols/isis/ctl/src/main/java/org/onosproject/isis/controller/impl/lsdb/DefaultIsisLsdbAge.java
100755 → 100644
... | @@ -36,10 +36,10 @@ import java.util.concurrent.TimeUnit; | ... | @@ -36,10 +36,10 @@ import java.util.concurrent.TimeUnit; |
36 | */ | 36 | */ |
37 | public class DefaultIsisLsdbAge implements IsisLsdbAge { | 37 | public class DefaultIsisLsdbAge implements IsisLsdbAge { |
38 | private static final Logger log = LoggerFactory.getLogger(DefaultIsisLsdbAge.class); | 38 | private static final Logger log = LoggerFactory.getLogger(DefaultIsisLsdbAge.class); |
39 | - protected static int ageCounter = 0; | 39 | + protected int ageCounter = 0; |
40 | private InternalAgeTimer dbAgeTimer; | 40 | private InternalAgeTimer dbAgeTimer; |
41 | private ScheduledExecutorService exServiceage; | 41 | private ScheduledExecutorService exServiceage; |
42 | - private Integer maxBins = 1200; | 42 | + private Integer maxBins = IsisConstants.LSPMAXAGE; |
43 | private Map<Integer, IsisLspBin> ageBins = new ConcurrentHashMap<>(maxBins); | 43 | private Map<Integer, IsisLspBin> ageBins = new ConcurrentHashMap<>(maxBins); |
44 | private int ageCounterRollOver = 0; | 44 | private int ageCounterRollOver = 0; |
45 | private IsisLspQueueConsumer queueConsumer = null; | 45 | private IsisLspQueueConsumer queueConsumer = null; |
... | @@ -202,7 +202,7 @@ public class DefaultIsisLsdbAge implements IsisLsdbAge { | ... | @@ -202,7 +202,7 @@ public class DefaultIsisLsdbAge implements IsisLsdbAge { |
202 | } else { | 202 | } else { |
203 | binNumber = ageCounter - IsisConstants.LSPREFRESH; | 203 | binNumber = ageCounter - IsisConstants.LSPREFRESH; |
204 | } | 204 | } |
205 | - if (binNumber > IsisConstants.LSPMAXAGE) { | 205 | + if (binNumber >= IsisConstants.LSPMAXAGE) { |
206 | binNumber = binNumber - IsisConstants.LSPMAXAGE; | 206 | binNumber = binNumber - IsisConstants.LSPMAXAGE; |
207 | } | 207 | } |
208 | IsisLspBin lspBin = ageBins.get(binNumber); | 208 | IsisLspBin lspBin = ageBins.get(binNumber); | ... | ... |
protocols/isis/ctl/src/main/java/org/onosproject/isis/controller/impl/lsdb/DefaultIsisLspBin.java
100755 → 100644
File mode changed
protocols/isis/ctl/src/main/java/org/onosproject/isis/controller/impl/lsdb/DefaultLspWrapper.java
100755 → 100644
... | @@ -21,11 +21,14 @@ import org.onosproject.isis.controller.IsisPduType; | ... | @@ -21,11 +21,14 @@ import org.onosproject.isis.controller.IsisPduType; |
21 | import org.onosproject.isis.controller.LspWrapper; | 21 | import org.onosproject.isis.controller.LspWrapper; |
22 | import org.onosproject.isis.io.isispacket.pdu.LsPdu; | 22 | import org.onosproject.isis.io.isispacket.pdu.LsPdu; |
23 | import org.onosproject.isis.io.util.IsisConstants; | 23 | import org.onosproject.isis.io.util.IsisConstants; |
24 | +import org.slf4j.Logger; | ||
25 | +import org.slf4j.LoggerFactory; | ||
24 | 26 | ||
25 | /** | 27 | /** |
26 | * Representation of LSP wrapper where the LSPs are stored with metadata. | 28 | * Representation of LSP wrapper where the LSPs are stored with metadata. |
27 | */ | 29 | */ |
28 | public class DefaultLspWrapper implements LspWrapper { | 30 | public class DefaultLspWrapper implements LspWrapper { |
31 | + private static final Logger log = LoggerFactory.getLogger(DefaultLspWrapper.class); | ||
29 | private int binNumber = -1; | 32 | private int binNumber = -1; |
30 | private boolean selfOriginated = false; | 33 | private boolean selfOriginated = false; |
31 | private IsisPduType lspType; | 34 | private IsisPduType lspType; |
... | @@ -229,8 +232,16 @@ public class DefaultLspWrapper implements LspWrapper { | ... | @@ -229,8 +232,16 @@ public class DefaultLspWrapper implements LspWrapper { |
229 | int currentAge = 0; | 232 | int currentAge = 0; |
230 | //ls age received | 233 | //ls age received |
231 | if (lsdbAge.ageCounter() >= ageCounterWhenReceived) { | 234 | if (lsdbAge.ageCounter() >= ageCounterWhenReceived) { |
235 | + if (!selfOriginated) { | ||
236 | + if (ageCounterRollOverWhenAdded == lsdbAge.ageCounterRollOver()) { | ||
232 | currentAge = lspAgeReceived + (lsdbAge.ageCounter() - ageCounterWhenReceived); | 237 | currentAge = lspAgeReceived + (lsdbAge.ageCounter() - ageCounterWhenReceived); |
233 | } else { | 238 | } else { |
239 | + return IsisConstants.LSPMAXAGE; | ||
240 | + } | ||
241 | + } else { | ||
242 | + currentAge = lspAgeReceived + (lsdbAge.ageCounter() - ageCounterWhenReceived); | ||
243 | + } | ||
244 | + } else { | ||
234 | currentAge = lspAgeReceived + ((IsisConstants.LSPMAXAGE + lsdbAge.ageCounter()) | 245 | currentAge = lspAgeReceived + ((IsisConstants.LSPMAXAGE + lsdbAge.ageCounter()) |
235 | - ageCounterWhenReceived); | 246 | - ageCounterWhenReceived); |
236 | } | 247 | } |
... | @@ -245,6 +256,8 @@ public class DefaultLspWrapper implements LspWrapper { | ... | @@ -245,6 +256,8 @@ public class DefaultLspWrapper implements LspWrapper { |
245 | return currentAge; | 256 | return currentAge; |
246 | } | 257 | } |
247 | 258 | ||
259 | + | ||
260 | + | ||
248 | /** | 261 | /** |
249 | * Returns remaining time. | 262 | * Returns remaining time. |
250 | * | 263 | * |
... | @@ -252,7 +265,7 @@ public class DefaultLspWrapper implements LspWrapper { | ... | @@ -252,7 +265,7 @@ public class DefaultLspWrapper implements LspWrapper { |
252 | */ | 265 | */ |
253 | public int remainingLifetime() { | 266 | public int remainingLifetime() { |
254 | //Calculate the remaining lifetime | 267 | //Calculate the remaining lifetime |
255 | - remainingLifetime = IsisConstants.LSPMAXAGE - lsdbAge.ageCounter(); | 268 | + remainingLifetime = IsisConstants.LSPMAXAGE - currentAge(); |
256 | return remainingLifetime; | 269 | return remainingLifetime; |
257 | } | 270 | } |
258 | 271 | ... | ... |
protocols/isis/ctl/src/main/java/org/onosproject/isis/controller/impl/lsdb/IsisLspQueueConsumer.java
100755 → 100644
... | @@ -100,7 +100,9 @@ public class IsisLspQueueConsumer implements Runnable { | ... | @@ -100,7 +100,9 @@ public class IsisLspQueueConsumer implements Runnable { |
100 | IsisConstants.CHECKSUMPOSITION + 1); | 100 | IsisConstants.CHECKSUMPOSITION + 1); |
101 | //write to the channel | 101 | //write to the channel |
102 | channel.write(IsisUtil.framePacket(lspBytes, isisInterface.interfaceIndex())); | 102 | channel.write(IsisUtil.framePacket(lspBytes, isisInterface.interfaceIndex())); |
103 | - | 103 | + // Updating the database with resetting remaining life time to default. |
104 | + IsisLsdb isisDb = isisInterface.isisLsdb(); | ||
105 | + isisDb.addLsp(lsPdu, true, isisInterface); | ||
104 | log.debug("LSPQueueConsumer: processRefreshLsp - Flooded SelfOriginated LSP {}", | 106 | log.debug("LSPQueueConsumer: processRefreshLsp - Flooded SelfOriginated LSP {}", |
105 | wrapper.lsPdu()); | 107 | wrapper.lsPdu()); |
106 | } | 108 | } | ... | ... |
protocols/isis/ctl/src/main/java/org/onosproject/isis/controller/impl/lsdb/package-info.java
100755 → 100644
File mode changed
protocols/isis/ctl/src/main/java/org/onosproject/isis/controller/impl/package-info.java
100755 → 100644
File mode changed
... | @@ -16,6 +16,8 @@ | ... | @@ -16,6 +16,8 @@ |
16 | 16 | ||
17 | package org.onosproject.isis.controller.impl; | 17 | package org.onosproject.isis.controller.impl; |
18 | 18 | ||
19 | +import com.fasterxml.jackson.databind.JsonNode; | ||
20 | +import com.fasterxml.jackson.databind.ObjectMapper; | ||
19 | import org.junit.After; | 21 | import org.junit.After; |
20 | import org.junit.Before; | 22 | import org.junit.Before; |
21 | import org.junit.Test; | 23 | import org.junit.Test; |
... | @@ -30,10 +32,65 @@ import static org.junit.Assert.assertThat; | ... | @@ -30,10 +32,65 @@ import static org.junit.Assert.assertThat; |
30 | public class ControllerTest { | 32 | public class ControllerTest { |
31 | 33 | ||
32 | private Controller controller; | 34 | private Controller controller; |
35 | + private ObjectMapper mapper; | ||
36 | + private JsonNode jsonNode; | ||
37 | + private JsonNode jsonNode1; | ||
38 | + private String jsonString = "{" + | ||
39 | + " \"processes\": [{" + | ||
40 | + " \"processId\": \"4.4.4.4\"," + | ||
41 | + " \"interface\": [{" + | ||
42 | + " \"interfaceIndex\": \"2\"," + | ||
43 | + " \"macAddress\": \"08:00:27:b7:ab:bf\"," + | ||
44 | + " \"interfaceIp\": \"192.168.56.101\"," + | ||
45 | + " \"networkMask\": \"255.255.255.224\"," + | ||
46 | + " \"intermediateSystemName\": \"ROUTERONE\"," + | ||
47 | + " \"systemId\": \"2929.2929.2929\"," + | ||
48 | + " \"lanId\": \"0000.0000.0000.00\"," + | ||
49 | + " \"idLength\": \"0\"," + | ||
50 | + " \"maxAreaAddresses\": \"3\"," + | ||
51 | + " \"reservedPacketCircuitType\": \"1\"," + | ||
52 | + " \"circuitId\": \"10\"," + | ||
53 | + " \"networkType\": \"2\"," + | ||
54 | + " \"areaAddress\": \"490000\"," + | ||
55 | + " \"areaLength\": \"3\"," + | ||
56 | + " \"lspId\": \"1313131313130000\"," + | ||
57 | + " \"holdingTime\": \"50\"," + | ||
58 | + " \"helloInterval\": \"10\"," + | ||
59 | + " \"priority\": \"0\"" + | ||
60 | + " }]" + | ||
61 | + " }]" + | ||
62 | + "}"; | ||
63 | + private String jsonString1 = "{" + | ||
64 | + " \"processes\": {" + | ||
65 | + " \"interface\": [{" + | ||
66 | + " \"interfaceIndex\": \"2\"," + | ||
67 | + " \"interfaceIp\": \"100.100.100.100\"," + | ||
68 | + " \"macAddress\": \"08:00:27:b7:ab:bf\"," + | ||
69 | + " \"networkMask\": \"255.255.255.224\"," + | ||
70 | + " \"intermediateSystemName\": \"ROUTERONE\"," + | ||
71 | + " \"systemId\": \"2929.2929.2929\"," + | ||
72 | + " \"lanId\": \"0000.0000.0000.00\"," + | ||
73 | + " \"idLength\": \"0\"," + | ||
74 | + " \"maxAreaAddresses\": \"3\"," + | ||
75 | + " \"reservedPacketCircuitType\": \"1\"," + | ||
76 | + " \"circuitId\": \"10\"," + | ||
77 | + " \"networkType\": \"2\"," + | ||
78 | + " \"areaAddress\": \"490000\"," + | ||
79 | + " \"areaLength\": \"3\"," + | ||
80 | + " \"lspId\": \"1313131313130000\"," + | ||
81 | + " \"holdingTime\": \"50\"," + | ||
82 | + " \"helloInterval\": \"10\"," + | ||
83 | + " \"priority\": \"0\"" + | ||
84 | + " }]" + | ||
85 | + " }" + | ||
86 | + "}"; | ||
33 | 87 | ||
34 | @Before | 88 | @Before |
35 | public void setUp() throws Exception { | 89 | public void setUp() throws Exception { |
36 | controller = new Controller(); | 90 | controller = new Controller(); |
91 | + mapper = new ObjectMapper(); | ||
92 | + jsonNode = mapper.readTree(jsonString); | ||
93 | + jsonNode1 = mapper.readTree(jsonString1); | ||
37 | } | 94 | } |
38 | 95 | ||
39 | @After | 96 | @After |
... | @@ -58,4 +115,18 @@ public class ControllerTest { | ... | @@ -58,4 +115,18 @@ public class ControllerTest { |
58 | controller.getAllConfiguredProcesses(); | 115 | controller.getAllConfiguredProcesses(); |
59 | assertThat(controller, is(notNullValue())); | 116 | assertThat(controller, is(notNullValue())); |
60 | } | 117 | } |
118 | + | ||
119 | + /** | ||
120 | + * Tests updateConfig() method. | ||
121 | + */ | ||
122 | + @Test | ||
123 | + public void testUpdateConfig() throws Exception { | ||
124 | + jsonNode.path("interface"); | ||
125 | + controller.updateConfig(jsonNode); | ||
126 | + assertThat(controller, is(notNullValue())); | ||
127 | + | ||
128 | + controller.updateConfig(jsonNode1); | ||
129 | + assertThat(controller, is(notNullValue())); | ||
130 | + } | ||
131 | + | ||
61 | } | 132 | } |
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
protocols/isis/ctl/src/test/java/org/onosproject/isis/controller/impl/DefaultIsisControllerTest.java
... | @@ -15,9 +15,13 @@ | ... | @@ -15,9 +15,13 @@ |
15 | */ | 15 | */ |
16 | package org.onosproject.isis.controller.impl; | 16 | package org.onosproject.isis.controller.impl; |
17 | 17 | ||
18 | +import com.fasterxml.jackson.databind.JsonNode; | ||
19 | +import com.fasterxml.jackson.databind.ObjectMapper; | ||
20 | +import org.easymock.EasyMock; | ||
18 | import org.junit.After; | 21 | import org.junit.After; |
19 | import org.junit.Before; | 22 | import org.junit.Before; |
20 | import org.junit.Test; | 23 | import org.junit.Test; |
24 | +import org.onosproject.isis.controller.topology.IsisRouterListener; | ||
21 | 25 | ||
22 | import static org.hamcrest.CoreMatchers.is; | 26 | import static org.hamcrest.CoreMatchers.is; |
23 | import static org.hamcrest.CoreMatchers.notNullValue; | 27 | import static org.hamcrest.CoreMatchers.notNullValue; |
... | @@ -27,11 +31,43 @@ import static org.junit.Assert.assertThat; | ... | @@ -27,11 +31,43 @@ import static org.junit.Assert.assertThat; |
27 | * Unit test case for DefaultIsisController. | 31 | * Unit test case for DefaultIsisController. |
28 | */ | 32 | */ |
29 | public class DefaultIsisControllerTest { | 33 | public class DefaultIsisControllerTest { |
34 | + private ObjectMapper mapper; | ||
35 | + private JsonNode jsonNode; | ||
30 | private DefaultIsisController defaultIsisController; | 36 | private DefaultIsisController defaultIsisController; |
37 | + private String jsonString = "{" + | ||
38 | + " \"processes\": [{" + | ||
39 | + " \"processId\": \"4.4.4.4\"," + | ||
40 | + " \"interface\": [{" + | ||
41 | + " \"interfaceIndex\": \"2\"," + | ||
42 | + " \"macAddress\": \"08:00:27:b7:ab:bf\"," + | ||
43 | + " \"interfaceIp\": \"192.168.56.101\"," + | ||
44 | + " \"networkMask\": \"255.255.255.224\"," + | ||
45 | + " \"intermediateSystemName\": \"ROUTERONE\"," + | ||
46 | + " \"systemId\": \"2929.2929.2929\"," + | ||
47 | + " \"lanId\": \"0000.0000.0000.00\"," + | ||
48 | + " \"idLength\": \"0\"," + | ||
49 | + " \"maxAreaAddresses\": \"3\"," + | ||
50 | + " \"reservedPacketCircuitType\": \"1\"," + | ||
51 | + " \"circuitId\": \"10\"," + | ||
52 | + " \"networkType\": \"2\"," + | ||
53 | + " \"areaAddress\": \"490000\"," + | ||
54 | + " \"areaLength\": \"3\"," + | ||
55 | + " \"lspId\": \"1313131313130000\"," + | ||
56 | + " \"holdingTime\": \"50\"," + | ||
57 | + " \"helloInterval\": \"10\"," + | ||
58 | + " \"priority\": \"0\"" + | ||
59 | + " }]" + | ||
60 | + " }]" + | ||
61 | + "}"; | ||
62 | + | ||
63 | + private IsisRouterListener isisRouterListener; | ||
31 | 64 | ||
32 | @Before | 65 | @Before |
33 | public void setUp() throws Exception { | 66 | public void setUp() throws Exception { |
34 | defaultIsisController = new DefaultIsisController(); | 67 | defaultIsisController = new DefaultIsisController(); |
68 | + mapper = new ObjectMapper(); | ||
69 | + jsonNode = mapper.readTree(jsonString); | ||
70 | + isisRouterListener = EasyMock.createNiceMock(IsisRouterListener.class); | ||
35 | } | 71 | } |
36 | 72 | ||
37 | @After | 73 | @After |
... | @@ -66,4 +102,31 @@ public class DefaultIsisControllerTest { | ... | @@ -66,4 +102,31 @@ public class DefaultIsisControllerTest { |
66 | defaultIsisController.allConfiguredProcesses(); | 102 | defaultIsisController.allConfiguredProcesses(); |
67 | assertThat(defaultIsisController, is(notNullValue())); | 103 | assertThat(defaultIsisController, is(notNullValue())); |
68 | } | 104 | } |
105 | + | ||
106 | + /** | ||
107 | + * Tests updateConfig() method. | ||
108 | + */ | ||
109 | + @Test | ||
110 | + public void testUpdateConfig() throws Exception { | ||
111 | + defaultIsisController.updateConfig(jsonNode); | ||
112 | + assertThat(defaultIsisController, is(notNullValue())); | ||
113 | + } | ||
114 | + | ||
115 | + /** | ||
116 | + * Tests addRouterListener() method. | ||
117 | + */ | ||
118 | + @Test | ||
119 | + public void testaddRouterListener() throws Exception { | ||
120 | + defaultIsisController.addRouterListener(isisRouterListener); | ||
121 | + assertThat(defaultIsisController, is(notNullValue())); | ||
122 | + } | ||
123 | + | ||
124 | + /** | ||
125 | + * Tests removeRouterListener() method. | ||
126 | + */ | ||
127 | + @Test | ||
128 | + public void testremoveRouterListener() throws Exception { | ||
129 | + defaultIsisController.removeRouterListener(isisRouterListener); | ||
130 | + assertThat(defaultIsisController, is(notNullValue())); | ||
131 | + } | ||
69 | } | 132 | } | ... | ... |
... | @@ -15,6 +15,10 @@ | ... | @@ -15,6 +15,10 @@ |
15 | */ | 15 | */ |
16 | package org.onosproject.isis.controller.impl; | 16 | package org.onosproject.isis.controller.impl; |
17 | 17 | ||
18 | +import org.easymock.EasyMock; | ||
19 | +import org.jboss.netty.buffer.ChannelBuffer; | ||
20 | +import org.jboss.netty.buffer.ChannelBuffers; | ||
21 | +import org.jboss.netty.channel.Channel; | ||
18 | import org.junit.After; | 22 | import org.junit.After; |
19 | import org.junit.Before; | 23 | import org.junit.Before; |
20 | import org.junit.Test; | 24 | import org.junit.Test; |
... | @@ -23,15 +27,30 @@ import org.onlab.packet.MacAddress; | ... | @@ -23,15 +27,30 @@ import org.onlab.packet.MacAddress; |
23 | import org.onosproject.isis.controller.IsisInterface; | 27 | import org.onosproject.isis.controller.IsisInterface; |
24 | import org.onosproject.isis.controller.IsisInterfaceState; | 28 | import org.onosproject.isis.controller.IsisInterfaceState; |
25 | import org.onosproject.isis.controller.IsisLsdb; | 29 | import org.onosproject.isis.controller.IsisLsdb; |
30 | +import org.onosproject.isis.controller.IsisMessage; | ||
26 | import org.onosproject.isis.controller.IsisNeighbor; | 31 | import org.onosproject.isis.controller.IsisNeighbor; |
27 | import org.onosproject.isis.controller.IsisNetworkType; | 32 | import org.onosproject.isis.controller.IsisNetworkType; |
33 | +import org.onosproject.isis.controller.IsisPduType; | ||
34 | +import org.onosproject.isis.controller.IsisRouterType; | ||
35 | +import org.onosproject.isis.controller.impl.lsdb.DefaultIsisLsdb; | ||
28 | import org.onosproject.isis.io.isispacket.IsisHeader; | 36 | import org.onosproject.isis.io.isispacket.IsisHeader; |
29 | -import org.onosproject.isis.io.isispacket.pdu.HelloPdu; | 37 | +import org.onosproject.isis.io.isispacket.pdu.Csnp; |
30 | import org.onosproject.isis.io.isispacket.pdu.L1L2HelloPdu; | 38 | import org.onosproject.isis.io.isispacket.pdu.L1L2HelloPdu; |
31 | - | 39 | +import org.onosproject.isis.io.isispacket.pdu.LsPdu; |
40 | +import org.onosproject.isis.io.isispacket.pdu.P2PHelloPdu; | ||
41 | +import org.onosproject.isis.io.isispacket.pdu.Psnp; | ||
42 | +import org.onosproject.isis.io.isispacket.tlv.AdjacencyStateTlv; | ||
43 | +import org.onosproject.isis.io.isispacket.tlv.AreaAddressTlv; | ||
44 | +import org.onosproject.isis.io.isispacket.tlv.LspEntriesTlv; | ||
45 | +import org.onosproject.isis.io.isispacket.tlv.LspEntry; | ||
46 | +import org.onosproject.isis.io.isispacket.tlv.TlvHeader; | ||
47 | +import org.onosproject.isis.io.isispacket.tlv.TlvType; | ||
48 | + | ||
49 | +import java.util.ArrayList; | ||
50 | +import java.util.List; | ||
32 | import java.util.Set; | 51 | import java.util.Set; |
33 | 52 | ||
34 | -import static org.hamcrest.CoreMatchers.is; | 53 | +import static org.hamcrest.CoreMatchers.*; |
35 | import static org.junit.Assert.assertThat; | 54 | import static org.junit.Assert.assertThat; |
36 | 55 | ||
37 | /** | 56 | /** |
... | @@ -39,16 +58,26 @@ import static org.junit.Assert.assertThat; | ... | @@ -39,16 +58,26 @@ import static org.junit.Assert.assertThat; |
39 | */ | 58 | */ |
40 | public class DefaultIsisInterfaceTest { | 59 | public class DefaultIsisInterfaceTest { |
41 | private final MacAddress macAddress = MacAddress.valueOf("AA:BB:CC:DD:EE:FF"); | 60 | private final MacAddress macAddress = MacAddress.valueOf("AA:BB:CC:DD:EE:FF"); |
42 | - private final Ip4Address ip4Address = Ip4Address.valueOf("10.10.10.10"); | 61 | + private final MacAddress macAddress1 = MacAddress.valueOf("AA:CC:CC:DD:EE:FF"); |
62 | + private final Ip4Address ip4Address = Ip4Address.valueOf("10.10.0.0"); | ||
43 | private final byte[] mask = { | 63 | private final byte[] mask = { |
44 | (byte) 255, (byte) 255, (byte) 255, (byte) 224 | 64 | (byte) 255, (byte) 255, (byte) 255, (byte) 224 |
45 | }; | 65 | }; |
66 | + private final byte[] mask1 = { | ||
67 | + (byte) 0, (byte) 0, (byte) 0, (byte) 0 | ||
68 | + }; | ||
46 | private final String intSysName = "ROUTER"; | 69 | private final String intSysName = "ROUTER"; |
47 | private final String sysId = "1111.1111.1111"; | 70 | private final String sysId = "1111.1111.1111"; |
48 | private final String areaAddr = "49.002"; | 71 | private final String areaAddr = "49.002"; |
72 | + private final byte[] csnpBytes = { | ||
73 | + 0, 67, 18, 52, 18, 52, 0, | ||
74 | + 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, -1, -1, -1, -1, | ||
75 | + -1, -1, 9, 32, 4, -81, 18, 52, 18, 52, 0, 18, 0, 0, 0, | ||
76 | + 0, 0, 41, -92, -30, 4, -81, 41, 41, 41, 41, 41, 41, 0, | ||
77 | + 0, 0, 0, 0, 1, 91, 126 | ||
78 | + }; | ||
49 | private IsisInterfaceState resultIfState; | 79 | private IsisInterfaceState resultIfState; |
50 | private DefaultIsisInterface defaultIsisInterface; | 80 | private DefaultIsisInterface defaultIsisInterface; |
51 | - private HelloPdu helloPdu; | ||
52 | private IsisHeader isisHeader; | 81 | private IsisHeader isisHeader; |
53 | private IsisInterface isisInterface; | 82 | private IsisInterface isisInterface; |
54 | private Set<MacAddress> resultSet; | 83 | private Set<MacAddress> resultSet; |
... | @@ -60,18 +89,35 @@ public class DefaultIsisInterfaceTest { | ... | @@ -60,18 +89,35 @@ public class DefaultIsisInterfaceTest { |
60 | private byte[] resultByteArr; | 89 | private byte[] resultByteArr; |
61 | private String resultStr; | 90 | private String resultStr; |
62 | private IsisNetworkType resultNwType; | 91 | private IsisNetworkType resultNwType; |
63 | - | 92 | + private List<Ip4Address> ip4Addresses = new ArrayList<>(); |
93 | + private DefaultIsisNeighbor defaultIsisNeighbor; | ||
94 | + private IsisNeighbor result; | ||
95 | + private IsisLsdb result1; | ||
96 | + private Set<MacAddress> result2; | ||
97 | + private Channel result3; | ||
98 | + private IsisMessage isisMessage; | ||
99 | + private IsisLsdb isisLsdb; | ||
100 | + private Channel channel; | ||
101 | + private L1L2HelloPdu helloPdu; | ||
102 | + private LsPdu lsPdu; | ||
103 | + private Csnp csnp; | ||
104 | + private Psnp psnp; | ||
105 | + private P2PHelloPdu p2PHelloPdu; | ||
106 | + private boolean result4; | ||
107 | + private String result5; | ||
64 | 108 | ||
65 | @Before | 109 | @Before |
66 | public void setUp() throws Exception { | 110 | public void setUp() throws Exception { |
111 | + channel = EasyMock.createNiceMock(Channel.class); | ||
67 | defaultIsisInterface = new DefaultIsisInterface(); | 112 | defaultIsisInterface = new DefaultIsisInterface(); |
113 | + defaultIsisInterface.setInterfaceMacAddress(macAddress); | ||
68 | isisHeader = new IsisHeader(); | 114 | isisHeader = new IsisHeader(); |
69 | isisHeader.setIrpDiscriminator((byte) 1); | 115 | isisHeader.setIrpDiscriminator((byte) 1); |
70 | helloPdu = new L1L2HelloPdu(isisHeader); | 116 | helloPdu = new L1L2HelloPdu(isisHeader); |
71 | isisInterface = new DefaultIsisInterface(); | 117 | isisInterface = new DefaultIsisInterface(); |
72 | - resultNeighborList = new DefaultIsisNeighbor(helloPdu, isisInterface); | 118 | + defaultIsisNeighbor = new DefaultIsisNeighbor(helloPdu, isisInterface); |
73 | - | 119 | + defaultIsisNeighbor.setNeighborMacAddress(macAddress); |
74 | - | 120 | + isisLsdb = new DefaultIsisLsdb(); |
75 | } | 121 | } |
76 | 122 | ||
77 | @After | 123 | @After |
... | @@ -365,26 +411,6 @@ public class DefaultIsisInterfaceTest { | ... | @@ -365,26 +411,6 @@ public class DefaultIsisInterfaceTest { |
365 | } | 411 | } |
366 | 412 | ||
367 | /** | 413 | /** |
368 | - * Tests getLspId() getter method. | ||
369 | - */ | ||
370 | - @Test | ||
371 | - public void testGetLspId() throws Exception { | ||
372 | - defaultIsisInterface.setLspId(sysId); | ||
373 | - resultStr = defaultIsisInterface.getLspId(); | ||
374 | - assertThat(resultStr, is(sysId)); | ||
375 | - } | ||
376 | - | ||
377 | - /** | ||
378 | - * Tests getLspId() setter method. | ||
379 | - */ | ||
380 | - @Test | ||
381 | - public void testSetLspId() throws Exception { | ||
382 | - defaultIsisInterface.setLspId(sysId); | ||
383 | - resultStr = defaultIsisInterface.getLspId(); | ||
384 | - assertThat(resultStr, is(sysId)); | ||
385 | - } | ||
386 | - | ||
387 | - /** | ||
388 | * Tests holdingTime() getter method. | 414 | * Tests holdingTime() getter method. |
389 | */ | 415 | */ |
390 | @Test | 416 | @Test |
... | @@ -483,4 +509,369 @@ public class DefaultIsisInterfaceTest { | ... | @@ -483,4 +509,369 @@ public class DefaultIsisInterfaceTest { |
483 | resultStr = defaultIsisInterface.circuitId(); | 509 | resultStr = defaultIsisInterface.circuitId(); |
484 | assertThat(resultStr, is(sysId)); | 510 | assertThat(resultStr, is(sysId)); |
485 | } | 511 | } |
512 | + | ||
513 | + /** | ||
514 | + * Tests setAllConfiguredInterfaceIps() setter method. | ||
515 | + */ | ||
516 | + @Test | ||
517 | + public void testSetAllConfiguredInterfaceIps() throws Exception { | ||
518 | + ip4Addresses.add(ip4Address); | ||
519 | + defaultIsisInterface.setAllConfiguredInterfaceIps(ip4Addresses); | ||
520 | + assertThat(defaultIsisInterface, is(notNullValue())); | ||
521 | + } | ||
522 | + | ||
523 | + /** | ||
524 | + * Tests setAllConfiguredInterfaceIps() method. | ||
525 | + */ | ||
526 | + @Test | ||
527 | + public void testRemoveNeighbor() throws Exception { | ||
528 | + defaultIsisInterface.removeNeighbor(defaultIsisNeighbor); | ||
529 | + assertThat(defaultIsisInterface, is(notNullValue())); | ||
530 | + } | ||
531 | + | ||
532 | + /** | ||
533 | + * Tests lookup() method. | ||
534 | + */ | ||
535 | + @Test | ||
536 | + public void testLookup() throws Exception { | ||
537 | + result = defaultIsisInterface.lookup(defaultIsisNeighbor.neighborMacAddress()); | ||
538 | + assertThat(result, is(nullValue())); | ||
539 | + } | ||
540 | + | ||
541 | + /** | ||
542 | + * Tests isisLsdb() method. | ||
543 | + */ | ||
544 | + @Test | ||
545 | + public void testIsisLsdb() throws Exception { | ||
546 | + result1 = defaultIsisInterface.isisLsdb(); | ||
547 | + assertThat(result1, is(nullValue())); | ||
548 | + } | ||
549 | + | ||
550 | + /** | ||
551 | + * Tests neighbors() method. | ||
552 | + */ | ||
553 | + @Test | ||
554 | + public void testNeighbors() throws Exception { | ||
555 | + result2 = defaultIsisInterface.neighbors(); | ||
556 | + assertThat(result2, is(notNullValue())); | ||
557 | + } | ||
558 | + | ||
559 | + /** | ||
560 | + * Tests channel() method. | ||
561 | + */ | ||
562 | + @Test | ||
563 | + public void testChannel() throws Exception { | ||
564 | + result3 = defaultIsisInterface.channel(); | ||
565 | + assertThat(result3, is(nullValue())); | ||
566 | + } | ||
567 | + | ||
568 | + /** | ||
569 | + * Tests processIsisMessage() method. | ||
570 | + */ | ||
571 | + @Test | ||
572 | + public void testProcessIsisMessage() throws Exception { | ||
573 | + helloPdu = new L1L2HelloPdu(isisHeader); | ||
574 | + helloPdu.setSourceMac(macAddress1); | ||
575 | + helloPdu.setIsisPduType(IsisPduType.L2HELLOPDU.value()); | ||
576 | + defaultIsisInterface.setNetworkType(IsisNetworkType.BROADCAST); | ||
577 | + isisMessage = helloPdu; | ||
578 | + defaultIsisInterface.processIsisMessage(isisMessage, isisLsdb, channel); | ||
579 | + assertThat(defaultIsisInterface, is(notNullValue())); | ||
580 | + } | ||
581 | + | ||
582 | + /** | ||
583 | + * Tests processIsisMessage() method. | ||
584 | + */ | ||
585 | + @Test(expected = Exception.class) | ||
586 | + public void testProcessIsisMessage1() throws Exception { | ||
587 | + lsPdu = new LsPdu(isisHeader); | ||
588 | + lsPdu.setSourceMac(macAddress1); | ||
589 | + lsPdu.setIsisPduType(IsisPduType.L2LSPDU.value()); | ||
590 | + isisMessage = lsPdu; | ||
591 | + defaultIsisInterface.processIsisMessage(isisMessage, isisLsdb, channel); | ||
592 | + assertThat(defaultIsisInterface, is(notNullValue())); | ||
593 | + } | ||
594 | + | ||
595 | + /** | ||
596 | + * Tests processIsisMessage() method. | ||
597 | + */ | ||
598 | + @Test | ||
599 | + public void testProcessIsisMessage2() throws Exception { | ||
600 | + csnp = new Csnp(isisHeader); | ||
601 | + csnp.setSourceMac(macAddress1); | ||
602 | + csnp.setIsisPduType(IsisPduType.L2CSNP.value()); | ||
603 | + isisMessage = csnp; | ||
604 | + defaultIsisInterface.processIsisMessage(isisMessage, isisLsdb, channel); | ||
605 | + assertThat(defaultIsisInterface, is(notNullValue())); | ||
606 | + } | ||
607 | + | ||
608 | + /** | ||
609 | + * Tests processIsisMessage() method. | ||
610 | + */ | ||
611 | + @Test | ||
612 | + public void testProcessIsisMessage3() throws Exception { | ||
613 | + psnp = new Psnp(isisHeader); | ||
614 | + psnp.setSourceMac(macAddress1); | ||
615 | + psnp.setIsisPduType(IsisPduType.L2PSNP.value()); | ||
616 | + isisMessage = psnp; | ||
617 | + defaultIsisInterface.processIsisMessage(isisMessage, isisLsdb, channel); | ||
618 | + assertThat(defaultIsisInterface, is(notNullValue())); | ||
619 | + } | ||
620 | + | ||
621 | + /** | ||
622 | + * Tests processIsisMessage() method. | ||
623 | + */ | ||
624 | + @Test | ||
625 | + public void testProcessIsisMessage4() throws Exception { | ||
626 | + p2PHelloPdu = new P2PHelloPdu(isisHeader); | ||
627 | + p2PHelloPdu.setSourceMac(macAddress1); | ||
628 | + p2PHelloPdu.setIsisPduType(IsisPduType.P2PHELLOPDU.value()); | ||
629 | + defaultIsisInterface.setNetworkType(IsisNetworkType.P2P); | ||
630 | + isisMessage = p2PHelloPdu; | ||
631 | + defaultIsisInterface.processIsisMessage(isisMessage, isisLsdb, channel); | ||
632 | + assertThat(defaultIsisInterface, is(notNullValue())); | ||
633 | + } | ||
634 | + | ||
635 | + /** | ||
636 | + * Tests validateHelloMessage() method. | ||
637 | + */ | ||
638 | + @Test | ||
639 | + public void testValidateHelloMessage() throws Exception { | ||
640 | + helloPdu = new L1L2HelloPdu(isisHeader); | ||
641 | + result4 = defaultIsisInterface.validateHelloMessage(helloPdu); | ||
642 | + assertThat(result4, is(false)); | ||
643 | + } | ||
644 | + | ||
645 | + /** | ||
646 | + * Tests processL1L2HelloPduMessage() method. | ||
647 | + */ | ||
648 | + @Test(expected = Exception.class) | ||
649 | + public void testProcessL1L2HelloPduMessage() throws Exception { | ||
650 | + helloPdu = new L1L2HelloPdu(isisHeader); | ||
651 | + helloPdu.setSourceMac(macAddress1); | ||
652 | + helloPdu.setCircuitType((byte) IsisRouterType.L2.value()); | ||
653 | + defaultIsisInterface.processL1L2HelloPduMessage(helloPdu, channel); | ||
654 | + assertThat(defaultIsisInterface, is(notNullValue())); | ||
655 | + } | ||
656 | + | ||
657 | + /** | ||
658 | + * Tests processP2pHelloPduMessage() method. | ||
659 | + */ | ||
660 | + @Test(expected = Exception.class) | ||
661 | + public void testProcessP2pHelloPduMessagee() throws Exception { | ||
662 | + defaultIsisInterface.setSystemId(sysId); | ||
663 | + p2PHelloPdu = new P2PHelloPdu(isisHeader); | ||
664 | + p2PHelloPdu.setIsisPduType(IsisPduType.P2PHELLOPDU.value()); | ||
665 | + p2PHelloPdu.setSourceMac(macAddress1); | ||
666 | + p2PHelloPdu.setCircuitType((byte) IsisRouterType.L2.value()); | ||
667 | + defaultIsisInterface.setNetworkType(IsisNetworkType.P2P); | ||
668 | + defaultIsisInterface.processIsisMessage(p2PHelloPdu, isisLsdb, channel); | ||
669 | + assertThat(defaultIsisInterface, is(notNullValue())); | ||
670 | + } | ||
671 | + | ||
672 | + /** | ||
673 | + * Tests processP2pHelloPduMessage() method. | ||
674 | + */ | ||
675 | + @Test(expected = Exception.class) | ||
676 | + public void testProcessP2pHelloPduMessagee1() throws Exception { | ||
677 | + defaultIsisInterface.setSystemId(sysId); | ||
678 | + p2PHelloPdu = new P2PHelloPdu(isisHeader); | ||
679 | + p2PHelloPdu.setIsisPduType(IsisPduType.P2PHELLOPDU.value()); | ||
680 | + p2PHelloPdu.setSourceMac(macAddress1); | ||
681 | + p2PHelloPdu.setCircuitType((byte) IsisRouterType.L2.value()); | ||
682 | + defaultIsisInterface.setNetworkType(IsisNetworkType.P2P); | ||
683 | + defaultIsisInterface.setReservedPacketCircuitType(IsisRouterType.L2.value()); | ||
684 | + defaultIsisInterface.setAllConfiguredInterfaceIps(ip4Addresses); | ||
685 | + defaultIsisInterface.setInterfaceIpAddress(ip4Address); | ||
686 | + defaultIsisInterface.setNetworkMask(mask1); | ||
687 | + defaultIsisInterface.processIsisMessage(p2PHelloPdu, isisLsdb, channel); | ||
688 | + assertThat(defaultIsisInterface, is(notNullValue())); | ||
689 | + } | ||
690 | + | ||
691 | + /** | ||
692 | + * Tests processP2pHelloPduMessage() method. | ||
693 | + */ | ||
694 | + @Test(expected = Exception.class) | ||
695 | + public void testProcessP2pHelloPduMessagee2() throws Exception { | ||
696 | + defaultIsisInterface.setSystemId(sysId); | ||
697 | + p2PHelloPdu = new P2PHelloPdu(isisHeader); | ||
698 | + TlvHeader tlvHeader = new TlvHeader(); | ||
699 | + tlvHeader.setTlvType(TlvType.AREAADDRESS.value()); | ||
700 | + AreaAddressTlv areaAddressTlv = new AreaAddressTlv(tlvHeader); | ||
701 | + areaAddressTlv.addAddress(areaAddr); | ||
702 | + p2PHelloPdu.addTlv(areaAddressTlv); | ||
703 | + p2PHelloPdu.setIsisPduType(IsisPduType.P2PHELLOPDU.value()); | ||
704 | + p2PHelloPdu.setSourceMac(macAddress1); | ||
705 | + p2PHelloPdu.setCircuitType((byte) IsisRouterType.L1.value()); | ||
706 | + defaultIsisInterface.setNetworkType(IsisNetworkType.P2P); | ||
707 | + defaultIsisInterface.setReservedPacketCircuitType(IsisRouterType.L1.value()); | ||
708 | + defaultIsisInterface.setAreaAddress(areaAddr); | ||
709 | + defaultIsisInterface.setAllConfiguredInterfaceIps(ip4Addresses); | ||
710 | + defaultIsisInterface.setInterfaceIpAddress(ip4Address); | ||
711 | + defaultIsisInterface.setNetworkMask(mask1); | ||
712 | + defaultIsisInterface.processIsisMessage(p2PHelloPdu, isisLsdb, channel); | ||
713 | + assertThat(defaultIsisInterface, is(notNullValue())); | ||
714 | + } | ||
715 | + | ||
716 | + /** | ||
717 | + * Tests processP2pHelloPduMessage() method. | ||
718 | + */ | ||
719 | + @Test(expected = Exception.class) | ||
720 | + public void testProcessP2pHelloPduMessagee3() throws Exception { | ||
721 | + defaultIsisInterface.setSystemId(sysId); | ||
722 | + p2PHelloPdu = new P2PHelloPdu(isisHeader); | ||
723 | + TlvHeader tlvHeader = new TlvHeader(); | ||
724 | + tlvHeader.setTlvType(TlvType.ADJACENCYSTATE.value()); | ||
725 | + AdjacencyStateTlv adjacencyStateTlv = new AdjacencyStateTlv(tlvHeader); | ||
726 | + adjacencyStateTlv.setNeighborSystemId(sysId); | ||
727 | + adjacencyStateTlv.setAdjacencyType((byte) IsisInterfaceState.DOWN.value()); | ||
728 | + p2PHelloPdu.addTlv(adjacencyStateTlv); | ||
729 | + tlvHeader = new TlvHeader(); | ||
730 | + tlvHeader.setTlvType(TlvType.AREAADDRESS.value()); | ||
731 | + AreaAddressTlv areaAddressTlv = new AreaAddressTlv(tlvHeader); | ||
732 | + areaAddressTlv.addAddress(areaAddr); | ||
733 | + p2PHelloPdu.addTlv(areaAddressTlv); | ||
734 | + p2PHelloPdu.setIsisPduType(IsisPduType.P2PHELLOPDU.value()); | ||
735 | + p2PHelloPdu.setSourceMac(macAddress1); | ||
736 | + p2PHelloPdu.setCircuitType((byte) IsisRouterType.L1.value()); | ||
737 | + defaultIsisInterface.setNetworkType(IsisNetworkType.P2P); | ||
738 | + defaultIsisInterface.setReservedPacketCircuitType(IsisRouterType.L1.value()); | ||
739 | + defaultIsisInterface.setAreaAddress(areaAddr); | ||
740 | + defaultIsisInterface.setAllConfiguredInterfaceIps(ip4Addresses); | ||
741 | + defaultIsisInterface.setInterfaceIpAddress(ip4Address); | ||
742 | + defaultIsisInterface.setNetworkMask(mask1); | ||
743 | + defaultIsisInterface.processIsisMessage(p2PHelloPdu, isisLsdb, channel); | ||
744 | + assertThat(defaultIsisInterface, is(notNullValue())); | ||
745 | + } | ||
746 | + | ||
747 | + /** | ||
748 | + * Tests processP2pHelloPduMessage() method. | ||
749 | + */ | ||
750 | + @Test(expected = Exception.class) | ||
751 | + public void testProcessP2pHelloPduMessagee4() throws Exception { | ||
752 | + defaultIsisInterface.setSystemId(sysId); | ||
753 | + p2PHelloPdu = new P2PHelloPdu(isisHeader); | ||
754 | + TlvHeader tlvHeader = new TlvHeader(); | ||
755 | + tlvHeader.setTlvType(TlvType.ADJACENCYSTATE.value()); | ||
756 | + AdjacencyStateTlv adjacencyStateTlv = new AdjacencyStateTlv(tlvHeader); | ||
757 | + adjacencyStateTlv.setNeighborSystemId(sysId); | ||
758 | + adjacencyStateTlv.setAdjacencyType((byte) IsisInterfaceState.INITIAL.value()); | ||
759 | + p2PHelloPdu.addTlv(adjacencyStateTlv); | ||
760 | + tlvHeader = new TlvHeader(); | ||
761 | + tlvHeader.setTlvType(TlvType.AREAADDRESS.value()); | ||
762 | + AreaAddressTlv areaAddressTlv = new AreaAddressTlv(tlvHeader); | ||
763 | + areaAddressTlv.addAddress(areaAddr); | ||
764 | + p2PHelloPdu.addTlv(areaAddressTlv); | ||
765 | + p2PHelloPdu.setIsisPduType(IsisPduType.P2PHELLOPDU.value()); | ||
766 | + p2PHelloPdu.setSourceMac(macAddress1); | ||
767 | + p2PHelloPdu.setCircuitType((byte) IsisRouterType.L1.value()); | ||
768 | + defaultIsisInterface.setNetworkType(IsisNetworkType.P2P); | ||
769 | + defaultIsisInterface.setReservedPacketCircuitType(IsisRouterType.L1L2.value()); | ||
770 | + defaultIsisInterface.setAreaAddress(areaAddr); | ||
771 | + defaultIsisInterface.setAllConfiguredInterfaceIps(ip4Addresses); | ||
772 | + defaultIsisInterface.setInterfaceIpAddress(ip4Address); | ||
773 | + defaultIsisInterface.setNetworkMask(mask1); | ||
774 | + defaultIsisInterface.processIsisMessage(p2PHelloPdu, isisLsdb, channel); | ||
775 | + assertThat(defaultIsisInterface, is(notNullValue())); | ||
776 | + } | ||
777 | + | ||
778 | + @Test(expected = Exception.class) | ||
779 | + public void testProcessP2pHelloPduMessagee5() throws Exception { | ||
780 | + defaultIsisInterface.setSystemId(sysId); | ||
781 | + p2PHelloPdu = new P2PHelloPdu(isisHeader); | ||
782 | + TlvHeader tlvHeader = new TlvHeader(); | ||
783 | + tlvHeader.setTlvType(TlvType.ADJACENCYSTATE.value()); | ||
784 | + AdjacencyStateTlv adjacencyStateTlv = new AdjacencyStateTlv(tlvHeader); | ||
785 | + adjacencyStateTlv.setNeighborSystemId(sysId); | ||
786 | + adjacencyStateTlv.setAdjacencyType((byte) IsisInterfaceState.UP.value()); | ||
787 | + p2PHelloPdu.addTlv(adjacencyStateTlv); | ||
788 | + tlvHeader = new TlvHeader(); | ||
789 | + tlvHeader.setTlvType(TlvType.AREAADDRESS.value()); | ||
790 | + AreaAddressTlv areaAddressTlv = new AreaAddressTlv(tlvHeader); | ||
791 | + areaAddressTlv.addAddress(areaAddr); | ||
792 | + p2PHelloPdu.addTlv(areaAddressTlv); | ||
793 | + p2PHelloPdu.setIsisPduType(IsisPduType.P2PHELLOPDU.value()); | ||
794 | + p2PHelloPdu.setSourceMac(macAddress1); | ||
795 | + p2PHelloPdu.setCircuitType((byte) IsisRouterType.L2.value()); | ||
796 | + defaultIsisInterface.setNetworkType(IsisNetworkType.P2P); | ||
797 | + defaultIsisInterface.setReservedPacketCircuitType(IsisRouterType.L1L2.value()); | ||
798 | + defaultIsisInterface.setAreaAddress(areaAddr); | ||
799 | + defaultIsisInterface.setAllConfiguredInterfaceIps(ip4Addresses); | ||
800 | + defaultIsisInterface.setInterfaceIpAddress(ip4Address); | ||
801 | + defaultIsisInterface.setNetworkMask(mask1); | ||
802 | + defaultIsisInterface.processIsisMessage(p2PHelloPdu, isisLsdb, channel); | ||
803 | + assertThat(defaultIsisInterface, is(notNullValue())); | ||
804 | + } | ||
805 | + | ||
806 | + /** | ||
807 | + * Tests startHelloSender() method. | ||
808 | + */ | ||
809 | + @Test(expected = Exception.class) | ||
810 | + public void testStartHelloSender() throws Exception { | ||
811 | + defaultIsisInterface.startHelloSender(channel); | ||
812 | + assertThat(defaultIsisInterface, is(notNullValue())); | ||
813 | + } | ||
814 | + | ||
815 | + /** | ||
816 | + * Tests lspKeyP2P() method. | ||
817 | + */ | ||
818 | + @Test | ||
819 | + public void testLspKeyP2P() throws Exception { | ||
820 | + result5 = defaultIsisInterface.lspKeyP2P(sysId); | ||
821 | + assertThat(result5, is(notNullValue())); | ||
822 | + } | ||
823 | + | ||
824 | + /** | ||
825 | + * Tests processLsPduMessage() method. | ||
826 | + */ | ||
827 | + @Test | ||
828 | + public void testProcessLsPduMessage() throws Exception { | ||
829 | + lsPdu = new LsPdu(isisHeader); | ||
830 | + lsPdu.setSourceMac(macAddress1); | ||
831 | + lsPdu.setIsisPduType(IsisPduType.L2LSPDU.value()); | ||
832 | + lsPdu.setLspId(sysId); | ||
833 | + isisMessage = lsPdu; | ||
834 | + defaultIsisInterface.setNetworkType(IsisNetworkType.P2P); | ||
835 | + defaultIsisInterface.setSystemId(sysId); | ||
836 | + defaultIsisInterface.processIsisMessage(isisMessage, isisLsdb, channel); | ||
837 | + assertThat(defaultIsisInterface, is(notNullValue())); | ||
838 | + } | ||
839 | + | ||
840 | + /** | ||
841 | + * Tests processPsnPduMessage() method. | ||
842 | + */ | ||
843 | + @Test | ||
844 | + public void testProcessPsnPduMessage() throws Exception { | ||
845 | + psnp = new Psnp(isisHeader); | ||
846 | + psnp.setSourceMac(macAddress1); | ||
847 | + psnp.setIsisPduType(IsisPduType.L2PSNP.value()); | ||
848 | + TlvHeader tlvHeader = new TlvHeader(); | ||
849 | + tlvHeader.setTlvType(TlvType.LSPENTRY.value()); | ||
850 | + tlvHeader.setTlvLength(0); | ||
851 | + LspEntriesTlv lspEntriesTlv = new LspEntriesTlv(tlvHeader); | ||
852 | + LspEntry lspEntry = new LspEntry(); | ||
853 | + lspEntry.setLspChecksum(0); | ||
854 | + lspEntry.setLspSequenceNumber(0); | ||
855 | + lspEntry.setRemainingTime(0); | ||
856 | + lspEntriesTlv.addLspEntry(lspEntry); | ||
857 | + psnp.addTlv(lspEntriesTlv); | ||
858 | + isisMessage = psnp; | ||
859 | + defaultIsisInterface.processIsisMessage(isisMessage, isisLsdb, channel); | ||
860 | + assertThat(defaultIsisInterface, is(notNullValue())); | ||
861 | + } | ||
862 | + | ||
863 | + /** | ||
864 | + * Tests processCsnPduMessage() method. | ||
865 | + */ | ||
866 | + @Test(expected = Exception.class) | ||
867 | + public void testProcessCsnPduMessage() throws Exception { | ||
868 | + ChannelBuffer channelBuffer = ChannelBuffers.copiedBuffer(csnpBytes); | ||
869 | + csnp = new Csnp(isisHeader); | ||
870 | + csnp.readFrom(channelBuffer); | ||
871 | + csnp.setSourceMac(macAddress1); | ||
872 | + csnp.setIsisPduType(IsisPduType.L2CSNP.value()); | ||
873 | + isisMessage = csnp; | ||
874 | + defaultIsisInterface.processIsisMessage(isisMessage, isisLsdb, channel); | ||
875 | + assertThat(defaultIsisInterface, is(notNullValue())); | ||
876 | + } | ||
486 | } | 877 | } | ... | ... |
... | @@ -36,6 +36,7 @@ public class DefaultIsisProcessTest { | ... | @@ -36,6 +36,7 @@ public class DefaultIsisProcessTest { |
36 | private final String processId = "1"; | 36 | private final String processId = "1"; |
37 | private IsisProcess isisProcess; | 37 | private IsisProcess isisProcess; |
38 | private String result; | 38 | private String result; |
39 | + private IsisProcess defaultIsisProcess; | ||
39 | private IsisInterface isisInterface; | 40 | private IsisInterface isisInterface; |
40 | private List<IsisInterface> isisInterfaceList; | 41 | private List<IsisInterface> isisInterfaceList; |
41 | private List<IsisInterface> result1; | 42 | private List<IsisInterface> result1; |
... | @@ -44,6 +45,7 @@ public class DefaultIsisProcessTest { | ... | @@ -44,6 +45,7 @@ public class DefaultIsisProcessTest { |
44 | public void setUp() throws Exception { | 45 | public void setUp() throws Exception { |
45 | isisProcess = new DefaultIsisProcess(); | 46 | isisProcess = new DefaultIsisProcess(); |
46 | isisInterface = EasyMock.createNiceMock(DefaultIsisInterface.class); | 47 | isisInterface = EasyMock.createNiceMock(DefaultIsisInterface.class); |
48 | + defaultIsisProcess = new DefaultIsisProcess(); | ||
47 | } | 49 | } |
48 | 50 | ||
49 | @After | 51 | @After | ... | ... |
... | @@ -23,10 +23,14 @@ import org.jboss.netty.channel.MessageEvent; | ... | @@ -23,10 +23,14 @@ import org.jboss.netty.channel.MessageEvent; |
23 | import org.junit.After; | 23 | import org.junit.After; |
24 | import org.junit.Before; | 24 | import org.junit.Before; |
25 | import org.junit.Test; | 25 | import org.junit.Test; |
26 | +import org.onlab.packet.Ip4Address; | ||
27 | +import org.onosproject.isis.controller.IsisInterface; | ||
26 | import org.onosproject.isis.controller.IsisMessage; | 28 | import org.onosproject.isis.controller.IsisMessage; |
29 | +import org.onosproject.isis.controller.IsisNetworkType; | ||
27 | import org.onosproject.isis.controller.IsisProcess; | 30 | import org.onosproject.isis.controller.IsisProcess; |
28 | import org.onosproject.isis.io.isispacket.pdu.L1L2HelloPdu; | 31 | import org.onosproject.isis.io.isispacket.pdu.L1L2HelloPdu; |
29 | 32 | ||
33 | +import java.util.ArrayList; | ||
30 | import java.util.List; | 34 | import java.util.List; |
31 | 35 | ||
32 | import static org.hamcrest.CoreMatchers.is; | 36 | import static org.hamcrest.CoreMatchers.is; |
... | @@ -43,12 +47,14 @@ public class IsisChannelHandlerTest { | ... | @@ -43,12 +47,14 @@ public class IsisChannelHandlerTest { |
43 | private IsisChannelHandler isisChannelHandler; | 47 | private IsisChannelHandler isisChannelHandler; |
44 | private Controller controller; | 48 | private Controller controller; |
45 | private IsisProcess isisProcess; | 49 | private IsisProcess isisProcess; |
46 | - private List<IsisProcess> isisProcessList; | 50 | + private List<IsisProcess> isisProcessList = new ArrayList(); |
47 | private ChannelHandlerContext channelHandlerContext; | 51 | private ChannelHandlerContext channelHandlerContext; |
48 | private ChannelStateEvent channelStateEvent; | 52 | private ChannelStateEvent channelStateEvent; |
49 | private ExceptionEvent exceptionEvent; | 53 | private ExceptionEvent exceptionEvent; |
50 | private MessageEvent messageEvent; | 54 | private MessageEvent messageEvent; |
51 | private IsisMessage isisMessage; | 55 | private IsisMessage isisMessage; |
56 | + private List<IsisInterface> isisInterfaceList = new ArrayList<>(); | ||
57 | + private Ip4Address ip4Address = Ip4Address.valueOf("10.10.10.10"); | ||
52 | 58 | ||
53 | @Before | 59 | @Before |
54 | public void setUp() throws Exception { | 60 | public void setUp() throws Exception { |
... | @@ -71,7 +77,7 @@ public class IsisChannelHandlerTest { | ... | @@ -71,7 +77,7 @@ public class IsisChannelHandlerTest { |
71 | /** | 77 | /** |
72 | * Tests initializeInterfaceMap() method. | 78 | * Tests initializeInterfaceMap() method. |
73 | */ | 79 | */ |
74 | - @Test(expected = Exception.class) | 80 | + @Test |
75 | public void testInitializeInterfaceMap() throws Exception { | 81 | public void testInitializeInterfaceMap() throws Exception { |
76 | isisChannelHandler.initializeInterfaceMap(); | 82 | isisChannelHandler.initializeInterfaceMap(); |
77 | assertThat(isisChannelHandler, is(notNullValue())); | 83 | assertThat(isisChannelHandler, is(notNullValue())); |
... | @@ -82,6 +88,32 @@ public class IsisChannelHandlerTest { | ... | @@ -82,6 +88,32 @@ public class IsisChannelHandlerTest { |
82 | */ | 88 | */ |
83 | @Test(expected = Exception.class) | 89 | @Test(expected = Exception.class) |
84 | public void testUpdateInterfaceMap() throws Exception { | 90 | public void testUpdateInterfaceMap() throws Exception { |
91 | + IsisInterface isisInterface = new DefaultIsisInterface(); | ||
92 | + IsisInterface isisInterface1 = new DefaultIsisInterface(); | ||
93 | + isisInterface.setInterfaceIpAddress(ip4Address); | ||
94 | + isisInterface.setInterfaceIndex(1); | ||
95 | + isisInterfaceList.add(isisInterface); | ||
96 | + IsisProcess isisProcess = new DefaultIsisProcess(); | ||
97 | + isisProcess.setIsisInterfaceList(isisInterfaceList); | ||
98 | + isisProcessList.add(isisProcess); | ||
99 | + isisChannelHandler.updateInterfaceMap(isisProcessList); | ||
100 | + assertThat(isisChannelHandler, is(notNullValue())); | ||
101 | + isisProcessList = new ArrayList<>(); | ||
102 | + isisInterface1.setInterfaceIpAddress(ip4Address); | ||
103 | + isisInterface1.setInterfaceIndex(1); | ||
104 | + isisInterface1.setInterfaceIpAddress(ip4Address); | ||
105 | + isisInterface1.setInterfaceIndex(1); | ||
106 | + isisInterface1.setSystemId("9999.9999.9999"); | ||
107 | + isisInterface1.setIntermediateSystemName("router"); | ||
108 | + isisInterface1.setReservedPacketCircuitType(3); | ||
109 | + isisInterface1.setCircuitId("10"); | ||
110 | + isisInterface1.setNetworkType(IsisNetworkType.BROADCAST); | ||
111 | + isisInterface1.setAreaAddress("490001"); | ||
112 | + isisInterface1.setHoldingTime(50); | ||
113 | + isisInterface1.setHelloInterval(10); | ||
114 | + isisInterfaceList.add(isisInterface1); | ||
115 | + isisProcess.setIsisInterfaceList(isisInterfaceList); | ||
116 | + isisProcessList.add(isisProcess); | ||
85 | isisChannelHandler.updateInterfaceMap(isisProcessList); | 117 | isisChannelHandler.updateInterfaceMap(isisProcessList); |
86 | assertThat(isisChannelHandler, is(notNullValue())); | 118 | assertThat(isisChannelHandler, is(notNullValue())); |
87 | } | 119 | } |
... | @@ -89,7 +121,7 @@ public class IsisChannelHandlerTest { | ... | @@ -89,7 +121,7 @@ public class IsisChannelHandlerTest { |
89 | /** | 121 | /** |
90 | * Tests initializeInterfaceIpList() method. | 122 | * Tests initializeInterfaceIpList() method. |
91 | */ | 123 | */ |
92 | - @Test(expected = Exception.class) | 124 | + @Test |
93 | public void testInitializeInterfaceIpList() throws Exception { | 125 | public void testInitializeInterfaceIpList() throws Exception { |
94 | isisChannelHandler.initializeInterfaceIpList(); | 126 | isisChannelHandler.initializeInterfaceIpList(); |
95 | assertThat(isisChannelHandler, is(notNullValue())); | 127 | assertThat(isisChannelHandler, is(notNullValue())); | ... | ... |
... | @@ -58,7 +58,7 @@ public class IsisHelloPduSenderTest { | ... | @@ -58,7 +58,7 @@ public class IsisHelloPduSenderTest { |
58 | /** | 58 | /** |
59 | * Tests run() method. | 59 | * Tests run() method. |
60 | */ | 60 | */ |
61 | - @Test | 61 | + @Test(expected = Exception.class) |
62 | public void testRun() throws Exception { | 62 | public void testRun() throws Exception { |
63 | isisInterface.setNetworkType(IsisNetworkType.P2P); | 63 | isisInterface.setNetworkType(IsisNetworkType.P2P); |
64 | isisInterface.setCircuitId(circuitId); | 64 | isisInterface.setCircuitId(circuitId); | ... | ... |
... | @@ -24,11 +24,14 @@ import static org.hamcrest.MatcherAssert.assertThat; | ... | @@ -24,11 +24,14 @@ import static org.hamcrest.MatcherAssert.assertThat; |
24 | public class IsisMessageDecoderTest { | 24 | public class IsisMessageDecoderTest { |
25 | 25 | ||
26 | private final byte[] hello = { | 26 | private final byte[] hello = { |
27 | + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
27 | -125, 20, 1, 0, 17, 1, 0, 0, | 28 | -125, 20, 1, 0, 17, 1, 0, 0, |
28 | 2, 51, 51, 51, 51, 51, 51, 0, 100, 5, -39, -126, 1, 4, 3, | 29 | 2, 51, 51, 51, 51, 51, 51, 0, 100, 5, -39, -126, 1, 4, 3, |
29 | 73, 0, 0, -127, 1, -52, -124, 4, -64, -88, 56, 102 | 30 | 73, 0, 0, -127, 1, -52, -124, 4, -64, -88, 56, 102 |
30 | }; | 31 | }; |
32 | + private final byte[] array2 = {0, 0, 0, 0, 0, 0, 0}; | ||
31 | private final String id = "127.0.0.1"; | 33 | private final String id = "127.0.0.1"; |
34 | + private byte[] array1; | ||
32 | private IsisMessageDecoder isisMessageDecoder; | 35 | private IsisMessageDecoder isisMessageDecoder; |
33 | private ChannelHandlerContext ctx; | 36 | private ChannelHandlerContext ctx; |
34 | private Channel channel; | 37 | private Channel channel; |
... | @@ -49,7 +52,8 @@ public class IsisMessageDecoderTest { | ... | @@ -49,7 +52,8 @@ public class IsisMessageDecoderTest { |
49 | public void testDecode() throws Exception { | 52 | public void testDecode() throws Exception { |
50 | channel = EasyMock.createMock(Channel.class); | 53 | channel = EasyMock.createMock(Channel.class); |
51 | socketAddress = InetSocketAddress.createUnresolved(id, 7000); | 54 | socketAddress = InetSocketAddress.createUnresolved(id, 7000); |
52 | - byte[] array = IsisUtil.getPaddingTlvs(hello.length); | 55 | + byte[] array = IsisUtil.getPaddingTlvs(hello.length - 17); |
56 | + array1 = Bytes.concat(hello, array); | ||
53 | channelBuffer = ChannelBuffers.copiedBuffer(Bytes.concat(hello, array)); | 57 | channelBuffer = ChannelBuffers.copiedBuffer(Bytes.concat(hello, array)); |
54 | assertThat(isisMessageDecoder.decode(ctx, channel, channelBuffer), is(nullValue())); | 58 | assertThat(isisMessageDecoder.decode(ctx, channel, channelBuffer), is(nullValue())); |
55 | } | 59 | } | ... | ... |
... | @@ -22,8 +22,13 @@ import org.onosproject.isis.controller.IsisLsdb; | ... | @@ -22,8 +22,13 @@ import org.onosproject.isis.controller.IsisLsdb; |
22 | import org.onosproject.isis.controller.IsisLsdbAge; | 22 | import org.onosproject.isis.controller.IsisLsdbAge; |
23 | import org.onosproject.isis.controller.IsisPduType; | 23 | import org.onosproject.isis.controller.IsisPduType; |
24 | import org.onosproject.isis.controller.LspWrapper; | 24 | import org.onosproject.isis.controller.LspWrapper; |
25 | +import org.onosproject.isis.controller.impl.DefaultIsisInterface; | ||
26 | +import org.onosproject.isis.io.isispacket.IsisHeader; | ||
27 | +import org.onosproject.isis.io.isispacket.pdu.AttachedToOtherAreas; | ||
28 | +import org.onosproject.isis.io.isispacket.pdu.LsPdu; | ||
25 | import org.onosproject.isis.io.util.IsisConstants; | 29 | import org.onosproject.isis.io.util.IsisConstants; |
26 | 30 | ||
31 | +import java.util.List; | ||
27 | import java.util.Map; | 32 | import java.util.Map; |
28 | import java.util.concurrent.ConcurrentHashMap; | 33 | import java.util.concurrent.ConcurrentHashMap; |
29 | 34 | ||
... | @@ -37,19 +42,27 @@ public class DefaultIsisLsdbTest { | ... | @@ -37,19 +42,27 @@ public class DefaultIsisLsdbTest { |
37 | private final int l1LspSeqNo = IsisConstants.STARTLSSEQUENCENUM; | 42 | private final int l1LspSeqNo = IsisConstants.STARTLSSEQUENCENUM; |
38 | private final int l2LspSeqNo = IsisConstants.STARTLSSEQUENCENUM; | 43 | private final int l2LspSeqNo = IsisConstants.STARTLSSEQUENCENUM; |
39 | private final String srcId = "1111.1111.1111"; | 44 | private final String srcId = "1111.1111.1111"; |
40 | - | ||
41 | private DefaultIsisLsdb defaultIsisLsdb; | 45 | private DefaultIsisLsdb defaultIsisLsdb; |
42 | private IsisLsdbAge lsdbAge = null; | 46 | private IsisLsdbAge lsdbAge = null; |
43 | - | ||
44 | - | ||
45 | private int resultInt; | 47 | private int resultInt; |
46 | private Map<String, LspWrapper> resultMap = new ConcurrentHashMap<>(); | 48 | private Map<String, LspWrapper> resultMap = new ConcurrentHashMap<>(); |
47 | private IsisLsdb resultLsdb; | 49 | private IsisLsdb resultLsdb; |
48 | private LspWrapper resultLspWrapper; | 50 | private LspWrapper resultLspWrapper; |
49 | - | 51 | + private List<LspWrapper> lspWrapperList; |
52 | + private LsPdu lsPdu; | ||
53 | + private IsisHeader isisHeader; | ||
54 | + private DefaultIsisInterface defaultIsisInterface; | ||
55 | + private String lspId = "1234.1234.1234.00-00"; | ||
56 | + private String result; | ||
50 | 57 | ||
51 | @Before | 58 | @Before |
52 | public void setUp() throws Exception { | 59 | public void setUp() throws Exception { |
60 | + defaultIsisInterface = new DefaultIsisInterface(); | ||
61 | + isisHeader = new IsisHeader(); | ||
62 | + lsPdu = new LsPdu(isisHeader); | ||
63 | + lsPdu.setLspId(lspId); | ||
64 | + lsPdu.setAttachedToOtherAreas(AttachedToOtherAreas.DEFAULTMETRIC); | ||
65 | + lsPdu.setIsisPduType(IsisPduType.L1LSPDU.value()); | ||
53 | defaultIsisLsdb = new DefaultIsisLsdb(); | 66 | defaultIsisLsdb = new DefaultIsisLsdb(); |
54 | } | 67 | } |
55 | 68 | ||
... | @@ -129,5 +142,60 @@ public class DefaultIsisLsdbTest { | ... | @@ -129,5 +142,60 @@ public class DefaultIsisLsdbTest { |
129 | resultLspWrapper = defaultIsisLsdb.findLsp(IsisPduType.L1HELLOPDU, srcId); | 142 | resultLspWrapper = defaultIsisLsdb.findLsp(IsisPduType.L1HELLOPDU, srcId); |
130 | assertThat(resultLspWrapper, is(nullValue())); | 143 | assertThat(resultLspWrapper, is(nullValue())); |
131 | } | 144 | } |
145 | + | ||
146 | + /** | ||
147 | + * Tests allLspHeaders() method. | ||
148 | + */ | ||
149 | + @Test | ||
150 | + public void testAllLspHeaders() throws Exception { | ||
151 | + defaultIsisLsdb.addLsp(lsPdu, false, defaultIsisInterface); | ||
152 | + lspWrapperList = defaultIsisLsdb.allLspHeaders(true); | ||
153 | + assertThat(lspWrapperList, is(notNullValue())); | ||
154 | + | ||
155 | + defaultIsisLsdb.addLsp(lsPdu, true, defaultIsisInterface); | ||
156 | + lspWrapperList = defaultIsisLsdb.allLspHeaders(true); | ||
157 | + assertThat(lspWrapperList, is(notNullValue())); | ||
158 | + } | ||
159 | + | ||
160 | + /** | ||
161 | + * Tests isNewerOrSameLsp() method. | ||
162 | + */ | ||
163 | + @Test | ||
164 | + public void testIsNewerOrSameLsp() throws Exception { | ||
165 | + result = defaultIsisLsdb.isNewerOrSameLsp(lsPdu, lsPdu); | ||
166 | + assertThat(result, is("same")); | ||
167 | + } | ||
168 | + | ||
169 | + /** | ||
170 | + * Tests lsSequenceNumber() method. | ||
171 | + */ | ||
172 | + @Test | ||
173 | + public void testLsSequenceNumber() throws Exception { | ||
174 | + resultInt = defaultIsisLsdb.lsSequenceNumber(IsisPduType.L1LSPDU); | ||
175 | + assertThat(resultInt, is(1)); | ||
176 | + | ||
177 | + resultInt = defaultIsisLsdb.lsSequenceNumber(IsisPduType.L2LSPDU); | ||
178 | + assertThat(resultInt, is(1)); | ||
179 | + | ||
180 | + resultInt = defaultIsisLsdb.lsSequenceNumber(IsisPduType.L1CSNP); | ||
181 | + assertThat(resultInt, is(1)); | ||
182 | + } | ||
183 | + | ||
184 | + /** | ||
185 | + * Tests deleteLsp() method. | ||
186 | + */ | ||
187 | + @Test | ||
188 | + public void testdeleteLsp() throws Exception { | ||
189 | + defaultIsisLsdb.deleteLsp(lsPdu); | ||
190 | + assertThat(defaultIsisLsdb, is(notNullValue())); | ||
191 | + | ||
192 | + lsPdu.setIsisPduType(IsisPduType.L2LSPDU.value()); | ||
193 | + defaultIsisLsdb.deleteLsp(lsPdu); | ||
194 | + assertThat(defaultIsisLsdb, is(notNullValue())); | ||
195 | + | ||
196 | + lsPdu.setIsisPduType(IsisPduType.L1CSNP.value()); | ||
197 | + defaultIsisLsdb.deleteLsp(lsPdu); | ||
198 | + assertThat(defaultIsisLsdb, is(notNullValue())); | ||
199 | + } | ||
132 | } | 200 | } |
133 | 201 | ... | ... |
... | @@ -19,7 +19,11 @@ import org.junit.After; | ... | @@ -19,7 +19,11 @@ import org.junit.After; |
19 | import org.junit.Before; | 19 | import org.junit.Before; |
20 | import org.junit.Test; | 20 | import org.junit.Test; |
21 | import org.onosproject.isis.controller.IsisInterface; | 21 | import org.onosproject.isis.controller.IsisInterface; |
22 | +import org.onosproject.isis.controller.IsisLsdbAge; | ||
23 | +import org.onosproject.isis.controller.IsisPduType; | ||
22 | import org.onosproject.isis.controller.impl.DefaultIsisInterface; | 24 | import org.onosproject.isis.controller.impl.DefaultIsisInterface; |
25 | +import org.onosproject.isis.io.isispacket.IsisHeader; | ||
26 | +import org.onosproject.isis.io.isispacket.pdu.LsPdu; | ||
23 | 27 | ||
24 | import static org.hamcrest.CoreMatchers.is; | 28 | import static org.hamcrest.CoreMatchers.is; |
25 | import static org.hamcrest.CoreMatchers.notNullValue; | 29 | import static org.hamcrest.CoreMatchers.notNullValue; |
... | @@ -36,11 +40,20 @@ public class DefaultLspWrapperTest { | ... | @@ -36,11 +40,20 @@ public class DefaultLspWrapperTest { |
36 | private int result1; | 40 | private int result1; |
37 | private IsisInterface isisInterface; | 41 | private IsisInterface isisInterface; |
38 | private IsisInterface result2; | 42 | private IsisInterface result2; |
43 | + private IsisPduType isisPduType; | ||
44 | + private boolean result3; | ||
45 | + private LsPdu lsPdu; | ||
46 | + private LsPdu pdu; | ||
47 | + private DefaultIsisLsdbAge defaultIsisLsdbAge; | ||
48 | + private IsisLsdbAge lsdbAge; | ||
39 | 49 | ||
40 | @Before | 50 | @Before |
41 | public void setUp() throws Exception { | 51 | public void setUp() throws Exception { |
42 | defaultLspWrapper = new DefaultLspWrapper(); | 52 | defaultLspWrapper = new DefaultLspWrapper(); |
43 | isisInterface = new DefaultIsisInterface(); | 53 | isisInterface = new DefaultIsisInterface(); |
54 | + pdu = new LsPdu(new IsisHeader()); | ||
55 | + defaultIsisLsdbAge = new DefaultIsisLsdbAge(); | ||
56 | + defaultIsisLsdbAge.startDbAging(); | ||
44 | } | 57 | } |
45 | 58 | ||
46 | @After | 59 | @After |
... | @@ -108,4 +121,169 @@ public class DefaultLspWrapperTest { | ... | @@ -108,4 +121,169 @@ public class DefaultLspWrapperTest { |
108 | assertThat(result2, is(notNullValue())); | 121 | assertThat(result2, is(notNullValue())); |
109 | } | 122 | } |
110 | 123 | ||
124 | + /** | ||
125 | + * Tests ageCounterWhenReceived() getter method. | ||
126 | + */ | ||
127 | + @Test | ||
128 | + public void testAgeCounterWhenReceived() throws Exception { | ||
129 | + defaultLspWrapper.setAgeCounterWhenReceived(1); | ||
130 | + result1 = defaultLspWrapper.ageCounterWhenReceived(); | ||
131 | + assertThat(result1, is(notNullValue())); | ||
132 | + } | ||
133 | + | ||
134 | + /** | ||
135 | + * Tests ageCounterWhenReceived() setter method. | ||
136 | + */ | ||
137 | + @Test | ||
138 | + public void testSetAgeCounterWhenReceived() throws Exception { | ||
139 | + defaultLspWrapper.setAgeCounterWhenReceived(1); | ||
140 | + result1 = defaultLspWrapper.ageCounterWhenReceived(); | ||
141 | + assertThat(result1, is(notNullValue())); | ||
142 | + } | ||
143 | + | ||
144 | + /** | ||
145 | + * Tests ageCounterRollOverWhenAdded() getter method. | ||
146 | + */ | ||
147 | + @Test | ||
148 | + public void testAgeCounterRollOverWhenAdded() throws Exception { | ||
149 | + defaultLspWrapper.setAgeCounterRollOverWhenAdded(1); | ||
150 | + result1 = defaultLspWrapper.ageCounterRollOverWhenAdded(); | ||
151 | + assertThat(result1, is(notNullValue())); | ||
152 | + } | ||
153 | + | ||
154 | + /** | ||
155 | + * Tests ageCounterRollOverWhenAdded() setter method. | ||
156 | + */ | ||
157 | + @Test | ||
158 | + public void testSetAgeCounterRollOverWhenAdded() throws Exception { | ||
159 | + defaultLspWrapper.setAgeCounterRollOverWhenAdded(1); | ||
160 | + result1 = defaultLspWrapper.ageCounterRollOverWhenAdded(); | ||
161 | + assertThat(result1, is(notNullValue())); | ||
162 | + } | ||
163 | + | ||
164 | + /** | ||
165 | + * Tests lspType() getter method. | ||
166 | + */ | ||
167 | + @Test | ||
168 | + public void testLspType() throws Exception { | ||
169 | + defaultLspWrapper.setLspType(IsisPduType.L1LSPDU); | ||
170 | + isisPduType = defaultLspWrapper.lspType(); | ||
171 | + assertThat(isisPduType, is(IsisPduType.L1LSPDU)); | ||
172 | + } | ||
173 | + | ||
174 | + /** | ||
175 | + * Tests lspType() setter method. | ||
176 | + */ | ||
177 | + @Test | ||
178 | + public void testSetLspType() throws Exception { | ||
179 | + defaultLspWrapper.setLspType(IsisPduType.L1LSPDU); | ||
180 | + isisPduType = defaultLspWrapper.lspType(); | ||
181 | + assertThat(isisPduType, is(IsisPduType.L1LSPDU)); | ||
182 | + } | ||
183 | + | ||
184 | + /** | ||
185 | + * Tests isSelfOriginated() getter method. | ||
186 | + */ | ||
187 | + @Test | ||
188 | + public void testIsSelfOriginated() throws Exception { | ||
189 | + defaultLspWrapper.setSelfOriginated(true); | ||
190 | + result3 = defaultLspWrapper.isSelfOriginated(); | ||
191 | + assertThat(result3, is(true)); | ||
192 | + } | ||
193 | + | ||
194 | + /** | ||
195 | + * Tests isSelfOriginated() setter method. | ||
196 | + */ | ||
197 | + @Test | ||
198 | + public void testSetSelfOriginated() throws Exception { | ||
199 | + defaultLspWrapper.setSelfOriginated(true); | ||
200 | + result3 = defaultLspWrapper.isSelfOriginated(); | ||
201 | + assertThat(result3, is(true)); | ||
202 | + } | ||
203 | + | ||
204 | + /** | ||
205 | + * Tests binNumber() getter method. | ||
206 | + */ | ||
207 | + @Test | ||
208 | + public void testBinNumber() throws Exception { | ||
209 | + defaultLspWrapper.setBinNumber(1); | ||
210 | + result1 = defaultLspWrapper.binNumber(); | ||
211 | + assertThat(result1, is(1)); | ||
212 | + } | ||
213 | + | ||
214 | + /** | ||
215 | + * Tests binNumber() setter method. | ||
216 | + */ | ||
217 | + @Test | ||
218 | + public void testSetBinNumber() throws Exception { | ||
219 | + defaultLspWrapper.setBinNumber(1); | ||
220 | + result1 = defaultLspWrapper.binNumber(); | ||
221 | + assertThat(result1, is(1)); | ||
222 | + } | ||
223 | + | ||
224 | + /** | ||
225 | + * Tests lsPdu() getter method. | ||
226 | + */ | ||
227 | + @Test | ||
228 | + public void testLsPdu() throws Exception { | ||
229 | + defaultLspWrapper.setLsPdu(pdu); | ||
230 | + lsPdu = defaultLspWrapper.lsPdu(); | ||
231 | + assertThat(lsPdu, is(pdu)); | ||
232 | + } | ||
233 | + | ||
234 | + /** | ||
235 | + * Tests lsPdu() setter method. | ||
236 | + */ | ||
237 | + @Test | ||
238 | + public void testSetLsPdu() throws Exception { | ||
239 | + defaultLspWrapper.setLsPdu(pdu); | ||
240 | + lsPdu = defaultLspWrapper.lsPdu(); | ||
241 | + assertThat(lsPdu, is(pdu)); | ||
242 | + } | ||
243 | + | ||
244 | + /** | ||
245 | + * Tests lsdbAge() getter method. | ||
246 | + */ | ||
247 | + @Test | ||
248 | + public void testlsdbAge() throws Exception { | ||
249 | + defaultLspWrapper.setLsdbAge(defaultIsisLsdbAge); | ||
250 | + lsdbAge = defaultLspWrapper.lsdbAge(); | ||
251 | + assertThat(lsdbAge, is(defaultIsisLsdbAge)); | ||
252 | + } | ||
253 | + | ||
254 | + /** | ||
255 | + * Tests lsdbAge() setter method. | ||
256 | + */ | ||
257 | + @Test | ||
258 | + public void testSetLsdbAge() throws Exception { | ||
259 | + defaultLspWrapper.setLsdbAge(defaultIsisLsdbAge); | ||
260 | + lsdbAge = defaultLspWrapper.lsdbAge(); | ||
261 | + assertThat(lsdbAge, is(defaultIsisLsdbAge)); | ||
262 | + } | ||
263 | + | ||
264 | + /** | ||
265 | + * Tests remainingLifetime() getter method. | ||
266 | + */ | ||
267 | + @Test | ||
268 | + public void testRemainingLifetime() throws Exception { | ||
269 | + defaultLspWrapper.setLsdbAge(defaultIsisLsdbAge); | ||
270 | + defaultLspWrapper.setAgeCounterWhenReceived(1); | ||
271 | + defaultLspWrapper.currentAge(); | ||
272 | + defaultLspWrapper.setRemainingLifetime(1); | ||
273 | + result1 = defaultLspWrapper.remainingLifetime(); | ||
274 | + assertThat(result1, is(1)); | ||
275 | + } | ||
276 | + | ||
277 | + /** | ||
278 | + * Tests remainingLifetime() setter method. | ||
279 | + */ | ||
280 | + @Test | ||
281 | + public void testSetRemainingLifetime() throws Exception { | ||
282 | + defaultLspWrapper.setLsdbAge(defaultIsisLsdbAge); | ||
283 | + defaultLspWrapper.setAgeCounterWhenReceived(1); | ||
284 | + defaultLspWrapper.currentAge(); | ||
285 | + defaultLspWrapper.setRemainingLifetime(1); | ||
286 | + result1 = defaultLspWrapper.remainingLifetime(); | ||
287 | + assertThat(result1, is(1)); | ||
288 | + } | ||
111 | } | 289 | } |
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
... | @@ -18,7 +18,11 @@ package org.onosproject.isis.controller.impl.lsdb; | ... | @@ -18,7 +18,11 @@ package org.onosproject.isis.controller.impl.lsdb; |
18 | import org.junit.After; | 18 | import org.junit.After; |
19 | import org.junit.Before; | 19 | import org.junit.Before; |
20 | import org.junit.Test; | 20 | import org.junit.Test; |
21 | +import org.onosproject.isis.controller.impl.DefaultIsisInterface; | ||
21 | 22 | ||
23 | +import java.net.InetSocketAddress; | ||
24 | +import java.net.SocketAddress; | ||
25 | +import java.util.concurrent.ArrayBlockingQueue; | ||
22 | import java.util.concurrent.BlockingQueue; | 26 | import java.util.concurrent.BlockingQueue; |
23 | 27 | ||
24 | import static org.hamcrest.CoreMatchers.is; | 28 | import static org.hamcrest.CoreMatchers.is; |
... | @@ -31,10 +35,22 @@ import static org.junit.Assert.assertThat; | ... | @@ -31,10 +35,22 @@ import static org.junit.Assert.assertThat; |
31 | public class IsisLspQueueConsumerTest { | 35 | public class IsisLspQueueConsumerTest { |
32 | 36 | ||
33 | private IsisLspQueueConsumer isisLspQueueConsumer; | 37 | private IsisLspQueueConsumer isisLspQueueConsumer; |
34 | - private BlockingQueue blockingQueue; | 38 | + private BlockingQueue blockingQueue = new ArrayBlockingQueue(1024); |
39 | + private DefaultLspWrapper lspWrapper; | ||
40 | + private DefaultLspWrapper lspWrapper1; | ||
41 | + private SocketAddress socketAddress = InetSocketAddress.createUnresolved("127.0.0.1", 7000); | ||
35 | 42 | ||
36 | @Before | 43 | @Before |
37 | public void setUp() throws Exception { | 44 | public void setUp() throws Exception { |
45 | + lspWrapper = new DefaultLspWrapper(); | ||
46 | + lspWrapper.setLspProcessing("refreshLsp"); | ||
47 | + lspWrapper.setSelfOriginated(true); | ||
48 | + lspWrapper.setIsisInterface(new DefaultIsisInterface()); | ||
49 | + lspWrapper1 = new DefaultLspWrapper(); | ||
50 | + lspWrapper1.setLspProcessing("maxAgeLsp"); | ||
51 | + lspWrapper1.setIsisInterface(new DefaultIsisInterface()); | ||
52 | + blockingQueue.add(lspWrapper); | ||
53 | + blockingQueue.add(lspWrapper1); | ||
38 | isisLspQueueConsumer = new IsisLspQueueConsumer(blockingQueue); | 54 | isisLspQueueConsumer = new IsisLspQueueConsumer(blockingQueue); |
39 | } | 55 | } |
40 | 56 | ... | ... |
protocols/isis/isisio/src/main/java/org/onosproject/isis/io/isispacket/pdu/Psnp.java
100755 → 100644
File mode changed
... | @@ -33,6 +33,7 @@ public final class IsisConstants { | ... | @@ -33,6 +33,7 @@ public final class IsisConstants { |
33 | public static final int IRPDISCRIMINATOR = 131; | 33 | public static final int IRPDISCRIMINATOR = 131; |
34 | public static final int ISISVERSION = 1; | 34 | public static final int ISISVERSION = 1; |
35 | public static final int RESERVED = 0; | 35 | public static final int RESERVED = 0; |
36 | + public static final int PRIORITY = 0; | ||
36 | public static final int MAXAREAADDRESS = 0; | 37 | public static final int MAXAREAADDRESS = 0; |
37 | public static final int SYSTEMIDLENGTH = 0; | 38 | public static final int SYSTEMIDLENGTH = 0; |
38 | public static final int PROTOCOLSUPPORTED = 204; | 39 | public static final int PROTOCOLSUPPORTED = 204; |
... | @@ -55,24 +56,15 @@ public final class IsisConstants { | ... | @@ -55,24 +56,15 @@ public final class IsisConstants { |
55 | public static final String DEFAULTLANID = "0000.0000.0000.00"; | 56 | public static final String DEFAULTLANID = "0000.0000.0000.00"; |
56 | public static final String PROCESSESID = "processId"; | 57 | public static final String PROCESSESID = "processId"; |
57 | public static final String INTERFACE = "interface"; | 58 | public static final String INTERFACE = "interface"; |
58 | - public static final String INTERFACEIP = "interfaceIp"; | ||
59 | - public static final String NETWORKMASK = "networkMask"; | ||
60 | public static final String INTERFACEINDEX = "interfaceIndex"; | 59 | public static final String INTERFACEINDEX = "interfaceIndex"; |
61 | public static final String INTERMEDIATESYSTEMNAME = "intermediateSystemName"; | 60 | public static final String INTERMEDIATESYSTEMNAME = "intermediateSystemName"; |
62 | public static final String SYSTEMID = "systemId"; | 61 | public static final String SYSTEMID = "systemId"; |
63 | - public static final String LANID = "lanId"; | ||
64 | - public static final String IDLENGTH = "idLength"; | ||
65 | - public static final String MAXAREAADDRESSES = "maxAreaAddresses"; | ||
66 | public static final String RESERVEDPACKETCIRCUITTYPE = "reservedPacketCircuitType"; | 62 | public static final String RESERVEDPACKETCIRCUITTYPE = "reservedPacketCircuitType"; |
67 | public static final String CIRCUITID = "circuitId"; | 63 | public static final String CIRCUITID = "circuitId"; |
68 | public static final String NETWORKTYPE = "networkType"; | 64 | public static final String NETWORKTYPE = "networkType"; |
69 | public static final String AREAADDRESS = "areaAddress"; | 65 | public static final String AREAADDRESS = "areaAddress"; |
70 | - public static final String AREALENGTH = "areaLength"; | ||
71 | - public static final String LSPID = "lspId"; | ||
72 | public static final String HOLDINGTIME = "holdingTime"; | 66 | public static final String HOLDINGTIME = "holdingTime"; |
73 | public static final String HELLOINTERVAL = "helloInterval"; | 67 | public static final String HELLOINTERVAL = "helloInterval"; |
74 | - public static final String PRIORITY = "priority"; | ||
75 | - public static final String MACADDRESS = "macAddress"; | ||
76 | 68 | ||
77 | /** | 69 | /** |
78 | * Non parameterized constructor. | 70 | * Non parameterized constructor. | ... | ... |
... | @@ -22,6 +22,7 @@ import org.onosproject.isis.controller.IsisInterface; | ... | @@ -22,6 +22,7 @@ import org.onosproject.isis.controller.IsisInterface; |
22 | import org.onosproject.isis.controller.IsisInterfaceState; | 22 | import org.onosproject.isis.controller.IsisInterfaceState; |
23 | import org.onosproject.isis.controller.IsisNeighbor; | 23 | import org.onosproject.isis.controller.IsisNeighbor; |
24 | import org.onosproject.isis.controller.IsisPduType; | 24 | import org.onosproject.isis.controller.IsisPduType; |
25 | +import org.onosproject.isis.controller.IsisRouterType; | ||
25 | import org.onosproject.isis.io.isispacket.IsisHeader; | 26 | import org.onosproject.isis.io.isispacket.IsisHeader; |
26 | import org.onosproject.isis.io.isispacket.pdu.L1L2HelloPdu; | 27 | import org.onosproject.isis.io.isispacket.pdu.L1L2HelloPdu; |
27 | import org.onosproject.isis.io.isispacket.pdu.P2PHelloPdu; | 28 | import org.onosproject.isis.io.isispacket.pdu.P2PHelloPdu; |
... | @@ -394,7 +395,6 @@ public final class IsisUtil { | ... | @@ -394,7 +395,6 @@ public final class IsisUtil { |
394 | isisHeader.setIdLength((byte) IsisConstants.SYSTEMIDLENGTH); | 395 | isisHeader.setIdLength((byte) IsisConstants.SYSTEMIDLENGTH); |
395 | isisHeader.setIsisPduType(IsisPduType.P2PHELLOPDU.value()); | 396 | isisHeader.setIsisPduType(IsisPduType.P2PHELLOPDU.value()); |
396 | isisHeader.setVersion2((byte) IsisConstants.ISISVERSION); | 397 | isisHeader.setVersion2((byte) IsisConstants.ISISVERSION); |
397 | - //isisHeader.setReserved((byte) IsisConstants.RESERVED); | ||
398 | isisHeader.setReserved((byte) IsisConstants.PDULENGTHPOSITION); | 398 | isisHeader.setReserved((byte) IsisConstants.PDULENGTHPOSITION); |
399 | isisHeader.setMaximumAreaAddresses((byte) IsisConstants.MAXAREAADDRESS); | 399 | isisHeader.setMaximumAreaAddresses((byte) IsisConstants.MAXAREAADDRESS); |
400 | P2PHelloPdu p2pHelloPdu = new P2PHelloPdu(isisHeader); | 400 | P2PHelloPdu p2pHelloPdu = new P2PHelloPdu(isisHeader); |
... | @@ -510,14 +510,32 @@ public final class IsisUtil { | ... | @@ -510,14 +510,32 @@ public final class IsisUtil { |
510 | l1L2HelloPdu.addTlv(areaAddressTlv); | 510 | l1L2HelloPdu.addTlv(areaAddressTlv); |
511 | Set<MacAddress> neighbors = isisInterface.neighbors(); | 511 | Set<MacAddress> neighbors = isisInterface.neighbors(); |
512 | if (neighbors.size() > 0) { | 512 | if (neighbors.size() > 0) { |
513 | + List<MacAddress> neighborMacs = new ArrayList<>(); | ||
514 | + for (MacAddress neighbor : neighbors) { | ||
515 | + IsisNeighbor isisNeighbor = isisInterface.lookup(neighbor); | ||
516 | + if (isisPduType == IsisPduType.L1HELLOPDU) { | ||
517 | + if (isisNeighbor.routerType() == IsisRouterType.L1 || | ||
518 | + isisNeighbor.routerType() == IsisRouterType.L1L2) { | ||
519 | + neighborMacs.add(neighbor); | ||
520 | + } | ||
521 | + } else if (isisPduType == IsisPduType.L2HELLOPDU) { | ||
522 | + if (isisNeighbor.routerType() == IsisRouterType.L2 || | ||
523 | + isisNeighbor.routerType() == IsisRouterType.L1L2) { | ||
524 | + neighborMacs.add(neighbor); | ||
525 | + } | ||
526 | + } | ||
527 | + } | ||
528 | + | ||
513 | tlvHeader.setTlvType(TlvType.ISNEIGHBORS.value()); | 529 | tlvHeader.setTlvType(TlvType.ISNEIGHBORS.value()); |
514 | tlvHeader.setTlvLength(0); | 530 | tlvHeader.setTlvLength(0); |
531 | + | ||
515 | IsisNeighborTlv isisNeighborTlv = new IsisNeighborTlv(tlvHeader); | 532 | IsisNeighborTlv isisNeighborTlv = new IsisNeighborTlv(tlvHeader); |
516 | - for (MacAddress neighbor : neighbors) { | 533 | + for (MacAddress neighbor : neighborMacs) { |
517 | isisNeighborTlv.addNeighbor(neighbor); | 534 | isisNeighborTlv.addNeighbor(neighbor); |
518 | } | 535 | } |
519 | l1L2HelloPdu.addTlv(isisNeighborTlv); | 536 | l1L2HelloPdu.addTlv(isisNeighborTlv); |
520 | } | 537 | } |
538 | + | ||
521 | tlvHeader.setTlvType(TlvType.PROTOCOLSUPPORTED.value()); | 539 | tlvHeader.setTlvType(TlvType.PROTOCOLSUPPORTED.value()); |
522 | tlvHeader.setTlvLength(0); | 540 | tlvHeader.setTlvLength(0); |
523 | ProtocolSupportedTlv protocolSupportedTlv = new ProtocolSupportedTlv(tlvHeader); | 541 | ProtocolSupportedTlv protocolSupportedTlv = new ProtocolSupportedTlv(tlvHeader); | ... | ... |
... | @@ -140,8 +140,15 @@ public class LspGenerator { | ... | @@ -140,8 +140,15 @@ public class LspGenerator { |
140 | metricOfIntRea.setExpenseIsInternal(true); | 140 | metricOfIntRea.setExpenseIsInternal(true); |
141 | Ip4Address ip4Address = isisInterface.interfaceIpAddress(); | 141 | Ip4Address ip4Address = isisInterface.interfaceIpAddress(); |
142 | byte[] ipAddress = ip4Address.toOctets(); | 142 | byte[] ipAddress = ip4Address.toOctets(); |
143 | - ipAddress[ipAddress.length - 1] = 0; | 143 | + // ipAddress[ipAddress.length - 1] = 0; |
144 | - metricOfIntRea.setIpAddress(Ip4Address.valueOf(ipAddress)); | 144 | + byte[] networkmass = isisInterface.networkMask(); |
145 | + // metric calculation part | ||
146 | + byte[] result = new byte[ipAddress.length]; | ||
147 | + result[0] = (byte) (ipAddress[0] & networkmass[0]); | ||
148 | + result[1] = (byte) (ipAddress[1] & networkmass[1]); | ||
149 | + result[2] = (byte) (ipAddress[2] & networkmass[2]); | ||
150 | + result[3] = (byte) (ipAddress[3] & networkmass[3]); | ||
151 | + metricOfIntRea.setIpAddress(Ip4Address.valueOf(result)); | ||
145 | metricOfIntRea.setSubnetAddres(Ip4Address.valueOf(isisInterface.networkMask())); | 152 | metricOfIntRea.setSubnetAddres(Ip4Address.valueOf(isisInterface.networkMask())); |
146 | ipInterReacTlv.addInternalReachabilityMetric(metricOfIntRea); | 153 | ipInterReacTlv.addInternalReachabilityMetric(metricOfIntRea); |
147 | lsp.addTlv(ipInterReacTlv); | 154 | lsp.addTlv(ipInterReacTlv); | ... | ... |
-
Please register or login to post a comment