Committed by
Gerrit Code Review
ONOS-4505: Bug Fixes
Change-Id: I190b4e6b950381eef8d6fba1e3ac345ea6854e40
Showing
12 changed files
with
61 additions
and
33 deletions
| ... | @@ -112,10 +112,6 @@ public class Controller { | ... | @@ -112,10 +112,6 @@ public class Controller { |
| 112 | if (isisProcesses.size() > 0) { | 112 | if (isisProcesses.size() > 0) { |
| 113 | processes = isisProcesses; | 113 | processes = isisProcesses; |
| 114 | connectPeer(); | 114 | connectPeer(); |
| 115 | - //Initializing the interface map in channel handler | ||
| 116 | - if (isisChannelHandler != null) { | ||
| 117 | - isisChannelHandler.initializeInterfaceMap(); | ||
| 118 | - } | ||
| 119 | } | 115 | } |
| 120 | } else { | 116 | } else { |
| 121 | isisChannelHandler.updateInterfaceMap(isisProcesses); | 117 | isisChannelHandler.updateInterfaceMap(isisProcesses); |
| ... | @@ -154,7 +150,6 @@ public class Controller { | ... | @@ -154,7 +150,6 @@ public class Controller { |
| 154 | isisChannelHandler = new IsisChannelHandler(this, processes); | 150 | isisChannelHandler = new IsisChannelHandler(this, processes); |
| 155 | ChannelPipelineFactory pfact = new IsisPipelineFactory(isisChannelHandler); | 151 | ChannelPipelineFactory pfact = new IsisPipelineFactory(isisChannelHandler); |
| 156 | peerBootstrap.setPipelineFactory(pfact); | 152 | peerBootstrap.setPipelineFactory(pfact); |
| 157 | - ChannelFuture connection = peerBootstrap.connect(new InetSocketAddress(IsisConstants.SHOST, isisPort.toInt())); | ||
| 158 | } | 153 | } |
| 159 | 154 | ||
| 160 | /** | 155 | /** |
| ... | @@ -499,6 +494,7 @@ public class Controller { | ... | @@ -499,6 +494,7 @@ public class Controller { |
| 499 | public void run() { | 494 | public void run() { |
| 500 | log.debug("Connect to peer {}", IsisConstants.SHOST); | 495 | log.debug("Connect to peer {}", IsisConstants.SHOST); |
| 501 | initConnection(); | 496 | initConnection(); |
| 497 | + isisChannelHandler.sentConfigPacket(configPacket); | ||
| 502 | InetSocketAddress connectToSocket = new InetSocketAddress(IsisConstants.SHOST, isisPort.toInt()); | 498 | InetSocketAddress connectToSocket = new InetSocketAddress(IsisConstants.SHOST, isisPort.toInt()); |
| 503 | try { | 499 | try { |
| 504 | peerBootstrap.connect(connectToSocket).addListener(new ChannelFutureListener() { | 500 | peerBootstrap.connect(connectToSocket).addListener(new ChannelFutureListener() { |
| ... | @@ -517,13 +513,13 @@ public class Controller { | ... | @@ -517,13 +513,13 @@ public class Controller { |
| 517 | } | 513 | } |
| 518 | scheduleConnectionRetry(connectRetryTime); | 514 | scheduleConnectionRetry(connectRetryTime); |
| 519 | } else { | 515 | } else { |
| 516 | + //Send the config packet | ||
| 517 | + isisChannelHandler.sentConfigPacket(configPacket); | ||
| 520 | connectRetryCounter++; | 518 | connectRetryCounter++; |
| 521 | log.info("Connected to remote host {}, Connect Counter {}", IsisConstants.SHOST, | 519 | log.info("Connected to remote host {}, Connect Counter {}", IsisConstants.SHOST, |
| 522 | connectRetryCounter); | 520 | connectRetryCounter); |
| 523 | disconnectExecutor(); | 521 | disconnectExecutor(); |
| 524 | - isisChannelHandler.initializeInterfaceMap(); | 522 | + |
| 525 | - //Send the config packet | ||
| 526 | - isisChannelHandler.sentConfigPacket(configPacket); | ||
| 527 | return; | 523 | return; |
| 528 | } | 524 | } |
| 529 | } | 525 | } | ... | ... |
| ... | @@ -88,6 +88,7 @@ public class DefaultIsisInterface implements IsisInterface { | ... | @@ -88,6 +88,7 @@ public class DefaultIsisInterface implements IsisInterface { |
| 88 | private IsisLsdb isisLsdb = null; | 88 | private IsisLsdb isisLsdb = null; |
| 89 | private List<Ip4Address> allConfiguredInterfaceIps = null; | 89 | private List<Ip4Address> allConfiguredInterfaceIps = null; |
| 90 | private Channel channel; | 90 | private Channel channel; |
| 91 | + private boolean helloSenderStarted = false; | ||
| 91 | 92 | ||
| 92 | /** | 93 | /** |
| 93 | * Returns ISIS LSDB instance. | 94 | * Returns ISIS LSDB instance. |
| ... | @@ -1103,12 +1104,14 @@ public class DefaultIsisInterface implements IsisInterface { | ... | @@ -1103,12 +1104,14 @@ public class DefaultIsisInterface implements IsisInterface { |
| 1103 | */ | 1104 | */ |
| 1104 | public void startHelloSender(Channel channel) { | 1105 | public void startHelloSender(Channel channel) { |
| 1105 | log.debug("IsisInterfaceImpl::startHelloSender"); | 1106 | log.debug("IsisInterfaceImpl::startHelloSender"); |
| 1106 | - | 1107 | + if (!helloSenderStarted) { |
| 1107 | - isisHelloPduSender = new IsisHelloPduSender(channel, this); | 1108 | + isisHelloPduSender = new IsisHelloPduSender(channel, this); |
| 1108 | - exServiceHello = Executors.newSingleThreadScheduledExecutor(); | 1109 | + exServiceHello = Executors.newSingleThreadScheduledExecutor(); |
| 1109 | - final ScheduledFuture<?> helloHandle = | 1110 | + final ScheduledFuture<?> helloHandle = |
| 1110 | - exServiceHello.scheduleAtFixedRate(isisHelloPduSender, 0, | 1111 | + exServiceHello.scheduleAtFixedRate(isisHelloPduSender, 0, |
| 1111 | - helloInterval, TimeUnit.SECONDS); | 1112 | + helloInterval, TimeUnit.SECONDS); |
| 1113 | + helloSenderStarted = true; | ||
| 1114 | + } | ||
| 1112 | } | 1115 | } |
| 1113 | 1116 | ||
| 1114 | /** | 1117 | /** |
| ... | @@ -1117,5 +1120,6 @@ public class DefaultIsisInterface implements IsisInterface { | ... | @@ -1117,5 +1120,6 @@ public class DefaultIsisInterface implements IsisInterface { |
| 1117 | public void stopHelloSender() { | 1120 | public void stopHelloSender() { |
| 1118 | log.debug("IsisInterfaceImpl::stopHelloSender"); | 1121 | log.debug("IsisInterfaceImpl::stopHelloSender"); |
| 1119 | exServiceHello.shutdown(); | 1122 | exServiceHello.shutdown(); |
| 1123 | + helloSenderStarted = false; | ||
| 1120 | } | 1124 | } |
| 1121 | } | 1125 | } |
| ... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
| ... | @@ -50,7 +50,7 @@ public class IsisChannelHandler extends IdleStateAwareChannelHandler { | ... | @@ -50,7 +50,7 @@ public class IsisChannelHandler extends IdleStateAwareChannelHandler { |
| 50 | 50 | ||
| 51 | private static final Logger log = LoggerFactory.getLogger(IsisChannelHandler.class); | 51 | private static final Logger log = LoggerFactory.getLogger(IsisChannelHandler.class); |
| 52 | private static Map<Integer, Object> isisDb = null; | 52 | private static Map<Integer, Object> isisDb = null; |
| 53 | - private Channel channel; | 53 | + private Channel channel = null; |
| 54 | private Controller controller; | 54 | private Controller controller; |
| 55 | private List<IsisProcess> processes = null; | 55 | private List<IsisProcess> processes = null; |
| 56 | private List<ScheduledExecutorService> executorList = new ArrayList<>(); | 56 | private List<ScheduledExecutorService> executorList = new ArrayList<>(); |
| ... | @@ -76,8 +76,11 @@ public class IsisChannelHandler extends IdleStateAwareChannelHandler { | ... | @@ -76,8 +76,11 @@ public class IsisChannelHandler extends IdleStateAwareChannelHandler { |
| 76 | public void initializeInterfaceMap() { | 76 | public void initializeInterfaceMap() { |
| 77 | for (IsisProcess process : processes) { | 77 | for (IsisProcess process : processes) { |
| 78 | for (IsisInterface isisInterface : process.isisInterfaceList()) { | 78 | for (IsisInterface isisInterface : process.isisInterfaceList()) { |
| 79 | - isisInterfaceMap.put(isisInterface.interfaceIndex(), isisInterface); | 79 | + IsisInterface anInterface = isisInterfaceMap.get(isisInterface.interfaceIndex()); |
| 80 | - interfaceIps.add(isisInterface.interfaceIpAddress()); | 80 | + if (anInterface == null) { |
| 81 | + isisInterfaceMap.put(isisInterface.interfaceIndex(), isisInterface); | ||
| 82 | + interfaceIps.add(isisInterface.interfaceIpAddress()); | ||
| 83 | + } | ||
| 81 | } | 84 | } |
| 82 | } | 85 | } |
| 83 | //Initializes the interface with all interface ip details - for ls pdu generation | 86 | //Initializes the interface with all interface ip details - for ls pdu generation |
| ... | @@ -150,6 +153,7 @@ public class IsisChannelHandler extends IdleStateAwareChannelHandler { | ... | @@ -150,6 +153,7 @@ public class IsisChannelHandler extends IdleStateAwareChannelHandler { |
| 150 | + configPacket.length); | 153 | + configPacket.length); |
| 151 | sentConfigPacket(configPacket); | 154 | sentConfigPacket(configPacket); |
| 152 | } | 155 | } |
| 156 | + initializeInterfaceMap(); | ||
| 153 | //start the hello timer | 157 | //start the hello timer |
| 154 | startHelloSender(); | 158 | startHelloSender(); |
| 155 | //Initialize Database | 159 | //Initialize Database |
| ... | @@ -168,6 +172,7 @@ public class IsisChannelHandler extends IdleStateAwareChannelHandler { | ... | @@ -168,6 +172,7 @@ public class IsisChannelHandler extends IdleStateAwareChannelHandler { |
| 168 | log.debug("IsisChannelHandler::channelDisconnected...!!!"); | 172 | log.debug("IsisChannelHandler::channelDisconnected...!!!"); |
| 169 | if (controller != null) { | 173 | if (controller != null) { |
| 170 | controller.connectPeer(); | 174 | controller.connectPeer(); |
| 175 | + stopHelloSender(); | ||
| 171 | } | 176 | } |
| 172 | } | 177 | } |
| 173 | 178 | ||
| ... | @@ -255,8 +260,11 @@ public class IsisChannelHandler extends IdleStateAwareChannelHandler { | ... | @@ -255,8 +260,11 @@ public class IsisChannelHandler extends IdleStateAwareChannelHandler { |
| 255 | */ | 260 | */ |
| 256 | public void stopHelloSender() { | 261 | public void stopHelloSender() { |
| 257 | log.debug("ISISChannelHandler::stopHelloTimer "); | 262 | log.debug("ISISChannelHandler::stopHelloTimer "); |
| 258 | - for (ScheduledExecutorService exServiceHello : executorList) { | 263 | + log.debug("IsisController::startHelloSender"); |
| 259 | - exServiceHello.shutdown(); | 264 | + Set<Integer> interfaceIndexes = isisInterfaceMap.keySet(); |
| 265 | + for (Integer interfaceIndex : interfaceIndexes) { | ||
| 266 | + IsisInterface isisInterface = isisInterfaceMap.get(interfaceIndex); | ||
| 267 | + isisInterface.stopHelloSender(); | ||
| 260 | } | 268 | } |
| 261 | } | 269 | } |
| 262 | 270 | ... | ... |
| ... | @@ -44,6 +44,7 @@ public class DefaultIsisLsdbAge implements IsisLsdbAge { | ... | @@ -44,6 +44,7 @@ public class DefaultIsisLsdbAge implements IsisLsdbAge { |
| 44 | private int ageCounterRollOver = 0; | 44 | private int ageCounterRollOver = 0; |
| 45 | private IsisLspQueueConsumer queueConsumer = null; | 45 | private IsisLspQueueConsumer queueConsumer = null; |
| 46 | private BlockingQueue<LspWrapper> lsaQueue = new ArrayBlockingQueue<>(1024); | 46 | private BlockingQueue<LspWrapper> lsaQueue = new ArrayBlockingQueue<>(1024); |
| 47 | + private boolean timerStarted = false; | ||
| 47 | 48 | ||
| 48 | /** | 49 | /** |
| 49 | * Creates an instance of LSDB age. | 50 | * Creates an instance of LSDB age. |
| ... | @@ -128,9 +129,12 @@ public class DefaultIsisLsdbAge implements IsisLsdbAge { | ... | @@ -128,9 +129,12 @@ public class DefaultIsisLsdbAge implements IsisLsdbAge { |
| 128 | * Starts the aging timer and queue consumer. | 129 | * Starts the aging timer and queue consumer. |
| 129 | */ | 130 | */ |
| 130 | public void startDbAging() { | 131 | public void startDbAging() { |
| 131 | - startDbAgeTimer(); | 132 | + if (!timerStarted) { |
| 132 | - queueConsumer = new IsisLspQueueConsumer(lsaQueue); | 133 | + startDbAgeTimer(); |
| 133 | - new Thread(queueConsumer).start(); | 134 | + queueConsumer = new IsisLspQueueConsumer(lsaQueue); |
| 135 | + new Thread(queueConsumer).start(); | ||
| 136 | + timerStarted = true; | ||
| 137 | + } | ||
| 134 | } | 138 | } |
| 135 | 139 | ||
| 136 | /** | 140 | /** | ... | ... |
| ... | @@ -188,7 +188,9 @@ public class Csnp extends IsisHeader { | ... | @@ -188,7 +188,9 @@ public class Csnp extends IsisHeader { |
| 188 | TlvType tlvValue = TlvType.get(tlvHeader.tlvType()); | 188 | TlvType tlvValue = TlvType.get(tlvHeader.tlvType()); |
| 189 | if (tlvValue != null) { | 189 | if (tlvValue != null) { |
| 190 | IsisTlv tlv = TlvFinder.findTlv(tlvHeader, channelBuffer.readBytes(tlvHeader.tlvLength())); | 190 | IsisTlv tlv = TlvFinder.findTlv(tlvHeader, channelBuffer.readBytes(tlvHeader.tlvLength())); |
| 191 | - this.variableLengths.add(tlv); | 191 | + if (tlv != null) { |
| 192 | + this.variableLengths.add(tlv); | ||
| 193 | + } | ||
| 192 | } else { | 194 | } else { |
| 193 | channelBuffer.readBytes(tlvHeader.tlvLength()); | 195 | channelBuffer.readBytes(tlvHeader.tlvLength()); |
| 194 | } | 196 | } | ... | ... |
| ... | @@ -145,7 +145,9 @@ public class L1L2HelloPdu extends HelloPdu { | ... | @@ -145,7 +145,9 @@ public class L1L2HelloPdu extends HelloPdu { |
| 145 | TlvType tlvType = TlvType.get(tlvHeader.tlvType()); | 145 | TlvType tlvType = TlvType.get(tlvHeader.tlvType()); |
| 146 | if (tlvType != null) { | 146 | if (tlvType != null) { |
| 147 | IsisTlv tlv = TlvFinder.findTlv(tlvHeader, channelBuffer.readBytes(tlvHeader.tlvLength())); | 147 | IsisTlv tlv = TlvFinder.findTlv(tlvHeader, channelBuffer.readBytes(tlvHeader.tlvLength())); |
| 148 | - this.variableLengths.add(tlv); | 148 | + if (tlv != null) { |
| 149 | + this.variableLengths.add(tlv); | ||
| 150 | + } | ||
| 149 | } else { | 151 | } else { |
| 150 | channelBuffer.readBytes(tlvHeader.tlvLength()); | 152 | channelBuffer.readBytes(tlvHeader.tlvLength()); |
| 151 | } | 153 | } | ... | ... |
| ... | @@ -354,7 +354,9 @@ public class LsPdu extends IsisHeader { | ... | @@ -354,7 +354,9 @@ public class LsPdu extends IsisHeader { |
| 354 | TlvType tlvValue = TlvType.get(tlvHeader.tlvType()); | 354 | TlvType tlvValue = TlvType.get(tlvHeader.tlvType()); |
| 355 | if (tlvValue != null) { | 355 | if (tlvValue != null) { |
| 356 | IsisTlv tlv = TlvFinder.findTlv(tlvHeader, channelBuffer.readBytes(tlvHeader.tlvLength())); | 356 | IsisTlv tlv = TlvFinder.findTlv(tlvHeader, channelBuffer.readBytes(tlvHeader.tlvLength())); |
| 357 | - this.variableLengths.add(tlv); | 357 | + if (tlv != null) { |
| 358 | + this.variableLengths.add(tlv); | ||
| 359 | + } | ||
| 358 | } else { | 360 | } else { |
| 359 | channelBuffer.readBytes(tlvHeader.tlvLength()); | 361 | channelBuffer.readBytes(tlvHeader.tlvLength()); |
| 360 | } | 362 | } | ... | ... |
| ... | @@ -124,7 +124,9 @@ public class P2PHelloPdu extends HelloPdu { | ... | @@ -124,7 +124,9 @@ public class P2PHelloPdu extends HelloPdu { |
| 124 | TlvType tlvType = TlvType.get(tlvHeader.tlvType()); | 124 | TlvType tlvType = TlvType.get(tlvHeader.tlvType()); |
| 125 | if (tlvType != null) { | 125 | if (tlvType != null) { |
| 126 | IsisTlv tlv = TlvFinder.findTlv(tlvHeader, channelBuffer.readBytes(tlvHeader.tlvLength())); | 126 | IsisTlv tlv = TlvFinder.findTlv(tlvHeader, channelBuffer.readBytes(tlvHeader.tlvLength())); |
| 127 | - this.variableLengths.add(tlv); | 127 | + if (tlv != null) { |
| 128 | + this.variableLengths.add(tlv); | ||
| 129 | + } | ||
| 128 | } else { | 130 | } else { |
| 129 | channelBuffer.readBytes(tlvHeader.tlvLength()); | 131 | channelBuffer.readBytes(tlvHeader.tlvLength()); |
| 130 | } | 132 | } | ... | ... |
| ... | @@ -205,8 +205,11 @@ public class IpExtendedReachabilityTlv extends TlvHeader implements IsisTlv { | ... | @@ -205,8 +205,11 @@ public class IpExtendedReachabilityTlv extends TlvHeader implements IsisTlv { |
| 205 | tlvHeader.setTlvLength(channelBuffer.readByte()); | 205 | tlvHeader.setTlvLength(channelBuffer.readByte()); |
| 206 | SubTlvType tlvValue = SubTlvType.get(tlvHeader.tlvType()); | 206 | SubTlvType tlvValue = SubTlvType.get(tlvHeader.tlvType()); |
| 207 | if (tlvValue != null) { | 207 | if (tlvValue != null) { |
| 208 | - this.addSubTlv(SubTlvFinder.findSubTlv(tlvHeader, | 208 | + TrafficEngineeringSubTlv subTlv = |
| 209 | - channelBuffer.readBytes(tlvHeader.tlvLength()))); | 209 | + SubTlvFinder.findSubTlv(tlvHeader, channelBuffer.readBytes(tlvHeader.tlvLength())); |
| 210 | + if (subTlv != null) { | ||
| 211 | + this.addSubTlv(subTlv); | ||
| 212 | + } | ||
| 210 | } else { | 213 | } else { |
| 211 | channelBuffer.readBytes(tlvHeader.tlvLength()); | 214 | channelBuffer.readBytes(tlvHeader.tlvLength()); |
| 212 | } | 215 | } | ... | ... |
| ... | @@ -49,9 +49,10 @@ public class IsExtendedReachability extends TlvHeader implements IsisTlv { | ... | @@ -49,9 +49,10 @@ public class IsExtendedReachability extends TlvHeader implements IsisTlv { |
| 49 | this.neighbors.add(neighbor); | 49 | this.neighbors.add(neighbor); |
| 50 | } | 50 | } |
| 51 | 51 | ||
| 52 | + | ||
| 52 | @Override | 53 | @Override |
| 53 | public void readFrom(ChannelBuffer channelBuffer) { | 54 | public void readFrom(ChannelBuffer channelBuffer) { |
| 54 | - while (channelBuffer.readableBytes() >= IsisUtil.EIGHT_BYTES + IsisUtil.THREE_BYTES) { | 55 | + while (channelBuffer.readableBytes() >= (IsisUtil.EIGHT_BYTES + IsisUtil.THREE_BYTES)) { |
| 55 | NeighborForExtendedIs extendedIs = new NeighborForExtendedIs(); | 56 | NeighborForExtendedIs extendedIs = new NeighborForExtendedIs(); |
| 56 | extendedIs.readFrom(channelBuffer); | 57 | extendedIs.readFrom(channelBuffer); |
| 57 | this.addNeighbor(extendedIs); | 58 | this.addNeighbor(extendedIs); | ... | ... |
| ... | @@ -18,6 +18,7 @@ package org.onosproject.isis.io.isispacket.tlv; | ... | @@ -18,6 +18,7 @@ package org.onosproject.isis.io.isispacket.tlv; |
| 18 | import com.google.common.base.MoreObjects; | 18 | import com.google.common.base.MoreObjects; |
| 19 | import com.google.common.primitives.Bytes; | 19 | import com.google.common.primitives.Bytes; |
| 20 | import org.jboss.netty.buffer.ChannelBuffer; | 20 | import org.jboss.netty.buffer.ChannelBuffer; |
| 21 | +import org.onosproject.isis.io.util.IsisUtil; | ||
| 21 | 22 | ||
| 22 | import java.util.ArrayList; | 23 | import java.util.ArrayList; |
| 23 | import java.util.List; | 24 | import java.util.List; |
| ... | @@ -58,9 +59,9 @@ public class LspEntriesTlv extends TlvHeader implements IsisTlv { | ... | @@ -58,9 +59,9 @@ public class LspEntriesTlv extends TlvHeader implements IsisTlv { |
| 58 | 59 | ||
| 59 | @Override | 60 | @Override |
| 60 | public void readFrom(ChannelBuffer channelBuffer) { | 61 | public void readFrom(ChannelBuffer channelBuffer) { |
| 61 | - while (channelBuffer.readableBytes() >= 16) { | 62 | + while (channelBuffer.readableBytes() >= (IsisUtil.EIGHT_BYTES * 2)) { |
| 62 | LspEntry lspEntry = new LspEntry(); | 63 | LspEntry lspEntry = new LspEntry(); |
| 63 | - lspEntry.readFrom(channelBuffer.readBytes(16)); | 64 | + lspEntry.readFrom(channelBuffer.readBytes(IsisUtil.EIGHT_BYTES * 2)); |
| 64 | lspEntryList.add(lspEntry); | 65 | lspEntryList.add(lspEntry); |
| 65 | } | 66 | } |
| 66 | } | 67 | } | ... | ... |
| ... | @@ -101,8 +101,11 @@ public class NeighborForExtendedIs { | ... | @@ -101,8 +101,11 @@ public class NeighborForExtendedIs { |
| 101 | int tlvLength = tlvHeader.tlvLength(); | 101 | int tlvLength = tlvHeader.tlvLength(); |
| 102 | if (tlvValue != null) { | 102 | if (tlvValue != null) { |
| 103 | if (channelBuffer.readableBytes() >= tlvLength) { | 103 | if (channelBuffer.readableBytes() >= tlvLength) { |
| 104 | - this.addSubTlv(SubTlvFinder.findSubTlv(tlvHeader, | 104 | + TrafficEngineeringSubTlv subTlv = |
| 105 | - channelBuffer.readBytes(tlvHeader.tlvLength()))); | 105 | + SubTlvFinder.findSubTlv(tlvHeader, channelBuffer.readBytes(tlvHeader.tlvLength())); |
| 106 | + if (subTlv != null) { | ||
| 107 | + this.addSubTlv(subTlv); | ||
| 108 | + } | ||
| 106 | } | 109 | } |
| 107 | } else { | 110 | } else { |
| 108 | if (channelBuffer.readableBytes() >= tlvLength) { | 111 | if (channelBuffer.readableBytes() >= tlvLength) { | ... | ... |
-
Please register or login to post a comment