ONOS-4505: Bug Fixes
Change-Id: Ia030aa3aff9e2ad34a5e27fbe4ba088dda65bfa7
diff --git a/protocols/isis/api/src/main/java/org/onosproject/isis/controller/IsisInterface.java b/protocols/isis/api/src/main/java/org/onosproject/isis/controller/IsisInterface.java
index 3ac7122..3f775cc 100644
--- a/protocols/isis/api/src/main/java/org/onosproject/isis/controller/IsisInterface.java
+++ b/protocols/isis/api/src/main/java/org/onosproject/isis/controller/IsisInterface.java
@@ -195,13 +195,6 @@
void setAreaLength(int areaLength);
/**
- * Sets link state packet ID.
- *
- * @param lspId link state packet ID
- */
- void setLspId(String lspId);
-
- /**
* Returns holding time.
*
* @return holding time
@@ -251,6 +244,11 @@
void startHelloSender(Channel channel);
/**
+ * Stops the hello timer which sends hello packet every configured seconds.
+ */
+ void stopHelloSender();
+
+ /**
* Processes an ISIS message which is received on this interface.
*
* @param isisMessage ISIS message instance
@@ -315,4 +313,9 @@
* @param isisNeighbor ISIS neighbor instance
*/
void removeNeighbor(IsisNeighbor isisNeighbor);
+
+ /**
+ * Removes all the neighbors.
+ */
+ void removeNeighbors();
}
diff --git a/protocols/isis/api/src/main/java/org/onosproject/isis/controller/IsisLsdb.java b/protocols/isis/api/src/main/java/org/onosproject/isis/controller/IsisLsdb.java
index 06e34fd..c9e1586 100644
--- a/protocols/isis/api/src/main/java/org/onosproject/isis/controller/IsisLsdb.java
+++ b/protocols/isis/api/src/main/java/org/onosproject/isis/controller/IsisLsdb.java
@@ -108,4 +108,18 @@
* @return neighbor database information
*/
Map<String, LspWrapper> getL2Db();
+
+ /**
+ * Sets the level 1 link state sequence number.
+ *
+ * @param l1LspSeqNo link state sequence number
+ */
+ void setL1LspSeqNo(int l1LspSeqNo);
+
+ /**
+ * Sets the level 2 link state sequence number.
+ *
+ * @param l2LspSeqNo link state sequence number
+ */
+ void setL2LspSeqNo(int l2LspSeqNo);
}
\ No newline at end of file
diff --git a/protocols/isis/api/src/main/java/org/onosproject/isis/controller/IsisNeighbor.java b/protocols/isis/api/src/main/java/org/onosproject/isis/controller/IsisNeighbor.java
index eedf11c..76e8b18 100644
--- a/protocols/isis/api/src/main/java/org/onosproject/isis/controller/IsisNeighbor.java
+++ b/protocols/isis/api/src/main/java/org/onosproject/isis/controller/IsisNeighbor.java
@@ -108,4 +108,16 @@
* Stops the inactivity timer.
*/
void stopInactivityTimeCheck();
-}
+
+ /**
+ * Stops the holding time check timer.
+ */
+ void stopHoldingTimeCheck();
+
+ /**
+ * Returns router type.
+ *
+ * @return router type
+ */
+ IsisRouterType routerType();
+}
\ No newline at end of file
diff --git a/protocols/isis/ctl/src/main/java/org/onosproject/isis/controller/impl/Controller.java b/protocols/isis/ctl/src/main/java/org/onosproject/isis/controller/impl/Controller.java
old mode 100755
new mode 100644
index c12c520..f16aeb4
--- a/protocols/isis/ctl/src/main/java/org/onosproject/isis/controller/impl/Controller.java
+++ b/protocols/isis/ctl/src/main/java/org/onosproject/isis/controller/impl/Controller.java
@@ -19,6 +19,7 @@
import org.jboss.netty.bootstrap.ClientBootstrap;
import org.jboss.netty.channel.AdaptiveReceiveBufferSizePredictor;
import org.jboss.netty.channel.ChannelFuture;
+import org.jboss.netty.channel.ChannelFutureListener;
import org.jboss.netty.channel.ChannelPipelineFactory;
import org.jboss.netty.channel.FixedReceiveBufferSizePredictorFactory;
import org.jboss.netty.channel.socket.nio.NioClientSocketChannelFactory;
@@ -35,10 +36,14 @@
import java.net.InetAddress;
import java.net.InetSocketAddress;
+import java.net.NetworkInterface;
import java.net.UnknownHostException;
import java.util.ArrayList;
+import java.util.Enumeration;
import java.util.List;
import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
import static org.onlab.util.Tools.groupedThreads;
@@ -48,12 +53,17 @@
public class Controller {
protected static final int BUFFER_SIZE = 4 * 1024 * 1024;
private static final Logger log = LoggerFactory.getLogger(Controller.class);
+ private static final int RETRY_INTERVAL = 4;
private final int peerWorkerThreads = 16;
+ byte[] configPacket = null;
private List<IsisProcess> processes = null;
private IsisChannelHandler isisChannelHandler;
private NioClientSocketChannelFactory peerExecFactory;
private ClientBootstrap peerBootstrap = null;
private TpPort isisPort = TpPort.tpPort(IsisConstants.SPORT);
+ private ScheduledExecutorService connectExecutor = null;
+ private int connectRetryCounter = 0;
+ private int connectRetryTime;
/**
* Deactivates ISIS controller.
@@ -70,12 +80,11 @@
*/
public void updateConfig(JsonNode jsonNode) throws Exception {
log.debug("Controller::UpdateConfig called");
- byte[] configPacket = new byte[IsisConstants.CONFIG_LENGTH];
+ configPacket = new byte[IsisConstants.CONFIG_LENGTH];
byte numberOfInterface = 0; // number of interfaces to configure
configPacket[0] = (byte) 0xFF; // its a conf packet - identifier
List<IsisProcess> isisProcesses = getConfig(jsonNode);
-
for (IsisProcess isisProcess : isisProcesses) {
log.debug("IsisProcessDetails : " + isisProcess);
for (IsisInterface isisInterface : isisProcess.isisInterfaceList()) {
@@ -100,16 +109,19 @@
configPacket[1] = numberOfInterface;
//First time configuration
if (processes == null) {
- processes = isisProcesses;
- //Initialize connection by creating a channel handler instance and sent the config packet);
- initConnection();
- //Initializing the interface map in channel handler
- isisChannelHandler.initializeInterfaceMap();
+ if (isisProcesses.size() > 0) {
+ processes = isisProcesses;
+ connectPeer();
+ //Initializing the interface map in channel handler
+ if (isisChannelHandler != null) {
+ isisChannelHandler.initializeInterfaceMap();
+ }
+ }
} else {
isisChannelHandler.updateInterfaceMap(isisProcesses);
+ //Send the config packet
+ isisChannelHandler.sentConfigPacket(configPacket);
}
- //Send the config packet
- isisChannelHandler.sentConfigPacket(configPacket);
}
/**
@@ -182,10 +194,8 @@
* @return list of processes configured
*/
private List<IsisProcess> getConfig(JsonNode json) throws Exception {
-
List<IsisProcess> isisProcessesList = new ArrayList<>();
JsonNode jsonNodes = json;
-
if (jsonNodes == null) {
return isisProcessesList;
}
@@ -193,49 +203,335 @@
List<IsisInterface> interfaceList = new ArrayList<>();
for (JsonNode jsonNode1 : jsonNode.path(IsisConstants.INTERFACE)) {
IsisInterface isisInterface = new DefaultIsisInterface();
- isisInterface.setInterfaceIndex(jsonNode1.path(IsisConstants.INTERFACEINDEX).asInt());
- isisInterface.setInterfaceIpAddress(Ip4Address.valueOf(jsonNode1
- .path(IsisConstants.INTERFACEIP)
- .asText()));
- try {
- isisInterface.setNetworkMask(InetAddress.getByName((jsonNode1
- .path(IsisConstants.NETWORKMASK).asText())).getAddress());
- } catch (UnknownHostException e) {
- log.debug("Error:: Parsing network mask");
+ String index = jsonNode1.path(IsisConstants.INTERFACEINDEX).asText();
+ if (isPrimitive(index)) {
+ int input = Integer.parseInt(index);
+ if (input < 1 || input > 255) {
+ log.debug("Wrong interface index: {}", index);
+ continue;
+ }
+ isisInterface.setInterfaceIndex(Integer.parseInt(index));
+ } else {
+ log.debug("Wrong interface index {}", index);
+ continue;
}
- isisInterface.setInterfaceMacAddress(MacAddress.valueOf(jsonNode1
- .path(IsisConstants.MACADDRESS)
- .asText()));
+ Ip4Address ipAddress = getInterfaceIp(isisInterface.interfaceIndex());
+ if (ipAddress != null && !ipAddress.equals(IsisConstants.DEFAULTIP)) {
+ isisInterface.setInterfaceIpAddress(ipAddress);
+ } else {
+ log.debug("Wrong interface index {}. No matching interface in system.", index);
+ continue;
+ }
+ MacAddress macAddress = getInterfaceMac(isisInterface.interfaceIndex());
+ if (macAddress != null) {
+ isisInterface.setInterfaceMacAddress(macAddress);
+ } else {
+ log.debug("Wrong interface index {}. No matching interface in system.", index);
+ continue;
+ }
+ String mask = getInterfaceMask(isisInterface.interfaceIndex());
+ if (mask != null) {
+ try {
+ isisInterface.setNetworkMask(InetAddress.getByName(mask).getAddress());
+ } catch (UnknownHostException e) {
+ log.debug("Wrong interface index {}. Error while getting network mask.", index);
+ }
+ } else {
+ log.debug("Wrong interface index {}. Error while getting network mask.", index);
+ continue;
+ }
isisInterface.setIntermediateSystemName(jsonNode1
.path(IsisConstants.INTERMEDIATESYSTEMNAME)
.asText());
- isisInterface.setSystemId(jsonNode1.path(IsisConstants.SYSTEMID).asText());
- isisInterface.setReservedPacketCircuitType(jsonNode1
- .path(IsisConstants.RESERVEDPACKETCIRCUITTYPE)
- .asInt());
- if (isisInterface.reservedPacketCircuitType() == IsisRouterType.L1.value()) {
- isisInterface.setL1LanId(jsonNode1.path(IsisConstants.LANID).asText());
+ String systemId = jsonNode1.path(IsisConstants.SYSTEMID).asText();
+ if (isValidSystemId(systemId)) {
+ isisInterface.setSystemId(systemId);
+ } else {
+ log.debug("Wrong systemId: {} for interface index {}.", systemId, index);
+ continue;
}
- isisInterface.setIdLength(jsonNode1.path(IsisConstants.IDLENGTH).asInt());
- isisInterface.setMaxAreaAddresses(jsonNode1.path(IsisConstants.MAXAREAADDRESSES).asInt());
- isisInterface.setNetworkType(IsisNetworkType.get(jsonNode1
- .path(IsisConstants.NETWORKTYPE)
- .asInt()));
- isisInterface.setAreaAddress(jsonNode1.path(IsisConstants.AREAADDRESS).asText());
- isisInterface.setAreaLength(jsonNode1.path(IsisConstants.AREALENGTH).asInt());
- isisInterface.setLspId(jsonNode1.path(IsisConstants.LSPID).asText());
- isisInterface.setCircuitId(jsonNode1.path(IsisConstants.CIRCUITID).asText());
- isisInterface.setHoldingTime(jsonNode1.path(IsisConstants.HOLDINGTIME).asInt());
- isisInterface.setPriority(jsonNode1.path(IsisConstants.PRIORITY).asInt());
- isisInterface.setHelloInterval(jsonNode1.path(IsisConstants.HELLOINTERVAL).asInt());
+ String circuitType = jsonNode1.path(IsisConstants.RESERVEDPACKETCIRCUITTYPE).asText();
+ if (isPrimitive(circuitType)) {
+ int input = Integer.parseInt(circuitType);
+ if (input < 1 || input > 3) {
+ log.debug("Wrong ReservedPacketCircuitType: {} for interface index {}.", circuitType, index);
+ continue;
+ }
+ isisInterface.setReservedPacketCircuitType(input);
+ } else {
+ log.debug("Wrong ReservedPacketCircuitType: {} for interface index {}.", circuitType, index);
+ continue;
+ }
+ String networkType = jsonNode1.path(IsisConstants.NETWORKTYPE).asText();
+ if (isPrimitive(networkType)) {
+ int input = Integer.parseInt(networkType);
+ if (input < 1 || input > 2) {
+ log.debug("Wrong networkType: {} for interface index {}.", networkType, index);
+ continue;
+ }
+ isisInterface.setNetworkType(IsisNetworkType.get(input));
+ } else {
+ log.debug("Wrong networkType: {} for interface index {}.", networkType, index);
+ continue;
+ }
+ String areaAddress = jsonNode1.path(IsisConstants.AREAADDRESS).asText();
+ if (isPrimitive(areaAddress)) {
+ if (areaAddress.length() > 7) {
+ log.debug("Wrong areaAddress: {} for interface index {}.", areaAddress, index);
+ continue;
+ }
+ isisInterface.setAreaAddress(areaAddress);
+ } else {
+ log.debug("Wrong areaAddress: {} for interface index {}.", areaAddress, index);
+ continue;
+ }
+ String circuitId = jsonNode1.path(IsisConstants.CIRCUITID).asText();
+ if (isPrimitive(circuitId)) {
+ int input = Integer.parseInt(circuitId);
+ if (input < 1) {
+ log.debug("Wrong circuitId: {} for interface index {}.", circuitId, index);
+ continue;
+ }
+ isisInterface.setCircuitId(circuitId);
+ } else {
+ log.debug("Wrong circuitId: {} for interface index {}.", circuitId, index);
+ continue;
+ }
+ String holdingTime = jsonNode1.path(IsisConstants.HOLDINGTIME).asText();
+ if (isPrimitive(holdingTime)) {
+ int input = Integer.parseInt(holdingTime);
+ if (input < 1 || input > 255) {
+ log.debug("Wrong holdingTime: {} for interface index {}.", holdingTime, index);
+ continue;
+ }
+ isisInterface.setHoldingTime(input);
+ } else {
+ log.debug("Wrong holdingTime: {} for interface index {}.", holdingTime, index);
+ continue;
+ }
+ String helloInterval = jsonNode1.path(IsisConstants.HELLOINTERVAL).asText();
+ if (isPrimitive(helloInterval)) {
+ int interval = Integer.parseInt(helloInterval);
+ if (interval > 0 && interval <= 255) {
+ isisInterface.setHelloInterval(interval);
+ } else {
+ log.debug("Wrong hello interval: {} for interface index {}.", helloInterval, index);
+ continue;
+ }
+ } else {
+ log.debug("Wrong hello interval: {} for interface index {}.", helloInterval, index);
+ continue;
+ }
interfaceList.add(isisInterface);
}
- IsisProcess process = new DefaultIsisProcess();
- process.setProcessId(jsonNode.path(IsisConstants.PROCESSESID).asText());
- process.setIsisInterfaceList(interfaceList);
- isisProcessesList.add(process);
+ if (interfaceList.size() > 0) {
+ IsisProcess process = new DefaultIsisProcess();
+ process.setProcessId(jsonNode.path(IsisConstants.PROCESSESID).asText());
+ process.setIsisInterfaceList(interfaceList);
+ isisProcessesList.add(process);
+ }
});
return isisProcessesList;
}
+
+ /**
+ * Returns interface MAC by index.
+ *
+ * @param interfaceIndex interface index
+ * @return interface IP by index
+ */
+ private MacAddress getInterfaceMac(int interfaceIndex) {
+ MacAddress macAddress = null;
+ try {
+ NetworkInterface networkInterface = NetworkInterface.getByIndex(interfaceIndex);
+ macAddress = MacAddress.valueOf(networkInterface.getHardwareAddress());
+ } catch (Exception e) {
+ log.debug("Error while getting Interface IP by index");
+ return macAddress;
+ }
+
+ return macAddress;
+ }
+
+ /**
+ * Returns interface IP by index.
+ *
+ * @param interfaceIndex interface index
+ * @return interface IP by index
+ */
+ private Ip4Address getInterfaceIp(int interfaceIndex) {
+ Ip4Address ipAddress = null;
+ try {
+ NetworkInterface networkInterface = NetworkInterface.getByIndex(interfaceIndex);
+ Enumeration ipAddresses = networkInterface.getInetAddresses();
+ while (ipAddresses.hasMoreElements()) {
+ InetAddress address = (InetAddress) ipAddresses.nextElement();
+ if (!address.isLinkLocalAddress()) {
+ ipAddress = Ip4Address.valueOf(address.getAddress());
+ break;
+ }
+ }
+ } catch (Exception e) {
+ log.debug("Error while getting Interface IP by index");
+ return IsisConstants.DEFAULTIP;
+ }
+ return ipAddress;
+ }
+
+ /**
+ * Returns interface MAC by index.
+ *
+ * @param interfaceIndex interface index
+ * @return interface IP by index
+ */
+ private String getInterfaceMask(int interfaceIndex) {
+ String subnetMask = null;
+ try {
+ Ip4Address ipAddress = getInterfaceIp(interfaceIndex);
+ NetworkInterface networkInterface = NetworkInterface.getByInetAddress(
+ InetAddress.getByName(ipAddress.toString()));
+ Enumeration ipAddresses = networkInterface.getInetAddresses();
+ int index = 0;
+ while (ipAddresses.hasMoreElements()) {
+ InetAddress address = (InetAddress) ipAddresses.nextElement();
+ if (!address.isLinkLocalAddress()) {
+ break;
+ }
+ index++;
+ }
+ int prfLen = networkInterface.getInterfaceAddresses().get(index).getNetworkPrefixLength();
+ int shft = 0xffffffff << (32 - prfLen);
+ int oct1 = ((byte) ((shft & 0xff000000) >> 24)) & 0xff;
+ int oct2 = ((byte) ((shft & 0x00ff0000) >> 16)) & 0xff;
+ int oct3 = ((byte) ((shft & 0x0000ff00) >> 8)) & 0xff;
+ int oct4 = ((byte) (shft & 0x000000ff)) & 0xff;
+ subnetMask = oct1 + "." + oct2 + "." + oct3 + "." + oct4;
+ } catch (Exception e) {
+ log.debug("Error while getting Interface network mask by index");
+ return subnetMask;
+ }
+ return subnetMask;
+ }
+
+ /**
+ * Checks if primitive or not.
+ *
+ * @param value input value
+ * @return true if number else false
+ */
+ private boolean isPrimitive(String value) {
+ boolean status = true;
+ value = value.trim();
+ if (value.length() < 1) {
+ return false;
+ }
+ for (int i = 0; i < value.length(); i++) {
+ char c = value.charAt(i);
+ if (!Character.isDigit(c)) {
+ status = false;
+ break;
+ }
+ }
+
+ return status;
+ }
+
+ /**
+ * Checks if system id is valid or not.
+ *
+ * @param value input value
+ * @return true if valid else false
+ */
+ private boolean isValidSystemId(String value) {
+ value = value.trim();
+ boolean status = true;
+ if (value.length() != 14) {
+ return false;
+ }
+ for (int i = 0; i < value.length(); i++) {
+ char c = value.charAt(i);
+ if (!Character.isDigit(c)) {
+ if (!((i == 4 || i == 9) && c == '.')) {
+ status = false;
+ break;
+ }
+ }
+ }
+
+ return status;
+ }
+
+ /**
+ * Disconnects the executor.
+ */
+ public void disconnectExecutor() {
+ if (connectExecutor != null) {
+ connectExecutor.shutdown();
+ connectExecutor = null;
+ }
+ }
+
+ /**
+ * Connects to peer.
+ */
+ public void connectPeer() {
+ scheduleConnectionRetry(this.connectRetryTime);
+ }
+
+ /**
+ * Retry connection with exponential back-off mechanism.
+ *
+ * @param retryDelay retry delay
+ */
+ private void scheduleConnectionRetry(long retryDelay) {
+ if (this.connectExecutor == null) {
+ this.connectExecutor = Executors.newSingleThreadScheduledExecutor();
+ }
+ this.connectExecutor.schedule(new ConnectionRetry(), retryDelay, TimeUnit.MINUTES);
+ }
+
+ /**
+ * Implements ISIS connection and manages connection to peer with back-off mechanism in case of failure.
+ */
+ class ConnectionRetry implements Runnable {
+ @Override
+ public void run() {
+ log.debug("Connect to peer {}", IsisConstants.SHOST);
+ initConnection();
+ InetSocketAddress connectToSocket = new InetSocketAddress(IsisConstants.SHOST, isisPort.toInt());
+ try {
+ peerBootstrap.connect(connectToSocket).addListener(new ChannelFutureListener() {
+ @Override
+ public void operationComplete(ChannelFuture future) throws Exception {
+ if (!future.isSuccess()) {
+ connectRetryCounter++;
+ log.error("Connection failed, ConnectRetryCounter {} remote host {}", connectRetryCounter,
+ IsisConstants.SHOST);
+ /*
+ * Reconnect to peer on failure is exponential till 4 mins, later on retry after every 4
+ * mins.
+ */
+ if (connectRetryTime < RETRY_INTERVAL) {
+ connectRetryTime = (connectRetryTime != 0) ? connectRetryTime * 2 : 1;
+ }
+ scheduleConnectionRetry(connectRetryTime);
+ } else {
+ connectRetryCounter++;
+ log.info("Connected to remote host {}, Connect Counter {}", IsisConstants.SHOST,
+ connectRetryCounter);
+ disconnectExecutor();
+ isisChannelHandler.initializeInterfaceMap();
+ //Send the config packet
+ isisChannelHandler.sentConfigPacket(configPacket);
+ return;
+ }
+ }
+ });
+ } catch (Exception e) {
+ log.info("Connect peer exception : " + e.toString());
+ disconnectExecutor();
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/protocols/isis/ctl/src/main/java/org/onosproject/isis/controller/impl/DefaultIsisController.java b/protocols/isis/ctl/src/main/java/org/onosproject/isis/controller/impl/DefaultIsisController.java
old mode 100755
new mode 100644
diff --git a/protocols/isis/ctl/src/main/java/org/onosproject/isis/controller/impl/DefaultIsisInterface.java b/protocols/isis/ctl/src/main/java/org/onosproject/isis/controller/impl/DefaultIsisInterface.java
old mode 100755
new mode 100644
index bbeb4dd..134a48b
--- a/protocols/isis/ctl/src/main/java/org/onosproject/isis/controller/impl/DefaultIsisInterface.java
+++ b/protocols/isis/ctl/src/main/java/org/onosproject/isis/controller/impl/DefaultIsisInterface.java
@@ -69,15 +69,14 @@
private MacAddress interfaceMacAddress;
private String intermediateSystemName;
private String systemId;
- private String l1LanId;
- private String l2LanId;
+ private String l1LanId = IsisConstants.DEFAULTLANID;
+ private String l2LanId = IsisConstants.DEFAULTLANID;
private int idLength;
private int maxAreaAddresses;
private int reservedPacketCircuitType;
private IsisNetworkType networkType;
private String areaAddress;
private int areaLength;
- private String lspId;
private int holdingTime;
private int priority;
private String circuitId;
@@ -114,10 +113,25 @@
* @param isisNeighbor ISIS neighbor instance
*/
public void removeNeighbor(IsisNeighbor isisNeighbor) {
+ log.debug("Neighbor removed - {}", isisNeighbor.neighborMacAddress());
+ isisNeighbor.stopHoldingTimeCheck();
+ isisNeighbor.stopInactivityTimeCheck();
neighborList.remove(isisNeighbor.neighborMacAddress());
}
/**
+ * Removes all the neighbors.
+ */
+ public void removeNeighbors() {
+ Set<MacAddress> neighbors = neighbors();
+ for (MacAddress mac : neighbors) {
+ removeNeighbor(lookup(mac));
+ log.debug("Neighbor removed - {}", mac);
+ }
+ neighborList.clear();
+ }
+
+ /**
* Returns the ISIS neighbor instance if exists.
*
* @param isisNeighborMac mac address of the neighbor router
@@ -400,24 +414,6 @@
}
/**
- * Returns LSP ID.
- *
- * @return LSP ID
- */
- public String getLspId() {
- return lspId;
- }
-
- /**
- * Sets LSP ID.
- *
- * @param lspId link state packet ID
- */
- public void setLspId(String lspId) {
- this.lspId = lspId;
- }
-
- /**
* Returns holding time.
*
* @return holding time
@@ -518,9 +514,21 @@
*/
public void processIsisMessage(IsisMessage isisMessage, IsisLsdb isisLsdb, Channel channel) {
log.debug("IsisInterfaceImpl::processIsisMessage...!!!");
- if (channel == null) {
- this.channel = channel;
+ this.channel = channel;
+
+ if (isisMessage.sourceMac().equals(interfaceMacAddress)) {
+ log.debug("Received our own message {}...!!!", isisMessage.isisPduType());
+ return;
}
+
+ if (isisMessage.isisPduType() == IsisPduType.P2PHELLOPDU && networkType.equals(IsisNetworkType.BROADCAST)) {
+ return;
+ } else if ((isisMessage.isisPduType() == IsisPduType.L1HELLOPDU ||
+ isisMessage.isisPduType() == IsisPduType.L2HELLOPDU)
+ && networkType.equals(IsisNetworkType.P2P)) {
+ return;
+ }
+
if (this.isisLsdb == null) {
this.isisLsdb = isisLsdb;
}
@@ -543,7 +551,7 @@
break;
case L1PSNP:
case L2PSNP:
- log.debug("Received a PSNP packet...!!!");
+ processPsnPduMessage(isisMessage, channel);
break;
default:
log.debug("Unknown packet to process...!!!");
@@ -560,6 +568,13 @@
public boolean validateHelloMessage(HelloPdu helloPdu) {
boolean isValid = false;
+ if ((helloPdu.circuitType() == IsisRouterType.L1.value() &&
+ reservedPacketCircuitType == IsisRouterType.L2.value()) ||
+ (helloPdu.circuitType() == IsisRouterType.L2.value() &&
+ reservedPacketCircuitType == IsisRouterType.L1.value())) {
+ return false;
+ }
+
//Local InterfaceAddress TLV and compare with the IP Interface address and check if they are in same subnet
List<Ip4Address> interfaceIpAddresses = helloPdu.interfaceIpAddresses();
Ip4Address neighborIp = (helloPdu.interfaceIpAddresses() != null) ?
@@ -569,11 +584,16 @@
}
//Verify if it's in same area, Areas which the router belongs to
- List<String> areas = helloPdu.areaAddress();
- for (String area : areas) {
- if (areaAddress.equals(area)) {
- isValid = true;
+ if (helloPdu.circuitType() == IsisRouterType.L1.value()) {
+ List<String> areas = helloPdu.areaAddress();
+ for (String area : areas) {
+ if (areaAddress.equals(area)) {
+ isValid = true;
+ }
}
+ } else if (helloPdu.circuitType() == IsisRouterType.L2.value() ||
+ helloPdu.circuitType() == IsisRouterType.L1L2.value()) {
+ isValid = true;
}
return isValid;
@@ -585,6 +605,7 @@
* @param neighborMac neighbor MAc address
* @return true if neighbor exist else false
*/
+
private boolean isNeighborInList(MacAddress neighborMac) {
return neighborList.containsKey(neighborMac);
}
@@ -623,9 +644,8 @@
log.debug("IsisInterfaceImpl::processHelloMessage::Interface Type {} ISISInterfaceState {} ",
networkType, interfaceState);
- //If L1 Hello, validate the area, network and max address
- if (IsisPduType.get(helloPacket.pduType()) == IsisPduType.L1HELLOPDU &&
- !validateHelloMessage(helloPacket)) {
+ //If validate the area, network and max address
+ if (!validateHelloMessage(helloPacket)) {
return;
}
@@ -637,6 +657,7 @@
addNeighbouringRouter(neighbor);
}
+ neighbor.setHoldingTime(helloPacket.holdingTime());
neighbor.stopInactivityTimeCheck();
neighbor.startInactivityTimeCheck();
@@ -644,24 +665,29 @@
String lanId = helloPacket.lanId();
if (IsisPduType.L1HELLOPDU == helloPacket.isisPduType()) {
- buildUpdateAndSendSelfGeneratedLspIfDisChange(l1LanId, lanId, channel);
+ buildUpdateAndSendSelfGeneratedLspIfDisChange(l1LanId, lanId, channel,
+ IsisRouterType.get(helloPacket.circuitType()));
l1LanId = lanId;
neighbor.setL1LanId(lanId);
//if a change in lanid
} else if (IsisPduType.L2HELLOPDU == helloPacket.isisPduType()) {
- buildUpdateAndSendSelfGeneratedLspIfDisChange(l1LanId, lanId, channel);
+ buildUpdateAndSendSelfGeneratedLspIfDisChange(l2LanId, lanId, channel,
+ IsisRouterType.get(helloPacket.circuitType()));
l2LanId = lanId;
neighbor.setL2LanId(lanId);
}
//Check in neighbors list our MAC address present
List<MacAddress> neighbors = helloPacket.neighborList();
- for (MacAddress macAddress : neighbors) {
- if (interfaceMacAddress.equals(macAddress)) {
- neighbor.setNeighborState(IsisInterfaceState.UP);
- //Build Self LSP add in LSDB and sent it.
- buildStoreAndSendSelfGeneratedLspIfNotExistInDb(channel);
- break;
+ if (neighbors != null) {
+ for (MacAddress macAddress : neighbors) {
+ if (interfaceMacAddress.equals(macAddress)) {
+ neighbor.setNeighborState(IsisInterfaceState.UP);
+ //Build Self LSP add in LSDB and sent it.
+ buildStoreAndSendSelfGeneratedLspIfNotExistInDb(channel,
+ IsisRouterType.get(helloPacket.circuitType()));
+ break;
+ }
}
}
}
@@ -671,7 +697,8 @@
*
* @param channel netty channel instance
*/
- private void buildStoreAndSendSelfGeneratedLspIfNotExistInDb(Channel channel) {
+ private void buildStoreAndSendSelfGeneratedLspIfNotExistInDb(Channel channel, IsisRouterType neighborRouterType) {
+ this.channel = channel;
//Check our LSP is present in DB. else create a self LSP and store it and sent it
String lspKey = isisLsdb.lspKey(systemId);
LspWrapper wrapper = null;
@@ -690,18 +717,25 @@
sendLsp(lsp, channel);
}
} else if (reservedPacketCircuitType == IsisRouterType.L1L2.value()) {
- wrapper = isisLsdb.findLsp(IsisPduType.L1LSPDU, lspKey);
- if (wrapper == null) {
- LsPdu lsp = new LspGenerator().getLsp(this, lspKey, IsisPduType.L1LSPDU, allConfiguredInterfaceIps);
- isisLsdb.addLsp(lsp, true, this);
- sendLsp(lsp, channel);
+ if ((neighborRouterType == IsisRouterType.L1 || neighborRouterType == IsisRouterType.L1L2)) {
+
+ wrapper = isisLsdb.findLsp(IsisPduType.L1LSPDU, lspKey);
+ if (wrapper == null) {
+ LsPdu lsp = new LspGenerator().getLsp(this, lspKey, IsisPduType.L1LSPDU,
+ allConfiguredInterfaceIps);
+ isisLsdb.addLsp(lsp, true, this);
+ sendLsp(lsp, channel);
+ }
}
- wrapper = isisLsdb.findLsp(IsisPduType.L2LSPDU, lspKey);
- if (wrapper == null) {
- LsPdu lsp = new LspGenerator().getLsp(this, lspKey, IsisPduType.L2LSPDU, allConfiguredInterfaceIps);
- isisLsdb.addLsp(lsp, true, this);
- sendLsp(lsp, channel);
+ if ((neighborRouterType == IsisRouterType.L2 || neighborRouterType == IsisRouterType.L1L2)) {
+ wrapper = isisLsdb.findLsp(IsisPduType.L2LSPDU, lspKey);
+ if (wrapper == null) {
+ LsPdu lsp = new LspGenerator().getLsp(this, lspKey, IsisPduType.L2LSPDU,
+ allConfiguredInterfaceIps);
+ isisLsdb.addLsp(lsp, true, this);
+ sendLsp(lsp, channel);
+ }
}
}
}
@@ -714,29 +748,35 @@
* @param channel netty channel instance
*/
private void buildUpdateAndSendSelfGeneratedLspIfDisChange(String previousLanId,
- String latestLanId, Channel channel) {
+ String latestLanId, Channel channel,
+ IsisRouterType neighborRouterType) {
+ this.channel = channel;
//If DIS change then build and sent LSP
- if (previousLanId != null && !previousLanId.equals(IsisConstants.DEFAULTLANID) &&
- !previousLanId.equals(latestLanId)) {
+ if (!previousLanId.equals(latestLanId)) {
//Create a self LSP and Update it in DB and sent it
String lspKey = isisLsdb.lspKey(systemId);
if (reservedPacketCircuitType == IsisRouterType.L1.value()) {
LsPdu lsp = new LspGenerator().getLsp(this, lspKey, IsisPduType.L1LSPDU, allConfiguredInterfaceIps);
isisLsdb.addLsp(lsp, true, this);
sendLsp(lsp, channel);
- } else if (reservedPacketCircuitType == IsisRouterType.L2.value()) {
+ } else if (reservedPacketCircuitType == IsisRouterType.L2.value() &&
+ (neighborRouterType == IsisRouterType.L2 || neighborRouterType == IsisRouterType.L1L2)) {
LsPdu lsp = new LspGenerator().getLsp(this, lspKey, IsisPduType.L2LSPDU, allConfiguredInterfaceIps);
isisLsdb.addLsp(lsp, true, this);
sendLsp(lsp, channel);
} else if (reservedPacketCircuitType == IsisRouterType.L1L2.value()) {
//L1 LSPDU
- LsPdu lsp = new LspGenerator().getLsp(this, lspKey, IsisPduType.L1LSPDU, allConfiguredInterfaceIps);
- isisLsdb.addLsp(lsp, true, this);
- sendLsp(lsp, channel);
+ if (neighborRouterType == IsisRouterType.L1 || neighborRouterType == IsisRouterType.L1L2) {
+ LsPdu lsp = new LspGenerator().getLsp(this, lspKey, IsisPduType.L1LSPDU, allConfiguredInterfaceIps);
+ isisLsdb.addLsp(lsp, true, this);
+ sendLsp(lsp, channel);
+ }
//L1 LSPDU
- lsp = new LspGenerator().getLsp(this, lspKey, IsisPduType.L2LSPDU, allConfiguredInterfaceIps);
- isisLsdb.addLsp(lsp, true, this);
- sendLsp(lsp, channel);
+ if (neighborRouterType == IsisRouterType.L2 || neighborRouterType == IsisRouterType.L1L2) {
+ LsPdu lsp = new LspGenerator().getLsp(this, lspKey, IsisPduType.L2LSPDU, allConfiguredInterfaceIps);
+ isisLsdb.addLsp(lsp, true, this);
+ sendLsp(lsp, channel);
+ }
}
}
@@ -756,7 +796,9 @@
lspBytes = IsisUtil.addChecksum(lspBytes, IsisConstants.CHECKSUMPOSITION,
IsisConstants.CHECKSUMPOSITION + 1);
//write to the channel
- channel.write(IsisUtil.framePacket(lspBytes, interfaceIndex));
+ if (channel != null && channel.isConnected() && channel.isOpen()) {
+ channel.write(IsisUtil.framePacket(lspBytes, interfaceIndex));
+ }
}
/**
@@ -794,7 +836,7 @@
addNeighbouringRouter(neighbor);
}
neighbor.setNeighborState(IsisInterfaceState.DOWN);
- buildStoreAndSendSelfGeneratedLspIfNotExistInDb(channel);
+ buildStoreAndSendSelfGeneratedLspIfNotExistInDb(channel, IsisRouterType.get(helloPacket.circuitType()));
} else if (stateTlv.adjacencyType() == IsisInterfaceState.DOWN.value()) {
neighbor = neighbouringRouter(isisMessage.sourceMac());
if (neighbor == null) {
@@ -805,6 +847,10 @@
} else if (stateTlv.adjacencyType() == IsisInterfaceState.INITIAL.value()) {
//Neighbor already present in the list
neighbor = neighbouringRouter(isisMessage.sourceMac());
+ if (neighbor == null) {
+ neighbor = new DefaultIsisNeighbor(helloPacket, this);
+ addNeighbouringRouter(neighbor);
+ }
neighbor.setNeighborState(IsisInterfaceState.INITIAL);
neighbor.setLocalExtendedCircuitId(stateTlv.localCircuitId());
//interfaceState = IsisInterfaceState.UP;
@@ -813,9 +859,10 @@
neighbor = neighbouringRouter(isisMessage.sourceMac());
neighbor.setNeighborState(IsisInterfaceState.UP);
neighbor.setLocalExtendedCircuitId(stateTlv.localCircuitId());
- buildStoreAndSendSelfGeneratedLspIfNotExistInDb(channel);
+ buildStoreAndSendSelfGeneratedLspIfNotExistInDb(channel, IsisRouterType.get(helloPacket.circuitType()));
}
+ neighbor.setHoldingTime(helloPacket.holdingTime());
neighbor.stopInactivityTimeCheck();
neighbor.startInactivityTimeCheck();
}
@@ -828,11 +875,36 @@
*/
public void processLsPduMessage(IsisMessage isisMessage, Channel channel) {
log.debug("Enters processLsPduMessage ...!!!");
+ IsisNeighbor neighbor = neighbouringRouter(isisMessage.sourceMac());
+ if (networkType == IsisNetworkType.BROADCAST && neighbor == null) {
+ return;
+ }
+
LsPdu lsPdu = (LsPdu) isisMessage;
LspWrapper wrapper = isisLsdb.findLsp(lsPdu.isisPduType(), lsPdu.lspId());
if (wrapper == null || isisLsdb.isNewerOrSameLsp(lsPdu, wrapper.lsPdu()).equalsIgnoreCase("latest")) {
- //not exist in the database or latest, then add it in database
- isisLsdb.addLsp(lsPdu, false, this);
+ if (wrapper != null) { // verify if the LSA - is your own LSA - get system ID and compare LSP
+ String lspKey = isisLsdb.lspKey(systemId);
+ if (lsPdu.lspId().equals(lspKey)) {
+ lsPdu.setSequenceNumber(lsPdu.sequenceNumber() + 1);
+ if (lsPdu.pduType() == IsisPduType.L1LSPDU.value()) {
+ // setting the ls sequence number
+ isisLsdb.setL1LspSeqNo(lsPdu.sequenceNumber());
+ } else if (lsPdu.pduType() == IsisPduType.L2LSPDU.value()) {
+ // setting the ls sequence number
+ isisLsdb.setL2LspSeqNo(lsPdu.sequenceNumber());
+ }
+ isisLsdb.addLsp(lsPdu, true, this);
+ sendLsp(lsPdu, channel);
+ } else {
+ isisLsdb.addLsp(lsPdu, false, this);
+ }
+
+
+ } else {
+ //not exist in the database or latest, then add it in database
+ isisLsdb.addLsp(lsPdu, false, this);
+ }
}
//If network type is P2P, acknowledge with a PSNP
@@ -865,7 +937,48 @@
IsisConstants.RESERVEDPOSITION);
flagValue = false;
//write to the channel
- channel.write(IsisUtil.framePacket(psnpBytes, interfaceIndex));
+ if (channel != null && channel.isConnected() && channel.isOpen()) {
+ channel.write(IsisUtil.framePacket(psnpBytes, interfaceIndex));
+ }
+ }
+ }
+
+ /**
+ * Processes PSN PDU message.
+ * Checks for self originated LSP entries in PSNP message and sends the missing LSP.
+ *
+ * @param isisMessage PSN PDU message instance
+ * @param channel channel instance
+ */
+ public void processPsnPduMessage(IsisMessage isisMessage, Channel channel) {
+ log.debug("Enters processPsnPduMessage ...!!!");
+ //If adjacency not formed don't process.
+ IsisNeighbor neighbor = neighbouringRouter(isisMessage.sourceMac());
+ if (networkType == IsisNetworkType.BROADCAST && neighbor == null) {
+ return;
+ }
+
+ Psnp psnPacket = (Psnp) isisMessage;
+ List<IsisTlv> isisTlvs = psnPacket.getAllTlv();
+ Iterator iterator = isisTlvs.iterator();
+ while (iterator.hasNext()) {
+ IsisTlv isisTlv = (IsisTlv) iterator.next();
+ if (isisTlv instanceof LspEntriesTlv) {
+ LspEntriesTlv lspEntriesTlv = (LspEntriesTlv) isisTlv;
+ List<LspEntry> lspEntryList = lspEntriesTlv.lspEntry();
+ Iterator lspEntryListIterator = lspEntryList.iterator();
+ while (lspEntryListIterator.hasNext()) {
+ LspEntry lspEntry = (LspEntry) lspEntryListIterator.next();
+ String lspKey = lspEntry.lspId();
+ LspWrapper lspWrapper = isisLsdb.findLsp(psnPacket.isisPduType(), lspKey);
+ if (lspWrapper != null) {
+ if (lspWrapper.isSelfOriginated()) {
+ //Sent the LSP
+ sendLsp((LsPdu) lspWrapper.lsPdu(), channel);
+ }
+ }
+ }
+ }
}
}
@@ -877,123 +990,60 @@
*/
public void processCsnPduMessage(IsisMessage isisMessage, Channel channel) {
log.debug("Enters processCsnPduMessage ...!!!");
- if (reservedPacketCircuitType == IsisRouterType.L1.value()) {
- processOnL1CsnPdu(isisMessage, channel);
- } else if (reservedPacketCircuitType == IsisRouterType.L2.value()) {
- processOnL2CsnPdu(isisMessage, channel);
+ IsisNeighbor neighbor = neighbouringRouter(isisMessage.sourceMac());
+ if (networkType == IsisNetworkType.BROADCAST && neighbor == null) {
+ return;
}
- }
- /**
- * Process the isisMessage which belongs to L1 CSN PDU.
- * checks the database for this LsPdu if it exists further check for sequence number
- * sequence number is greater will send PsnPdu.
- *
- * @param isisMessage CSN PDU message instance
- * @param channel netty channel instance
- */
- private void processOnL1CsnPdu(IsisMessage isisMessage, Channel channel) {
Csnp csnPacket = (Csnp) isisMessage;
+ IsisPduType psnPduType = (IsisPduType.L2CSNP.equals(csnPacket.isisPduType())) ?
+ IsisPduType.L2PSNP : IsisPduType.L1PSNP;
+ IsisPduType lsPduType = (IsisPduType.L2CSNP.equals(csnPacket.isisPduType())) ?
+ IsisPduType.L2LSPDU : IsisPduType.L1LSPDU;
+
List<LspEntry> lspEntryRequestList = new ArrayList<>();
boolean selfOriginatedFound = false;
- if (IsisPduType.L1CSNP.equals(csnPacket.isisPduType())) {
- List<IsisTlv> isisTlvs = csnPacket.getAllTlv();
- Iterator iterator = isisTlvs.iterator();
- while (iterator.hasNext()) {
- IsisTlv isisTlv = (IsisTlv) iterator.next();
- if (isisTlv instanceof LspEntriesTlv) {
- LspEntriesTlv lspEntriesTlv = (LspEntriesTlv) isisTlv;
- List<LspEntry> lspEntryList = lspEntriesTlv.lspEntry();
- Iterator lspEntryListIterator = lspEntryList.iterator();
- while (lspEntryListIterator.hasNext()) {
- LspEntry lspEntry = (LspEntry) lspEntryListIterator.next();
- String lspKey = lspEntry.lspId();
- LspWrapper lspWrapper = isisLsdb.findLsp(IsisPduType.L1LSPDU, lspKey);
- if (lspWrapper != null) {
- LsPdu lsPdu = (LsPdu) lspWrapper.lsPdu();
- if (lspWrapper.isSelfOriginated()) {
- selfOriginatedFound = true;
- if (lspEntry.lspSequenceNumber() > lsPdu.sequenceNumber()) {
- sendLsPduMessage(lspEntry.lspSequenceNumber(), csnPacket.isisPduType(), channel);
- }
- } else {
- if (lsPdu.sequenceNumber() < lspEntry.lspSequenceNumber()) {
- lspEntryRequestList.add(lspEntry);
- flagValue = true;
- }
+ List<IsisTlv> isisTlvs = csnPacket.getAllTlv();
+ Iterator iterator = isisTlvs.iterator();
+ while (iterator.hasNext()) {
+ IsisTlv isisTlv = (IsisTlv) iterator.next();
+ if (isisTlv instanceof LspEntriesTlv) {
+ LspEntriesTlv lspEntriesTlv = (LspEntriesTlv) isisTlv;
+ List<LspEntry> lspEntryList = lspEntriesTlv.lspEntry();
+ Iterator lspEntryListIterator = lspEntryList.iterator();
+ while (lspEntryListIterator.hasNext()) {
+ LspEntry lspEntry = (LspEntry) lspEntryListIterator.next();
+ String lspKey = lspEntry.lspId();
+ LspWrapper lspWrapper = isisLsdb.findLsp(lsPduType, lspKey);
+ if (lspWrapper != null) {
+ LsPdu lsPdu = (LsPdu) lspWrapper.lsPdu();
+ if (lspWrapper.isSelfOriginated()) {
+ selfOriginatedFound = true;
+ if (lspEntry.lspSequenceNumber() < lsPdu.sequenceNumber()) {
+ sendLsp(lsPdu, channel);
}
} else {
- lspEntryRequestList.add(lspEntry);
- flagValue = true;
+ if (lsPdu.sequenceNumber() < lspEntry.lspSequenceNumber()) {
+ lspEntryRequestList.add(lspEntry);
+ flagValue = true;
+ }
}
+ } else {
+ lspEntryRequestList.add(lspEntry);
+ flagValue = true;
}
}
}
- if (flagValue) {
- sendPsnPduMessage(lspEntryRequestList, csnPacket.isisPduType(), channel);
- }
-
- if (!selfOriginatedFound) {
- String lspKey = isisLsdb.lspKey(systemId);
- LspWrapper wrapper = isisLsdb.findLsp(IsisPduType.L1LSPDU, lspKey);
- sendLsp((LsPdu) wrapper.lsPdu(), channel);
- }
}
- }
+ if (flagValue) {
+ sendPsnPduMessage(lspEntryRequestList, psnPduType, channel);
+ lspEntryRequestList.clear();
+ }
- /**
- * Process the isisMessage which belongs to L2 CSNP.
- * checks the database for this LsPdu if it exists further check for sequence number
- * sequence number is greater will send PsnPdu.
- *
- * @param isisMessage received CSNP message
- * @param channel netty channel instance
- */
- private void processOnL2CsnPdu(IsisMessage isisMessage, Channel channel) {
- Csnp csnPacket = (Csnp) isisMessage;
- List<LspEntry> lspEntryRequestList = new ArrayList<>();
- boolean selfOriginatedFound = false;
- if (IsisPduType.L2CSNP.equals(csnPacket.isisPduType())) {
- List<IsisTlv> isisTlvs = csnPacket.getAllTlv();
- Iterator iterator = isisTlvs.iterator();
- while (iterator.hasNext()) {
- IsisTlv isisTlv = (IsisTlv) iterator.next();
- if (isisTlv instanceof LspEntriesTlv) {
- LspEntriesTlv lspEntriesTlv = (LspEntriesTlv) isisTlv;
- List<LspEntry> lspEntryList = lspEntriesTlv.lspEntry();
- Iterator lspEntryListIterator = lspEntryList.iterator();
- while (lspEntryListIterator.hasNext()) {
- LspEntry lspEntry = (LspEntry) lspEntryListIterator.next();
- String lspKey = lspEntry.lspId();
- LspWrapper lspWrapper = isisLsdb.findLsp(IsisPduType.L2LSPDU, lspKey);
- if (lspWrapper != null) {
- LsPdu lsPdu = (LsPdu) lspWrapper.lsPdu();
- if (lspWrapper.isSelfOriginated()) {
- selfOriginatedFound = true;
- if (lspEntry.lspSequenceNumber() > lsPdu.sequenceNumber()) {
- sendLsPduMessage(lspEntry.lspSequenceNumber(), csnPacket.isisPduType(), channel);
- }
- } else {
- if (lsPdu.sequenceNumber() < lspEntry.lspSequenceNumber()) {
- lspEntryRequestList.add(lspEntry);
- flagValue = true;
- }
- }
- } else {
- lspEntryRequestList.add(lspEntry);
- flagValue = true;
- }
- }
- }
- }
- if (flagValue) {
- sendPsnPduMessage(lspEntryRequestList, csnPacket.isisPduType(), channel);
- lspEntryRequestList.clear();
- }
-
- if (!selfOriginatedFound) {
- String lspKey = isisLsdb.lspKey(systemId);
- LspWrapper wrapper = isisLsdb.findLsp(IsisPduType.L2LSPDU, lspKey);
+ if (!selfOriginatedFound) {
+ String lspKey = isisLsdb.lspKey(systemId);
+ LspWrapper wrapper = isisLsdb.findLsp(lsPduType, lspKey);
+ if (wrapper != null) {
sendLsp((LsPdu) wrapper.lsPdu(), channel);
}
}
@@ -1007,13 +1057,7 @@
* @param channel netty channel instance
*/
private void sendPsnPduMessage(List<LspEntry> lspEntryRequestList, IsisPduType isisPduType, Channel channel) {
- IsisPduType psnpType = null;
- if (isisPduType == IsisPduType.L1CSNP) {
- psnpType = IsisPduType.L1PSNP;
- } else if (reservedPacketCircuitType == IsisRouterType.L2.value()) {
- psnpType = IsisPduType.L2PSNP;
- }
- IsisHeader isisHeader = new LspGenerator().getHeader(psnpType);
+ IsisHeader isisHeader = new LspGenerator().getHeader(isisPduType);
Psnp psnp = new Psnp(isisHeader);
psnp.setSourceId(lspKeyP2P(this.systemId));
TlvHeader tlvHeader = new TlvHeader();
@@ -1021,6 +1065,9 @@
tlvHeader.setTlvLength(0);
LspEntriesTlv lspEntriesTlv = new LspEntriesTlv(tlvHeader);
for (LspEntry lspEntry : lspEntryRequestList) {
+ lspEntry.setLspChecksum(0);
+ lspEntry.setLspSequenceNumber(0);
+ lspEntry.setRemainingTime(0);
lspEntriesTlv.addLspEntry(lspEntry);
}
psnp.addTlv(lspEntriesTlv);
@@ -1031,7 +1078,9 @@
IsisConstants.RESERVEDPOSITION);
flagValue = false;
//write to the channel
- channel.write(IsisUtil.framePacket(psnpBytes, interfaceIndex));
+ if (channel != null && channel.isConnected() && channel.isOpen()) {
+ channel.write(IsisUtil.framePacket(psnpBytes, interfaceIndex));
+ }
}
/**
@@ -1048,28 +1097,6 @@
}
/**
- * Sends the link state PDU with latest self generated lsp entry.
- *
- * @param sequenceNumber sequence number of the self generated lsp
- * @param isisPduType intermediate system type
- * @param channel netty channel instance
- */
- private void sendLsPduMessage(int sequenceNumber, IsisPduType isisPduType, Channel channel) {
- String lspKey = isisLsdb.lspKey(systemId);
- LsPdu lsp = new LspGenerator().getLsp(this, lspKey, isisPduType, allConfiguredInterfaceIps);
- lsp.setSequenceNumber(sequenceNumber);
- byte[] lspBytes = lsp.asBytes();
- lspBytes = IsisUtil.addLengthAndMarkItInReserved(lspBytes, IsisConstants.LENGTHPOSITION,
- IsisConstants.LENGTHPOSITION + 1,
- IsisConstants.RESERVEDPOSITION);
- lspBytes = IsisUtil.addChecksum(lspBytes, IsisConstants.CHECKSUMPOSITION,
- IsisConstants.CHECKSUMPOSITION + 1);
- //write to the channel
- channel.write(IsisUtil.framePacket(lspBytes, interfaceIndex));
- }
-
-
- /**
* Starts the hello timer which sends hello packet every configured seconds.
*
* @param channel netty channel instance
@@ -1083,4 +1110,12 @@
exServiceHello.scheduleAtFixedRate(isisHelloPduSender, 0,
helloInterval, TimeUnit.SECONDS);
}
+
+ /**
+ * Stops the hello timer which sends hello packet every configured seconds.
+ */
+ public void stopHelloSender() {
+ log.debug("IsisInterfaceImpl::stopHelloSender");
+ exServiceHello.shutdown();
+ }
}
\ No newline at end of file
diff --git a/protocols/isis/ctl/src/main/java/org/onosproject/isis/controller/impl/DefaultIsisNeighbor.java b/protocols/isis/ctl/src/main/java/org/onosproject/isis/controller/impl/DefaultIsisNeighbor.java
old mode 100755
new mode 100644
index 7fac0cb..3e05a37
--- a/protocols/isis/ctl/src/main/java/org/onosproject/isis/controller/impl/DefaultIsisNeighbor.java
+++ b/protocols/isis/ctl/src/main/java/org/onosproject/isis/controller/impl/DefaultIsisNeighbor.java
@@ -88,6 +88,7 @@
}
this.isisInterface = isisInterface;
startHoldingTimeCheck();
+ log.debug("Neighbor added - {}", neighborMacAddress);
}
/**
@@ -387,6 +388,10 @@
@Override
public void run() {
holdingTime--;
+ if (holdingTime <= 0) {
+ log.debug("Calling neighbor down. Holding time is 0.");
+ neighborDown();
+ }
}
}
}
\ No newline at end of file
diff --git a/protocols/isis/ctl/src/main/java/org/onosproject/isis/controller/impl/DefaultIsisProcess.java b/protocols/isis/ctl/src/main/java/org/onosproject/isis/controller/impl/DefaultIsisProcess.java
old mode 100755
new mode 100644
diff --git a/protocols/isis/ctl/src/main/java/org/onosproject/isis/controller/impl/IsisChannelHandler.java b/protocols/isis/ctl/src/main/java/org/onosproject/isis/controller/impl/IsisChannelHandler.java
old mode 100755
new mode 100644
index 064176d..86c6853
--- a/protocols/isis/ctl/src/main/java/org/onosproject/isis/controller/impl/IsisChannelHandler.java
+++ b/protocols/isis/ctl/src/main/java/org/onosproject/isis/controller/impl/IsisChannelHandler.java
@@ -94,13 +94,35 @@
for (IsisInterface isisUpdatedInterface : isisUpdatedProcess.isisInterfaceList()) {
IsisInterface isisInterface = isisInterfaceMap.get(isisUpdatedInterface.interfaceIndex());
if (isisInterface == null) {
- isisInterfaceMap.put(isisInterface.interfaceIndex(), isisInterface);
- interfaceIps.add(isisInterface.interfaceIpAddress());
+ isisInterfaceMap.put(isisUpdatedInterface.interfaceIndex(), isisUpdatedInterface);
+ interfaceIps.add(isisUpdatedInterface.interfaceIpAddress());
} else {
- isisInterface.setReservedPacketCircuitType(isisUpdatedInterface.reservedPacketCircuitType());
- isisInterface.setNetworkType(isisUpdatedInterface.networkType());
- isisInterface.setHoldingTime(isisUpdatedInterface.holdingTime());
- isisInterface.setHelloInterval(isisUpdatedInterface.helloInterval());
+ if (isisInterface.intermediateSystemName() != isisUpdatedInterface.intermediateSystemName()) {
+ isisInterface.setIntermediateSystemName(isisUpdatedInterface.intermediateSystemName());
+ }
+ if (isisInterface.reservedPacketCircuitType() != isisUpdatedInterface.reservedPacketCircuitType()) {
+ isisInterface.setReservedPacketCircuitType(isisUpdatedInterface.reservedPacketCircuitType());
+ isisInterface.removeNeighbors();
+ }
+ if (isisInterface.circuitId() != isisUpdatedInterface.circuitId()) {
+ isisInterface.setCircuitId(isisUpdatedInterface.circuitId());
+ }
+ if (isisInterface.networkType() != isisUpdatedInterface.networkType()) {
+ isisInterface.setNetworkType(isisUpdatedInterface.networkType());
+ isisInterface.removeNeighbors();
+ }
+ if (isisInterface.areaAddress() != isisUpdatedInterface.areaAddress()) {
+ isisInterface.setAreaAddress(isisUpdatedInterface.areaAddress());
+ }
+ if (isisInterface.holdingTime() != isisUpdatedInterface.holdingTime()) {
+ isisInterface.setHoldingTime(isisUpdatedInterface.holdingTime());
+ }
+ if (isisInterface.helloInterval() != isisUpdatedInterface.helloInterval()) {
+ isisInterface.setHelloInterval(isisUpdatedInterface.helloInterval());
+ isisInterface.stopHelloSender();
+ isisInterface.startHelloSender(channel);
+ }
+
isisInterfaceMap.put(isisInterface.interfaceIndex(), isisInterface);
}
}
@@ -144,6 +166,9 @@
@Override
public void channelDisconnected(ChannelHandlerContext ctx, ChannelStateEvent evt) {
log.debug("IsisChannelHandler::channelDisconnected...!!!");
+ if (controller != null) {
+ controller.connectPeer();
+ }
}
@Override
@@ -169,8 +194,9 @@
} else if (e.getCause() instanceof RejectedExecutionException) {
log.warn("Could not process message: queue full");
} else {
- log.error("Error while processing message from ISIS {}",
- e.getChannel().getRemoteAddress());
+ log.error("Error while processing message from ISIS {}, {}",
+ e.getChannel().getRemoteAddress(), e.getCause().getMessage());
+ e.getCause().printStackTrace();
}
}
diff --git a/protocols/isis/ctl/src/main/java/org/onosproject/isis/controller/impl/IsisHelloPduSender.java b/protocols/isis/ctl/src/main/java/org/onosproject/isis/controller/impl/IsisHelloPduSender.java
old mode 100755
new mode 100644
index 87338f5..e798b3e
--- a/protocols/isis/ctl/src/main/java/org/onosproject/isis/controller/impl/IsisHelloPduSender.java
+++ b/protocols/isis/ctl/src/main/java/org/onosproject/isis/controller/impl/IsisHelloPduSender.java
@@ -45,7 +45,7 @@
@Override
public void run() {
- if (channel != null) {
+ if (channel != null && channel.isConnected() && channel.isOpen()) {
try {
byte[] helloPdu = null;
byte[] interfaceIndex = {(byte) isisInterface.interfaceIndex()};
diff --git a/protocols/isis/ctl/src/main/java/org/onosproject/isis/controller/impl/IsisMessageDecoder.java b/protocols/isis/ctl/src/main/java/org/onosproject/isis/controller/impl/IsisMessageDecoder.java
old mode 100755
new mode 100644
index f2cbf19..b75bc3f
--- a/protocols/isis/ctl/src/main/java/org/onosproject/isis/controller/impl/IsisMessageDecoder.java
+++ b/protocols/isis/ctl/src/main/java/org/onosproject/isis/controller/impl/IsisMessageDecoder.java
@@ -44,7 +44,6 @@
log.info("Channel is not connected.");
return null;
}
-
IsisMessageReader messageReader = new IsisMessageReader();
List<IsisMessage> isisMessageList = new LinkedList<>();
int dataLength = buffer.readableBytes();
@@ -74,8 +73,7 @@
isisMessageList.add(message);
}
}
-
- return isisMessageList;
+ return (isisMessageList.size() > 0) ? isisMessageList : null;
}
/**
diff --git a/protocols/isis/ctl/src/main/java/org/onosproject/isis/controller/impl/IsisMessageEncoder.java b/protocols/isis/ctl/src/main/java/org/onosproject/isis/controller/impl/IsisMessageEncoder.java
old mode 100755
new mode 100644
diff --git a/protocols/isis/ctl/src/main/java/org/onosproject/isis/controller/impl/IsisPipelineFactory.java b/protocols/isis/ctl/src/main/java/org/onosproject/isis/controller/impl/IsisPipelineFactory.java
old mode 100755
new mode 100644
diff --git a/protocols/isis/ctl/src/main/java/org/onosproject/isis/controller/impl/lsdb/DefaultIsisLsdb.java b/protocols/isis/ctl/src/main/java/org/onosproject/isis/controller/impl/lsdb/DefaultIsisLsdb.java
old mode 100755
new mode 100644
index 8a58269..3c66bf8
--- a/protocols/isis/ctl/src/main/java/org/onosproject/isis/controller/impl/lsdb/DefaultIsisLsdb.java
+++ b/protocols/isis/ctl/src/main/java/org/onosproject/isis/controller/impl/lsdb/DefaultIsisLsdb.java
@@ -45,7 +45,6 @@
private IsisLsdbAge lsdbAge = null;
-
private int l1LspSeqNo = IsisConstants.STARTLSSEQUENCENUM;
private int l2LspSeqNo = IsisConstants.STARTLSSEQUENCENUM;
@@ -80,6 +79,7 @@
public void setL2LspSeqNo(int l2LspSeqNo) {
this.l2LspSeqNo = l2LspSeqNo;
}
+
/**
* Returns the LSDB LSP key.
*
@@ -96,6 +96,7 @@
return lspKey.toString();
}
+
/**
* Returns the neighbor L1 database information.
*
@@ -218,7 +219,12 @@
byte[] checkSum = {lspBytes[IsisConstants.CHECKSUMPOSITION], lspBytes[IsisConstants.CHECKSUMPOSITION + 1]};
lspdu.setCheckSum(ChannelBuffers.copiedBuffer(checkSum).readUnsignedShort());
}
- DefaultLspWrapper lspWrapper = new DefaultLspWrapper();
+
+ DefaultLspWrapper lspWrapper = (DefaultLspWrapper) findLsp(lspdu.isisPduType(), lspdu.lspId());
+ if (lspWrapper == null) {
+ lspWrapper = new DefaultLspWrapper();
+ }
+
lspWrapper.setLspAgeReceived(IsisConstants.LSPMAXAGE - lspdu.remainingLifeTime());
lspWrapper.setLspType(IsisPduType.get(lspdu.pduType()));
lspWrapper.setLsPdu(lspdu);
@@ -228,8 +234,8 @@
lspWrapper.setIsisInterface(isisInterface);
lspWrapper.setLsdbAge(lsdbAge);
addLsp(lspWrapper, lspdu.lspId());
- log.debug("Added LSp In LSDB: {}", lspWrapper);
+ log.debug("Added LSp In LSDB: {}", lspWrapper);
return true;
}
@@ -270,7 +276,6 @@
lspWrapper.lsPdu().isisPduType(),
binNumber, lspWrapper.remainingLifetime());
}
-
return false;
}
@@ -344,4 +349,4 @@
break;
}
}
-}
+}
\ No newline at end of file
diff --git a/protocols/isis/ctl/src/main/java/org/onosproject/isis/controller/impl/lsdb/DefaultIsisLsdbAge.java b/protocols/isis/ctl/src/main/java/org/onosproject/isis/controller/impl/lsdb/DefaultIsisLsdbAge.java
old mode 100755
new mode 100644
index 2cf07ba..5a48798
--- a/protocols/isis/ctl/src/main/java/org/onosproject/isis/controller/impl/lsdb/DefaultIsisLsdbAge.java
+++ b/protocols/isis/ctl/src/main/java/org/onosproject/isis/controller/impl/lsdb/DefaultIsisLsdbAge.java
@@ -36,10 +36,10 @@
*/
public class DefaultIsisLsdbAge implements IsisLsdbAge {
private static final Logger log = LoggerFactory.getLogger(DefaultIsisLsdbAge.class);
- protected static int ageCounter = 0;
+ protected int ageCounter = 0;
private InternalAgeTimer dbAgeTimer;
private ScheduledExecutorService exServiceage;
- private Integer maxBins = 1200;
+ private Integer maxBins = IsisConstants.LSPMAXAGE;
private Map<Integer, IsisLspBin> ageBins = new ConcurrentHashMap<>(maxBins);
private int ageCounterRollOver = 0;
private IsisLspQueueConsumer queueConsumer = null;
@@ -202,7 +202,7 @@
} else {
binNumber = ageCounter - IsisConstants.LSPREFRESH;
}
- if (binNumber > IsisConstants.LSPMAXAGE) {
+ if (binNumber >= IsisConstants.LSPMAXAGE) {
binNumber = binNumber - IsisConstants.LSPMAXAGE;
}
IsisLspBin lspBin = ageBins.get(binNumber);
diff --git a/protocols/isis/ctl/src/main/java/org/onosproject/isis/controller/impl/lsdb/DefaultIsisLspBin.java b/protocols/isis/ctl/src/main/java/org/onosproject/isis/controller/impl/lsdb/DefaultIsisLspBin.java
old mode 100755
new mode 100644
diff --git a/protocols/isis/ctl/src/main/java/org/onosproject/isis/controller/impl/lsdb/DefaultLspWrapper.java b/protocols/isis/ctl/src/main/java/org/onosproject/isis/controller/impl/lsdb/DefaultLspWrapper.java
old mode 100755
new mode 100644
index b89e88f..b9b3306
--- a/protocols/isis/ctl/src/main/java/org/onosproject/isis/controller/impl/lsdb/DefaultLspWrapper.java
+++ b/protocols/isis/ctl/src/main/java/org/onosproject/isis/controller/impl/lsdb/DefaultLspWrapper.java
@@ -21,11 +21,14 @@
import org.onosproject.isis.controller.LspWrapper;
import org.onosproject.isis.io.isispacket.pdu.LsPdu;
import org.onosproject.isis.io.util.IsisConstants;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* Representation of LSP wrapper where the LSPs are stored with metadata.
*/
public class DefaultLspWrapper implements LspWrapper {
+ private static final Logger log = LoggerFactory.getLogger(DefaultLspWrapper.class);
private int binNumber = -1;
private boolean selfOriginated = false;
private IsisPduType lspType;
@@ -229,7 +232,15 @@
int currentAge = 0;
//ls age received
if (lsdbAge.ageCounter() >= ageCounterWhenReceived) {
+ if (!selfOriginated) {
+ if (ageCounterRollOverWhenAdded == lsdbAge.ageCounterRollOver()) {
currentAge = lspAgeReceived + (lsdbAge.ageCounter() - ageCounterWhenReceived);
+ } else {
+ return IsisConstants.LSPMAXAGE;
+ }
+ } else {
+ currentAge = lspAgeReceived + (lsdbAge.ageCounter() - ageCounterWhenReceived);
+ }
} else {
currentAge = lspAgeReceived + ((IsisConstants.LSPMAXAGE + lsdbAge.ageCounter())
- ageCounterWhenReceived);
@@ -245,6 +256,8 @@
return currentAge;
}
+
+
/**
* Returns remaining time.
*
@@ -252,7 +265,7 @@
*/
public int remainingLifetime() {
//Calculate the remaining lifetime
- remainingLifetime = IsisConstants.LSPMAXAGE - lsdbAge.ageCounter();
+ remainingLifetime = IsisConstants.LSPMAXAGE - currentAge();
return remainingLifetime;
}
diff --git a/protocols/isis/ctl/src/main/java/org/onosproject/isis/controller/impl/lsdb/IsisLspQueueConsumer.java b/protocols/isis/ctl/src/main/java/org/onosproject/isis/controller/impl/lsdb/IsisLspQueueConsumer.java
old mode 100755
new mode 100644
index 9007093..b5eca27
--- a/protocols/isis/ctl/src/main/java/org/onosproject/isis/controller/impl/lsdb/IsisLspQueueConsumer.java
+++ b/protocols/isis/ctl/src/main/java/org/onosproject/isis/controller/impl/lsdb/IsisLspQueueConsumer.java
@@ -100,7 +100,9 @@
IsisConstants.CHECKSUMPOSITION + 1);
//write to the channel
channel.write(IsisUtil.framePacket(lspBytes, isisInterface.interfaceIndex()));
-
+ // Updating the database with resetting remaining life time to default.
+ IsisLsdb isisDb = isisInterface.isisLsdb();
+ isisDb.addLsp(lsPdu, true, isisInterface);
log.debug("LSPQueueConsumer: processRefreshLsp - Flooded SelfOriginated LSP {}",
wrapper.lsPdu());
}
diff --git a/protocols/isis/ctl/src/main/java/org/onosproject/isis/controller/impl/lsdb/package-info.java b/protocols/isis/ctl/src/main/java/org/onosproject/isis/controller/impl/lsdb/package-info.java
old mode 100755
new mode 100644
diff --git a/protocols/isis/ctl/src/main/java/org/onosproject/isis/controller/impl/package-info.java b/protocols/isis/ctl/src/main/java/org/onosproject/isis/controller/impl/package-info.java
old mode 100755
new mode 100644
diff --git a/protocols/isis/ctl/src/test/java/org/onosproject/isis/controller/impl/ControllerTest.java b/protocols/isis/ctl/src/test/java/org/onosproject/isis/controller/impl/ControllerTest.java
index 9a41bd3..13ec2cc 100644
--- a/protocols/isis/ctl/src/test/java/org/onosproject/isis/controller/impl/ControllerTest.java
+++ b/protocols/isis/ctl/src/test/java/org/onosproject/isis/controller/impl/ControllerTest.java
@@ -16,6 +16,8 @@
package org.onosproject.isis.controller.impl;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
@@ -30,10 +32,65 @@
public class ControllerTest {
private Controller controller;
+ private ObjectMapper mapper;
+ private JsonNode jsonNode;
+ private JsonNode jsonNode1;
+ private String jsonString = "{" +
+ " \"processes\": [{" +
+ " \"processId\": \"4.4.4.4\"," +
+ " \"interface\": [{" +
+ " \"interfaceIndex\": \"2\"," +
+ " \"macAddress\": \"08:00:27:b7:ab:bf\"," +
+ " \"interfaceIp\": \"192.168.56.101\"," +
+ " \"networkMask\": \"255.255.255.224\"," +
+ " \"intermediateSystemName\": \"ROUTERONE\"," +
+ " \"systemId\": \"2929.2929.2929\"," +
+ " \"lanId\": \"0000.0000.0000.00\"," +
+ " \"idLength\": \"0\"," +
+ " \"maxAreaAddresses\": \"3\"," +
+ " \"reservedPacketCircuitType\": \"1\"," +
+ " \"circuitId\": \"10\"," +
+ " \"networkType\": \"2\"," +
+ " \"areaAddress\": \"490000\"," +
+ " \"areaLength\": \"3\"," +
+ " \"lspId\": \"1313131313130000\"," +
+ " \"holdingTime\": \"50\"," +
+ " \"helloInterval\": \"10\"," +
+ " \"priority\": \"0\"" +
+ " }]" +
+ " }]" +
+ "}";
+ private String jsonString1 = "{" +
+ " \"processes\": {" +
+ " \"interface\": [{" +
+ " \"interfaceIndex\": \"2\"," +
+ " \"interfaceIp\": \"100.100.100.100\"," +
+ " \"macAddress\": \"08:00:27:b7:ab:bf\"," +
+ " \"networkMask\": \"255.255.255.224\"," +
+ " \"intermediateSystemName\": \"ROUTERONE\"," +
+ " \"systemId\": \"2929.2929.2929\"," +
+ " \"lanId\": \"0000.0000.0000.00\"," +
+ " \"idLength\": \"0\"," +
+ " \"maxAreaAddresses\": \"3\"," +
+ " \"reservedPacketCircuitType\": \"1\"," +
+ " \"circuitId\": \"10\"," +
+ " \"networkType\": \"2\"," +
+ " \"areaAddress\": \"490000\"," +
+ " \"areaLength\": \"3\"," +
+ " \"lspId\": \"1313131313130000\"," +
+ " \"holdingTime\": \"50\"," +
+ " \"helloInterval\": \"10\"," +
+ " \"priority\": \"0\"" +
+ " }]" +
+ " }" +
+ "}";
@Before
public void setUp() throws Exception {
controller = new Controller();
+ mapper = new ObjectMapper();
+ jsonNode = mapper.readTree(jsonString);
+ jsonNode1 = mapper.readTree(jsonString1);
}
@After
@@ -58,4 +115,18 @@
controller.getAllConfiguredProcesses();
assertThat(controller, is(notNullValue()));
}
+
+ /**
+ * Tests updateConfig() method.
+ */
+ @Test
+ public void testUpdateConfig() throws Exception {
+ jsonNode.path("interface");
+ controller.updateConfig(jsonNode);
+ assertThat(controller, is(notNullValue()));
+
+ controller.updateConfig(jsonNode1);
+ assertThat(controller, is(notNullValue()));
+ }
+
}
\ No newline at end of file
diff --git a/protocols/isis/ctl/src/test/java/org/onosproject/isis/controller/impl/DefaultIsisControllerTest.java b/protocols/isis/ctl/src/test/java/org/onosproject/isis/controller/impl/DefaultIsisControllerTest.java
index 915727d..61af4d7 100644
--- a/protocols/isis/ctl/src/test/java/org/onosproject/isis/controller/impl/DefaultIsisControllerTest.java
+++ b/protocols/isis/ctl/src/test/java/org/onosproject/isis/controller/impl/DefaultIsisControllerTest.java
@@ -15,9 +15,13 @@
*/
package org.onosproject.isis.controller.impl;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.easymock.EasyMock;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
+import org.onosproject.isis.controller.topology.IsisRouterListener;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.CoreMatchers.notNullValue;
@@ -27,11 +31,43 @@
* Unit test case for DefaultIsisController.
*/
public class DefaultIsisControllerTest {
+ private ObjectMapper mapper;
+ private JsonNode jsonNode;
private DefaultIsisController defaultIsisController;
+ private String jsonString = "{" +
+ " \"processes\": [{" +
+ " \"processId\": \"4.4.4.4\"," +
+ " \"interface\": [{" +
+ " \"interfaceIndex\": \"2\"," +
+ " \"macAddress\": \"08:00:27:b7:ab:bf\"," +
+ " \"interfaceIp\": \"192.168.56.101\"," +
+ " \"networkMask\": \"255.255.255.224\"," +
+ " \"intermediateSystemName\": \"ROUTERONE\"," +
+ " \"systemId\": \"2929.2929.2929\"," +
+ " \"lanId\": \"0000.0000.0000.00\"," +
+ " \"idLength\": \"0\"," +
+ " \"maxAreaAddresses\": \"3\"," +
+ " \"reservedPacketCircuitType\": \"1\"," +
+ " \"circuitId\": \"10\"," +
+ " \"networkType\": \"2\"," +
+ " \"areaAddress\": \"490000\"," +
+ " \"areaLength\": \"3\"," +
+ " \"lspId\": \"1313131313130000\"," +
+ " \"holdingTime\": \"50\"," +
+ " \"helloInterval\": \"10\"," +
+ " \"priority\": \"0\"" +
+ " }]" +
+ " }]" +
+ "}";
+
+ private IsisRouterListener isisRouterListener;
@Before
public void setUp() throws Exception {
defaultIsisController = new DefaultIsisController();
+ mapper = new ObjectMapper();
+ jsonNode = mapper.readTree(jsonString);
+ isisRouterListener = EasyMock.createNiceMock(IsisRouterListener.class);
}
@After
@@ -66,4 +102,31 @@
defaultIsisController.allConfiguredProcesses();
assertThat(defaultIsisController, is(notNullValue()));
}
+
+ /**
+ * Tests updateConfig() method.
+ */
+ @Test
+ public void testUpdateConfig() throws Exception {
+ defaultIsisController.updateConfig(jsonNode);
+ assertThat(defaultIsisController, is(notNullValue()));
+ }
+
+ /**
+ * Tests addRouterListener() method.
+ */
+ @Test
+ public void testaddRouterListener() throws Exception {
+ defaultIsisController.addRouterListener(isisRouterListener);
+ assertThat(defaultIsisController, is(notNullValue()));
+ }
+
+ /**
+ * Tests removeRouterListener() method.
+ */
+ @Test
+ public void testremoveRouterListener() throws Exception {
+ defaultIsisController.removeRouterListener(isisRouterListener);
+ assertThat(defaultIsisController, is(notNullValue()));
+ }
}
diff --git a/protocols/isis/ctl/src/test/java/org/onosproject/isis/controller/impl/DefaultIsisInterfaceTest.java b/protocols/isis/ctl/src/test/java/org/onosproject/isis/controller/impl/DefaultIsisInterfaceTest.java
index 7e7749f..fe8a57a 100644
--- a/protocols/isis/ctl/src/test/java/org/onosproject/isis/controller/impl/DefaultIsisInterfaceTest.java
+++ b/protocols/isis/ctl/src/test/java/org/onosproject/isis/controller/impl/DefaultIsisInterfaceTest.java
@@ -15,6 +15,10 @@
*/
package org.onosproject.isis.controller.impl;
+import org.easymock.EasyMock;
+import org.jboss.netty.buffer.ChannelBuffer;
+import org.jboss.netty.buffer.ChannelBuffers;
+import org.jboss.netty.channel.Channel;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
@@ -23,15 +27,30 @@
import org.onosproject.isis.controller.IsisInterface;
import org.onosproject.isis.controller.IsisInterfaceState;
import org.onosproject.isis.controller.IsisLsdb;
+import org.onosproject.isis.controller.IsisMessage;
import org.onosproject.isis.controller.IsisNeighbor;
import org.onosproject.isis.controller.IsisNetworkType;
+import org.onosproject.isis.controller.IsisPduType;
+import org.onosproject.isis.controller.IsisRouterType;
+import org.onosproject.isis.controller.impl.lsdb.DefaultIsisLsdb;
import org.onosproject.isis.io.isispacket.IsisHeader;
-import org.onosproject.isis.io.isispacket.pdu.HelloPdu;
+import org.onosproject.isis.io.isispacket.pdu.Csnp;
import org.onosproject.isis.io.isispacket.pdu.L1L2HelloPdu;
+import org.onosproject.isis.io.isispacket.pdu.LsPdu;
+import org.onosproject.isis.io.isispacket.pdu.P2PHelloPdu;
+import org.onosproject.isis.io.isispacket.pdu.Psnp;
+import org.onosproject.isis.io.isispacket.tlv.AdjacencyStateTlv;
+import org.onosproject.isis.io.isispacket.tlv.AreaAddressTlv;
+import org.onosproject.isis.io.isispacket.tlv.LspEntriesTlv;
+import org.onosproject.isis.io.isispacket.tlv.LspEntry;
+import org.onosproject.isis.io.isispacket.tlv.TlvHeader;
+import org.onosproject.isis.io.isispacket.tlv.TlvType;
+import java.util.ArrayList;
+import java.util.List;
import java.util.Set;
-import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.*;
import static org.junit.Assert.assertThat;
/**
@@ -39,16 +58,26 @@
*/
public class DefaultIsisInterfaceTest {
private final MacAddress macAddress = MacAddress.valueOf("AA:BB:CC:DD:EE:FF");
- private final Ip4Address ip4Address = Ip4Address.valueOf("10.10.10.10");
+ private final MacAddress macAddress1 = MacAddress.valueOf("AA:CC:CC:DD:EE:FF");
+ private final Ip4Address ip4Address = Ip4Address.valueOf("10.10.0.0");
private final byte[] mask = {
(byte) 255, (byte) 255, (byte) 255, (byte) 224
};
+ private final byte[] mask1 = {
+ (byte) 0, (byte) 0, (byte) 0, (byte) 0
+ };
private final String intSysName = "ROUTER";
private final String sysId = "1111.1111.1111";
private final String areaAddr = "49.002";
+ private final byte[] csnpBytes = {
+ 0, 67, 18, 52, 18, 52, 0,
+ 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, -1, -1, -1, -1,
+ -1, -1, 9, 32, 4, -81, 18, 52, 18, 52, 0, 18, 0, 0, 0,
+ 0, 0, 41, -92, -30, 4, -81, 41, 41, 41, 41, 41, 41, 0,
+ 0, 0, 0, 0, 1, 91, 126
+ };
private IsisInterfaceState resultIfState;
private DefaultIsisInterface defaultIsisInterface;
- private HelloPdu helloPdu;
private IsisHeader isisHeader;
private IsisInterface isisInterface;
private Set<MacAddress> resultSet;
@@ -60,18 +89,35 @@
private byte[] resultByteArr;
private String resultStr;
private IsisNetworkType resultNwType;
-
+ private List<Ip4Address> ip4Addresses = new ArrayList<>();
+ private DefaultIsisNeighbor defaultIsisNeighbor;
+ private IsisNeighbor result;
+ private IsisLsdb result1;
+ private Set<MacAddress> result2;
+ private Channel result3;
+ private IsisMessage isisMessage;
+ private IsisLsdb isisLsdb;
+ private Channel channel;
+ private L1L2HelloPdu helloPdu;
+ private LsPdu lsPdu;
+ private Csnp csnp;
+ private Psnp psnp;
+ private P2PHelloPdu p2PHelloPdu;
+ private boolean result4;
+ private String result5;
@Before
public void setUp() throws Exception {
+ channel = EasyMock.createNiceMock(Channel.class);
defaultIsisInterface = new DefaultIsisInterface();
+ defaultIsisInterface.setInterfaceMacAddress(macAddress);
isisHeader = new IsisHeader();
isisHeader.setIrpDiscriminator((byte) 1);
helloPdu = new L1L2HelloPdu(isisHeader);
isisInterface = new DefaultIsisInterface();
- resultNeighborList = new DefaultIsisNeighbor(helloPdu, isisInterface);
-
-
+ defaultIsisNeighbor = new DefaultIsisNeighbor(helloPdu, isisInterface);
+ defaultIsisNeighbor.setNeighborMacAddress(macAddress);
+ isisLsdb = new DefaultIsisLsdb();
}
@After
@@ -365,26 +411,6 @@
}
/**
- * Tests getLspId() getter method.
- */
- @Test
- public void testGetLspId() throws Exception {
- defaultIsisInterface.setLspId(sysId);
- resultStr = defaultIsisInterface.getLspId();
- assertThat(resultStr, is(sysId));
- }
-
- /**
- * Tests getLspId() setter method.
- */
- @Test
- public void testSetLspId() throws Exception {
- defaultIsisInterface.setLspId(sysId);
- resultStr = defaultIsisInterface.getLspId();
- assertThat(resultStr, is(sysId));
- }
-
- /**
* Tests holdingTime() getter method.
*/
@Test
@@ -483,4 +509,369 @@
resultStr = defaultIsisInterface.circuitId();
assertThat(resultStr, is(sysId));
}
+
+ /**
+ * Tests setAllConfiguredInterfaceIps() setter method.
+ */
+ @Test
+ public void testSetAllConfiguredInterfaceIps() throws Exception {
+ ip4Addresses.add(ip4Address);
+ defaultIsisInterface.setAllConfiguredInterfaceIps(ip4Addresses);
+ assertThat(defaultIsisInterface, is(notNullValue()));
+ }
+
+ /**
+ * Tests setAllConfiguredInterfaceIps() method.
+ */
+ @Test
+ public void testRemoveNeighbor() throws Exception {
+ defaultIsisInterface.removeNeighbor(defaultIsisNeighbor);
+ assertThat(defaultIsisInterface, is(notNullValue()));
+ }
+
+ /**
+ * Tests lookup() method.
+ */
+ @Test
+ public void testLookup() throws Exception {
+ result = defaultIsisInterface.lookup(defaultIsisNeighbor.neighborMacAddress());
+ assertThat(result, is(nullValue()));
+ }
+
+ /**
+ * Tests isisLsdb() method.
+ */
+ @Test
+ public void testIsisLsdb() throws Exception {
+ result1 = defaultIsisInterface.isisLsdb();
+ assertThat(result1, is(nullValue()));
+ }
+
+ /**
+ * Tests neighbors() method.
+ */
+ @Test
+ public void testNeighbors() throws Exception {
+ result2 = defaultIsisInterface.neighbors();
+ assertThat(result2, is(notNullValue()));
+ }
+
+ /**
+ * Tests channel() method.
+ */
+ @Test
+ public void testChannel() throws Exception {
+ result3 = defaultIsisInterface.channel();
+ assertThat(result3, is(nullValue()));
+ }
+
+ /**
+ * Tests processIsisMessage() method.
+ */
+ @Test
+ public void testProcessIsisMessage() throws Exception {
+ helloPdu = new L1L2HelloPdu(isisHeader);
+ helloPdu.setSourceMac(macAddress1);
+ helloPdu.setIsisPduType(IsisPduType.L2HELLOPDU.value());
+ defaultIsisInterface.setNetworkType(IsisNetworkType.BROADCAST);
+ isisMessage = helloPdu;
+ defaultIsisInterface.processIsisMessage(isisMessage, isisLsdb, channel);
+ assertThat(defaultIsisInterface, is(notNullValue()));
+ }
+
+ /**
+ * Tests processIsisMessage() method.
+ */
+ @Test(expected = Exception.class)
+ public void testProcessIsisMessage1() throws Exception {
+ lsPdu = new LsPdu(isisHeader);
+ lsPdu.setSourceMac(macAddress1);
+ lsPdu.setIsisPduType(IsisPduType.L2LSPDU.value());
+ isisMessage = lsPdu;
+ defaultIsisInterface.processIsisMessage(isisMessage, isisLsdb, channel);
+ assertThat(defaultIsisInterface, is(notNullValue()));
+ }
+
+ /**
+ * Tests processIsisMessage() method.
+ */
+ @Test
+ public void testProcessIsisMessage2() throws Exception {
+ csnp = new Csnp(isisHeader);
+ csnp.setSourceMac(macAddress1);
+ csnp.setIsisPduType(IsisPduType.L2CSNP.value());
+ isisMessage = csnp;
+ defaultIsisInterface.processIsisMessage(isisMessage, isisLsdb, channel);
+ assertThat(defaultIsisInterface, is(notNullValue()));
+ }
+
+ /**
+ * Tests processIsisMessage() method.
+ */
+ @Test
+ public void testProcessIsisMessage3() throws Exception {
+ psnp = new Psnp(isisHeader);
+ psnp.setSourceMac(macAddress1);
+ psnp.setIsisPduType(IsisPduType.L2PSNP.value());
+ isisMessage = psnp;
+ defaultIsisInterface.processIsisMessage(isisMessage, isisLsdb, channel);
+ assertThat(defaultIsisInterface, is(notNullValue()));
+ }
+
+ /**
+ * Tests processIsisMessage() method.
+ */
+ @Test
+ public void testProcessIsisMessage4() throws Exception {
+ p2PHelloPdu = new P2PHelloPdu(isisHeader);
+ p2PHelloPdu.setSourceMac(macAddress1);
+ p2PHelloPdu.setIsisPduType(IsisPduType.P2PHELLOPDU.value());
+ defaultIsisInterface.setNetworkType(IsisNetworkType.P2P);
+ isisMessage = p2PHelloPdu;
+ defaultIsisInterface.processIsisMessage(isisMessage, isisLsdb, channel);
+ assertThat(defaultIsisInterface, is(notNullValue()));
+ }
+
+ /**
+ * Tests validateHelloMessage() method.
+ */
+ @Test
+ public void testValidateHelloMessage() throws Exception {
+ helloPdu = new L1L2HelloPdu(isisHeader);
+ result4 = defaultIsisInterface.validateHelloMessage(helloPdu);
+ assertThat(result4, is(false));
+ }
+
+ /**
+ * Tests processL1L2HelloPduMessage() method.
+ */
+ @Test(expected = Exception.class)
+ public void testProcessL1L2HelloPduMessage() throws Exception {
+ helloPdu = new L1L2HelloPdu(isisHeader);
+ helloPdu.setSourceMac(macAddress1);
+ helloPdu.setCircuitType((byte) IsisRouterType.L2.value());
+ defaultIsisInterface.processL1L2HelloPduMessage(helloPdu, channel);
+ assertThat(defaultIsisInterface, is(notNullValue()));
+ }
+
+ /**
+ * Tests processP2pHelloPduMessage() method.
+ */
+ @Test(expected = Exception.class)
+ public void testProcessP2pHelloPduMessagee() throws Exception {
+ defaultIsisInterface.setSystemId(sysId);
+ p2PHelloPdu = new P2PHelloPdu(isisHeader);
+ p2PHelloPdu.setIsisPduType(IsisPduType.P2PHELLOPDU.value());
+ p2PHelloPdu.setSourceMac(macAddress1);
+ p2PHelloPdu.setCircuitType((byte) IsisRouterType.L2.value());
+ defaultIsisInterface.setNetworkType(IsisNetworkType.P2P);
+ defaultIsisInterface.processIsisMessage(p2PHelloPdu, isisLsdb, channel);
+ assertThat(defaultIsisInterface, is(notNullValue()));
+ }
+
+ /**
+ * Tests processP2pHelloPduMessage() method.
+ */
+ @Test(expected = Exception.class)
+ public void testProcessP2pHelloPduMessagee1() throws Exception {
+ defaultIsisInterface.setSystemId(sysId);
+ p2PHelloPdu = new P2PHelloPdu(isisHeader);
+ p2PHelloPdu.setIsisPduType(IsisPduType.P2PHELLOPDU.value());
+ p2PHelloPdu.setSourceMac(macAddress1);
+ p2PHelloPdu.setCircuitType((byte) IsisRouterType.L2.value());
+ defaultIsisInterface.setNetworkType(IsisNetworkType.P2P);
+ defaultIsisInterface.setReservedPacketCircuitType(IsisRouterType.L2.value());
+ defaultIsisInterface.setAllConfiguredInterfaceIps(ip4Addresses);
+ defaultIsisInterface.setInterfaceIpAddress(ip4Address);
+ defaultIsisInterface.setNetworkMask(mask1);
+ defaultIsisInterface.processIsisMessage(p2PHelloPdu, isisLsdb, channel);
+ assertThat(defaultIsisInterface, is(notNullValue()));
+ }
+
+ /**
+ * Tests processP2pHelloPduMessage() method.
+ */
+ @Test(expected = Exception.class)
+ public void testProcessP2pHelloPduMessagee2() throws Exception {
+ defaultIsisInterface.setSystemId(sysId);
+ p2PHelloPdu = new P2PHelloPdu(isisHeader);
+ TlvHeader tlvHeader = new TlvHeader();
+ tlvHeader.setTlvType(TlvType.AREAADDRESS.value());
+ AreaAddressTlv areaAddressTlv = new AreaAddressTlv(tlvHeader);
+ areaAddressTlv.addAddress(areaAddr);
+ p2PHelloPdu.addTlv(areaAddressTlv);
+ p2PHelloPdu.setIsisPduType(IsisPduType.P2PHELLOPDU.value());
+ p2PHelloPdu.setSourceMac(macAddress1);
+ p2PHelloPdu.setCircuitType((byte) IsisRouterType.L1.value());
+ defaultIsisInterface.setNetworkType(IsisNetworkType.P2P);
+ defaultIsisInterface.setReservedPacketCircuitType(IsisRouterType.L1.value());
+ defaultIsisInterface.setAreaAddress(areaAddr);
+ defaultIsisInterface.setAllConfiguredInterfaceIps(ip4Addresses);
+ defaultIsisInterface.setInterfaceIpAddress(ip4Address);
+ defaultIsisInterface.setNetworkMask(mask1);
+ defaultIsisInterface.processIsisMessage(p2PHelloPdu, isisLsdb, channel);
+ assertThat(defaultIsisInterface, is(notNullValue()));
+ }
+
+ /**
+ * Tests processP2pHelloPduMessage() method.
+ */
+ @Test(expected = Exception.class)
+ public void testProcessP2pHelloPduMessagee3() throws Exception {
+ defaultIsisInterface.setSystemId(sysId);
+ p2PHelloPdu = new P2PHelloPdu(isisHeader);
+ TlvHeader tlvHeader = new TlvHeader();
+ tlvHeader.setTlvType(TlvType.ADJACENCYSTATE.value());
+ AdjacencyStateTlv adjacencyStateTlv = new AdjacencyStateTlv(tlvHeader);
+ adjacencyStateTlv.setNeighborSystemId(sysId);
+ adjacencyStateTlv.setAdjacencyType((byte) IsisInterfaceState.DOWN.value());
+ p2PHelloPdu.addTlv(adjacencyStateTlv);
+ tlvHeader = new TlvHeader();
+ tlvHeader.setTlvType(TlvType.AREAADDRESS.value());
+ AreaAddressTlv areaAddressTlv = new AreaAddressTlv(tlvHeader);
+ areaAddressTlv.addAddress(areaAddr);
+ p2PHelloPdu.addTlv(areaAddressTlv);
+ p2PHelloPdu.setIsisPduType(IsisPduType.P2PHELLOPDU.value());
+ p2PHelloPdu.setSourceMac(macAddress1);
+ p2PHelloPdu.setCircuitType((byte) IsisRouterType.L1.value());
+ defaultIsisInterface.setNetworkType(IsisNetworkType.P2P);
+ defaultIsisInterface.setReservedPacketCircuitType(IsisRouterType.L1.value());
+ defaultIsisInterface.setAreaAddress(areaAddr);
+ defaultIsisInterface.setAllConfiguredInterfaceIps(ip4Addresses);
+ defaultIsisInterface.setInterfaceIpAddress(ip4Address);
+ defaultIsisInterface.setNetworkMask(mask1);
+ defaultIsisInterface.processIsisMessage(p2PHelloPdu, isisLsdb, channel);
+ assertThat(defaultIsisInterface, is(notNullValue()));
+ }
+
+ /**
+ * Tests processP2pHelloPduMessage() method.
+ */
+ @Test(expected = Exception.class)
+ public void testProcessP2pHelloPduMessagee4() throws Exception {
+ defaultIsisInterface.setSystemId(sysId);
+ p2PHelloPdu = new P2PHelloPdu(isisHeader);
+ TlvHeader tlvHeader = new TlvHeader();
+ tlvHeader.setTlvType(TlvType.ADJACENCYSTATE.value());
+ AdjacencyStateTlv adjacencyStateTlv = new AdjacencyStateTlv(tlvHeader);
+ adjacencyStateTlv.setNeighborSystemId(sysId);
+ adjacencyStateTlv.setAdjacencyType((byte) IsisInterfaceState.INITIAL.value());
+ p2PHelloPdu.addTlv(adjacencyStateTlv);
+ tlvHeader = new TlvHeader();
+ tlvHeader.setTlvType(TlvType.AREAADDRESS.value());
+ AreaAddressTlv areaAddressTlv = new AreaAddressTlv(tlvHeader);
+ areaAddressTlv.addAddress(areaAddr);
+ p2PHelloPdu.addTlv(areaAddressTlv);
+ p2PHelloPdu.setIsisPduType(IsisPduType.P2PHELLOPDU.value());
+ p2PHelloPdu.setSourceMac(macAddress1);
+ p2PHelloPdu.setCircuitType((byte) IsisRouterType.L1.value());
+ defaultIsisInterface.setNetworkType(IsisNetworkType.P2P);
+ defaultIsisInterface.setReservedPacketCircuitType(IsisRouterType.L1L2.value());
+ defaultIsisInterface.setAreaAddress(areaAddr);
+ defaultIsisInterface.setAllConfiguredInterfaceIps(ip4Addresses);
+ defaultIsisInterface.setInterfaceIpAddress(ip4Address);
+ defaultIsisInterface.setNetworkMask(mask1);
+ defaultIsisInterface.processIsisMessage(p2PHelloPdu, isisLsdb, channel);
+ assertThat(defaultIsisInterface, is(notNullValue()));
+ }
+
+ @Test(expected = Exception.class)
+ public void testProcessP2pHelloPduMessagee5() throws Exception {
+ defaultIsisInterface.setSystemId(sysId);
+ p2PHelloPdu = new P2PHelloPdu(isisHeader);
+ TlvHeader tlvHeader = new TlvHeader();
+ tlvHeader.setTlvType(TlvType.ADJACENCYSTATE.value());
+ AdjacencyStateTlv adjacencyStateTlv = new AdjacencyStateTlv(tlvHeader);
+ adjacencyStateTlv.setNeighborSystemId(sysId);
+ adjacencyStateTlv.setAdjacencyType((byte) IsisInterfaceState.UP.value());
+ p2PHelloPdu.addTlv(adjacencyStateTlv);
+ tlvHeader = new TlvHeader();
+ tlvHeader.setTlvType(TlvType.AREAADDRESS.value());
+ AreaAddressTlv areaAddressTlv = new AreaAddressTlv(tlvHeader);
+ areaAddressTlv.addAddress(areaAddr);
+ p2PHelloPdu.addTlv(areaAddressTlv);
+ p2PHelloPdu.setIsisPduType(IsisPduType.P2PHELLOPDU.value());
+ p2PHelloPdu.setSourceMac(macAddress1);
+ p2PHelloPdu.setCircuitType((byte) IsisRouterType.L2.value());
+ defaultIsisInterface.setNetworkType(IsisNetworkType.P2P);
+ defaultIsisInterface.setReservedPacketCircuitType(IsisRouterType.L1L2.value());
+ defaultIsisInterface.setAreaAddress(areaAddr);
+ defaultIsisInterface.setAllConfiguredInterfaceIps(ip4Addresses);
+ defaultIsisInterface.setInterfaceIpAddress(ip4Address);
+ defaultIsisInterface.setNetworkMask(mask1);
+ defaultIsisInterface.processIsisMessage(p2PHelloPdu, isisLsdb, channel);
+ assertThat(defaultIsisInterface, is(notNullValue()));
+ }
+
+ /**
+ * Tests startHelloSender() method.
+ */
+ @Test(expected = Exception.class)
+ public void testStartHelloSender() throws Exception {
+ defaultIsisInterface.startHelloSender(channel);
+ assertThat(defaultIsisInterface, is(notNullValue()));
+ }
+
+ /**
+ * Tests lspKeyP2P() method.
+ */
+ @Test
+ public void testLspKeyP2P() throws Exception {
+ result5 = defaultIsisInterface.lspKeyP2P(sysId);
+ assertThat(result5, is(notNullValue()));
+ }
+
+ /**
+ * Tests processLsPduMessage() method.
+ */
+ @Test
+ public void testProcessLsPduMessage() throws Exception {
+ lsPdu = new LsPdu(isisHeader);
+ lsPdu.setSourceMac(macAddress1);
+ lsPdu.setIsisPduType(IsisPduType.L2LSPDU.value());
+ lsPdu.setLspId(sysId);
+ isisMessage = lsPdu;
+ defaultIsisInterface.setNetworkType(IsisNetworkType.P2P);
+ defaultIsisInterface.setSystemId(sysId);
+ defaultIsisInterface.processIsisMessage(isisMessage, isisLsdb, channel);
+ assertThat(defaultIsisInterface, is(notNullValue()));
+ }
+
+ /**
+ * Tests processPsnPduMessage() method.
+ */
+ @Test
+ public void testProcessPsnPduMessage() throws Exception {
+ psnp = new Psnp(isisHeader);
+ psnp.setSourceMac(macAddress1);
+ psnp.setIsisPduType(IsisPduType.L2PSNP.value());
+ TlvHeader tlvHeader = new TlvHeader();
+ tlvHeader.setTlvType(TlvType.LSPENTRY.value());
+ tlvHeader.setTlvLength(0);
+ LspEntriesTlv lspEntriesTlv = new LspEntriesTlv(tlvHeader);
+ LspEntry lspEntry = new LspEntry();
+ lspEntry.setLspChecksum(0);
+ lspEntry.setLspSequenceNumber(0);
+ lspEntry.setRemainingTime(0);
+ lspEntriesTlv.addLspEntry(lspEntry);
+ psnp.addTlv(lspEntriesTlv);
+ isisMessage = psnp;
+ defaultIsisInterface.processIsisMessage(isisMessage, isisLsdb, channel);
+ assertThat(defaultIsisInterface, is(notNullValue()));
+ }
+
+ /**
+ * Tests processCsnPduMessage() method.
+ */
+ @Test(expected = Exception.class)
+ public void testProcessCsnPduMessage() throws Exception {
+ ChannelBuffer channelBuffer = ChannelBuffers.copiedBuffer(csnpBytes);
+ csnp = new Csnp(isisHeader);
+ csnp.readFrom(channelBuffer);
+ csnp.setSourceMac(macAddress1);
+ csnp.setIsisPduType(IsisPduType.L2CSNP.value());
+ isisMessage = csnp;
+ defaultIsisInterface.processIsisMessage(isisMessage, isisLsdb, channel);
+ assertThat(defaultIsisInterface, is(notNullValue()));
+ }
}
diff --git a/protocols/isis/ctl/src/test/java/org/onosproject/isis/controller/impl/DefaultIsisProcessTest.java b/protocols/isis/ctl/src/test/java/org/onosproject/isis/controller/impl/DefaultIsisProcessTest.java
index 3c16a14..95717cd 100644
--- a/protocols/isis/ctl/src/test/java/org/onosproject/isis/controller/impl/DefaultIsisProcessTest.java
+++ b/protocols/isis/ctl/src/test/java/org/onosproject/isis/controller/impl/DefaultIsisProcessTest.java
@@ -36,6 +36,7 @@
private final String processId = "1";
private IsisProcess isisProcess;
private String result;
+ private IsisProcess defaultIsisProcess;
private IsisInterface isisInterface;
private List<IsisInterface> isisInterfaceList;
private List<IsisInterface> result1;
@@ -44,6 +45,7 @@
public void setUp() throws Exception {
isisProcess = new DefaultIsisProcess();
isisInterface = EasyMock.createNiceMock(DefaultIsisInterface.class);
+ defaultIsisProcess = new DefaultIsisProcess();
}
@After
@@ -90,4 +92,4 @@
result1 = isisProcess.isisInterfaceList();
assertThat(result1, is(nullValue()));
}
-}
+}
\ No newline at end of file
diff --git a/protocols/isis/ctl/src/test/java/org/onosproject/isis/controller/impl/IsisChannelHandlerTest.java b/protocols/isis/ctl/src/test/java/org/onosproject/isis/controller/impl/IsisChannelHandlerTest.java
index 1644b6e..9081cdf 100644
--- a/protocols/isis/ctl/src/test/java/org/onosproject/isis/controller/impl/IsisChannelHandlerTest.java
+++ b/protocols/isis/ctl/src/test/java/org/onosproject/isis/controller/impl/IsisChannelHandlerTest.java
@@ -23,10 +23,14 @@
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
+import org.onlab.packet.Ip4Address;
+import org.onosproject.isis.controller.IsisInterface;
import org.onosproject.isis.controller.IsisMessage;
+import org.onosproject.isis.controller.IsisNetworkType;
import org.onosproject.isis.controller.IsisProcess;
import org.onosproject.isis.io.isispacket.pdu.L1L2HelloPdu;
+import java.util.ArrayList;
import java.util.List;
import static org.hamcrest.CoreMatchers.is;
@@ -43,12 +47,14 @@
private IsisChannelHandler isisChannelHandler;
private Controller controller;
private IsisProcess isisProcess;
- private List<IsisProcess> isisProcessList;
+ private List<IsisProcess> isisProcessList = new ArrayList();
private ChannelHandlerContext channelHandlerContext;
private ChannelStateEvent channelStateEvent;
private ExceptionEvent exceptionEvent;
private MessageEvent messageEvent;
private IsisMessage isisMessage;
+ private List<IsisInterface> isisInterfaceList = new ArrayList<>();
+ private Ip4Address ip4Address = Ip4Address.valueOf("10.10.10.10");
@Before
public void setUp() throws Exception {
@@ -71,7 +77,7 @@
/**
* Tests initializeInterfaceMap() method.
*/
- @Test(expected = Exception.class)
+ @Test
public void testInitializeInterfaceMap() throws Exception {
isisChannelHandler.initializeInterfaceMap();
assertThat(isisChannelHandler, is(notNullValue()));
@@ -82,6 +88,32 @@
*/
@Test(expected = Exception.class)
public void testUpdateInterfaceMap() throws Exception {
+ IsisInterface isisInterface = new DefaultIsisInterface();
+ IsisInterface isisInterface1 = new DefaultIsisInterface();
+ isisInterface.setInterfaceIpAddress(ip4Address);
+ isisInterface.setInterfaceIndex(1);
+ isisInterfaceList.add(isisInterface);
+ IsisProcess isisProcess = new DefaultIsisProcess();
+ isisProcess.setIsisInterfaceList(isisInterfaceList);
+ isisProcessList.add(isisProcess);
+ isisChannelHandler.updateInterfaceMap(isisProcessList);
+ assertThat(isisChannelHandler, is(notNullValue()));
+ isisProcessList = new ArrayList<>();
+ isisInterface1.setInterfaceIpAddress(ip4Address);
+ isisInterface1.setInterfaceIndex(1);
+ isisInterface1.setInterfaceIpAddress(ip4Address);
+ isisInterface1.setInterfaceIndex(1);
+ isisInterface1.setSystemId("9999.9999.9999");
+ isisInterface1.setIntermediateSystemName("router");
+ isisInterface1.setReservedPacketCircuitType(3);
+ isisInterface1.setCircuitId("10");
+ isisInterface1.setNetworkType(IsisNetworkType.BROADCAST);
+ isisInterface1.setAreaAddress("490001");
+ isisInterface1.setHoldingTime(50);
+ isisInterface1.setHelloInterval(10);
+ isisInterfaceList.add(isisInterface1);
+ isisProcess.setIsisInterfaceList(isisInterfaceList);
+ isisProcessList.add(isisProcess);
isisChannelHandler.updateInterfaceMap(isisProcessList);
assertThat(isisChannelHandler, is(notNullValue()));
}
@@ -89,7 +121,7 @@
/**
* Tests initializeInterfaceIpList() method.
*/
- @Test(expected = Exception.class)
+ @Test
public void testInitializeInterfaceIpList() throws Exception {
isisChannelHandler.initializeInterfaceIpList();
assertThat(isisChannelHandler, is(notNullValue()));
diff --git a/protocols/isis/ctl/src/test/java/org/onosproject/isis/controller/impl/IsisHelloPduSenderTest.java b/protocols/isis/ctl/src/test/java/org/onosproject/isis/controller/impl/IsisHelloPduSenderTest.java
index 85228b2..ef089a1 100644
--- a/protocols/isis/ctl/src/test/java/org/onosproject/isis/controller/impl/IsisHelloPduSenderTest.java
+++ b/protocols/isis/ctl/src/test/java/org/onosproject/isis/controller/impl/IsisHelloPduSenderTest.java
@@ -58,7 +58,7 @@
/**
* Tests run() method.
*/
- @Test
+ @Test(expected = Exception.class)
public void testRun() throws Exception {
isisInterface.setNetworkType(IsisNetworkType.P2P);
isisInterface.setCircuitId(circuitId);
diff --git a/protocols/isis/ctl/src/test/java/org/onosproject/isis/controller/impl/IsisMessageDecoderTest.java b/protocols/isis/ctl/src/test/java/org/onosproject/isis/controller/impl/IsisMessageDecoderTest.java
index a2c32b9..4948ec6 100644
--- a/protocols/isis/ctl/src/test/java/org/onosproject/isis/controller/impl/IsisMessageDecoderTest.java
+++ b/protocols/isis/ctl/src/test/java/org/onosproject/isis/controller/impl/IsisMessageDecoderTest.java
@@ -24,11 +24,14 @@
public class IsisMessageDecoderTest {
private final byte[] hello = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-125, 20, 1, 0, 17, 1, 0, 0,
2, 51, 51, 51, 51, 51, 51, 0, 100, 5, -39, -126, 1, 4, 3,
73, 0, 0, -127, 1, -52, -124, 4, -64, -88, 56, 102
};
+ private final byte[] array2 = {0, 0, 0, 0, 0, 0, 0};
private final String id = "127.0.0.1";
+ private byte[] array1;
private IsisMessageDecoder isisMessageDecoder;
private ChannelHandlerContext ctx;
private Channel channel;
@@ -49,7 +52,8 @@
public void testDecode() throws Exception {
channel = EasyMock.createMock(Channel.class);
socketAddress = InetSocketAddress.createUnresolved(id, 7000);
- byte[] array = IsisUtil.getPaddingTlvs(hello.length);
+ byte[] array = IsisUtil.getPaddingTlvs(hello.length - 17);
+ array1 = Bytes.concat(hello, array);
channelBuffer = ChannelBuffers.copiedBuffer(Bytes.concat(hello, array));
assertThat(isisMessageDecoder.decode(ctx, channel, channelBuffer), is(nullValue()));
}
diff --git a/protocols/isis/ctl/src/test/java/org/onosproject/isis/controller/impl/lsdb/DefaultIsisLsdbTest.java b/protocols/isis/ctl/src/test/java/org/onosproject/isis/controller/impl/lsdb/DefaultIsisLsdbTest.java
index d1c04fe..bc67ad3 100644
--- a/protocols/isis/ctl/src/test/java/org/onosproject/isis/controller/impl/lsdb/DefaultIsisLsdbTest.java
+++ b/protocols/isis/ctl/src/test/java/org/onosproject/isis/controller/impl/lsdb/DefaultIsisLsdbTest.java
@@ -22,8 +22,13 @@
import org.onosproject.isis.controller.IsisLsdbAge;
import org.onosproject.isis.controller.IsisPduType;
import org.onosproject.isis.controller.LspWrapper;
+import org.onosproject.isis.controller.impl.DefaultIsisInterface;
+import org.onosproject.isis.io.isispacket.IsisHeader;
+import org.onosproject.isis.io.isispacket.pdu.AttachedToOtherAreas;
+import org.onosproject.isis.io.isispacket.pdu.LsPdu;
import org.onosproject.isis.io.util.IsisConstants;
+import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
@@ -37,19 +42,27 @@
private final int l1LspSeqNo = IsisConstants.STARTLSSEQUENCENUM;
private final int l2LspSeqNo = IsisConstants.STARTLSSEQUENCENUM;
private final String srcId = "1111.1111.1111";
-
private DefaultIsisLsdb defaultIsisLsdb;
private IsisLsdbAge lsdbAge = null;
-
-
private int resultInt;
private Map<String, LspWrapper> resultMap = new ConcurrentHashMap<>();
private IsisLsdb resultLsdb;
private LspWrapper resultLspWrapper;
-
+ private List<LspWrapper> lspWrapperList;
+ private LsPdu lsPdu;
+ private IsisHeader isisHeader;
+ private DefaultIsisInterface defaultIsisInterface;
+ private String lspId = "1234.1234.1234.00-00";
+ private String result;
@Before
public void setUp() throws Exception {
+ defaultIsisInterface = new DefaultIsisInterface();
+ isisHeader = new IsisHeader();
+ lsPdu = new LsPdu(isisHeader);
+ lsPdu.setLspId(lspId);
+ lsPdu.setAttachedToOtherAreas(AttachedToOtherAreas.DEFAULTMETRIC);
+ lsPdu.setIsisPduType(IsisPduType.L1LSPDU.value());
defaultIsisLsdb = new DefaultIsisLsdb();
}
@@ -129,5 +142,60 @@
resultLspWrapper = defaultIsisLsdb.findLsp(IsisPduType.L1HELLOPDU, srcId);
assertThat(resultLspWrapper, is(nullValue()));
}
+
+ /**
+ * Tests allLspHeaders() method.
+ */
+ @Test
+ public void testAllLspHeaders() throws Exception {
+ defaultIsisLsdb.addLsp(lsPdu, false, defaultIsisInterface);
+ lspWrapperList = defaultIsisLsdb.allLspHeaders(true);
+ assertThat(lspWrapperList, is(notNullValue()));
+
+ defaultIsisLsdb.addLsp(lsPdu, true, defaultIsisInterface);
+ lspWrapperList = defaultIsisLsdb.allLspHeaders(true);
+ assertThat(lspWrapperList, is(notNullValue()));
+ }
+
+ /**
+ * Tests isNewerOrSameLsp() method.
+ */
+ @Test
+ public void testIsNewerOrSameLsp() throws Exception {
+ result = defaultIsisLsdb.isNewerOrSameLsp(lsPdu, lsPdu);
+ assertThat(result, is("same"));
+ }
+
+ /**
+ * Tests lsSequenceNumber() method.
+ */
+ @Test
+ public void testLsSequenceNumber() throws Exception {
+ resultInt = defaultIsisLsdb.lsSequenceNumber(IsisPduType.L1LSPDU);
+ assertThat(resultInt, is(1));
+
+ resultInt = defaultIsisLsdb.lsSequenceNumber(IsisPduType.L2LSPDU);
+ assertThat(resultInt, is(1));
+
+ resultInt = defaultIsisLsdb.lsSequenceNumber(IsisPduType.L1CSNP);
+ assertThat(resultInt, is(1));
+ }
+
+ /**
+ * Tests deleteLsp() method.
+ */
+ @Test
+ public void testdeleteLsp() throws Exception {
+ defaultIsisLsdb.deleteLsp(lsPdu);
+ assertThat(defaultIsisLsdb, is(notNullValue()));
+
+ lsPdu.setIsisPduType(IsisPduType.L2LSPDU.value());
+ defaultIsisLsdb.deleteLsp(lsPdu);
+ assertThat(defaultIsisLsdb, is(notNullValue()));
+
+ lsPdu.setIsisPduType(IsisPduType.L1CSNP.value());
+ defaultIsisLsdb.deleteLsp(lsPdu);
+ assertThat(defaultIsisLsdb, is(notNullValue()));
+ }
}
diff --git a/protocols/isis/ctl/src/test/java/org/onosproject/isis/controller/impl/lsdb/DefaultLspWrapperTest.java b/protocols/isis/ctl/src/test/java/org/onosproject/isis/controller/impl/lsdb/DefaultLspWrapperTest.java
index 617dece..02eed12 100644
--- a/protocols/isis/ctl/src/test/java/org/onosproject/isis/controller/impl/lsdb/DefaultLspWrapperTest.java
+++ b/protocols/isis/ctl/src/test/java/org/onosproject/isis/controller/impl/lsdb/DefaultLspWrapperTest.java
@@ -19,7 +19,11 @@
import org.junit.Before;
import org.junit.Test;
import org.onosproject.isis.controller.IsisInterface;
+import org.onosproject.isis.controller.IsisLsdbAge;
+import org.onosproject.isis.controller.IsisPduType;
import org.onosproject.isis.controller.impl.DefaultIsisInterface;
+import org.onosproject.isis.io.isispacket.IsisHeader;
+import org.onosproject.isis.io.isispacket.pdu.LsPdu;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.CoreMatchers.notNullValue;
@@ -36,11 +40,20 @@
private int result1;
private IsisInterface isisInterface;
private IsisInterface result2;
+ private IsisPduType isisPduType;
+ private boolean result3;
+ private LsPdu lsPdu;
+ private LsPdu pdu;
+ private DefaultIsisLsdbAge defaultIsisLsdbAge;
+ private IsisLsdbAge lsdbAge;
@Before
public void setUp() throws Exception {
defaultLspWrapper = new DefaultLspWrapper();
isisInterface = new DefaultIsisInterface();
+ pdu = new LsPdu(new IsisHeader());
+ defaultIsisLsdbAge = new DefaultIsisLsdbAge();
+ defaultIsisLsdbAge.startDbAging();
}
@After
@@ -108,4 +121,169 @@
assertThat(result2, is(notNullValue()));
}
+ /**
+ * Tests ageCounterWhenReceived() getter method.
+ */
+ @Test
+ public void testAgeCounterWhenReceived() throws Exception {
+ defaultLspWrapper.setAgeCounterWhenReceived(1);
+ result1 = defaultLspWrapper.ageCounterWhenReceived();
+ assertThat(result1, is(notNullValue()));
+ }
+
+ /**
+ * Tests ageCounterWhenReceived() setter method.
+ */
+ @Test
+ public void testSetAgeCounterWhenReceived() throws Exception {
+ defaultLspWrapper.setAgeCounterWhenReceived(1);
+ result1 = defaultLspWrapper.ageCounterWhenReceived();
+ assertThat(result1, is(notNullValue()));
+ }
+
+ /**
+ * Tests ageCounterRollOverWhenAdded() getter method.
+ */
+ @Test
+ public void testAgeCounterRollOverWhenAdded() throws Exception {
+ defaultLspWrapper.setAgeCounterRollOverWhenAdded(1);
+ result1 = defaultLspWrapper.ageCounterRollOverWhenAdded();
+ assertThat(result1, is(notNullValue()));
+ }
+
+ /**
+ * Tests ageCounterRollOverWhenAdded() setter method.
+ */
+ @Test
+ public void testSetAgeCounterRollOverWhenAdded() throws Exception {
+ defaultLspWrapper.setAgeCounterRollOverWhenAdded(1);
+ result1 = defaultLspWrapper.ageCounterRollOverWhenAdded();
+ assertThat(result1, is(notNullValue()));
+ }
+
+ /**
+ * Tests lspType() getter method.
+ */
+ @Test
+ public void testLspType() throws Exception {
+ defaultLspWrapper.setLspType(IsisPduType.L1LSPDU);
+ isisPduType = defaultLspWrapper.lspType();
+ assertThat(isisPduType, is(IsisPduType.L1LSPDU));
+ }
+
+ /**
+ * Tests lspType() setter method.
+ */
+ @Test
+ public void testSetLspType() throws Exception {
+ defaultLspWrapper.setLspType(IsisPduType.L1LSPDU);
+ isisPduType = defaultLspWrapper.lspType();
+ assertThat(isisPduType, is(IsisPduType.L1LSPDU));
+ }
+
+ /**
+ * Tests isSelfOriginated() getter method.
+ */
+ @Test
+ public void testIsSelfOriginated() throws Exception {
+ defaultLspWrapper.setSelfOriginated(true);
+ result3 = defaultLspWrapper.isSelfOriginated();
+ assertThat(result3, is(true));
+ }
+
+ /**
+ * Tests isSelfOriginated() setter method.
+ */
+ @Test
+ public void testSetSelfOriginated() throws Exception {
+ defaultLspWrapper.setSelfOriginated(true);
+ result3 = defaultLspWrapper.isSelfOriginated();
+ assertThat(result3, is(true));
+ }
+
+ /**
+ * Tests binNumber() getter method.
+ */
+ @Test
+ public void testBinNumber() throws Exception {
+ defaultLspWrapper.setBinNumber(1);
+ result1 = defaultLspWrapper.binNumber();
+ assertThat(result1, is(1));
+ }
+
+ /**
+ * Tests binNumber() setter method.
+ */
+ @Test
+ public void testSetBinNumber() throws Exception {
+ defaultLspWrapper.setBinNumber(1);
+ result1 = defaultLspWrapper.binNumber();
+ assertThat(result1, is(1));
+ }
+
+ /**
+ * Tests lsPdu() getter method.
+ */
+ @Test
+ public void testLsPdu() throws Exception {
+ defaultLspWrapper.setLsPdu(pdu);
+ lsPdu = defaultLspWrapper.lsPdu();
+ assertThat(lsPdu, is(pdu));
+ }
+
+ /**
+ * Tests lsPdu() setter method.
+ */
+ @Test
+ public void testSetLsPdu() throws Exception {
+ defaultLspWrapper.setLsPdu(pdu);
+ lsPdu = defaultLspWrapper.lsPdu();
+ assertThat(lsPdu, is(pdu));
+ }
+
+ /**
+ * Tests lsdbAge() getter method.
+ */
+ @Test
+ public void testlsdbAge() throws Exception {
+ defaultLspWrapper.setLsdbAge(defaultIsisLsdbAge);
+ lsdbAge = defaultLspWrapper.lsdbAge();
+ assertThat(lsdbAge, is(defaultIsisLsdbAge));
+ }
+
+ /**
+ * Tests lsdbAge() setter method.
+ */
+ @Test
+ public void testSetLsdbAge() throws Exception {
+ defaultLspWrapper.setLsdbAge(defaultIsisLsdbAge);
+ lsdbAge = defaultLspWrapper.lsdbAge();
+ assertThat(lsdbAge, is(defaultIsisLsdbAge));
+ }
+
+ /**
+ * Tests remainingLifetime() getter method.
+ */
+ @Test
+ public void testRemainingLifetime() throws Exception {
+ defaultLspWrapper.setLsdbAge(defaultIsisLsdbAge);
+ defaultLspWrapper.setAgeCounterWhenReceived(1);
+ defaultLspWrapper.currentAge();
+ defaultLspWrapper.setRemainingLifetime(1);
+ result1 = defaultLspWrapper.remainingLifetime();
+ assertThat(result1, is(1));
+ }
+
+ /**
+ * Tests remainingLifetime() setter method.
+ */
+ @Test
+ public void testSetRemainingLifetime() throws Exception {
+ defaultLspWrapper.setLsdbAge(defaultIsisLsdbAge);
+ defaultLspWrapper.setAgeCounterWhenReceived(1);
+ defaultLspWrapper.currentAge();
+ defaultLspWrapper.setRemainingLifetime(1);
+ result1 = defaultLspWrapper.remainingLifetime();
+ assertThat(result1, is(1));
+ }
}
\ No newline at end of file
diff --git a/protocols/isis/ctl/src/test/java/org/onosproject/isis/controller/impl/lsdb/IsisLspQueueConsumerTest.java b/protocols/isis/ctl/src/test/java/org/onosproject/isis/controller/impl/lsdb/IsisLspQueueConsumerTest.java
index 2e592af..b47bd3b 100644
--- a/protocols/isis/ctl/src/test/java/org/onosproject/isis/controller/impl/lsdb/IsisLspQueueConsumerTest.java
+++ b/protocols/isis/ctl/src/test/java/org/onosproject/isis/controller/impl/lsdb/IsisLspQueueConsumerTest.java
@@ -18,7 +18,11 @@
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
+import org.onosproject.isis.controller.impl.DefaultIsisInterface;
+import java.net.InetSocketAddress;
+import java.net.SocketAddress;
+import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import static org.hamcrest.CoreMatchers.is;
@@ -31,10 +35,22 @@
public class IsisLspQueueConsumerTest {
private IsisLspQueueConsumer isisLspQueueConsumer;
- private BlockingQueue blockingQueue;
+ private BlockingQueue blockingQueue = new ArrayBlockingQueue(1024);
+ private DefaultLspWrapper lspWrapper;
+ private DefaultLspWrapper lspWrapper1;
+ private SocketAddress socketAddress = InetSocketAddress.createUnresolved("127.0.0.1", 7000);
@Before
public void setUp() throws Exception {
+ lspWrapper = new DefaultLspWrapper();
+ lspWrapper.setLspProcessing("refreshLsp");
+ lspWrapper.setSelfOriginated(true);
+ lspWrapper.setIsisInterface(new DefaultIsisInterface());
+ lspWrapper1 = new DefaultLspWrapper();
+ lspWrapper1.setLspProcessing("maxAgeLsp");
+ lspWrapper1.setIsisInterface(new DefaultIsisInterface());
+ blockingQueue.add(lspWrapper);
+ blockingQueue.add(lspWrapper1);
isisLspQueueConsumer = new IsisLspQueueConsumer(blockingQueue);
}
diff --git a/protocols/isis/isisio/src/main/java/org/onosproject/isis/io/isispacket/pdu/Psnp.java b/protocols/isis/isisio/src/main/java/org/onosproject/isis/io/isispacket/pdu/Psnp.java
old mode 100755
new mode 100644
diff --git a/protocols/isis/isisio/src/main/java/org/onosproject/isis/io/util/IsisConstants.java b/protocols/isis/isisio/src/main/java/org/onosproject/isis/io/util/IsisConstants.java
index cf5871a..9156eb4 100644
--- a/protocols/isis/isisio/src/main/java/org/onosproject/isis/io/util/IsisConstants.java
+++ b/protocols/isis/isisio/src/main/java/org/onosproject/isis/io/util/IsisConstants.java
@@ -33,6 +33,7 @@
public static final int IRPDISCRIMINATOR = 131;
public static final int ISISVERSION = 1;
public static final int RESERVED = 0;
+ public static final int PRIORITY = 0;
public static final int MAXAREAADDRESS = 0;
public static final int SYSTEMIDLENGTH = 0;
public static final int PROTOCOLSUPPORTED = 204;
@@ -55,24 +56,15 @@
public static final String DEFAULTLANID = "0000.0000.0000.00";
public static final String PROCESSESID = "processId";
public static final String INTERFACE = "interface";
- public static final String INTERFACEIP = "interfaceIp";
- public static final String NETWORKMASK = "networkMask";
public static final String INTERFACEINDEX = "interfaceIndex";
public static final String INTERMEDIATESYSTEMNAME = "intermediateSystemName";
public static final String SYSTEMID = "systemId";
- public static final String LANID = "lanId";
- public static final String IDLENGTH = "idLength";
- public static final String MAXAREAADDRESSES = "maxAreaAddresses";
public static final String RESERVEDPACKETCIRCUITTYPE = "reservedPacketCircuitType";
public static final String CIRCUITID = "circuitId";
public static final String NETWORKTYPE = "networkType";
public static final String AREAADDRESS = "areaAddress";
- public static final String AREALENGTH = "areaLength";
- public static final String LSPID = "lspId";
public static final String HOLDINGTIME = "holdingTime";
public static final String HELLOINTERVAL = "helloInterval";
- public static final String PRIORITY = "priority";
- public static final String MACADDRESS = "macAddress";
/**
* Non parameterized constructor.
diff --git a/protocols/isis/isisio/src/main/java/org/onosproject/isis/io/util/IsisUtil.java b/protocols/isis/isisio/src/main/java/org/onosproject/isis/io/util/IsisUtil.java
old mode 100755
new mode 100644
index 6b665ac..cfd941e
--- a/protocols/isis/isisio/src/main/java/org/onosproject/isis/io/util/IsisUtil.java
+++ b/protocols/isis/isisio/src/main/java/org/onosproject/isis/io/util/IsisUtil.java
@@ -22,6 +22,7 @@
import org.onosproject.isis.controller.IsisInterfaceState;
import org.onosproject.isis.controller.IsisNeighbor;
import org.onosproject.isis.controller.IsisPduType;
+import org.onosproject.isis.controller.IsisRouterType;
import org.onosproject.isis.io.isispacket.IsisHeader;
import org.onosproject.isis.io.isispacket.pdu.L1L2HelloPdu;
import org.onosproject.isis.io.isispacket.pdu.P2PHelloPdu;
@@ -394,7 +395,6 @@
isisHeader.setIdLength((byte) IsisConstants.SYSTEMIDLENGTH);
isisHeader.setIsisPduType(IsisPduType.P2PHELLOPDU.value());
isisHeader.setVersion2((byte) IsisConstants.ISISVERSION);
- //isisHeader.setReserved((byte) IsisConstants.RESERVED);
isisHeader.setReserved((byte) IsisConstants.PDULENGTHPOSITION);
isisHeader.setMaximumAreaAddresses((byte) IsisConstants.MAXAREAADDRESS);
P2PHelloPdu p2pHelloPdu = new P2PHelloPdu(isisHeader);
@@ -510,14 +510,32 @@
l1L2HelloPdu.addTlv(areaAddressTlv);
Set<MacAddress> neighbors = isisInterface.neighbors();
if (neighbors.size() > 0) {
+ List<MacAddress> neighborMacs = new ArrayList<>();
+ for (MacAddress neighbor : neighbors) {
+ IsisNeighbor isisNeighbor = isisInterface.lookup(neighbor);
+ if (isisPduType == IsisPduType.L1HELLOPDU) {
+ if (isisNeighbor.routerType() == IsisRouterType.L1 ||
+ isisNeighbor.routerType() == IsisRouterType.L1L2) {
+ neighborMacs.add(neighbor);
+ }
+ } else if (isisPduType == IsisPduType.L2HELLOPDU) {
+ if (isisNeighbor.routerType() == IsisRouterType.L2 ||
+ isisNeighbor.routerType() == IsisRouterType.L1L2) {
+ neighborMacs.add(neighbor);
+ }
+ }
+ }
+
tlvHeader.setTlvType(TlvType.ISNEIGHBORS.value());
tlvHeader.setTlvLength(0);
+
IsisNeighborTlv isisNeighborTlv = new IsisNeighborTlv(tlvHeader);
- for (MacAddress neighbor : neighbors) {
+ for (MacAddress neighbor : neighborMacs) {
isisNeighborTlv.addNeighbor(neighbor);
}
l1L2HelloPdu.addTlv(isisNeighborTlv);
}
+
tlvHeader.setTlvType(TlvType.PROTOCOLSUPPORTED.value());
tlvHeader.setTlvLength(0);
ProtocolSupportedTlv protocolSupportedTlv = new ProtocolSupportedTlv(tlvHeader);
@@ -708,4 +726,4 @@
}
return Bytes.toArray(byteList);
}
-}
+}
\ No newline at end of file
diff --git a/protocols/isis/isisio/src/main/java/org/onosproject/isis/io/util/LspGenerator.java b/protocols/isis/isisio/src/main/java/org/onosproject/isis/io/util/LspGenerator.java
index c6ae962..b72c2ab 100644
--- a/protocols/isis/isisio/src/main/java/org/onosproject/isis/io/util/LspGenerator.java
+++ b/protocols/isis/isisio/src/main/java/org/onosproject/isis/io/util/LspGenerator.java
@@ -140,8 +140,15 @@
metricOfIntRea.setExpenseIsInternal(true);
Ip4Address ip4Address = isisInterface.interfaceIpAddress();
byte[] ipAddress = ip4Address.toOctets();
- ipAddress[ipAddress.length - 1] = 0;
- metricOfIntRea.setIpAddress(Ip4Address.valueOf(ipAddress));
+ // ipAddress[ipAddress.length - 1] = 0;
+ byte[] networkmass = isisInterface.networkMask();
+ // metric calculation part
+ byte[] result = new byte[ipAddress.length];
+ result[0] = (byte) (ipAddress[0] & networkmass[0]);
+ result[1] = (byte) (ipAddress[1] & networkmass[1]);
+ result[2] = (byte) (ipAddress[2] & networkmass[2]);
+ result[3] = (byte) (ipAddress[3] & networkmass[3]);
+ metricOfIntRea.setIpAddress(Ip4Address.valueOf(result));
metricOfIntRea.setSubnetAddres(Ip4Address.valueOf(isisInterface.networkMask()));
ipInterReacTlv.addInternalReachabilityMetric(metricOfIntRea);
lsp.addTlv(ipInterReacTlv);