sunish vk
Committed by Gerrit Code Review

ONOS-4505: Bug Fixes

Change-Id: I190b4e6b950381eef8d6fba1e3ac345ea6854e40
...@@ -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) {
......