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