OSPF protocol manual merge from 1.6, due to cherry pick merge conflict
Change-Id: I93653e745468722ce95533537a79e897b4292f5d
diff --git a/protocols/ospf/api/src/main/java/org/onosproject/ospf/controller/LsdbAge.java b/protocols/ospf/api/src/main/java/org/onosproject/ospf/controller/LsdbAge.java
index 63f4824..4983d30 100644
--- a/protocols/ospf/api/src/main/java/org/onosproject/ospf/controller/LsdbAge.java
+++ b/protocols/ospf/api/src/main/java/org/onosproject/ospf/controller/LsdbAge.java
@@ -98,4 +98,11 @@
* @param lsaWrapper wrapper instance
*/
public void removeLsaFromBin(LsaWrapper lsaWrapper);
+
+ /**
+ * Gets the age counter roll over.
+ *
+ * @return the age counter roll over
+ */
+ public int getAgeCounterRollOver();
}
\ No newline at end of file
diff --git a/protocols/ospf/api/src/main/java/org/onosproject/ospf/controller/OspfAgent.java b/protocols/ospf/api/src/main/java/org/onosproject/ospf/controller/OspfAgent.java
index ccea5ac..3f490e7 100644
--- a/protocols/ospf/api/src/main/java/org/onosproject/ospf/controller/OspfAgent.java
+++ b/protocols/ospf/api/src/main/java/org/onosproject/ospf/controller/OspfAgent.java
@@ -38,17 +38,18 @@
void removeConnectedRouter(OspfRouter ospfRouter);
/**
- * Notifies that got a packet of link from network and need do processing.
+ * Notifies that got a packet of link from network and need to add the link.
*
- * @param ospfRouter router instance
- * @param ospfLinkTed link ted instance
+ * @param ospfRouter router instance
+ * @param ospfLinkTed link TED instance
*/
void addLink(OspfRouter ospfRouter, OspfLinkTed ospfLinkTed);
/**
- * Notifies that got a packet of link from network and need do processing.
+ * Notifies that got a packet of link from network and need do delete the link.
*
* @param ospfRouter router instance
+ * @param ospfLinkTed link TED instance
*/
- void deleteLink(OspfRouter ospfRouter);
+ void deleteLink(OspfRouter ospfRouter, OspfLinkTed ospfLinkTed);
}
\ No newline at end of file
diff --git a/protocols/ospf/api/src/main/java/org/onosproject/ospf/controller/OspfArea.java b/protocols/ospf/api/src/main/java/org/onosproject/ospf/controller/OspfArea.java
index 9699814..4623ef5 100644
--- a/protocols/ospf/api/src/main/java/org/onosproject/ospf/controller/OspfArea.java
+++ b/protocols/ospf/api/src/main/java/org/onosproject/ospf/controller/OspfArea.java
@@ -59,7 +59,7 @@
*
* @return LSDB instance for this area
*/
- public OspfLsdb database();
+ OspfLsdb database();
/**
* Checks whether an instance of the given LSA exists in the database.
@@ -67,19 +67,12 @@
* @param lookupLsa LSA instance to lookup
* @return LSA wrapper instance which contains the LSA
*/
- public LsaWrapper lsaLookup(OspfLsa lookupLsa);
+ LsaWrapper lsaLookup(OspfLsa lookupLsa);
/**
* Initializes link state database, this acts as a place holder for storing the received LSA.
*/
- public void initializeDb();
-
- /**
- * Sets the stub cost.
- *
- * @param stubCost stub cost
- */
- void setStubCost(int stubCost);
+ void initializeDb();
/**
* Sets the options value.
@@ -89,38 +82,6 @@
void setOptions(int options);
/**
- * Gets area address ranges to which this area belongs to.
- *
- * @return list of area address ranges
- */
- List<OspfAreaAddressRange> addressRanges();
-
- /**
- * Sets the area address ranges to which this area belongs to.
- *
- * @param addrRangeList list of area address ranges
- */
- void setAddressRanges(List<OspfAreaAddressRange> addrRangeList);
-
- /**
- * Gets whether the area is transit capable or not.
- * This indicates whether the area can carry data traffic that neither originates
- * nor terminates in the area itself.
- *
- * @return true if transit capable, else false
- */
- boolean isTransitCapability();
-
- /**
- * Sets whether the area is transit capable or not.
- * This indicates whether the area can carry data traffic that neither originates
- * nor terminates in the area itself.
- *
- * @param transitCapability true if transit capable, else false
- */
- void setTransitCapability(boolean transitCapability);
-
- /**
* Gets external routing capability.
* This indicates Whether AS-external-LSAs will be flooded into/throughout the area.
*
@@ -137,13 +98,6 @@
void setExternalRoutingCapability(boolean externalRoutingCapability);
/**
- * Gets the stub cost, which indicates if the area has been configured as a stub area.
- *
- * @return stub cost
- */
- int stubCost();
-
- /**
* Gets if the router is opaque enabled or not.
* This indicates whether the router accepts opaque LSA.
*
@@ -156,14 +110,14 @@
*
* @return list of interfaces
*/
- List<OspfInterface> getInterfacesLst();
+ List<OspfInterface> ospfInterfaceList();
/**
* Sets the list of interfaces attached to this area.
*
* @param interfacesLst list of interface instances
*/
- void setInterfacesLst(List<OspfInterface> interfacesLst);
+ void setOspfInterfaceList(List<OspfInterface> interfacesLst);
/**
* Gets the options value, which indicates the supported optional capabilities.
diff --git a/protocols/ospf/api/src/main/java/org/onosproject/ospf/controller/OspfController.java b/protocols/ospf/api/src/main/java/org/onosproject/ospf/controller/OspfController.java
index 522bc9e..4271177 100644
--- a/protocols/ospf/api/src/main/java/org/onosproject/ospf/controller/OspfController.java
+++ b/protocols/ospf/api/src/main/java/org/onosproject/ospf/controller/OspfController.java
@@ -15,6 +15,8 @@
*/
package org.onosproject.ospf.controller;
+import com.fasterxml.jackson.databind.JsonNode;
+
import java.util.List;
import java.util.Set;
@@ -55,9 +57,9 @@
/**
* Updates configuration of processes.
*
- * @param processes process info to update
+ * @param processesNode process info to update
*/
- public void updateConfig(List<OspfProcess> processes);
+ void updateConfig(JsonNode processesNode);
/**
* Deletes configuration parameters.
@@ -65,7 +67,7 @@
* @param processes list of process instance
* @param attribute attribute to delete
*/
- public void deleteConfig(List<OspfProcess> processes, String attribute);
+ void deleteConfig(List<OspfProcess> processes, String attribute);
/**
* Gets the list of listeners registered for router events.
diff --git a/protocols/ospf/api/src/main/java/org/onosproject/ospf/controller/OspfInterface.java b/protocols/ospf/api/src/main/java/org/onosproject/ospf/controller/OspfInterface.java
index 9647a00..8fbb33f 100644
--- a/protocols/ospf/api/src/main/java/org/onosproject/ospf/controller/OspfInterface.java
+++ b/protocols/ospf/api/src/main/java/org/onosproject/ospf/controller/OspfInterface.java
@@ -15,9 +15,10 @@
*/
package org.onosproject.ospf.controller;
+import org.jboss.netty.channel.ChannelHandlerContext;
import org.onlab.packet.Ip4Address;
-import java.util.HashMap;
+import java.util.Map;
/**
* Represents an OSPF Interface.
@@ -25,6 +26,34 @@
public interface OspfInterface {
/**
+ * Returns interface index.
+ *
+ * @return interface index
+ */
+ public int interfaceIndex();
+
+ /**
+ * Sets interface index.
+ *
+ * @param interfaceIndex interface index
+ */
+ public void setInterfaceIndex(int interfaceIndex);
+
+ /**
+ * Returns OSPF area instance.
+ *
+ * @return OSPF area instance
+ */
+ public OspfArea ospfArea();
+
+ /**
+ * Sets OSPF area instance.
+ *
+ * @param ospfArea OSPF area instance
+ */
+ public void setOspfArea(OspfArea ospfArea);
+
+ /**
* Gets network mask of the interface.
*
* @return network mask
@@ -32,29 +61,6 @@
Ip4Address ipNetworkMask();
/**
- * Sets area id, to which the interface belongs.
- *
- * @param areaId area identifier
- */
- void setAreaId(int areaId);
-
- /**
- * Sets the authentication key.
- * Interface uses this to authenticate while establishing communication with other routers.
- *
- * @param authKey represents authentication key
- */
- void setAuthKey(String authKey);
-
- /**
- * Sets the authentication type,
- * Interface uses this to authenticate while establishing communication with other routers.
- *
- * @param authType authType represents authentication type
- */
- void setAuthType(String authType);
-
- /**
* Sets the value of BDR.
* The BDR is calculated during adjacency formation.
*
@@ -87,13 +93,6 @@
void setRouterDeadIntervalTime(int routerDeadIntervalTime);
/**
- * Sets the interface cost which is the cost of sending a data packet onto the network.
- *
- * @param interfaceCost an integer represents interface cost
- */
- void setInterfaceCost(int interfaceCost);
-
- /**
* Sets interface type.
* This indicates whether the interface is on point to point mode or broadcast mode.
*
@@ -116,22 +115,6 @@
void setIpNetworkMask(Ip4Address ipNetworkMask);
/**
- * Sets the polling interval.
- * Polling interval indicates the interval until when the Hello Packets are
- * sent to a dead neighbor.
- *
- * @param pollInterval an integer represents poll interval
- */
- void setPollInterval(int pollInterval);
-
- /**
- * Sets transmission delay.
- *
- * @param transmitDelay an integer represents delay
- */
- void setTransmitDelay(int transmitDelay);
-
- /**
* Sets retransmit interval which indicates the number of seconds between LSA retransmissions.
*
* @param reTransmitInterval an integer represents interval
@@ -153,13 +136,6 @@
void setRouterPriority(int routerPriority);
/**
- * Gets the area id to which router belongs.
- *
- * @return areaId an integer value
- */
- int areaId();
-
- /**
* Gets the IP address.
*
* @return an string represents IP address
@@ -181,32 +157,11 @@
int mtu();
/**
- * Gets interface cost.
- *
- * @return an integer representing interface cost
- */
- int interfaceCost();
-
- /**
* Gets the list of neighbors associated with the interface.
*
* @return listOfNeighbors as key value pair
*/
- HashMap<String, OspfNbr> listOfNeighbors();
-
- /**
- * Gets poll interval.
- *
- * @return pollInterval an integer representing poll interval
- */
- int pollInterval();
-
- /**
- * Gets transmission delay.
- *
- * @return transmitDelay an integer representing delay
- */
- int transmitDelay();
+ Map<String, OspfNbr> listOfNeighbors();
/**
* Gets the IP address of the BDR.
@@ -223,20 +178,6 @@
Ip4Address dr();
/**
- * Gets authentication key.
- *
- * @return authKey represents authentication key
- */
- String authKey();
-
- /**
- * Gets authentication type.
- *
- * @return authType represents authentication type
- */
- String authType();
-
- /**
* Gets hello interval time in seconds, this defines how often we send the hello packet.
*
* @return hello interval time in seconds
@@ -294,4 +235,54 @@
* @param lsaKey key used to store lsa in map
*/
void removeLsaFromNeighborMap(String lsaKey);
+
+ /**
+ * When an OSPF message received it is handed over to this method.
+ * Based on the type of the OSPF message received it will be handed over
+ * to corresponding message handler methods.
+ *
+ * @param ospfMessage received OSPF message
+ * @param ctx channel handler context instance.
+ * @throws Exception might throws exception
+ */
+ void processOspfMessage(OspfMessage ospfMessage, ChannelHandlerContext ctx) throws Exception;
+
+ /**
+ * Represents an interface is up and connected.
+ *
+ * @throws Exception might throws exception
+ */
+ void interfaceUp() throws Exception;
+
+ /**
+ * Starts the timer which waits for configured seconds and sends Delayed Ack Packet.
+ */
+ void startDelayedAckTimer();
+
+ /**
+ * Stops the delayed acknowledge timer.
+ */
+ void stopDelayedAckTimer();
+
+ /**
+ * Starts the hello timer which sends hello packet every configured seconds.
+ */
+ void startHelloTimer();
+
+ /**
+ * Stops the hello timer.
+ */
+ void stopHelloTimer();
+
+ /**
+ * Gets called when an interface is down.
+ * All interface variables are reset, and interface timers disabled.
+ * Also all neighbor connections associated with the interface are destroyed.
+ */
+ void interfaceDown();
+
+ /**
+ * Removes all the neighbors.
+ */
+ void removeNeighbors();
}
\ No newline at end of file
diff --git a/protocols/ospf/api/src/main/java/org/onosproject/ospf/controller/OspfLinkListener.java b/protocols/ospf/api/src/main/java/org/onosproject/ospf/controller/OspfLinkListener.java
index b9b887c..2679384 100644
--- a/protocols/ospf/api/src/main/java/org/onosproject/ospf/controller/OspfLinkListener.java
+++ b/protocols/ospf/api/src/main/java/org/onosproject/ospf/controller/OspfLinkListener.java
@@ -23,7 +23,7 @@
/**
* Notifies that we got a link from network.
*
- * @param ospfRouter router instance
+ * @param ospfRouter router instance
* @param ospfLinkTed link TED information of router
*/
void addLink(OspfRouter ospfRouter, OspfLinkTed ospfLinkTed);
@@ -31,7 +31,8 @@
/**
* Notifies that a link got removed from network.
*
- * @param ospfRouter router instance
+ * @param ospfRouter router instance
+ * @param ospfLinkTed link TED information of router
*/
- void deleteLink(OspfRouter ospfRouter);
+ void deleteLink(OspfRouter ospfRouter, OspfLinkTed ospfLinkTed);
}
\ No newline at end of file
diff --git a/protocols/ospf/protocol/src/main/java/org/onosproject/ospf/protocol/ospfpacket/OspfMessage.java b/protocols/ospf/api/src/main/java/org/onosproject/ospf/controller/OspfMessage.java
similarity index 74%
rename from protocols/ospf/protocol/src/main/java/org/onosproject/ospf/protocol/ospfpacket/OspfMessage.java
rename to protocols/ospf/api/src/main/java/org/onosproject/ospf/controller/OspfMessage.java
index 1ce307f..bdd3c9d 100644
--- a/protocols/ospf/protocol/src/main/java/org/onosproject/ospf/protocol/ospfpacket/OspfMessage.java
+++ b/protocols/ospf/api/src/main/java/org/onosproject/ospf/controller/OspfMessage.java
@@ -13,12 +13,10 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.onosproject.ospf.protocol.ospfpacket;
+package org.onosproject.ospf.controller;
import org.jboss.netty.buffer.ChannelBuffer;
import org.onlab.packet.Ip4Address;
-import org.onosproject.ospf.exceptions.OspfParseException;
-import org.onosproject.ospf.protocol.util.OspfPacketType;
/**
* Representation of an OSPF message.
@@ -26,6 +24,20 @@
public interface OspfMessage {
/**
+ * Returns the interface index on which the message received.
+ *
+ * @return interface index on which the message received
+ */
+ int interfaceIndex();
+
+ /**
+ * Sets the interface index on which the message received.
+ *
+ * @param interfaceIndex interface index on which the message received
+ */
+ void setInterfaceIndex(int interfaceIndex);
+
+ /**
* Returns the type of OSPF message.
*
* @return OSPF message type
@@ -36,9 +48,9 @@
* Reads from ChannelBuffer and initializes the type of LSA.
*
* @param channelBuffer channel buffer instance
- * @throws OspfParseException might throws exception while parsing buffer
+ * @throws Exception might throws exception while parsing buffer
*/
- void readFrom(ChannelBuffer channelBuffer) throws OspfParseException;
+ void readFrom(ChannelBuffer channelBuffer) throws Exception;
/**
* Returns OSPFMessage as byte array.
diff --git a/protocols/ospf/api/src/main/java/org/onosproject/ospf/controller/OspfNbr.java b/protocols/ospf/api/src/main/java/org/onosproject/ospf/controller/OspfNbr.java
index adc12f1..ff67852 100644
--- a/protocols/ospf/api/src/main/java/org/onosproject/ospf/controller/OspfNbr.java
+++ b/protocols/ospf/api/src/main/java/org/onosproject/ospf/controller/OspfNbr.java
@@ -189,4 +189,36 @@
* @return neighbor's state
*/
OspfNeighborState getState();
+
+ /**
+ * Starts the inactivity timer.
+ */
+ void startInactivityTimeCheck();
+
+ /**
+ * Stops the inactivity timer.
+ */
+ void stopInactivityTimeCheck();
+
+ /**
+ * Sets router dead interval.
+ *
+ * @param routerDeadInterval router dead interval
+ */
+ void setRouterDeadInterval(int routerDeadInterval);
+
+ /**
+ * Stops the flooding timer.
+ */
+ void stopFloodingTimer();
+
+ /**
+ * Stops the Dd Retransmission executor task.
+ */
+ void stopRxMtDdTimer();
+
+ /**
+ * Stops Ls request retransmission executor task.
+ */
+ void stopRxMtLsrTimer();
}
\ No newline at end of file
diff --git a/protocols/ospf/protocol/src/main/java/org/onosproject/ospf/protocol/util/OspfPacketType.java b/protocols/ospf/api/src/main/java/org/onosproject/ospf/controller/OspfPacketType.java
similarity index 75%
rename from protocols/ospf/protocol/src/main/java/org/onosproject/ospf/protocol/util/OspfPacketType.java
rename to protocols/ospf/api/src/main/java/org/onosproject/ospf/controller/OspfPacketType.java
index 22832e2..cce21ae 100644
--- a/protocols/ospf/protocol/src/main/java/org/onosproject/ospf/protocol/util/OspfPacketType.java
+++ b/protocols/ospf/api/src/main/java/org/onosproject/ospf/controller/OspfPacketType.java
@@ -13,17 +13,32 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.onosproject.ospf.protocol.util;
+package org.onosproject.ospf.controller;
/**
* Representation of different OSPF packet types.
*/
public enum OspfPacketType {
+ /**
+ * OSPF hello packet.
+ */
HELLO(1),
+ /**
+ * OSPF device description packet.
+ */
DD(2),
+ /**
+ * OSPF link state request packet.
+ */
LSREQUEST(3),
+ /**
+ * OSPF link state update packet.
+ */
LSUPDATE(4),
+ /**
+ * OSPF link state acknowledge packet.
+ */
LSAACK(5);
private int value;
@@ -31,7 +46,7 @@
/**
* Creates instance of OSPF packet types.
*
- * @param value
+ * @param value OSPF packet types
*/
OspfPacketType(int value) {
this.value = value;
diff --git a/protocols/ospf/api/src/main/java/org/onosproject/ospf/controller/OspfRouterId.java b/protocols/ospf/api/src/main/java/org/onosproject/ospf/controller/OspfRouterId.java
index ba512a5..9590ee2 100644
--- a/protocols/ospf/api/src/main/java/org/onosproject/ospf/controller/OspfRouterId.java
+++ b/protocols/ospf/api/src/main/java/org/onosproject/ospf/controller/OspfRouterId.java
@@ -29,7 +29,7 @@
*/
public class OspfRouterId {
- private static final String SCHEME = "ospf";
+ private static final String SCHEME = "l3";
private static final long UNKNOWN = 0;
private final IpAddress ipAddress;
diff --git a/protocols/ospf/api/src/main/java/org/onosproject/ospf/controller/TopologyForDeviceAndLink.java b/protocols/ospf/api/src/main/java/org/onosproject/ospf/controller/TopologyForDeviceAndLink.java
index 012457b..7514d5e 100644
--- a/protocols/ospf/api/src/main/java/org/onosproject/ospf/controller/TopologyForDeviceAndLink.java
+++ b/protocols/ospf/api/src/main/java/org/onosproject/ospf/controller/TopologyForDeviceAndLink.java
@@ -50,7 +50,7 @@
/**
* Sets link information.
*
- * @param key key used to store in map
+ * @param key key used to store in map
* @param linkInformationMap link information instance
*/
void setLinkInformationMap(String key, LinkInformation linkInformationMap);
@@ -79,7 +79,7 @@
void removeDeviceInformationMap(String key);
/**
- * Removes links from linkInformationMap.
+ * Removes links from link information map.
*
* @param routerId router's IP address
*/
@@ -109,4 +109,56 @@
* @param ospfArea area instance
*/
void updateLinkInformation(OspfLsa ospfLsa, OspfArea ospfArea);
+
+ /**
+ * Gets device information as map.
+ *
+ * @return deviceInformationMap to delete from core
+ */
+ Map<String, DeviceInformation> deviceInformationMapToDelete();
+
+ /**
+ * Sets device information as map.
+ *
+ * @param key key to store in device info map
+ * @param deviceInformationMapToDelete device information instance
+ */
+ void setDeviceInformationMapToDelete(String key, DeviceInformation deviceInformationMapToDelete);
+
+ /**
+ * Removes device information from deviceInformationMapToDelete.
+ *
+ * @param key key to remove device information
+ */
+ void removeDeviceInformationMapFromDeleteMap(String key);
+
+ /**
+ * Gets device information as map for Point-To-Point.
+ *
+ * @return deviceInformationMap
+ */
+ Map<String, DeviceInformation> deviceInformationMapForPointToPoint();
+
+ /**
+ * Sets device information as map for Point-To-Point.
+ *
+ * @param key key to store in device info
+ * @param deviceInformationMap device information instance
+ */
+ void setDeviceInformationMapForPointToPoint(String key, DeviceInformation deviceInformationMap);
+
+ /**
+ * Gets link information as map for Point-To-Point.
+ *
+ * @return linkInformationMap
+ */
+ Map<String, LinkInformation> linkInformationMapForPointToPoint();
+
+ /**
+ * Sets link information as map for Point-To-Point.
+ *
+ * @param key key to store link info
+ * @param linkInformationMap link information instance
+ */
+ void setLinkInformationMapForPointToPoint(String key, LinkInformation linkInformationMap);
}
\ No newline at end of file
diff --git a/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/area/OspfAreaImpl.java b/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/area/OspfAreaImpl.java
index f4c70c0..9a7bd47 100644
--- a/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/area/OspfAreaImpl.java
+++ b/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/area/OspfAreaImpl.java
@@ -21,7 +21,6 @@
import org.onlab.packet.Ip4Address;
import org.onosproject.ospf.controller.LsaWrapper;
import org.onosproject.ospf.controller.OspfArea;
-import org.onosproject.ospf.controller.OspfAreaAddressRange;
import org.onosproject.ospf.controller.OspfInterface;
import org.onosproject.ospf.controller.OspfLsa;
import org.onosproject.ospf.controller.OspfLsaType;
@@ -54,28 +53,14 @@
public class OspfAreaImpl implements OspfArea {
private static final Logger log = LoggerFactory.getLogger(OspfAreaImpl.class);
/**
- * Address ranges in order to aggregate routing information at area.
- * boundaries. Each address range is specified by an [address,mask] pair and
- * a status indication of either Advertise or DoNotAdvertise
- */
- private List<OspfAreaAddressRange> addressRanges;
- /**
- * This parameter indicates whether the area can carry data traffic that.
- * neither originates nor terminates in the area itself.
- */
- private boolean transitCapability;
- /**
* Whether AS-external-LSAs will be flooded into/throughout the area.
*/
private boolean externalRoutingCapability;
- /**
- * Indicates the cost of the default summary-LSA.
- */
- private int stubCost;
+
/**
* Represents a list of all router's interfaces associated with this area.
*/
- private List<OspfInterface> interfacesLst;
+ private List<OspfInterface> ospfInterfaceList;
/**
* The LS Database for this area. It includes router-LSAs, network-LSAs and.
* summary-LSAs. AS-external-LSAs are hold in the OSPF class itself.
@@ -116,18 +101,15 @@
OspfAreaImpl that = (OspfAreaImpl) o;
return Objects.equal(areaId, that.areaId) &&
Objects.equal(routerId, that.routerId) &&
- Objects.equal(addressRanges.size(), that.addressRanges.size()) &&
- Objects.equal(transitCapability, that.transitCapability) &&
Objects.equal(externalRoutingCapability, that.externalRoutingCapability) &&
- Objects.equal(stubCost, that.stubCost) &&
- Objects.equal(interfacesLst.size(), that.interfacesLst.size()) &&
+ Objects.equal(ospfInterfaceList.size(), that.ospfInterfaceList.size()) &&
Objects.equal(database, that.database);
}
@Override
public int hashCode() {
- return Objects.hashCode(areaId, routerId, addressRanges, transitCapability, externalRoutingCapability,
- stubCost, interfacesLst, database);
+ return Objects.hashCode(areaId, routerId, externalRoutingCapability,
+ ospfInterfaceList, database);
}
/**
@@ -234,7 +216,7 @@
networkLsa.setNetworkMask(mask);
//Adding our own router.
networkLsa.addAttachedRouter(routerId());
- Iterator iter = interfacesLst.iterator();
+ Iterator iter = ospfInterfaceList.iterator();
OspfInterfaceImpl ospfInterface = null;
while (iter.hasNext()) {
ospfInterface = (OspfInterfaceImpl) iter.next();
@@ -310,7 +292,7 @@
*/
private void buildLinkForRouterLsa(RouterLsa routerLsa, OspfInterface ospfInterface) {
OspfInterfaceImpl nextInterface;
- Iterator interfaces = interfacesLst.iterator();
+ Iterator interfaces = ospfInterfaceList.iterator();
while (interfaces.hasNext()) {
nextInterface = (OspfInterfaceImpl) interfaces.next();
if (nextInterface.state() == OspfInterfaceState.DOWN) {
@@ -418,44 +400,6 @@
}
/**
- * Gets address range.
- *
- * @return list of area address ranges
- */
- public List<OspfAreaAddressRange> addressRanges() {
- return addressRanges;
- }
-
- /**
- * Sets the area address ranges.
- *
- * @param addressRanges list of area address range
- */
- @JsonProperty("addressRange")
- public void setAddressRanges(List<OspfAreaAddressRange> addressRanges) {
- this.addressRanges = addressRanges;
- }
-
- /**
- * Gets is transit capable or not.
- *
- * @return true if transit capable, else false
- */
- public boolean isTransitCapability() {
- return transitCapability;
- }
-
- /**
- * Sets transit capability.
- *
- * @param transitCapability true if transit capable, else false
- */
- @JsonProperty("transitCapability")
- public void setTransitCapability(boolean transitCapability) {
- this.transitCapability = transitCapability;
- }
-
- /**
* Gets external routing capability.
*
* @return true if external routing capable, else false
@@ -475,41 +419,22 @@
}
/**
- * Gets the stub cost.
- *
- * @return stub cost
- */
- public int stubCost() {
- return stubCost;
- }
-
- /**
- * Sets the stub cost.
- *
- * @param stubCost stub cost
- */
- @JsonProperty("stubCost")
- public void setStubCost(int stubCost) {
- this.stubCost = stubCost;
- }
-
- /**
* Gets the list of interfaces in this area.
*
* @return list of interfaces
*/
- public List<OspfInterface> getInterfacesLst() {
- return interfacesLst;
+ public List<OspfInterface> ospfInterfaceList() {
+ return ospfInterfaceList;
}
/**
* Sets the list of interfaces attached to the area.
*
- * @param interfacesLst list of OspfInterface instances
+ * @param ospfInterfaceList list of OspfInterface instances
*/
@JsonProperty("interface")
- public void setInterfacesLst(List<OspfInterface> interfacesLst) {
- this.interfacesLst = interfacesLst;
+ public void setOspfInterfaceList(List<OspfInterface> ospfInterfaceList) {
+ this.ospfInterfaceList = ospfInterfaceList;
}
/**
@@ -522,7 +447,7 @@
public boolean noNeighborInLsaExchangeProcess() {
OspfInterfaceImpl nextInterface;
OspfNeighborState nextNeighborState;
- Iterator interfaces = interfacesLst.iterator();
+ Iterator interfaces = ospfInterfaceList.iterator();
while (interfaces.hasNext()) {
nextInterface = (OspfInterfaceImpl) interfaces.next();
Iterator neighbors = nextInterface.listOfNeighbors().values().iterator();
@@ -659,19 +584,14 @@
return MoreObjects.toStringHelper(getClass())
.omitNullValues()
.add("areaID", areaId)
- .add("stubCost", stubCost)
- .add("addressRanges", addressRanges)
- .add("interfacesLst", interfacesLst)
- .add("transitCapability", transitCapability)
+ .add("ospfInterfaceList", ospfInterfaceList)
.add("externalRoutingCapability", externalRoutingCapability)
.toString();
}
/**
* Checks all Neighbors belonging to this Area whether they are in state lesser than the EXCHANGE.
- * <p>
* Creates list of such neighbors
- * <p>
* Returns list of neighbors who satisfy the conditions
*
* @param ospfInterface OSPF interface instance
@@ -716,7 +636,7 @@
public void addToOtherNeighborLsaTxList(LsaHeader recLsa) {
//Add the received LSA in other neighbors retransmission list.
log.debug("OspfAreaImpl: addToOtherNeighborLsaTxList");
- List<OspfInterface> ospfInterfaces = getInterfacesLst();
+ List<OspfInterface> ospfInterfaces = ospfInterfaceList();
for (OspfInterface ospfInterfaceFromArea : ospfInterfaces) {
Map neighbors = ospfInterfaceFromArea.listOfNeighbors();
for (Object neighborIP : neighbors.keySet()) {
diff --git a/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/area/OspfInterfaceImpl.java b/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/area/OspfInterfaceImpl.java
index 19f8ef5..b10cf33 100644
--- a/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/area/OspfInterfaceImpl.java
+++ b/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/area/OspfInterfaceImpl.java
@@ -18,47 +18,93 @@
import com.google.common.base.MoreObjects;
import com.google.common.base.Objects;
+import org.jboss.netty.channel.Channel;
+import org.jboss.netty.channel.ChannelFuture;
+import org.jboss.netty.channel.ChannelHandlerContext;
import org.onlab.packet.Ip4Address;
+import org.onosproject.ospf.controller.LsaWrapper;
+import org.onosproject.ospf.controller.OspfArea;
import org.onosproject.ospf.controller.OspfInterface;
+import org.onosproject.ospf.controller.OspfLinkTed;
+import org.onosproject.ospf.controller.OspfLsa;
+import org.onosproject.ospf.controller.OspfMessage;
import org.onosproject.ospf.controller.OspfNbr;
+import org.onosproject.ospf.controller.OspfNeighborState;
+import org.onosproject.ospf.controller.OspfPacketType;
+import org.onosproject.ospf.controller.OspfRouter;
+import org.onosproject.ospf.controller.TopologyForDeviceAndLink;
+import org.onosproject.ospf.controller.impl.Controller;
+import org.onosproject.ospf.controller.impl.OspfNbrImpl;
+import org.onosproject.ospf.controller.impl.TopologyForDeviceAndLinkImpl;
+import org.onosproject.ospf.controller.lsdb.LsaWrapperImpl;
+import org.onosproject.ospf.controller.lsdb.OspfLsdbImpl;
+import org.onosproject.ospf.controller.util.OspfEligibleRouter;
+import org.onosproject.ospf.controller.util.OspfInterfaceType;
import org.onosproject.ospf.protocol.lsa.LsaHeader;
import org.onosproject.ospf.protocol.lsa.OpaqueLsaHeader;
+import org.onosproject.ospf.protocol.ospfpacket.OspfMessageWriter;
+import org.onosproject.ospf.protocol.ospfpacket.OspfPacketHeader;
+import org.onosproject.ospf.protocol.ospfpacket.subtype.LsRequestPacket;
+import org.onosproject.ospf.protocol.ospfpacket.types.DdPacket;
+import org.onosproject.ospf.protocol.ospfpacket.types.HelloPacket;
+import org.onosproject.ospf.protocol.ospfpacket.types.LsAcknowledge;
+import org.onosproject.ospf.protocol.ospfpacket.types.LsRequest;
+import org.onosproject.ospf.protocol.ospfpacket.types.LsUpdate;
+import org.onosproject.ospf.protocol.util.ChecksumCalculator;
import org.onosproject.ospf.protocol.util.OspfInterfaceState;
import org.onosproject.ospf.protocol.util.OspfParameters;
+import org.onosproject.ospf.protocol.util.OspfUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.ArrayList;
import java.util.HashMap;
+import java.util.Iterator;
import java.util.List;
+import java.util.ListIterator;
+import java.util.Map;
import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.ScheduledFuture;
+import java.util.concurrent.TimeUnit;
/**
* Representation of an OSPF interface.
*/
public class OspfInterfaceImpl implements OspfInterface {
private static final Logger log = LoggerFactory.getLogger(OspfInterfaceImpl.class);
+ private int interfaceIndex;
private Ip4Address ipAddress;
private Ip4Address ipNetworkMask;
- private int areaId;
+ private Channel channel = null;
private int helloIntervalTime;
private int routerDeadIntervalTime;
- private int transmitDelay;
private int routerPriority;
- private int systemInterfaceType;
private int interfaceType;
- private int interfaceCost;
- private String authType;
- private String authKey;
- private int pollInterval;
private int mtu;
private int reTransmitInterval;
private Ip4Address dr;
private Ip4Address bdr;
private OspfInterfaceState state;
private List<LsaHeader> linkStateHeaders = new ArrayList<>();
- private HashMap<String, OspfNbr> listOfNeighbors = new HashMap<>();
- private HashMap<String, LsaHeader> listOfNeighborMap = new HashMap<>();
+ private Map<String, OspfNbr> listOfNeighbors = new ConcurrentHashMap<>();
+ private Map<String, LsaHeader> listOfNeighborMap = new ConcurrentHashMap<>();
+ private long delay = 0;
+ private InternalHelloTimer helloTimerTask;
+ private InternalWaitTimer waitTimerTask;
+ private InternalDelayedAckTimer delayedAckTimerTask;
+ private ScheduledExecutorService exServiceHello;
+ private ScheduledExecutorService exServiceWait;
+ private ScheduledExecutorService exServiceDelayedAck;
+ private boolean isDelayedAckTimerScheduled = false;
+ private int delayedAckTimerInterval = 2500;
+ private int interfaceTypeOldValue = 0;
+ private TopologyForDeviceAndLink topologyForDeviceAndLink = new TopologyForDeviceAndLinkImpl();
+ private OspfArea ospfArea;
+ private Controller controller;
+
/**
* Gets the interface state.
@@ -79,6 +125,51 @@
}
/**
+ * Sets the netty channel.
+ *
+ * @param channel channel
+ */
+ public void setChannel(Channel channel) {
+ this.channel = channel;
+ }
+
+ /**
+ * Returns OSPF area instance.
+ *
+ * @return OSPF area instance
+ */
+ public OspfArea ospfArea() {
+ return ospfArea;
+ }
+
+ /**
+ * Sets OSPF controller instance.
+ *
+ * @param controller OSPF controller instance
+ */
+ public void setController(Controller controller) {
+ this.controller = controller;
+ }
+
+ /**
+ * Sets OSPF area instance.
+ *
+ * @param ospfArea OSPF area instance
+ */
+ public void setOspfArea(OspfArea ospfArea) {
+ this.ospfArea = ospfArea;
+ }
+
+ /**
+ * Gets interface state.
+ *
+ * @return interface state
+ */
+ public String interfaceState() {
+ return state.interfaceState();
+ }
+
+ /**
* Gets link state headers.
*
* @return get the list of lsa headers
@@ -130,9 +221,36 @@
return listOfNeighbors.get(neighborId);
}
+ /**
+ * Removes all the neighbors.
+ */
+ public void removeNeighbors() {
+ Set<String> neighbors = listOfNeighbors.keySet();
+ for (String neighborId : neighbors) {
+ removeNeighbor(listOfNeighbors.get(neighborId));
+ log.debug("Neighbor removed - {}", neighborId);
+ }
+ listOfNeighbors.clear();
+ }
/**
- * Adds LSAHeader to map.
+ * Removes neighbor from the interface neighbor map.
+ *
+ * @param ospfNeighbor OSPF neighbor instance
+ */
+ public void removeNeighbor(OspfNbr ospfNeighbor) {
+ log.debug("Neighbor removed - {}", ospfNeighbor.neighborId());
+ ospfNeighbor.stopInactivityTimeCheck();
+ ospfNeighbor.stopFloodingTimer();
+ ospfNeighbor.stopRxMtDdTimer();
+ ospfNeighbor.stopRxMtLsrTimer();
+
+ listOfNeighbors.remove(ospfNeighbor.neighborId());
+ }
+
+
+ /**
+ * Adds LSA header to map.
*
* @param lsaHeader LSA header instance
*/
@@ -175,7 +293,7 @@
*
* @return listOfNeighbors as key value pair
*/
- public HashMap<String, OspfNbr> listOfNeighbors() {
+ public Map<String, OspfNbr> listOfNeighbors() {
return listOfNeighbors;
}
@@ -189,6 +307,24 @@
}
/**
+ * Returns interface index.
+ *
+ * @return interface index
+ */
+ public int interfaceIndex() {
+ return interfaceIndex;
+ }
+
+ /**
+ * Set interface index.
+ *
+ * @param interfaceIndex interface index
+ */
+ public void setInterfaceIndex(int interfaceIndex) {
+ this.interfaceIndex = interfaceIndex;
+ }
+
+ /**
* Gets the IP address.
*
* @return IP address
@@ -225,25 +361,6 @@
}
/**
- * Gets the area id this interface belongs.
- *
- * @return area id this interface belongs
- */
- public int areaId() {
- return areaId;
- }
-
-
- /**
- * Sets the area id this interface belongs.
- *
- * @param areaId the area id this interface belongs
- */
- public void setAreaId(int areaId) {
- this.areaId = areaId;
- }
-
- /**
* Gets hello interval time.
*
* @return hello interval time
@@ -298,78 +415,6 @@
}
/**
- * Gets interface cost.
- *
- * @return interface cost
- */
- public int interfaceCost() {
- return interfaceCost;
- }
-
- /**
- * Sets interface cost.
- *
- * @param interfaceCost interface cost
- */
- public void setInterfaceCost(int interfaceCost) {
- this.interfaceCost = interfaceCost;
- }
-
- /**
- * Gets authentication type.
- *
- * @return authType represents authentication type
- */
- public String authType() {
- return authType;
- }
-
- /**
- * Sets authentication type.
- *
- * @param authType authType represents authentication type
- */
- public void setAuthType(String authType) {
- this.authType = authType;
- }
-
- /**
- * Gets authentication key.
- *
- * @return authKey represents authentication key
- */
- public String authKey() {
- return authKey;
- }
-
- /**
- * Sets authentication key.
- *
- * @param authKey represents authentication key
- */
- public void setAuthKey(String authKey) {
- this.authKey = authKey;
- }
-
- /**
- * Gets poll interval.
- *
- * @return pollInterval an integer represents poll interval
- */
- public int pollInterval() {
- return pollInterval;
- }
-
- /**
- * Sets poll interval.
- *
- * @param pollInterval an integer represents poll interval
- */
- public void setPollInterval(int pollInterval) {
- this.pollInterval = pollInterval;
- }
-
- /**
* Gets max transfer unit.
*
* @return mtu an integer represents max transfer unit
@@ -442,23 +487,1070 @@
}
/**
- * Get transmission delay.
+ * Represents an interface is up and connected.
*
- * @return transmission delay
+ * @throws Exception might throws exception
*/
- public int transmitDelay() {
- return transmitDelay;
+ public void interfaceUp() throws Exception {
+ log.debug("OSPFInterfaceChannelHandler::interfaceUp...!!!");
+ if (interfaceType() == OspfInterfaceType.POINT_TO_POINT.value()) {
+ setState(OspfInterfaceState.POINT2POINT);
+ interfaceTypeOldValue = interfaceType();
+ log.debug("OSPFInterfaceChannelHandler::InterfaceType {} state {} ",
+ interfaceType(), state());
+ } else if (interfaceType() == OspfInterfaceType.BROADCAST.value()) {
+ //if router priority is 0, move the state to DROther
+ interfaceTypeOldValue = interfaceType();
+ if (routerPriority() == 0) {
+ setState(OspfInterfaceState.DROTHER);
+ } else {
+ log.debug("OSPFInterfaceChannelHandler::InterfaceType {} state {} RouterPriority {}",
+ interfaceType(),
+ state(), routerPriority());
+ setState(OspfInterfaceState.WAITING);
+ //start wait timer - like inactivity timer with router deadInterval
+ startWaitTimer();
+ }
+ }
+ // Start hello timer with interval from config - convert seconds to milliseconds
+ startHelloTimer();
+ ospfArea.refreshArea(this);
+ }
+
+
+ /**
+ * Gets called when a BDR was detected before the wait timer expired.
+ *
+ * @param ch channel instance
+ * @throws Exception might throws exception
+ */
+ public void backupSeen(Channel ch) throws Exception {
+ log.debug("OSPFInterfaceChannelHandler::backupSeen ");
+ if (state() == OspfInterfaceState.WAITING) {
+ electRouter(ch);
+ }
}
/**
- * Sets transmission delay.
+ * Gets called when no hello message received for particular period.
*
- * @param transmitDelay transmission delay
+ * @param ch channel instance
+ * @throws Exception might throws exception
*/
- public void setTransmitDelay(int transmitDelay) {
- this.transmitDelay = transmitDelay;
+ public void waitTimer(Channel ch) throws Exception {
+ log.debug("OSPFInterfaceChannelHandler::waitTimer ");
+ //According to RFC-2328 section 9.4
+ if (state() == OspfInterfaceState.WAITING) {
+ electRouter(ch);
+ }
}
+ /**
+ * Initiates DR election process.
+ *
+ * @param ch netty channel instance
+ * @throws Exception might throws exception
+ */
+ public void callDrElection(Channel ch) throws Exception {
+ log.debug("OSPFInterfaceChannelHandler::callDrElection ");
+ //call when timer expired
+ //no hello message received for particular interval
+ //section 9.4
+ electRouter(ch);
+ interfaceTypeOldValue = interfaceType();
+ }
+
+ /**
+ * Neighbor change event is triggered when the router priority gets changed.
+ *
+ * @throws Exception might throws exception
+ */
+ public void neighborChange() throws Exception {
+ log.debug("OSPFInterfaceChannelHandler::neighborChange ");
+ if (state() == OspfInterfaceState.DR || state() == OspfInterfaceState.BDR ||
+ state() == OspfInterfaceState.DROTHER) {
+ electRouter(channel);
+ }
+ }
+
+ /**
+ * Gets called when an interface is down.
+ * All interface variables are reset, and interface timers disabled.
+ * Also all neighbor connections associated with the interface are destroyed.
+ */
+ public void interfaceDown() {
+ log.debug("OSPFInterfaceChannelHandler::interfaceDown ");
+ stopHelloTimer();
+ listOfNeighbors().clear();
+ setState(OspfInterfaceState.DOWN);
+ }
+
+ /**
+ * When an OSPF message received it is handed over to this method.
+ * Based on the type of the OSPF message received it will be handed over
+ * to corresponding message handler methods.
+ *
+ * @param ospfMessage received OSPF message
+ * @param ctx channel handler context instance.
+ * @throws Exception might throws exception
+ */
+ public void processOspfMessage(OspfMessage ospfMessage, ChannelHandlerContext ctx) throws Exception {
+ log.debug("OspfChannelHandler::processOspfMessage...!!!");
+
+ if (!validateMessage(ospfMessage)) {
+ return;
+ }
+
+ switch (ospfMessage.ospfMessageType().value()) {
+ case OspfParameters.HELLO:
+ processHelloMessage(ospfMessage, ctx);
+ break;
+ case OspfParameters.DD:
+ processDdMessage(ospfMessage, ctx);
+ break;
+ case OspfParameters.LSREQUEST:
+ processLsRequestMessage(ospfMessage, ctx);
+ break;
+ case OspfParameters.LSUPDATE:
+ processLsUpdateMessage(ospfMessage, ctx);
+ break;
+ case OspfParameters.LSACK:
+ processLsAckMessage(ospfMessage, ctx);
+ break;
+ default:
+ log.debug("Unknown packet to process...!!!");
+ break;
+ }
+ }
+
+ /**
+ * Validates the OSPF message received.
+ *
+ * @param ospfMessage OSPF message.
+ * @return true if it is a valid else false.
+ * @throws Exception might throws exception
+ */
+ private boolean validateMessage(OspfMessage ospfMessage) throws Exception {
+ boolean isValid = true;
+ OspfPacketHeader header = (OspfPacketHeader) ospfMessage;
+
+ //added the check to eliminate self origin packets also two interfaces on same router.
+ if (!header.sourceIp().equals(ipAddress()) && !header.routerId().equals(
+ ospfArea.routerId())) {
+ //Verify the checksum
+ ChecksumCalculator checksum = new ChecksumCalculator();
+ if (!checksum.isValidOspfCheckSum(ospfMessage, OspfUtil.OSPFPACKET_CHECKSUM_POS1,
+ OspfUtil.OSPFPACKET_CHECKSUM_POS2)) {
+ log.debug("Checksum mismatch. Received packet type {} ", ospfMessage.ospfMessageType());
+ return false;
+ }
+ if (((OspfPacketHeader) ospfMessage).ospfVersion() != OspfUtil.OSPF_VERSION_2) {
+ log.debug("Received osfpMessage Version should match with Interface Version ");
+ return false;
+ }
+ if (!((OspfPacketHeader) ospfMessage).areaId().equals(ospfArea.areaId())) {
+ log.debug("Received ospf packets are from different area than our Area ID. " +
+ "Received Area ID {}, Our AreaId {} ",
+ ((OspfPacketHeader) ospfMessage).areaId(), ospfArea.areaId());
+ return false;
+ }
+
+ //According to RFC-2328 (8.2)
+ /**
+ * ABR should receive packets from backbone 0.0.0.0 as we are not acting as ABR
+ * we are rejecting the packet.
+ */
+ if (((OspfPacketHeader) ospfMessage).areaId().equals(Ip4Address.valueOf("0.0.0.0"))) {
+ log.debug("ABR should receive packets from backbone 0.0.0.0 as we are not acting as " +
+ "ABR we are rejecting the ospf packet");
+ return false;
+ }
+ if (interfaceType() == OspfInterfaceType.BROADCAST.value() &&
+ !OspfUtil.sameNetwork(((OspfPacketHeader) ospfMessage).sourceIp(),
+ ipAddress(), ipNetworkMask())) {
+ log.debug("Received packets from different subnets. Discarding...!!!");
+ return false;
+ }
+ } else {
+ isValid = false;
+ }
+
+ return isValid;
+ }
+
+ /**
+ * Processes Hello message.
+ *
+ * @param ospfMessage OSPF message instance.
+ * @param ctx context instance.
+ * @throws Exception might throws exception
+ */
+ void processHelloMessage(OspfMessage ospfMessage, ChannelHandlerContext ctx) throws Exception {
+ Channel channel = ctx.getChannel();
+ log.debug("OspfChannelHandler::processHelloMessage...!!!");
+ HelloPacket helloPacket = (HelloPacket) ospfMessage;
+
+ // processing of hello packet as per RFC 2328 section 10.5
+ log.debug("OspfChannelHandler::processHelloMessage::Interface Type {} OSPFInterfaceState {} ",
+ interfaceType(), state());
+
+ if (interfaceType() != OspfInterfaceType.POINT_TO_POINT.value()) {
+ if (!helloPacket.networkMask().equals(ipNetworkMask())) {
+ log.debug("OspfChannelHandler::processHelloMessage::Hello Packet Received does not " +
+ "match the same network mask as the configure Interface");
+ return;
+ }
+ }
+ if (helloPacket.helloInterval() != helloIntervalTime()) {
+ log.debug("OspfChannelHandler::processHelloMessage::Hello Packet Received have the same " +
+ "hello interval as configured Interface");
+ return;
+ }
+ if (helloPacket.routerDeadInterval() != routerDeadIntervalTime()) {
+ log.debug("OspfChannelHandler::processHelloMessage::Hello Packet Received have the same " +
+ "Router Dead interval as configured Interface");
+ return;
+ }
+
+ if (interfaceType == OspfInterfaceType.POINT_TO_POINT.value() &&
+ !helloPacket.dr().equals(OspfUtil.DEFAULTIP)) {
+ log.debug("OspfChannelHandler::processHelloMessage:: Neighbor in broadcast network");
+ return;
+ }
+
+ if (interfaceType == OspfInterfaceType.POINT_TO_POINT.value()) {
+ // to verify if the neighbor which sent the hello is present in the OSPF Interface neighboring list .
+ OspfNbr nbr;
+ if (!isNeighborInList(helloPacket.routerId().toString())) {
+ nbr = new OspfNbrImpl(ospfArea, this, helloPacket.sourceIp(),
+ helloPacket.routerId(), helloPacket.options(), topologyForDeviceAndLink);
+ addNeighbouringRouter(nbr);
+ } else {
+ nbr = neighbouringRouter(helloPacket.routerId().toString());
+ nbr.setRouterPriority(helloPacket.routerPriority());
+ }
+ if (!helloPacket.containsNeighbour(ospfArea.routerId())) {
+ ((OspfNbrImpl) nbr).oneWayReceived(helloPacket, channel);
+ } else {
+ ((OspfNbrImpl) nbr).twoWayReceived(helloPacket, ctx.getChannel());
+ }
+ } else if (interfaceType == OspfInterfaceType.BROADCAST.value()) {
+
+ if (state() == OspfInterfaceState.WAITING) {
+ if ((!helloPacket.dr().equals(Ip4Address.valueOf("0.0.0.0"))) &&
+ (!helloPacket.bdr().equals(Ip4Address.valueOf("0.0.0.0")))) {
+ stopWaitTimer();
+ setDr(helloPacket.dr());
+ setBdr(helloPacket.bdr());
+ if (helloPacket.dr().equals(ipAddress())) {
+ setState(OspfInterfaceState.DR);
+ //refresh router Lsa
+ ospfArea.refreshArea(this);
+ } else if (helloPacket.bdr().equals(ipAddress())) {
+ setState(OspfInterfaceState.BDR);
+ //refresh router Lsa
+ ospfArea.refreshArea(this);
+ } else {
+ setState(OspfInterfaceState.DROTHER);
+ ospfArea.refreshArea(this);
+ }
+
+ } else if (!helloPacket.dr().equals(Ip4Address.valueOf("0.0.0.0")) ||
+ !helloPacket.bdr().equals(Ip4Address.valueOf("0.0.0.0"))) {
+ setDr(helloPacket.dr());
+ setBdr(helloPacket.bdr());
+ }
+ Ip4Address sourceIp = helloPacket.sourceIp();
+ OspfNbr nbr;
+ if (!isNeighborInList(helloPacket.routerId().toString())) {
+ nbr = new OspfNbrImpl(ospfArea, this, sourceIp, helloPacket.routerId(),
+ helloPacket.options(), topologyForDeviceAndLink);
+ nbr.setNeighborId(helloPacket.routerId());
+ nbr.setNeighborBdr(helloPacket.bdr());
+ nbr.setNeighborDr(helloPacket.dr());
+ nbr.setRouterPriority(helloPacket.routerPriority());
+ addNeighbouringRouter(nbr);
+ } else {
+ nbr = neighbouringRouter(helloPacket.routerId().toString());
+ nbr.setRouterPriority(helloPacket.routerPriority());
+ }
+ if (!helloPacket.containsNeighbour(ospfArea.routerId())) {
+ ((OspfNbrImpl) nbr).oneWayReceived(helloPacket, channel);
+ } else {
+ ((OspfNbrImpl) nbr).twoWayReceived(helloPacket, ctx.getChannel());
+ }
+
+ if (helloPacket.dr().equals(sourceIp)) {
+ if (helloPacket.bdr().equals(Ip4Address.valueOf("0.0.0.0"))) {
+ // call backup seen
+ stopWaitTimer();
+ backupSeen(ctx.getChannel());
+ }
+ }
+
+ if (helloPacket.bdr().equals(sourceIp)) {
+ // call backup seen
+ stopWaitTimer();
+ backupSeen(ctx.getChannel());
+ }
+ } else {
+
+ if ((!helloPacket.dr().equals(Ip4Address.valueOf("0.0.0.0")) ||
+ !helloPacket.bdr().equals(Ip4Address.valueOf("0.0.0.0")))
+ && routerPriority() == 0) {
+ setDr(helloPacket.dr());
+ setBdr(helloPacket.bdr());
+ }
+ //To verify if the neighbor which sent the hello is present in the OSPF Interface neighboring list .
+ Ip4Address sourceIp = helloPacket.sourceIp();
+ OspfNbr nbr;
+ if (!isNeighborInList(helloPacket.routerId().toString())) {
+ nbr = new OspfNbrImpl(ospfArea, this, sourceIp, helloPacket.routerId(),
+ helloPacket.options(), topologyForDeviceAndLink);
+ nbr.setNeighborId(helloPacket.routerId());
+ nbr.setNeighborBdr(helloPacket.bdr());
+ nbr.setNeighborDr(helloPacket.dr());
+ nbr.setRouterPriority(helloPacket.routerPriority());
+ addNeighbouringRouter(nbr);
+ ((OspfNbrImpl) nbr).oneWayReceived(helloPacket, channel);
+ } else {
+ log.debug("OspfChannelHandler::NeighborInList::helloPacket.bdr(): {}, " +
+ "helloPacket.dr(): {}", helloPacket.bdr(), helloPacket.dr());
+ nbr = neighbouringRouter(helloPacket.routerId().toString());
+ nbr.setRouterPriority(helloPacket.routerPriority());
+ if (!helloPacket.containsNeighbour(ospfArea.routerId())) {
+ ((OspfNbrImpl) nbr).oneWayReceived(helloPacket, channel);
+ } else {
+ ((OspfNbrImpl) nbr).twoWayReceived(helloPacket, ctx.getChannel());
+ }
+ if (nbr.routerPriority() != helloPacket.routerPriority()) {
+ nbr.setNeighborBdr(helloPacket.bdr());
+ nbr.setNeighborDr(helloPacket.dr());
+ neighborChange();
+ }
+
+
+ if (nbr.neighborIpAddr().equals(helloPacket.dr()) &&
+ !(nbr.neighborIpAddr().equals(nbr.neighborDr()))) {
+ nbr.setNeighborBdr(helloPacket.bdr());
+ nbr.setNeighborDr(helloPacket.dr());
+ neighborChange();
+ }
+
+ if (!(nbr.neighborIpAddr().equals(helloPacket.dr())) &&
+ (nbr.neighborIpAddr().equals(nbr.neighborDr()))) {
+ nbr.setNeighborBdr(helloPacket.bdr());
+ nbr.setNeighborDr(helloPacket.dr());
+ neighborChange();
+ }
+
+ if (nbr.neighborIpAddr().equals(helloPacket.bdr()) &&
+ !(nbr.neighborIpAddr().equals(nbr.neighborBdr()))) {
+ nbr.setNeighborBdr(helloPacket.bdr());
+ nbr.setNeighborDr(helloPacket.dr());
+ neighborChange();
+ }
+
+ if (!(nbr.neighborIpAddr().equals(helloPacket.bdr())) &&
+ (nbr.neighborIpAddr().equals(nbr.neighborBdr()))) {
+ nbr.setNeighborBdr(helloPacket.bdr());
+ nbr.setNeighborDr(helloPacket.dr());
+ neighborChange();
+ }
+
+ nbr.setNeighborBdr(helloPacket.bdr());
+ nbr.setNeighborDr(helloPacket.dr());
+ }
+ }
+ }
+ }
+
+ /**
+ * process the DD message which received.
+ *
+ * @param ospfMessage OSPF message instance.
+ * @param ctx channel handler context instance
+ * @throws Exception might throws exception
+ */
+ void processDdMessage(OspfMessage ospfMessage, ChannelHandlerContext ctx) throws Exception {
+ log.debug("OspfChannelHandler::processDdMessage...!!!");
+ Channel channel = ctx.getChannel();
+ DdPacket ddPacket = (DdPacket) ospfMessage;
+ log.debug("Got DD packet from {}", ddPacket.sourceIp());
+ //check it is present in listOfNeighbors
+ Ip4Address neighbourId = ddPacket.routerId();
+ OspfNbr nbr = neighbouringRouter(neighbourId.toString());
+
+ if (nbr != null) {
+ log.debug("OspfChannelHandler::processDdMessage:: OSPFNeighborState {}", nbr.getState());
+ // set options for the NBR
+ nbr.setIsOpaqueCapable(ddPacket.isOpaqueCapable());
+ if (ddPacket.imtu() > mtu()) {
+ log.debug("the MTU size is greater than the interface MTU");
+ return;
+ }
+ if (nbr.getState() == OspfNeighborState.DOWN) {
+ return;
+ }
+ if (nbr.getState() == OspfNeighborState.ATTEMPT) {
+ return;
+ }
+ if (nbr.getState() == OspfNeighborState.TWOWAY) {
+ nbr.adjOk(channel);
+ return;
+ }
+ //if init is the state call twoWayReceived
+ if (nbr.getState() == OspfNeighborState.INIT) {
+ ((OspfNbrImpl) nbr).twoWayReceived(ddPacket, ctx.getChannel());
+ } else if (nbr.getState() == OspfNeighborState.EXSTART) {
+ //get I,M,MS Bits
+ int initialize = ddPacket.isInitialize();
+ int more = ddPacket.isMore();
+ int masterOrSlave = ddPacket.isMaster();
+ int options = ddPacket.options();
+ nbr.setOptions(options);
+
+ if (initialize == OspfUtil.INITIALIZE_SET && more == OspfUtil.MORE_SET &&
+ masterOrSlave == OspfUtil.IS_MASTER) {
+ if (ddPacket.getLsaHeaderList().isEmpty()) {
+ if (OspfUtil.ipAddressToLong(ddPacket.routerId().toString()) >
+ OspfUtil.ipAddressToLong(ospfArea.routerId().toString())) {
+ nbr.setIsMaster(OspfUtil.IS_MASTER);
+ ((OspfNbrImpl) nbr).setLastDdPacket(ddPacket);
+ nbr.setDdSeqNum(ddPacket.sequenceNo());
+ nbr.setOptions(ddPacket.options());
+ ((OspfNbrImpl) nbr).negotiationDone(ddPacket, true, ddPacket.getLsaHeaderList(),
+ ctx.getChannel());
+ }
+ }
+ }
+ if (initialize == OspfUtil.INITIALIZE_NOTSET && masterOrSlave == OspfUtil.NOT_MASTER) {
+ if (nbr.ddSeqNum() == ddPacket.sequenceNo()) {
+ if (OspfUtil.ipAddressToLong(ddPacket.routerId().toString()) <
+ OspfUtil.ipAddressToLong(ospfArea.routerId().toString())) {
+ ((OspfNbrImpl) nbr).setLastDdPacket(ddPacket);
+ nbr.setOptions(ddPacket.options());
+ nbr.setDdSeqNum(nbr.ddSeqNum() + 1);
+ ((OspfNbrImpl) nbr).negotiationDone(ddPacket, false, ddPacket.getLsaHeaderList(),
+ ctx.getChannel());
+ }
+ }
+ }
+
+ } else if (nbr.getState() == OspfNeighborState.EXCHANGE) {
+ //get I,M,MS Bits
+ log.debug("Neighbor state:: EXCHANGE");
+ boolean isDuplicateDDPacket = compareDdPackets(ddPacket, ((OspfNbrImpl) nbr).lastDdPacket());
+ int initialize = ddPacket.isInitialize();
+ int more = ddPacket.isMore();
+ int masterOrSlave = ddPacket.isMaster();
+ int options = ddPacket.options();
+
+ if (!isDuplicateDDPacket) {
+ //if dd packet is not duplicate then continue
+ if (nbr.isMaster() != masterOrSlave) {
+ DdPacket newResPacket =
+ (DdPacket) ((OspfNbrImpl) nbr).seqNumMismatch("Master/Slave Inconsistency");
+ newResPacket.setDestinationIp(ddPacket.sourceIp());
+ log.debug("Sending back DDPacket to {}", ddPacket.sourceIp());
+ byte[] messageToWrite = getMessage(newResPacket);
+ ctx.getChannel().write(messageToWrite);
+ } else if (initialize == 1) {
+ DdPacket newResPacket =
+ (DdPacket) ((OspfNbrImpl) nbr).seqNumMismatch("Initialize bit inconsistency");
+ newResPacket.setDestinationIp(ddPacket.sourceIp());
+ log.debug("Sending back DDPacket to {}", ddPacket.sourceIp());
+ byte[] messageToWrite = getMessage(newResPacket);
+ ctx.getChannel().write(messageToWrite);
+ } else {
+
+ if (masterOrSlave == OspfUtil.NOT_MASTER) {
+ if (ddPacket.sequenceNo() == nbr.ddSeqNum()) {
+ //Process the DD Packet
+ ((OspfNbrImpl) nbr).processDdPacket(false, ddPacket, ctx.getChannel());
+ log.debug("Received DD Packet");
+ } else {
+ DdPacket newResPacket =
+ (DdPacket) ((OspfNbrImpl) nbr).seqNumMismatch("Sequence Number Mismatch");
+ newResPacket.setDestinationIp(ddPacket.sourceIp());
+ log.debug("Sending back DDPacket to {}", ddPacket.sourceIp());
+ byte[] messageToWrite = getMessage(newResPacket);
+ ctx.getChannel().write(messageToWrite);
+ }
+ } else {
+ //we are the slave
+ if (ddPacket.sequenceNo() == (nbr.ddSeqNum() + 1)) {
+ ((OspfNbrImpl) nbr).setLastDdPacket(ddPacket);
+ ((OspfNbrImpl) nbr).processDdPacket(true, ddPacket, ctx.getChannel());
+ log.debug("Process DD Packet");
+ } else {
+ DdPacket newResPacket =
+ (DdPacket) ((OspfNbrImpl) nbr).seqNumMismatch("options inconsistency");
+ newResPacket.setDestinationIp(ddPacket.sourceIp());
+ log.debug("Sending back DDPacket to {}", ddPacket.sourceIp());
+ byte[] messageToWrite = getMessage(newResPacket);
+ ctx.getChannel().write(messageToWrite);
+ }
+ }
+ }
+ } else {
+ if (masterOrSlave == OspfUtil.NOT_MASTER) {
+ return;
+ } else {
+ DdPacket newResPacket = ((OspfNbrImpl) nbr).lastSentDdPacket();
+ log.debug("Sending back DDPacket to {}", ddPacket.sourceIp());
+ byte[] messageToWrite = getMessage(newResPacket);
+ ctx.getChannel().write(messageToWrite);
+ }
+ }
+ } else if (nbr.getState() == OspfNeighborState.LOADING || nbr.getState() == OspfNeighborState.FULL) {
+ //In case if we are slave then we have to send the last received DD Packet
+ int options = ddPacket.options();
+ if (nbr.options() != options) {
+ OspfMessage newResPacket = ((OspfNbrImpl) nbr).seqNumMismatch("Initialize bit inconsistency");
+ newResPacket.setDestinationIp(ddPacket.sourceIp());
+ byte[] messageToWrite = getMessage(newResPacket);
+ ctx.getChannel().write(messageToWrite);
+ } else if (ddPacket.isInitialize() == OspfUtil.INITIALIZE_SET) {
+ OspfMessage newResPacket = ((OspfNbrImpl) nbr).seqNumMismatch("Initialize bit inconsistency");
+ newResPacket.setDestinationIp(ddPacket.sourceIp());
+ byte[] messageToWrite = getMessage(newResPacket);
+ ctx.getChannel().write(messageToWrite);
+ }
+ boolean isDuplicate = compareDdPackets(ddPacket, ((OspfNbrImpl) nbr).lastDdPacket());
+ //we are master
+ if (nbr.isMaster() != OspfUtil.IS_MASTER) {
+ // check if the packet is duplicate, duplicates should be discarded by the master
+ if (isDuplicate) {
+ log.debug("received a duplicate DD packet");
+ }
+ } else {
+ //The slave must respond to duplicates by repeating the last Database Description packet
+ //that it had sent.
+ if (isDuplicate) {
+ ddPacket.setDestinationIp(ddPacket.sourceIp());
+ byte[] messageToWrite = getMessage(((OspfNbrImpl) nbr).lastSentDdPacket());
+ ctx.getChannel().write(messageToWrite);
+ log.debug("Sending back the duplicate packet ");
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * Process the Ls Request message.
+ *
+ * @param ospfMessage OSPF message instance.
+ * @param ctx channel handler context instance.
+ * @throws Exception might throws exception
+ */
+ void processLsRequestMessage(OspfMessage ospfMessage, ChannelHandlerContext ctx) throws Exception {
+ log.debug("OspfChannelHandler::processLsRequestMessage...!!!");
+ Channel channel = ctx.getChannel();
+ LsRequest lsrPacket = (LsRequest) ospfMessage;
+ OspfNbr nbr = neighbouringRouter(lsrPacket.routerId().toString());
+
+ if (nbr.getState() == OspfNeighborState.EXCHANGE || nbr.getState() == OspfNeighborState.LOADING ||
+ nbr.getState() == OspfNeighborState.FULL) {
+
+ LsRequest reqMsg = (LsRequest) ospfMessage;
+ if (reqMsg.getLinkStateRequests().isEmpty()) {
+ log.debug("Received Link State Request Vector is Empty ");
+ return;
+ } else {
+ //Send the LsUpdate back
+ ListIterator<LsRequestPacket> listItr = reqMsg.getLinkStateRequests().listIterator();
+ while (listItr.hasNext()) {
+ LsUpdate lsupdate = new LsUpdate();
+ lsupdate.setOspfVer(OspfUtil.OSPF_VERSION);
+ lsupdate.setOspftype(OspfPacketType.LSUPDATE.value());
+ lsupdate.setRouterId(ospfArea.routerId());
+ lsupdate.setAreaId(ospfArea.areaId());
+ lsupdate.setAuthType(OspfUtil.NOT_ASSIGNED);
+ lsupdate.setAuthentication(OspfUtil.NOT_ASSIGNED);
+ lsupdate.setOspfPacLength(OspfUtil.NOT_ASSIGNED); // to calculate packet length
+ lsupdate.setChecksum(OspfUtil.NOT_ASSIGNED);
+
+ //limit to mtu
+ int currentLength = OspfUtil.OSPF_HEADER_LENGTH + OspfUtil.FOUR_BYTES;
+ int maxSize = mtu() -
+ OspfUtil.LSA_HEADER_LENGTH; // subtract a normal IP header.
+ int noLsa = 0;
+ while (listItr.hasNext()) {
+ LsRequestPacket lsRequest = (LsRequestPacket) listItr.next();
+ // to verify length of the LSA
+ LsaWrapper wrapper = ospfArea.getLsa(lsRequest.lsType(), lsRequest.linkStateId(),
+ lsRequest.ownRouterId());
+ OspfLsa ospflsa = wrapper.ospfLsa();
+ if ((currentLength + ((LsaWrapperImpl) wrapper).lsaHeader().lsPacketLen()) >= maxSize) {
+ listItr.previous();
+ break;
+ }
+ if (ospflsa != null) {
+ lsupdate.addLsa(ospflsa);
+ noLsa++;
+
+ currentLength = currentLength + ((LsaWrapperImpl) wrapper).lsaHeader().lsPacketLen();
+ } else {
+ nbr.badLSReq(channel);
+ }
+ }
+ lsupdate.setNumberOfLsa(noLsa);
+ //set the destination
+ if (state() == OspfInterfaceState.DR ||
+ state() == OspfInterfaceState.BDR ||
+ state() == OspfInterfaceState.POINT2POINT) {
+ lsupdate.setDestinationIp(OspfUtil.ALL_SPF_ROUTERS);
+ } else if (state() == OspfInterfaceState.DROTHER) {
+ lsupdate.setDestinationIp(OspfUtil.ALL_DROUTERS);
+ }
+ byte[] messageToWrite = getMessage(lsupdate);
+ ctx.getChannel().write(messageToWrite);
+ }
+ }
+ }
+ }
+
+ /**
+ * Process the ls update message.
+ *
+ * @param ospfMessage OSPF message instance.
+ * @param ctx channel handler context instance.
+ * @throws Exception might throws exception
+ */
+ void processLsUpdateMessage(OspfMessage ospfMessage, ChannelHandlerContext ctx) throws Exception {
+ log.debug("OspfChannelHandler::processLsUpdateMessage");
+ LsUpdate lsUpdate = (LsUpdate) ospfMessage;
+ String neighbourId = lsUpdate.routerId().toString();
+ //LSUpdate packet has been associated with a particular neighbor.
+ //Neighbor should not be in lesser state than Exchange.
+ if (isNeighborInList(neighbourId)) {
+ OspfNbrImpl nbr = (OspfNbrImpl) neighbouringRouter(neighbourId);
+ if (nbr.getState() == OspfNeighborState.EXCHANGE ||
+ nbr.getState() == OspfNeighborState.LOADING) {
+ nbr.processLsUpdate(lsUpdate, ctx.getChannel());
+ } else if (nbr.getState() == OspfNeighborState.FULL) {
+ if (lsUpdate.noLsa() != 0) {
+ List<OspfLsa> list = lsUpdate.getLsaList();
+ Iterator itr = list.iterator();
+ while (itr.hasNext()) {
+ LsaHeader lsa = (LsaHeader) itr.next();
+ nbr.processReceivedLsa(lsa, true, ctx.getChannel(), lsUpdate.sourceIp());
+ }
+ } else {
+ return;
+ }
+ }
+ }
+ }
+
+ /**
+ * Process the ls acknowledge message.
+ *
+ * @param ospfMessage OSPF message instance.
+ * @param ctx channel handler context instance.
+ * @throws Exception might throws exception
+ */
+ void processLsAckMessage(OspfMessage ospfMessage, ChannelHandlerContext ctx) throws Exception {
+ log.debug("OspfChannelHandler::processLsAckMessage");
+ LsAcknowledge lsAckPacket = (LsAcknowledge) ospfMessage;
+ //check it is present in listOfNeighbors
+ OspfNbrImpl nbr = (OspfNbrImpl) neighbouringRouter(lsAckPacket.routerId().toString());
+ if (nbr != null) {
+ if (nbr.getState().getValue() < OspfNeighborState.EXCHANGE.getValue()) {
+ // discard the packet.
+ return;
+ } else {
+ // process ls acknowledgements
+ Iterator itr = lsAckPacket.getLinkStateHeaders().iterator();
+ while (itr.hasNext()) {
+ LsaHeader lsRequest = (LsaHeader) itr.next();
+
+ OspfLsa ospfLsa =
+ (OspfLsa) nbr.getPendingReTxList().get(((OspfAreaImpl) ospfArea).getLsaKey(lsRequest));
+ if (lsRequest != null && ospfLsa != null) {
+ String isSame = ((OspfLsdbImpl) ospfArea.database()).isNewerOrSameLsa(
+ lsRequest, (LsaHeader) ospfLsa);
+ if (isSame.equals("same")) {
+ nbr.getPendingReTxList().remove(((OspfAreaImpl) ospfArea).getLsaKey(lsRequest));
+ }
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * Compares two Dd Packets to check whether its duplicate or not.
+ *
+ * @param receivedDPacket received DD packet from network.
+ * @param lastDdPacket Last DdPacket which we sent.
+ * @return true if it is a duplicate packet else false.
+ */
+ public boolean compareDdPackets(DdPacket receivedDPacket, DdPacket lastDdPacket) {
+ if (receivedDPacket.isInitialize() == lastDdPacket.isInitialize()) {
+ if (receivedDPacket.isMaster() == lastDdPacket.isMaster()) {
+ if (receivedDPacket.isMore() == lastDdPacket.isMore()) {
+ if (receivedDPacket.options() == lastDdPacket.options()) {
+ if (receivedDPacket.sequenceNo() == lastDdPacket.sequenceNo()) {
+ return true;
+ }
+ }
+ }
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Starts the hello timer which sends hello packet every configured seconds.
+ */
+ public void startHelloTimer() {
+ log.debug("OSPFInterfaceChannelHandler::startHelloTimer");
+ exServiceHello = Executors.newSingleThreadScheduledExecutor();
+ helloTimerTask = new InternalHelloTimer();
+ final ScheduledFuture<?> helloHandle =
+ exServiceHello.scheduleAtFixedRate(helloTimerTask, delay, helloIntervalTime, TimeUnit.SECONDS);
+ }
+
+ /**
+ * Stops the hello timer.
+ */
+ public void stopHelloTimer() {
+ log.debug("OSPFInterfaceChannelHandler::stopHelloTimer ");
+ exServiceHello.shutdown();
+ }
+
+ /**
+ * Starts the wait timer.
+ */
+ public void startWaitTimer() {
+ log.debug("OSPFNbr::startWaitTimer");
+ exServiceWait = Executors.newSingleThreadScheduledExecutor();
+ waitTimerTask = new InternalWaitTimer();
+ final ScheduledFuture<?> waitTimerHandle =
+ exServiceWait.schedule(waitTimerTask, routerDeadIntervalTime(), TimeUnit.SECONDS);
+ }
+
+ /**
+ * Stops the wait timer.
+ */
+ public void stopWaitTimer() {
+ log.debug("OSPFNbr::stopWaitTimer ");
+ exServiceWait.shutdown();
+ }
+
+ /**
+ * Starts the timer which waits for configured seconds and sends Delayed Ack Packet.
+ */
+ public void startDelayedAckTimer() {
+ if (!isDelayedAckTimerScheduled) {
+ log.debug("Started DelayedAckTimer...!!!");
+ exServiceDelayedAck = Executors.newSingleThreadScheduledExecutor();
+ delayedAckTimerTask = new InternalDelayedAckTimer();
+ final ScheduledFuture<?> delayAckHandle =
+ exServiceDelayedAck.scheduleAtFixedRate(delayedAckTimerTask, delayedAckTimerInterval,
+ delayedAckTimerInterval, TimeUnit.MILLISECONDS);
+ isDelayedAckTimerScheduled = true;
+ }
+ }
+
+ /**
+ * Stops the delayed acknowledge timer.
+ */
+ public void stopDelayedAckTimer() {
+ if (isDelayedAckTimerScheduled) {
+ log.debug("Stopped DelayedAckTimer...!!!");
+ isDelayedAckTimerScheduled = false;
+ exServiceDelayedAck.shutdown();
+ }
+ }
+
+ /**
+ * Performs DR election.
+ *
+ * @param ch Netty Channel instance.
+ * @throws Exception might throws exception
+ */
+ public void electRouter(Channel ch) throws Exception {
+
+ Ip4Address currentDr = dr();
+ Ip4Address currentBdr = bdr();
+ OspfInterfaceState oldState = state();
+ OspfInterfaceState newState;
+
+ log.debug("OSPFInterfaceChannelHandler::electRouter -> currentDr: {}, currentBdr: {}",
+ currentDr, currentBdr);
+ List<OspfEligibleRouter> eligibleRouters = calculateListOfEligibleRouters(new OspfEligibleRouter());
+
+ log.debug("OSPFInterfaceChannelHandler::electRouter -> eligibleRouters: {}", eligibleRouters);
+ OspfEligibleRouter electedBdr = electBdr(eligibleRouters);
+ OspfEligibleRouter electedDr = electDr(eligibleRouters, electedBdr);
+
+ setBdr(electedBdr.getIpAddress());
+ setDr(electedDr.getIpAddress());
+
+ if (electedBdr.getIpAddress().equals(ipAddress()) &&
+ !electedBdr.getIpAddress().equals(currentBdr)) {
+ setState(OspfInterfaceState.BDR);
+ }
+
+ if (electedDr.getIpAddress().equals(ipAddress()) &&
+ !electedDr.getIpAddress().equals(currentDr)) {
+ setState(OspfInterfaceState.DR);
+ }
+
+ if (state() != oldState &&
+ !(state() == OspfInterfaceState.DROTHER &&
+ oldState.value() < OspfInterfaceState.DROTHER.value())) {
+ log.debug("Recalculating as the State is changed ");
+ log.debug("OSPFInterfaceChannelHandler::electRouter -> currentDr: {}, currentBdr: {}",
+ currentDr, currentBdr);
+ eligibleRouters = calculateListOfEligibleRouters(new OspfEligibleRouter());
+
+ log.debug("OSPFInterfaceChannelHandler::electRouter -> eligibleRouters: {}", eligibleRouters);
+ electedBdr = electBdr(eligibleRouters);
+ electedDr = electDr(eligibleRouters, electedBdr);
+
+ setBdr(electedBdr.getIpAddress());
+ setDr(electedDr.getIpAddress());
+ }
+
+ if (electedBdr.getIpAddress().equals(ipAddress()) &&
+ !electedBdr.getIpAddress().equals(currentBdr)) {
+ setState(OspfInterfaceState.BDR);
+ ospfArea.refreshArea(this);
+ }
+
+ if (electedDr.getIpAddress().equals(ipAddress()) &&
+ !electedDr.getIpAddress().equals(currentDr)) {
+ setState(OspfInterfaceState.DR);
+ //Refresh Router Lsa & Network Lsa
+ ospfArea.refreshArea(this);
+ }
+
+ if (currentDr != electedDr.getIpAddress() || currentBdr != electedBdr.getIpAddress()) {
+ Set<String> negibhorIdList;
+ negibhorIdList = listOfNeighbors().keySet();
+ for (String routerid : negibhorIdList) {
+ OspfNbrImpl nbr = (OspfNbrImpl) neighbouringRouter(routerid);
+ if (nbr.getState().getValue() >= OspfNeighborState.TWOWAY.getValue()) {
+ nbr.adjOk(ch);
+ }
+ }
+ }
+
+ log.debug("OSPFInterfaceChannelHandler::electRouter -> ElectedDR: {}, ElectedBDR: {}",
+ electedDr.getIpAddress(), electedBdr.getIpAddress());
+ }
+
+
+ /**
+ * BDR Election process. Find the list of eligible router to participate in the process.
+ *
+ * @param electedDr router elected as DR.
+ * @return list of eligible routers
+ */
+ public List<OspfEligibleRouter> calculateListOfEligibleRouters(OspfEligibleRouter electedDr) {
+ log.debug("OSPFNbr::calculateListOfEligibleRouters ");
+ Set<String> neighborIdList;
+ List<OspfEligibleRouter> eligibleRouters = new ArrayList<>();
+
+ neighborIdList = listOfNeighbors().keySet();
+ for (String routerId : neighborIdList) {
+ OspfNbrImpl nbr = (OspfNbrImpl) neighbouringRouter(routerId);
+ if (nbr.getState().getValue() >= OspfNeighborState.TWOWAY.getValue() &&
+ nbr.routerPriority() > 0) {
+ OspfEligibleRouter router = new OspfEligibleRouter();
+ router.setIpAddress(nbr.neighborIpAddr());
+ router.setRouterId(nbr.neighborId());
+ router.setRouterPriority(nbr.routerPriority());
+ if (nbr.neighborDr().equals(nbr.neighborIpAddr()) ||
+ electedDr.getIpAddress().equals(nbr.neighborIpAddr())) {
+ router.setIsDr(true);
+ } else if (nbr.neighborBdr().equals(nbr.neighborIpAddr())) {
+ router.setIsBdr(true);
+ }
+ eligibleRouters.add(router);
+ }
+ }
+ // interface does not have states like two and all
+ if (routerPriority() > 0) {
+ OspfEligibleRouter router = new OspfEligibleRouter();
+ router.setIpAddress(ipAddress());
+ router.setRouterId(ospfArea.routerId());
+ router.setRouterPriority(routerPriority());
+ if (dr().equals(ipAddress()) ||
+ electedDr.getIpAddress().equals(ipAddress())) {
+ router.setIsDr(true);
+ } else if (bdr().equals(ipAddress()) &&
+ !dr().equals(ipAddress())) {
+ router.setIsBdr(true);
+ }
+
+ eligibleRouters.add(router);
+ }
+
+ return eligibleRouters;
+ }
+
+ /**
+ * Based on router priority assigns BDR.
+ *
+ * @param eligibleRouters list of routers to participate in bdr election.
+ * @return OSPF Eligible router instance.
+ */
+ public OspfEligibleRouter electBdr(List<OspfEligibleRouter> eligibleRouters) {
+ log.debug("OSPFInterfaceChannelHandler::electBdr -> eligibleRouters: {}", eligibleRouters);
+ List<OspfEligibleRouter> declaredAsBdr = new ArrayList<>();
+ List<OspfEligibleRouter> notDrAndBdr = new ArrayList<>();
+ for (OspfEligibleRouter router : eligibleRouters) {
+ if (router.isBdr()) {
+ declaredAsBdr.add(router);
+ }
+ if (!router.isBdr() && !router.isDr()) {
+ notDrAndBdr.add(router);
+ }
+ }
+
+ OspfEligibleRouter electedBdr = new OspfEligibleRouter();
+ if (!declaredAsBdr.isEmpty()) {
+ if (declaredAsBdr.size() == 1) {
+ electedBdr = declaredAsBdr.get(0);
+ } else if (declaredAsBdr.size() > 1) {
+ electedBdr = selectRouterBasedOnPriority(declaredAsBdr);
+ }
+ } else {
+ if (notDrAndBdr.size() == 1) {
+ electedBdr = notDrAndBdr.get(0);
+ } else if (notDrAndBdr.size() > 1) {
+ electedBdr = selectRouterBasedOnPriority(notDrAndBdr);
+ }
+ }
+
+ electedBdr.setIsBdr(true);
+ electedBdr.setIsDr(false);
+
+ return electedBdr;
+ }
+
+ /**
+ * DR Election process.
+ *
+ * @param eligibleRouters list of eligible routers.
+ * @param electedBdr Elected Bdr, OSPF eligible router instance.
+ * @return OSPF eligible router instance.
+ */
+ public OspfEligibleRouter electDr(List<OspfEligibleRouter> eligibleRouters,
+ OspfEligibleRouter electedBdr) {
+
+ List<OspfEligibleRouter> declaredAsDr = new ArrayList<>();
+ for (OspfEligibleRouter router : eligibleRouters) {
+ if (router.isDr()) {
+ declaredAsDr.add(router);
+ }
+ }
+
+ OspfEligibleRouter electedDr = new OspfEligibleRouter();
+ if (!declaredAsDr.isEmpty()) {
+ if (declaredAsDr.size() == 1) {
+ electedDr = declaredAsDr.get(0);
+ } else if (eligibleRouters.size() > 1) {
+ electedDr = selectRouterBasedOnPriority(declaredAsDr);
+ }
+ } else {
+ electedDr = electedBdr;
+ electedDr.setIsDr(true);
+ electedDr.setIsBdr(false);
+ }
+
+ return electedDr;
+ }
+
+ /**
+ * DR election process.
+ *
+ * @param routersList list of eligible routers.
+ * @return OSPF eligible router instance.
+ */
+ public OspfEligibleRouter selectRouterBasedOnPriority(List<OspfEligibleRouter> routersList) {
+
+ OspfEligibleRouter initialRouter = routersList.get(0);
+
+ for (int i = 1; i < routersList.size(); i++) {
+ OspfEligibleRouter router = routersList.get(i);
+ if (router.getRouterPriority() > initialRouter.getRouterPriority()) {
+ initialRouter = router;
+ } else if (router.getRouterPriority() == initialRouter.getRouterPriority()) {
+ try {
+ if (OspfUtil.ipAddressToLong(router.getIpAddress().toString()) >
+ OspfUtil.ipAddressToLong(initialRouter.getIpAddress().toString())) {
+ initialRouter = router;
+ }
+ } catch (Exception e) {
+ log.debug("OSPFInterfaceChannelHandler::selectRouterBasedOnPriority ->" +
+ " eligibleRouters: {}", initialRouter);
+ }
+ }
+ }
+
+ return initialRouter;
+ }
+
+ /**
+ * Adds device information.
+ *
+ * @param ospfRouter OSPF router instance
+ */
+ public void addDeviceInformation(OspfRouter ospfRouter) {
+ controller.addDeviceDetails(ospfRouter);
+ }
+
+ /**
+ * removes device information.
+ *
+ * @param ospfRouter OSPF neighbor instance
+ */
+ public void removeDeviceInformation(OspfRouter ospfRouter) {
+ controller.removeDeviceDetails(ospfRouter);
+ }
+
+ /**
+ * Adds link information.
+ *
+ * @param ospfRouter OSPF router instance
+ * @param ospfLinkTed list link ted instances
+ */
+ public void addLinkInformation(OspfRouter ospfRouter, OspfLinkTed ospfLinkTed) {
+ controller.addLinkDetails(ospfRouter, ospfLinkTed);
+ }
+
+ /**
+ * Removes link information.
+ *
+ * @param ospfRouter OSPF router instance
+ * @param ospfLinkTed OSPF link TED instance
+ */
+ public void removeLinkInformation(OspfRouter ospfRouter, OspfLinkTed ospfLinkTed) {
+ controller.removeLinkDetails(ospfRouter, ospfLinkTed);
+ }
+
+ /**
+ * Gets message as bytes.
+ *
+ * @param ospfMessage OSPF message
+ * @return OSPF message
+ */
+ private byte[] getMessage(OspfMessage ospfMessage) {
+ OspfMessageWriter messageWriter = new OspfMessageWriter();
+ if (state().equals(OspfInterfaceState.POINT2POINT)) {
+ ospfMessage.setDestinationIp(OspfUtil.ALL_SPF_ROUTERS);
+ }
+ return (messageWriter.getMessage(ospfMessage, interfaceIndex, state.value()));
+ }
+
+
@Override
public boolean equals(Object o) {
if (this == o) {
@@ -468,32 +1560,24 @@
return false;
}
OspfInterfaceImpl that = (OspfInterfaceImpl) o;
- return Objects.equal(areaId, that.areaId) &&
- Objects.equal(helloIntervalTime, that.helloIntervalTime) &&
+ return Objects.equal(helloIntervalTime, that.helloIntervalTime) &&
Objects.equal(routerDeadIntervalTime, that.routerDeadIntervalTime) &&
- Objects.equal(transmitDelay, that.transmitDelay) &&
Objects.equal(routerPriority, that.routerPriority) &&
- Objects.equal(systemInterfaceType, that.systemInterfaceType) &&
Objects.equal(interfaceType, that.interfaceType) &&
- Objects.equal(interfaceCost, that.interfaceCost) &&
- Objects.equal(pollInterval, that.pollInterval) &&
Objects.equal(mtu, that.mtu) &&
Objects.equal(reTransmitInterval, that.reTransmitInterval) &&
Objects.equal(ipAddress, that.ipAddress) &&
Objects.equal(ipNetworkMask, that.ipNetworkMask) &&
Objects.equal(listOfNeighbors, that.listOfNeighbors) &&
- Objects.equal(authType, that.authType) &&
- Objects.equal(authKey, that.authKey) &&
Objects.equal(dr, that.dr) &&
Objects.equal(bdr, that.bdr);
}
@Override
public int hashCode() {
- return Objects.hashCode(ipAddress, ipNetworkMask, areaId, helloIntervalTime,
- routerDeadIntervalTime, transmitDelay, routerPriority, listOfNeighbors,
- systemInterfaceType, interfaceType, interfaceCost, authType, authKey,
- pollInterval, mtu, reTransmitInterval, dr, bdr);
+ return Objects.hashCode(ipAddress, ipNetworkMask, helloIntervalTime,
+ routerDeadIntervalTime, routerPriority, listOfNeighbors,
+ interfaceType, mtu, reTransmitInterval, dr, bdr);
}
@Override
@@ -502,19 +1586,187 @@
.omitNullValues()
.add("ipAddress", ipAddress)
.add("routerPriority", routerPriority)
- .add("areaID", areaId)
.add("helloIntervalTime", helloIntervalTime)
.add("routerDeadIntervalTime", routerDeadIntervalTime)
.add("interfaceType", interfaceType)
- .add("interfaceCost", interfaceCost)
- .add("authType", authType)
- .add("authKey", authKey)
- .add("pollInterval", pollInterval)
.add("mtu", mtu)
.add("reTransmitInterval", reTransmitInterval)
.add("dr", dr)
.add("bdr", bdr)
- .add("transmitDelay", transmitDelay)
.toString();
}
+
+ /**
+ * Represents a Hello task which sent a hello message every configured time interval.
+ */
+ private class InternalHelloTimer implements Runnable {
+
+ /**
+ * Creates an instance of Hello Timer.
+ */
+ InternalHelloTimer() {
+ }
+
+ @Override
+ public void run() {
+ if (channel != null && channel.isOpen() && channel.isConnected()) {
+ if (interfaceType() == OspfInterfaceType.BROADCAST.value()) {
+ if (interfaceTypeOldValue != interfaceType()) {
+ try {
+ callDrElection(channel);
+ } catch (Exception e) {
+ log.debug("Error while calling interfaceUp {}", e.getMessage());
+ }
+ }
+ } else {
+ if (interfaceTypeOldValue != interfaceType()) {
+ interfaceTypeOldValue = interfaceType();
+ }
+ }
+ HelloPacket hellopacket = new HelloPacket();
+ //Headers
+ hellopacket.setOspfVer(OspfUtil.OSPF_VERSION);
+ hellopacket.setOspftype(OspfPacketType.HELLO.value());
+ hellopacket.setOspfPacLength(0); //will be modified while encoding
+ hellopacket.setRouterId(ospfArea.routerId());
+ hellopacket.setAreaId(ospfArea.areaId());
+ hellopacket.setChecksum(0); //will be modified while encoding
+ hellopacket.setAuthType(OspfUtil.NOT_ASSIGNED);
+ hellopacket.setAuthentication(OspfUtil.NOT_ASSIGNED);
+ //Body
+ hellopacket.setNetworkMask(ipNetworkMask());
+ hellopacket.setOptions(ospfArea.options());
+ hellopacket.setHelloInterval(helloIntervalTime());
+ hellopacket.setRouterPriority(routerPriority());
+ hellopacket.setRouterDeadInterval(routerDeadIntervalTime());
+ hellopacket.setDr(dr());
+ hellopacket.setBdr(bdr());
+
+ Map<String, OspfNbr> listOfNeighbors = listOfNeighbors();
+ Set<String> keys = listOfNeighbors.keySet();
+ Iterator itr = keys.iterator();
+ while (itr.hasNext()) {
+ String nbrKey = (String) itr.next();
+ OspfNbrImpl nbr = (OspfNbrImpl) listOfNeighbors.get(nbrKey);
+ if (nbr.getState() != OspfNeighborState.DOWN) {
+ hellopacket.addNeighbor(Ip4Address.valueOf(nbrKey));
+ }
+ }
+ // build a hello Packet
+ if (channel == null || !channel.isOpen() || !channel.isConnected()) {
+ log.debug("Hello Packet not sent !!.. Channel Issue...");
+ return;
+ }
+
+ hellopacket.setDestinationIp(OspfUtil.ALL_SPF_ROUTERS);
+ byte[] messageToWrite = getMessage(hellopacket);
+ ChannelFuture future = channel.write(messageToWrite);
+ if (future.isSuccess()) {
+ log.debug("Hello Packet successfully sent !!");
+ } else {
+ future.awaitUninterruptibly();
+ }
+
+ }
+ }
+ }
+
+ /**
+ * Represents a Wait Timer task which waits the interface state to become WAITING.
+ * It initiates DR election process.
+ */
+ private class InternalWaitTimer implements Runnable {
+ Channel ch;
+
+ /**
+ * Creates an instance of Wait Timer.
+ */
+ InternalWaitTimer() {
+ this.ch = channel;
+ }
+
+ @Override
+ public void run() {
+ log.debug("Wait timer expires...");
+ if (ch != null && ch.isConnected()) {
+ try {
+ waitTimer(ch);
+ } catch (Exception e) {
+ log.debug("Exception at wait timer ...!!!");
+ }
+ }
+ }
+ }
+
+ /**
+ * Represents a task which sent a LS Acknowledge from the link state headers list.
+ */
+ private class InternalDelayedAckTimer implements Runnable {
+ Channel ch;
+
+ /**
+ * Creates an instance of Delayed acknowledge timer.
+ */
+ InternalDelayedAckTimer() {
+ this.ch = channel;
+ }
+
+ @Override
+ public void run() {
+ if (!linkStateHeaders().isEmpty()) {
+ isDelayedAckTimerScheduled = true;
+ if (ch != null && ch.isConnected()) {
+
+ List<LsaHeader> listOfLsaHeadersAcknowledged = new ArrayList<>();
+ List<LsaHeader> listOfLsaHeaders = linkStateHeaders();
+ log.debug("Delayed Ack, Number of Lsa's to Ack {}", listOfLsaHeaders.size());
+ Iterator itr = listOfLsaHeaders.iterator();
+ while (itr.hasNext()) {
+ LsAcknowledge ackContent = new LsAcknowledge();
+ //Setting OSPF Header
+ ackContent.setOspfVer(OspfUtil.OSPF_VERSION);
+ ackContent.setOspftype(OspfPacketType.LSAACK.value());
+ ackContent.setRouterId(ospfArea.routerId());
+ ackContent.setAreaId(ospfArea.areaId());
+ ackContent.setAuthType(OspfUtil.NOT_ASSIGNED);
+ ackContent.setAuthentication(OspfUtil.NOT_ASSIGNED);
+ ackContent.setOspfPacLength(OspfUtil.NOT_ASSIGNED);
+ ackContent.setChecksum(OspfUtil.NOT_ASSIGNED);
+ //limit to mtu
+ int currentLength = OspfUtil.OSPF_HEADER_LENGTH;
+ int maxSize = mtu() -
+ OspfUtil.LSA_HEADER_LENGTH; // subtract a normal IP header.
+ while (itr.hasNext()) {
+ if ((currentLength + OspfUtil.LSA_HEADER_LENGTH) >= maxSize) {
+ break;
+ }
+ LsaHeader lsaHeader = (LsaHeader) itr.next();
+ ackContent.addLinkStateHeader(lsaHeader);
+ currentLength = currentLength + OspfUtil.LSA_HEADER_LENGTH;
+ listOfLsaHeadersAcknowledged.add(lsaHeader);
+ log.debug("Delayed Ack, Added Lsa's to Ack {}", lsaHeader);
+ }
+
+ log.debug("Delayed Ack, Number of Lsa's in LsAck packet {}",
+ ackContent.getLinkStateHeaders().size());
+
+ //set the destination
+ if (state() == OspfInterfaceState.DR || state() == OspfInterfaceState.BDR
+ || state() == OspfInterfaceState.POINT2POINT) {
+ ackContent.setDestinationIp(OspfUtil.ALL_SPF_ROUTERS);
+ } else if (state() == OspfInterfaceState.DROTHER) {
+ ackContent.setDestinationIp(OspfUtil.ALL_DROUTERS);
+ }
+ byte[] messageToWrite = getMessage(ackContent);
+ ch.write(messageToWrite);
+
+ for (LsaHeader lsa : listOfLsaHeadersAcknowledged) {
+ linkStateHeaders().remove(lsa);
+ removeLsaFromNeighborMap(((OspfAreaImpl) ospfArea).getLsaKey(lsa));
+ }
+ }
+ }
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/impl/Controller.java b/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/impl/Controller.java
index 3f8f967..cf24080 100644
--- a/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/impl/Controller.java
+++ b/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/impl/Controller.java
@@ -15,13 +15,15 @@
*/
package org.onosproject.ospf.controller.impl;
-import org.jboss.netty.bootstrap.ServerBootstrap;
+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.group.ChannelGroup;
-import org.jboss.netty.channel.group.DefaultChannelGroup;
-import org.jboss.netty.channel.socket.nio.NioServerSocketChannelFactory;
+import org.jboss.netty.channel.socket.nio.NioClientSocketChannelFactory;
+import org.onlab.packet.Ip4Address;
+import org.onlab.packet.TpPort;
import org.onosproject.net.driver.DriverService;
import org.onosproject.ospf.controller.OspfAgent;
import org.onosproject.ospf.controller.OspfArea;
@@ -29,42 +31,137 @@
import org.onosproject.ospf.controller.OspfLinkTed;
import org.onosproject.ospf.controller.OspfProcess;
import org.onosproject.ospf.controller.OspfRouter;
+import org.onosproject.ospf.protocol.util.OspfUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.NetworkInterface;
-import java.net.SocketException;
-import java.util.ArrayList;
-import java.util.Collections;
import java.util.Enumeration;
-import java.util.HashSet;
-import java.util.Iterator;
import java.util.List;
-import java.util.Set;
-import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
+
+import static org.onlab.util.Tools.groupedThreads;
/**
- * Representation of the main controller class. Handles all setup and network listeners.
+ * Representation of an OSPF controller.
*/
public class Controller {
-
- protected static final Logger log = LoggerFactory.getLogger(Controller.class);
protected static final int BUFFER_SIZE = 4 * 1024 * 1024;
- private static final String PROCESS = "process";
- private static final String AREA = "area";
- private static final String INTERFACE = "interface";
-
- protected int ospfPort = 7000;
- protected int workerThreads = 16;
+ private static final Logger log = LoggerFactory.getLogger(Controller.class);
+ private static final int RETRY_INTERVAL = 4;
+ private final int peerWorkerThreads = 16;
protected long systemStartTime;
+ byte[] configPacket = null;
+ private List<OspfProcess> processes = null;
+ private OspfInterfaceChannelHandler ospfChannelHandler;
+ private NioClientSocketChannelFactory peerExecFactory;
+ private ClientBootstrap peerBootstrap = null;
+ private TpPort isisPort = TpPort.tpPort(OspfUtil.SPORT);
+ private ScheduledExecutorService connectExecutor = null;
+ private int connectRetryCounter = 0;
+ private int connectRetryTime;
private DriverService driverService;
private OspfAgent agent;
- private List<ChannelGroup> cgList = new ArrayList();
- private List<NioServerSocketChannelFactory> execFactoryLst = new ArrayList<>();
- private List<OspfProcess> processes;
+
+ /**
+ * Deactivates OSPF controller.
+ */
+ public void isisDeactivate() {
+ peerExecFactory.shutdown();
+ }
+
+ /**
+ * Updates the processes configuration.
+ *
+ * @param ospfProcesses list of OSPF process instances
+ * @throws Exception might throws parse exception
+ */
+ public void updateConfig(List<OspfProcess> ospfProcesses) throws Exception {
+ log.debug("Controller::UpdateConfig called");
+ configPacket = new byte[OspfUtil.CONFIG_LENGTH];
+ byte numberOfInterface = 0; // number of interfaces to configure
+ configPacket[0] = (byte) 0xFF; // its a conf packet - identifier
+ for (OspfProcess ospfProcess : ospfProcesses) {
+ log.debug("OspfProcessDetails : " + ospfProcess);
+ for (OspfArea ospfArea : ospfProcess.areas()) {
+ for (OspfInterface ospfInterface : ospfArea.ospfInterfaceList()) {
+ log.debug("OspfInterfaceDetails : " + ospfInterface);
+ numberOfInterface++;
+ configPacket[2 * numberOfInterface] = (byte) ospfInterface.interfaceIndex();
+ configPacket[(2 * numberOfInterface) + 1] = (byte) 4;
+ }
+ }
+ }
+ configPacket[1] = numberOfInterface;
+ //First time configuration
+ if (processes == null) {
+ if (ospfProcesses.size() > 0) {
+ processes = ospfProcesses;
+ connectPeer();
+ }
+ } else {
+ ospfChannelHandler.updateInterfaceMap(ospfProcesses);
+ //Send the config packet
+ ospfChannelHandler.sentConfigPacket(configPacket);
+ }
+ }
+
+ /**
+ * Initializes the netty client channel connection.
+ */
+ private void initConnection() {
+ if (peerBootstrap != null) {
+ return;
+ }
+ peerBootstrap = createPeerBootStrap();
+
+ peerBootstrap.setOption("reuseAddress", true);
+ peerBootstrap.setOption("tcpNoDelay", true);
+ peerBootstrap.setOption("keepAlive", true);
+ peerBootstrap.setOption("receiveBufferSize", Controller.BUFFER_SIZE);
+ peerBootstrap.setOption("receiveBufferSizePredictorFactory",
+ new FixedReceiveBufferSizePredictorFactory(
+ Controller.BUFFER_SIZE));
+ peerBootstrap.setOption("receiveBufferSizePredictor",
+ new AdaptiveReceiveBufferSizePredictor(64, 4096, 65536));
+ peerBootstrap.setOption("child.keepAlive", true);
+ peerBootstrap.setOption("child.tcpNoDelay", true);
+ peerBootstrap.setOption("child.sendBufferSize", Controller.BUFFER_SIZE);
+ peerBootstrap.setOption("child.receiveBufferSize", Controller.BUFFER_SIZE);
+ peerBootstrap.setOption("child.receiveBufferSizePredictorFactory",
+ new FixedReceiveBufferSizePredictorFactory(
+ Controller.BUFFER_SIZE));
+ peerBootstrap.setOption("child.reuseAddress", true);
+
+ ospfChannelHandler = new OspfInterfaceChannelHandler(this, processes);
+ ChannelPipelineFactory pfact = new OspfPipelineFactory(ospfChannelHandler);
+ peerBootstrap.setPipelineFactory(pfact);
+ }
+
+ /**
+ * Creates peer boot strap.
+ *
+ * @return client bootstrap instance
+ */
+ private ClientBootstrap createPeerBootStrap() {
+
+ if (peerWorkerThreads == 0) {
+ peerExecFactory = new NioClientSocketChannelFactory(
+ Executors.newCachedThreadPool(groupedThreads("onos/isis", "boss-%d")),
+ Executors.newCachedThreadPool(groupedThreads("onos/isis", "worker-%d")));
+ return new ClientBootstrap(peerExecFactory);
+ } else {
+ peerExecFactory = new NioClientSocketChannelFactory(
+ Executors.newCachedThreadPool(groupedThreads("onos/isis", "boss-%d")),
+ Executors.newCachedThreadPool(groupedThreads("onos/isis", "worker-%d")),
+ peerWorkerThreads);
+ return new ClientBootstrap(peerExecFactory);
+ }
+ }
/**
* Gets all configured processes.
@@ -106,36 +203,14 @@
/**
* Removes link details.
*
- * @param ospfRouter OSPF router instance
+ * @param ospfRouter OSPF router instance
+ * @param ospfLinkTed OSPF link ted instance
*/
- public void removeLinkDetails(OspfRouter ospfRouter) {
- agent.deleteLink(ospfRouter);
+ public void removeLinkDetails(OspfRouter ospfRouter, OspfLinkTed ospfLinkTed) {
+ agent.deleteLink(ospfRouter, ospfLinkTed);
}
/**
- * Creates a server bootstrap.
- *
- * @return ServerBootstrap bootstrap instance
- */
- private ServerBootstrap createServerBootStrap() {
-
- Executor bossPool = Executors.newCachedThreadPool();
- Executor workerPool = Executors.newCachedThreadPool();
- NioServerSocketChannelFactory executerFactory;
-
- if (workerThreads == 0) {
- executerFactory = new NioServerSocketChannelFactory(bossPool, workerPool);
- execFactoryLst.add(executerFactory);
- } else {
- executerFactory = new NioServerSocketChannelFactory(bossPool, workerPool, workerThreads);
- execFactoryLst.add(executerFactory);
- }
-
- return new ServerBootstrap(executerFactory);
- }
-
-
- /**
* Initializes internal data structures.
*/
public void init() {
@@ -149,7 +224,7 @@
* @param driverService driver service instance
*/
public void start(OspfAgent ag, DriverService driverService) {
- log.info("Starting OSPF Controller...!!!");
+ log.info("Starting OSPF controller...!!!");
this.agent = ag;
this.driverService = driverService;
this.init();
@@ -159,615 +234,143 @@
* Stops the Controller.
*/
public void stop() {
- log.info("Stopping OSPF Controller...!!!");
-
- for (ChannelGroup cg : cgList) {
- cg.close();
- }
-
- for (NioServerSocketChannelFactory execFactory : execFactoryLst) {
- execFactory.shutdown();
- }
-
+ log.info("Stopping OSPF controller...!!!");
+ isisDeactivate();
processes.clear();
}
/**
- * Deletes configured interface from the area.
+ * Returns interface IP by index.
*
- * @param processId process id
- * @param areaId area id
- * @param interfaceToDelete interface to delete
- * @return true if operation success else false
+ * @param interfaceIndex interface index
+ * @return interface IP by index
*/
- public boolean deleteInterfaceFromArea(String processId, String areaId, String interfaceToDelete) {
- Iterator<OspfProcess> processItr = processes.iterator();
-
- while (processItr.hasNext()) {
- OspfProcess process = processItr.next();
- if (processId.equalsIgnoreCase(process.processId())) {
- Iterator<OspfArea> areaItr = process.areas().iterator();
- while (areaItr.hasNext()) {
- OspfArea area = areaItr.next();
- Iterator<OspfInterface> ospfIntrItr = area.getInterfacesLst().iterator();
- if (area.areaId().toString().equalsIgnoreCase(areaId)) {
- while (ospfIntrItr.hasNext()) {
- OspfInterface ospfIntr = ospfIntrItr.next();
- if (interfaceToDelete.equalsIgnoreCase(ospfIntr.ipAddress().toString())) {
- ospfIntrItr.remove();
- log.debug("Interface With Id {} is removed from Area {}",
- ospfIntr.ipAddress(), ospfIntr.areaId());
- return true;
- }
- }
- }
- }
- }
- }
-
- return false;
- }
-
- /*
- * Checks area with area id exists in process.
- *
- * @param processId process id
- * @param areaId area id
- * @return true if exist else false
- */
- public boolean checkArea(String processId, String areaId) {
- for (OspfProcess process : processes) {
- if (processId.equalsIgnoreCase(process.processId())) {
- for (OspfArea area : process.areas()) {
- if (area.areaId().toString().equalsIgnoreCase(areaId)) {
- return true;
- }
- }
- }
- }
- return false;
- }
-
- /*
- * Checks process with process id exists or not.
- *
- * @param processId process id
- * @return true if exist else false
- */
- public boolean checkProcess(String processId) {
- log.debug("CheckProcess,Process Id ={} processes={}", processId, processes);
- for (OspfProcess process : processes) {
- if (processId.equalsIgnoreCase(process.processId())) {
- return true;
- }
- }
- return false;
- }
-
- /*
- * Checks interface exists in given area.
- *
- * @param processId process id
- * @param areaId area id
- * @param ipAddress interface
- * @return true if exist else false
- */
- public boolean checkInterface(String processId, String areaId, String interfaceIp) {
- for (OspfProcess process : processes) {
- if (processId.equalsIgnoreCase(process.processId())) {
- for (OspfArea area : process.areas()) {
- if (area.areaId().toString().equalsIgnoreCase(areaId)) {
- for (OspfInterface ospfInterface : area.getInterfacesLst()) {
- if (ospfInterface.ipAddress().toString().equalsIgnoreCase(interfaceIp)) {
- return true;
- }
- }
- }
- }
- }
- }
- return false;
- }
-
- /**
- * Create processes first time when no process exist.
- * Create server bootstraps for all the interfaces in the processes.
- *
- * @param ospfProcesses list of OSPF processes to create
- */
- private void createProcessWhenNoProcessesExists(List<OspfProcess> ospfProcesses) {
- Set<String> interfaceIpList = new HashSet<>();
- Set<String> areaIdList = new HashSet<>();
- if (processes != null) {
- if (processes.size() == 0) {
-
- processes.addAll(ospfProcesses);
- for (OspfProcess process : ospfProcesses) {
- for (OspfArea area : process.areas()) {
- areaIdList.add(area.areaId().toString());
- for (OspfInterface intrfc : area.getInterfacesLst()) {
- interfaceIpList.add(intrfc.ipAddress().toString());
- }
- }
- }
- createBootStrapForCreatedInterface(interfaceIpList, areaIdList);
- }
- } else {
- processes = new ArrayList<>();
- processes.addAll(ospfProcesses);
-
- for (OspfProcess process : ospfProcesses) {
- for (OspfArea area : process.areas()) {
- areaIdList.add(area.areaId().toString());
- for (OspfInterface intrfc : area.getInterfacesLst()) {
- interfaceIpList.add(intrfc.ipAddress().toString());
- }
- }
- }
- createBootStrapForCreatedInterface(interfaceIpList, areaIdList);
- }
- }
-
- /**
- * Creates processes when already process exist.
- * It can be modifying existing process or adding a new process.
- *
- * @param ospfProcesses list of processes
- */
- private void createProcessWhenProcessesExists(List<OspfProcess> ospfProcesses) {
- if (ospfProcesses != null) {
- for (OspfProcess process : ospfProcesses) {
- if (!checkProcess(process.processId())) {
- createNewProcess(process.processId(), process);
- } else {
- List<OspfArea> areas = process.areas();
- for (OspfArea area : areas) {
- if (!checkArea(process.processId(), area.areaId().toString())) {
- createAreaInProcess(process.processId(),
- area.areaId().toString(), area);
- } else {
- updateAreaInProcess(process.processId(), area.areaId().toString(), area);
- for (OspfInterface interfc : area.getInterfacesLst()) {
- if (!checkInterface(process.processId(),
- area.areaId().toString(), interfc.ipAddress().toString())) {
- createInterfaceInAreaInProcess(process.processId(),
- area.areaId().toString(), interfc);
- } else {
- updateInterfaceParameters(process.processId(),
- area.areaId().toString(),
- interfc.ipAddress().toString(), interfc);
- }
- }
- }
- }
- }
- }
- }
- }
-
- /**
- * Updates the area information in already started OSPF processes.
- *
- * @param processId process id
- * @param areaId area id
- * @param areaFrmConfig area to update
- */
- public void updateAreaInProcess(String processId, String areaId, OspfArea areaFrmConfig) {
- if (processes != null) {
- Iterator<OspfProcess> processItr = processes.iterator();
- while (processItr.hasNext()) {
- OspfProcess process = processItr.next();
- if (processId.equalsIgnoreCase(process.processId())) {
- Iterator<OspfArea> area = process.areas().iterator();
- while (area.hasNext()) {
- OspfArea ospfArea = area.next();
- if (areaId.equalsIgnoreCase(ospfArea.areaId().toString())) {
- ospfArea.setAddressRanges(areaFrmConfig.addressRanges());
- ospfArea.setRouterId(areaFrmConfig.routerId());
- ospfArea.setTransitCapability(areaFrmConfig.isTransitCapability());
- ospfArea.setExternalRoutingCapability(areaFrmConfig.isExternalRoutingCapability());
- ospfArea.setStubCost(areaFrmConfig.stubCost());
- ospfArea.setOptions(areaFrmConfig.options());
- ospfArea.setIsOpaqueEnabled(areaFrmConfig.isOpaqueEnabled());
- log.debug("updateAreaInProcess::Process Id::{}::Ospf Area with Id::{}::is " +
- "updated", processId, areaId);
- }
- }
- }
- }
- }
- }
-
- /**
- * Updates the processes configuration.
- *
- * @param ospfProcesses list of OSPF processes
- */
- public void updateConfig(List<OspfProcess> ospfProcesses) {
- log.info("Controller::UpdateConfig called");
- if (processes != null) {
- if (processes.size() == 0) {
- createProcessWhenNoProcessesExists(ospfProcesses);
- } else {
- createProcessWhenProcessesExists(ospfProcesses);
- }
- } else {
- createProcessWhenNoProcessesExists(ospfProcesses);
- }
- }
-
- /**
- * Deletes configuration.
- *
- * @param ospfProcesses OSPF processes
- * @param attribute attribute to delete
- */
- public void deleteConfig(List<OspfProcess> ospfProcesses, String attribute) {
- log.info("Controller::UpdateConfig called");
- if (processes != null) {
- if (processes.size() == 0) {
- log.debug("DeleteConfig:: No process exists");
- } else {
- deleteProcessWhenExists(ospfProcesses, attribute);
- }
- } else {
- log.debug("DeleteConfig:: No process exists");
- }
- }
-
- /**
- * Creates a new process.
- *
- * @param processId process id
- * @param process OSPF process instance
- */
- private void createNewProcess(String processId, OspfProcess process) {
- Set<String> interfaceIpList = new HashSet<>();
- Set<String> areaIdList = new HashSet<>();
-
- processes.add(process);
- for (OspfArea area : process.areas()) {
- areaIdList.add(area.areaId().toString());
- for (OspfInterface interfc : area.getInterfacesLst()) {
- interfaceIpList.add(interfc.ipAddress().toString());
- }
- }
- log.debug("createNewProcess::List of areas in process::{} areas::{}", processId, areaIdList);
-
- createBootStrapForCreatedInterface(interfaceIpList, areaIdList);
-
- log.debug("createNewProcess:: all processes::{}", processes);
- }
-
- /**
- * Creates a new area information in the process.
- *
- * @param processId process id
- * @param areaId area id
- * @param area OSPF area instance
- */
- private void createAreaInProcess(String processId, String areaId, OspfArea area) {
- Set<String> interfaceIpList = new HashSet<>();
- Set<String> areaIdList = new HashSet<>();
-
- Iterator<OspfProcess> processItr = processes.iterator();
- while (processItr.hasNext()) {
- OspfProcess process = processItr.next();
- List<OspfArea> areasInProcess = process.areas();
- if (processId.equalsIgnoreCase(process.processId())) {
- areasInProcess.add(area);
-
- for (OspfInterface intrfc : area.getInterfacesLst()) {
- interfaceIpList.add(intrfc.ipAddress().toString());
- }
- areaIdList.add(area.areaId().toString());
- log.debug("createAreaInProcess::List of areas in process Id::{} " +
- "AreaId ::{} update process::{}",
- processId, areaId, process);
- }
- }
- createBootStrapForCreatedInterface(interfaceIpList, areaIdList);
- log.debug("createAreaInProcess:: all processes::{}", processes);
- }
-
- /**
- * Creates an interface in the given area and process.
- *
- * @param processId process id
- * @param areaId area id
- * @param ospfInterface OSPF interface instance
- */
- private void createInterfaceInAreaInProcess(String processId,
- String areaId, OspfInterface ospfInterface) {
- Set<String> interfaceIpList = new HashSet<>();
- Set<String> areaIdList = new HashSet<>();
-
- Iterator<OspfProcess> processItr = processes.iterator();
- while (processItr.hasNext()) {
- OspfProcess process = processItr.next();
- List<OspfArea> areasInProcess = process.areas();
- if (processId.equalsIgnoreCase(process.processId())) {
- Iterator<OspfArea> areaItr = areasInProcess.iterator();
- while (areaItr.hasNext()) {
- OspfArea area = areaItr.next();
- if (areaId.equalsIgnoreCase(area.areaId().toString())) {
- area.getInterfacesLst().add(ospfInterface);
- interfaceIpList.add(ospfInterface.ipAddress().toString());
-
- log.debug("createInterfaceInAreaInProcess::Interface " +
- "updated in process Id::{} AreaId ::{} Interface List{}",
- processId, areaId, area.getInterfacesLst());
-
- }
- }
- }
- }
- createBootStrapForCreatedInterface(interfaceIpList, areaIdList);
- log.debug("createInterfaceInAreaInProcess:: all processes::{}", processes);
- }
-
- /**
- * Updates interface parameters.
- *
- * @param processId process id
- * @param areaId area id
- * @param interfaceId interface id
- * @param ospfInterface OSPF interface instance
- */
- private void updateInterfaceParameters(String processId, String areaId, String interfaceId,
- OspfInterface ospfInterface) {
- Iterator<OspfProcess> processItr = processes.iterator();
- while (processItr.hasNext()) {
- OspfProcess process = processItr.next();
- if (processId.equalsIgnoreCase(process.processId())) {
- Iterator<OspfArea> areItr = process.areas().iterator();
- while (areItr.hasNext()) {
- OspfArea area = (OspfArea) areItr.next();
- if (area.areaId().toString().equalsIgnoreCase(areaId)) {
- Iterator<OspfInterface> intfcList = area.getInterfacesLst().iterator();
- while (intfcList.hasNext()) {
- OspfInterface intrfcObj = intfcList.next();
- if (interfaceId.equalsIgnoreCase(intrfcObj.ipAddress().toString())) {
- intrfcObj.setPollInterval(ospfInterface.pollInterval());
- intrfcObj.setTransmitDelay(ospfInterface.transmitDelay());
- intrfcObj.setBdr(ospfInterface.bdr());
- intrfcObj.setDr(ospfInterface.dr());
- intrfcObj.setAuthKey(ospfInterface.authKey());
- intrfcObj.setAuthType(ospfInterface.authType());
- intrfcObj.setHelloIntervalTime(ospfInterface.helloIntervalTime());
- intrfcObj.setReTransmitInterval(ospfInterface.reTransmitInterval());
- intrfcObj.setMtu(ospfInterface.mtu());
- intrfcObj.setInterfaceCost(ospfInterface.interfaceCost());
- intrfcObj.setInterfaceType(ospfInterface.interfaceType());
- intrfcObj.setRouterDeadIntervalTime(ospfInterface.routerDeadIntervalTime());
- intrfcObj.setRouterPriority(ospfInterface.routerPriority());
- intrfcObj.setIpNetworkMask(ospfInterface.ipNetworkMask());
- log.debug("updateInterfaceParameters::Interface updated in " +
- "process Id::{} AreaId ::{} Interface Id:{} " +
- "Updated Interface List: {}", processId, areaId,
- interfaceId, intfcList);
- }
- }
- }
- }
- }
- }
- log.debug("updateInterfaceParameters:: all processes::{}", processes);
- }
-
- /**
- * Creates server bootstrap for interface.
- *
- * @param interfaceIPs set of interfaces
- * @param areaIds set of area id's
- */
- private void createBootStrapForCreatedInterface(Set<String> interfaceIPs, Set<String> areaIds) {
-
- log.debug("createBootStrapForCreatedInterface:: List of new Interfaces::{}, " +
- "List of new areas::{}", interfaceIPs, areaIds);
- List<String> networkInterfaces = new ArrayList();
- //get the connected interfaces
- Enumeration<NetworkInterface> nets = null;
+ private Ip4Address getInterfaceIp(int interfaceIndex) {
+ Ip4Address ipAddress = null;
try {
- nets = NetworkInterface.getNetworkInterfaces();
- // Check NetworkInterfaces and add the IP's
- for (NetworkInterface netInt : Collections.list(nets)) {
- // if the interface is up & not loopback
- if (!netInt.isUp() && !netInt.isLoopback()) {
- continue;
- }
- //get all the InetAddresses
- Enumeration<InetAddress> inetAddresses = netInt.getInetAddresses();
- for (InetAddress inetAddress : Collections.list(inetAddresses)) {
- String ipAddress = inetAddress.getHostAddress();
- networkInterfaces.add(ipAddress);
+ 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;
}
}
- //Search for the address in all configured areas interfaces
- for (OspfProcess process : processes) {
- for (OspfArea area : process.areas()) {
- for (OspfInterface ospfIf : area.getInterfacesLst()) {
- String ipFromConfig = ospfIf.ipAddress().toString();
- if (interfaceIPs.contains(ipFromConfig)) {
- log.debug("Ip address::{} for area {} is newly created" + ipFromConfig);
- if (networkInterfaces.contains(ipFromConfig)) {
- log.debug("Both Config and Interface have ipAddress {} for area {}",
- ipFromConfig, area.areaId());
- // if same IP address create
- try {
- log.debug("Creating ServerBootstrap for {} @ {}", ipFromConfig, ospfPort);
+ } catch (Exception e) {
+ log.debug("Error while getting Interface IP by index");
+ return OspfUtil.DEFAULTIP;
+ }
- final ServerBootstrap bootstrap = createServerBootStrap();
+ return ipAddress;
+ }
- bootstrap.setOption("receiveBufferSize", Controller.BUFFER_SIZE);
- bootstrap.setOption("receiveBufferSizePredictorFactory",
- new FixedReceiveBufferSizePredictorFactory(
- Controller.BUFFER_SIZE));
- bootstrap.setOption("reuseAddress", true);
- bootstrap.setOption("tcpNoDelay", true);
- bootstrap.setOption("keepAlive", true);
+ /**
+ * Returns interface mask 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;
+ }
- bootstrap.setOption("child.receiveBufferSize", Controller.BUFFER_SIZE);
- bootstrap.setOption("child.receiveBufferSizePredictorFactory",
- new FixedReceiveBufferSizePredictorFactory(
- Controller.BUFFER_SIZE));
- bootstrap.setOption("child.reuseAddress", true);
- bootstrap.setOption("child.tcpNoDelay", true);
- bootstrap.setOption("child.keepAlive", true);
- bootstrap.setOption("receiveBufferSizePredictorFactory",
- new FixedReceiveBufferSizePredictorFactory(
- Controller.BUFFER_SIZE));
- bootstrap.setOption("receiveBufferSizePredictor",
- new AdaptiveReceiveBufferSizePredictor(64, 1024, 65536));
+ return subnetMask;
+ }
- ChannelPipelineFactory pfact = new OspfPipelineFactory(this, area, ospfIf);
- bootstrap.setPipelineFactory(pfact);
- InetSocketAddress sa = new InetSocketAddress(InetAddress.getByName(ipFromConfig),
- ospfPort);
+ /**
+ * Disconnects the executor.
+ */
+ public void disconnectExecutor() {
+ if (connectExecutor != null) {
+ connectExecutor.shutdown();
+ connectExecutor = null;
+ }
+ }
- ChannelGroup cg = new DefaultChannelGroup();
- cg.add(bootstrap.bind(sa));
- cgList.add(cg);
+ /**
+ * Connects to peer.
+ */
+ public void connectPeer() {
+ scheduleConnectionRetry(this.connectRetryTime);
+ }
- log.debug("Listening for connections on {}", sa);
+ /**
+ * 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);
+ }
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
+ /**
+ * 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 {}", OspfUtil.SHOST);
+ initConnection();
+ ospfChannelHandler.sentConfigPacket(configPacket);
+ InetSocketAddress connectToSocket = new InetSocketAddress(OspfUtil.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,
+ OspfUtil.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 {
- log.debug("Ip address::{} for area {} is not newly created" + ipFromConfig);
+ //Send the config packet
+ ospfChannelHandler.sentConfigPacket(configPacket);
+ connectRetryCounter++;
+ log.info("Connected to remote host {}, Connect Counter {}", OspfUtil.SHOST,
+ connectRetryCounter);
+ disconnectExecutor();
+
+ return;
}
}
- if (areaIds.contains(area.areaId().toString())) {
- area.initializeDb();
- }
- }
- }
-
- } catch (SocketException e) {
- log.error("Error occured due to SocketException::Class::{},Line::{},Method::{}",
- e.getStackTrace()[0].getFileName(), e.getStackTrace()[0].getLineNumber(),
- e.getStackTrace()[0].getMethodName());
- }
- }
-
- /**
- * Deletes given process.
- *
- * @param ospfProcesses list of OSPF process instance.
- * @param attribute attribute to delete
- */
- public void deleteProcessWhenExists(List<OspfProcess> ospfProcesses, String attribute) {
- if (ospfProcesses != null) {
- for (OspfProcess process : ospfProcesses) {
- if (checkProcess(process.processId())) {
- if (PROCESS.equalsIgnoreCase(attribute)) {
- deleteProcess(process.processId(), process);
- } else {
- List<OspfArea> areas = process.areas();
- for (OspfArea area : areas) {
- if (checkArea(process.processId(), area.areaId().toString())) {
- if (AREA.equalsIgnoreCase(attribute)) {
- deleteAreaFromProcess(process.processId(),
- area.areaId().toString(), area);
- } else {
- for (OspfInterface interfc : area.getInterfacesLst()) {
- if (checkInterface(process.processId(),
- area.areaId().toString(),
- interfc.ipAddress().toString())) {
- if (INTERFACE.equalsIgnoreCase(attribute)) {
- deleteInterfaceFromAreaProcess(process.processId(),
- area.areaId().toString(),
- interfc);
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
-
- /**
- * Deletes given process.
- *
- * @param processId process id
- * @param process OSPF process instance
- */
- private void deleteProcess(String processId, OspfProcess process) {
- if (processes != null) {
- Iterator<OspfProcess> itrProcess = processes.iterator();
- while (itrProcess.hasNext()) {
- OspfProcess ospfPrs = itrProcess.next();
- if (processId.equalsIgnoreCase(ospfPrs.processId())) {
- itrProcess.remove();
- }
- }
- }
- }
-
- /**
- * Deletes area from process.
- *
- * @param processId process id
- * @param areaId area id
- * @param area OSPF area instance
- */
- private void deleteAreaFromProcess(String processId, String areaId, OspfArea area) {
- if (processes != null) {
- Iterator<OspfProcess> itrProcess = processes.iterator();
- while (itrProcess.hasNext()) {
- OspfProcess ospfPrs = itrProcess.next();
- if (processId.equalsIgnoreCase(ospfPrs.processId())) {
- if (ospfPrs.areas() != null) {
- Iterator<OspfArea> itrArea = ospfPrs.areas().iterator();
- while (itrArea.hasNext()) {
- OspfArea ospfArea = itrArea.next();
- if (areaId.equalsIgnoreCase(ospfArea.areaId().toString())) {
- itrArea.remove();
- }
- }
- }
- }
- }
- }
- }
-
- /**
- * Deletes interface from area.
- *
- * @param processId process id
- * @param areaId area id
- * @param interfaceToDelete interface to delete
- */
- private void deleteInterfaceFromAreaProcess(String processId, String areaId, OspfInterface interfaceToDelete) {
- if (processes != null) {
- Iterator<OspfProcess> itrProcess = processes.iterator();
- while (itrProcess.hasNext()) {
- OspfProcess ospfPrs = itrProcess.next();
- if (processId.equalsIgnoreCase(ospfPrs.processId())) {
- if (ospfPrs.areas() != null) {
- Iterator<OspfArea> itrArea = ospfPrs.areas().iterator();
- while (itrArea.hasNext()) {
- OspfArea ospfArea = itrArea.next();
- if (areaId.equalsIgnoreCase(ospfArea.areaId().toString())) {
- if (ospfArea.getInterfacesLst() != null) {
- Iterator<OspfInterface> intrfcList = ospfArea.getInterfacesLst().iterator();
- while (intrfcList.hasNext()) {
- OspfInterface ospfItrfc = intrfcList.next();
- if (interfaceToDelete.ipAddress().equals(ospfItrfc.ipAddress())) {
- intrfcList.remove();
- }
- }
- }
- }
- }
- }
- }
+ });
+ } catch (Exception e) {
+ log.info("Connect peer exception : " + e.toString());
+ disconnectExecutor();
}
}
}
diff --git a/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/impl/OspfConfigUtil.java b/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/impl/OspfConfigUtil.java
new file mode 100644
index 0000000..06af9bf
--- /dev/null
+++ b/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/impl/OspfConfigUtil.java
@@ -0,0 +1,332 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.ospf.controller.impl;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import org.onlab.packet.Ip4Address;
+import org.onosproject.ospf.controller.OspfArea;
+import org.onosproject.ospf.controller.OspfInterface;
+import org.onosproject.ospf.controller.OspfProcess;
+import org.onosproject.ospf.controller.area.OspfAreaImpl;
+import org.onosproject.ospf.controller.area.OspfInterfaceImpl;
+import org.onosproject.ospf.controller.area.OspfProcessImpl;
+import org.onosproject.ospf.protocol.util.OspfUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.net.InetAddress;
+import java.net.NetworkInterface;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.List;
+
+/**
+ * Representation of OSPF network configuration parsing util.
+ */
+public final class OspfConfigUtil {
+ public static final String PROCESSID = "processId";
+ public static final String AREAS = "areas";
+ public static final String INTERFACEINDEX = "interfaceIndex";
+ public static final String AREAID = "areaId";
+ public static final String ROUTERID = "routerId";
+ public static final String INTERFACE = "interface";
+ public static final String HELLOINTERVAL = "helloIntervalTime";
+ public static final String ROUTERDEADINTERVAL = "routerDeadIntervalTime";
+ public static final String INTERFACETYPE = "interfaceType";
+ public static final String EXTERNALROUTINGCAPABILITY = "externalRoutingCapability";
+ protected static final Logger log = LoggerFactory.getLogger(OspfConfigUtil.class);
+ private static final String ISOPAQUE = "isOpaqueEnable";
+
+ /**
+ * Creates an instance of this.
+ */
+ private OspfConfigUtil() {
+
+ }
+
+ /**
+ * Returns list of OSPF process from the json nodes.
+ *
+ * @param jsonNodes represents one or more OSPF process configuration
+ * @return list of OSPF processes.
+ */
+ public static List<OspfProcess> processes(JsonNode jsonNodes) {
+ List<OspfProcess> ospfProcesses = new ArrayList<>();
+ if (jsonNodes == null) {
+ return ospfProcesses;
+ }
+ //From each Process nodes, get area and related interface details.
+ jsonNodes.forEach(jsonNode -> {
+ List<OspfArea> areas = new ArrayList<>();
+ //Get configured areas for the process.
+ for (JsonNode areaNode : jsonNode.path(AREAS)) {
+ List<OspfInterface> interfaceList = new ArrayList<>();
+ for (JsonNode interfaceNode : areaNode.path(INTERFACE)) {
+ OspfInterface ospfInterface = interfaceDetails(interfaceNode);
+ if (ospfInterface != null) {
+ interfaceList.add(ospfInterface);
+ }
+ }
+ //Get the area details
+ OspfArea area = areaDetails(areaNode);
+ if (area != null) {
+ area.setOspfInterfaceList(interfaceList);
+ areas.add(area);
+ }
+ }
+ OspfProcess process = new OspfProcessImpl();
+ process.setProcessId(jsonNode.path(PROCESSID).asText());
+ process.setAreas(areas);
+ ospfProcesses.add(process);
+ });
+
+ return ospfProcesses;
+ }
+
+ /**
+ * Returns interface IP by index.
+ *
+ * @param interfaceIndex interface index
+ * @return interface IP by index
+ */
+ private static 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 OspfUtil.DEFAULTIP;
+ }
+ return ipAddress;
+ }
+
+ /**
+ * Returns interface MAC by index.
+ *
+ * @param interfaceIndex interface index
+ * @return interface IP by index
+ */
+ private static 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 valid digit or not.
+ *
+ * @param strInput input value
+ * @return true if valid else false
+ */
+ private static boolean isValidDigit(String strInput) {
+ boolean isValid = true;
+ if (isPrimitive(strInput)) {
+ int input = Integer.parseInt(strInput);
+ if (input < 1 || input > 255) {
+ log.debug("Wrong config input value: {}", strInput);
+ isValid = false;
+ } else {
+ isValid = true;
+ }
+
+ } else {
+ isValid = false;
+ }
+
+ return isValid;
+ }
+
+ /**
+ * Checks if primitive or not.
+ *
+ * @param value input value
+ * @return true if number else false
+ */
+ private static 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 boolean or not.
+ *
+ * @param value input value
+ * @return true if boolean else false
+ */
+ private static boolean isBoolean(String value) {
+ boolean status = false;
+ value = value.trim();
+ if (value.equals("true") || value.equals("false")) {
+ return true;
+ }
+
+ return status;
+ }
+
+ /**
+ * Checks if given id is valid or not.
+ *
+ * @param value input value
+ * @return true if valid else false
+ */
+ private static boolean isValidIpAddress(String value) {
+ boolean status = true;
+ try {
+ Ip4Address ipAddress = Ip4Address.valueOf(value);
+ } catch (Exception e) {
+ log.debug("Invalid IP address string: {}", value);
+ return false;
+ }
+
+ return status;
+ }
+
+ /**
+ * Returns OSPF area instance from configuration.
+ *
+ * @param areaNode area configuration
+ * @return OSPF area instance
+ */
+ private static OspfArea areaDetails(JsonNode areaNode) {
+ OspfArea area = new OspfAreaImpl();
+ String areaId = areaNode.path(AREAID).asText();
+ if (isValidIpAddress(areaId)) {
+ area.setAreaId(Ip4Address.valueOf(areaId));
+ } else {
+ log.debug("Wrong areaId: {}", areaId);
+ return null;
+ }
+ String routerId = areaNode.path(ROUTERID).asText();
+ if (isValidIpAddress(routerId)) {
+ area.setRouterId(Ip4Address.valueOf(routerId));
+ } else {
+ log.debug("Wrong routerId: {}", routerId);
+ return null;
+ }
+ String routingCapability = areaNode.path(EXTERNALROUTINGCAPABILITY).asText();
+ if (isBoolean(routingCapability)) {
+ area.setExternalRoutingCapability(Boolean.valueOf(routingCapability));
+ } else {
+ log.debug("Wrong routingCapability: {}", routingCapability);
+ return null;
+ }
+ String isOpaqueEnabled = areaNode.path(ISOPAQUE).asText();
+ if (isBoolean(isOpaqueEnabled)) {
+ area.setIsOpaqueEnabled(Boolean.valueOf(isOpaqueEnabled));
+ } else {
+ log.debug("Wrong isOpaqueEnabled: {}", isOpaqueEnabled);
+ return null;
+ }
+ area.setOptions(OspfUtil.HELLO_PACKET_OPTIONS);
+
+ return area;
+ }
+
+ /**
+ * Returns OSPF interface instance from configuration.
+ *
+ * @param interfaceNode interface configuration
+ * @return OSPF interface instance
+ */
+ private static OspfInterface interfaceDetails(JsonNode interfaceNode) {
+ OspfInterface ospfInterface = new OspfInterfaceImpl();
+ String index = interfaceNode.path(INTERFACEINDEX).asText();
+ if (isValidDigit(index)) {
+ ospfInterface.setInterfaceIndex(Integer.parseInt(index));
+ } else {
+ log.debug("Wrong interface index: {}", index);
+ return null;
+ }
+ Ip4Address interfaceIp = getInterfaceIp(ospfInterface.interfaceIndex());
+ if (interfaceIp.equals(OspfUtil.DEFAULTIP)) {
+ return null;
+ }
+ ospfInterface.setIpAddress(interfaceIp);
+ ospfInterface.setIpNetworkMask(Ip4Address.valueOf(getInterfaceMask(
+ ospfInterface.interfaceIndex())));
+ ospfInterface.setBdr(OspfUtil.DEFAULTIP);
+ ospfInterface.setDr(OspfUtil.DEFAULTIP);
+ String helloInterval = interfaceNode.path(HELLOINTERVAL).asText();
+ if (isValidDigit(helloInterval)) {
+ ospfInterface.setHelloIntervalTime(Integer.parseInt(helloInterval));
+ } else {
+ log.debug("Wrong hello interval: {}", helloInterval);
+ return null;
+ }
+ String routerDeadInterval = interfaceNode.path(ROUTERDEADINTERVAL).asText();
+ if (isValidDigit(routerDeadInterval)) {
+ ospfInterface.setRouterDeadIntervalTime(Integer.parseInt(routerDeadInterval));
+ } else {
+ log.debug("Wrong routerDeadInterval: {}", routerDeadInterval);
+ return null;
+ }
+ String interfaceType = interfaceNode.path(INTERFACETYPE).asText();
+ if (isValidDigit(interfaceType)) {
+ ospfInterface.setInterfaceType(Integer.parseInt(interfaceType));
+ } else {
+ log.debug("Wrong interfaceType: {}", interfaceType);
+ return null;
+ }
+ ospfInterface.setReTransmitInterval(OspfUtil.RETRANSMITINTERVAL);
+ ospfInterface.setMtu(OspfUtil.MTU);
+ ospfInterface.setRouterPriority(OspfUtil.ROUTER_PRIORITY);
+
+ return ospfInterface;
+ }
+}
diff --git a/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/impl/OspfControllerImpl.java b/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/impl/OspfControllerImpl.java
index 31067fc..83462ee 100644
--- a/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/impl/OspfControllerImpl.java
+++ b/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/impl/OspfControllerImpl.java
@@ -16,6 +16,7 @@
package org.onosproject.ospf.controller.impl;
+import com.fasterxml.jackson.databind.JsonNode;
import com.google.common.collect.Sets;
import org.apache.felix.scr.annotations.Activate;
import org.apache.felix.scr.annotations.Component;
@@ -34,7 +35,6 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
@@ -111,27 +111,23 @@
}
@Override
- public void updateConfig(List processes) {
- List<OspfProcess> ospfProcesses = new ArrayList<>();
- if (processes != null) {
- for (Object process : processes) {
- ospfProcesses.add((OspfProcess) process);
+ public void updateConfig(JsonNode processesNode) {
+ try {
+ List<OspfProcess> ospfProcesses = OspfConfigUtil.processes(processesNode);
+ //if there is interface details then update configuration
+ if (ospfProcesses.size() > 0 &&
+ ospfProcesses.get(0).areas() != null && ospfProcesses.get(0).areas().size() > 0 &&
+ ospfProcesses.get(0).areas().get(0) != null &&
+ ospfProcesses.get(0).areas().get(0).ospfInterfaceList().size() > 0) {
+ ctrl.updateConfig(ospfProcesses);
}
+ } catch (Exception e) {
+ log.debug("Error::updateConfig::{}", e.getMessage());
}
- log.debug("updateConfig::OspfList::processes::{}", ospfProcesses);
- ctrl.updateConfig(ospfProcesses);
}
@Override
public void deleteConfig(List<OspfProcess> processes, String attribute) {
- List<OspfProcess> ospfProcesses = new ArrayList<>();
- if (processes != null) {
- for (Object process : processes) {
- ospfProcesses.add((OspfProcess) process);
- }
- }
- log.debug("deleteConfig::OspfList::processes::{}", ospfProcesses);
- ctrl.deleteConfig(ospfProcesses, attribute);
}
/**
@@ -163,9 +159,9 @@
}
@Override
- public void deleteLink(OspfRouter ospfRouter) {
+ public void deleteLink(OspfRouter ospfRouter, OspfLinkTed ospfLinkTed) {
for (OspfLinkListener l : linkListener()) {
- l.deleteLink(ospfRouter);
+ l.deleteLink(ospfRouter, ospfLinkTed);
}
}
}
diff --git a/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/impl/OspfInterfaceChannelHandler.java b/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/impl/OspfInterfaceChannelHandler.java
index 1a2e687..09a428f 100644
--- a/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/impl/OspfInterfaceChannelHandler.java
+++ b/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/impl/OspfInterfaceChannelHandler.java
@@ -13,13 +13,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
package org.onosproject.ospf.controller.impl;
-import org.apache.felix.scr.annotations.Reference;
-import org.apache.felix.scr.annotations.ReferenceCardinality;
import org.jboss.netty.channel.Channel;
-import org.jboss.netty.channel.ChannelFuture;
import org.jboss.netty.channel.ChannelHandlerContext;
import org.jboss.netty.channel.ChannelStateEvent;
import org.jboss.netty.channel.ExceptionEvent;
@@ -27,235 +23,203 @@
import org.jboss.netty.handler.timeout.IdleStateAwareChannelHandler;
import org.jboss.netty.handler.timeout.ReadTimeoutException;
import org.onlab.packet.Ip4Address;
-import org.onosproject.ospf.controller.LsaWrapper;
import org.onosproject.ospf.controller.OspfArea;
import org.onosproject.ospf.controller.OspfInterface;
-import org.onosproject.ospf.controller.OspfLinkTed;
-import org.onosproject.ospf.controller.OspfLsa;
+import org.onosproject.ospf.controller.OspfMessage;
import org.onosproject.ospf.controller.OspfNbr;
-import org.onosproject.ospf.controller.OspfNeighborState;
-import org.onosproject.ospf.controller.OspfRouter;
-import org.onosproject.ospf.controller.TopologyForDeviceAndLink;
-import org.onosproject.ospf.controller.area.OspfAreaImpl;
+import org.onosproject.ospf.controller.OspfProcess;
import org.onosproject.ospf.controller.area.OspfInterfaceImpl;
-import org.onosproject.ospf.controller.lsdb.LsaWrapperImpl;
-import org.onosproject.ospf.controller.lsdb.OspfLsdbImpl;
-import org.onosproject.ospf.controller.util.OspfEligibleRouter;
import org.onosproject.ospf.controller.util.OspfInterfaceType;
import org.onosproject.ospf.exceptions.OspfParseException;
-import org.onosproject.ospf.protocol.lsa.LsaHeader;
-import org.onosproject.ospf.protocol.ospfpacket.OspfMessage;
-import org.onosproject.ospf.protocol.ospfpacket.OspfPacketHeader;
-import org.onosproject.ospf.protocol.ospfpacket.subtype.LsRequestPacket;
-import org.onosproject.ospf.protocol.ospfpacket.types.DdPacket;
-import org.onosproject.ospf.protocol.ospfpacket.types.HelloPacket;
-import org.onosproject.ospf.protocol.ospfpacket.types.LsAcknowledge;
-import org.onosproject.ospf.protocol.ospfpacket.types.LsRequest;
-import org.onosproject.ospf.protocol.ospfpacket.types.LsUpdate;
-import org.onosproject.ospf.protocol.util.ChecksumCalculator;
import org.onosproject.ospf.protocol.util.OspfInterfaceState;
-import org.onosproject.ospf.protocol.util.OspfPacketType;
-import org.onosproject.ospf.protocol.util.OspfParameters;
-import org.onosproject.ospf.protocol.util.OspfUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.nio.channels.ClosedChannelException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
import java.util.List;
-import java.util.ListIterator;
-import java.util.Set;
-import java.util.concurrent.Executors;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.RejectedExecutionException;
-import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.ScheduledFuture;
-import java.util.concurrent.TimeUnit;
/**
* Channel handler deals with the OSPF channel connection.
- * Also it dispatches messages to the appropriate handlers.
+ * Also it dispatches messages to the appropriate handlers for processing.
*/
public class OspfInterfaceChannelHandler extends IdleStateAwareChannelHandler {
- private static final Logger log =
- LoggerFactory.getLogger(OspfInterfaceChannelHandler.class);
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- private OspfInterface ospfInterface;
- private OspfArea ospfArea;
- private boolean isClosed = false;
+ private static final Logger log = LoggerFactory.getLogger(OspfInterfaceChannelHandler.class);
+ private static Map<Integer, Object> isisDb = null;
+ private Channel channel = null;
private Controller controller;
- private Channel channel;
- private long delay = 0;
- private InternalHelloTimer helloTimerTask;
- private InternalWaitTimer waitTimerTask;
- private InternalDelayedAckTimer delayedAckTimerTask;
- private ScheduledExecutorService exServiceHello;
- private ScheduledExecutorService exServiceWait;
- private ScheduledExecutorService exServiceDelayedAck;
- private boolean isDelayedAckTimerScheduled = false;
- private int delayedAckTimerInterval = 2500;
- private TopologyForDeviceAndLink topologyForDeviceAndLink;
-
- public OspfInterfaceChannelHandler() {
-
- }
+ private List<OspfProcess> processes = null;
+ private byte[] configPacket = null;
+ private Map<Integer, OspfInterface> ospfInterfaceMap = new ConcurrentHashMap<>();
/**
* Creates an instance of OSPF channel handler.
*
- * @param controller controller instance
- * @param ospfArea ospf area instance
- * @param ospfInterface ospf interface instance
+ * @param controller controller instance
+ * @param processes list of configured processes
*/
- public OspfInterfaceChannelHandler(Controller controller, OspfArea ospfArea, OspfInterface ospfInterface) {
-
- this.ospfArea = ospfArea;
- this.ospfInterface = ospfInterface;
+ public OspfInterfaceChannelHandler(Controller controller, List<OspfProcess> processes) {
this.controller = controller;
- ((OspfInterfaceImpl) ospfInterface).setState(OspfInterfaceState.DOWN);
- this.ospfInterface.setDr(Ip4Address.valueOf("0.0.0.0"));
- this.ospfInterface.setBdr(Ip4Address.valueOf("0.0.0.0"));
- this.topologyForDeviceAndLink = new TopologyForDeviceAndLinkImpl();
+ this.processes = processes;
}
/**
- * Represents an interface is up and connected.
+ * Initializes the interface map with interface details.
*
* @throws Exception might throws exception
*/
- public void interfaceUp() throws Exception {
- log.debug("OSPFInterfaceChannelHandler::interfaceUp...!!!");
- if (ospfInterface.interfaceType() == OspfInterfaceType.POINT_TO_POINT.value()) {
- ((OspfInterfaceImpl) ospfInterface).setState(OspfInterfaceState.POINT2POINT);
- log.debug("OSPFInterfaceChannelHandler::InterfaceType {} state {} ",
- ospfInterface.interfaceType(), ((OspfInterfaceImpl) ospfInterface).state());
- } else if (ospfInterface.interfaceType() == OspfInterfaceType.BROADCAST.value()) {
- //if router priority is 0, move the state to DROther
- if (ospfInterface.routerPriority() == 0) {
- ((OspfInterfaceImpl) ospfInterface).setState(OspfInterfaceState.DROTHER);
- } else {
- log.debug("OSPFInterfaceChannelHandler::InterfaceType {} state {} RouterPriority {}",
- ospfInterface.interfaceType(),
- ((OspfInterfaceImpl) ospfInterface).state(), ospfInterface.routerPriority());
- ((OspfInterfaceImpl) ospfInterface).setState(OspfInterfaceState.WAITING);
- //start wait timer - like inactivity timer with router deadInterval
- startWaitTimer();
+ public void initializeInterfaceMap() throws Exception {
+ for (OspfProcess process : processes) {
+ for (OspfArea area : process.areas()) {
+ for (OspfInterface ospfInterface : area.ospfInterfaceList()) {
+ OspfInterface anInterface = ospfInterfaceMap.get(ospfInterface.interfaceIndex());
+ if (anInterface == null) {
+ ospfInterface.setOspfArea(area);
+ ((OspfInterfaceImpl) ospfInterface).setController(controller);
+ ((OspfInterfaceImpl) ospfInterface).setState(OspfInterfaceState.DOWN);
+ ospfInterface.setDr(Ip4Address.valueOf("0.0.0.0"));
+ ospfInterface.setBdr(Ip4Address.valueOf("0.0.0.0"));
+ ospfInterfaceMap.put(ospfInterface.interfaceIndex(), ospfInterface);
+ }
+ ((OspfInterfaceImpl) ospfInterface).setChannel(channel);
+ ospfInterface.interfaceUp();
+ ospfInterface.startDelayedAckTimer();
+ }
+ //Initialize the LSDB and aging process
+ area.initializeDb();
}
-
}
- // Start hello timer with interval from config - convert seconds to milliseconds
- startHelloTimer(ospfInterface.helloIntervalTime());
- ospfArea.refreshArea(ospfInterface);
}
-
/**
- * Gets called when a BDR was detected before the wait timer expired.
+ * Updates the interface map with interface details.
*
- * @param ch channel instance
+ * @param ospfProcesses updated process instances
* @throws Exception might throws exception
*/
- public void backupSeen(Channel ch) throws Exception {
- log.debug("OSPFInterfaceChannelHandler::backupSeen ");
- if (((OspfInterfaceImpl) ospfInterface).state() == OspfInterfaceState.WAITING) {
- electRouter(ch);
+ public void updateInterfaceMap(List<OspfProcess> ospfProcesses) throws Exception {
+ for (OspfProcess ospfUpdatedProcess : ospfProcesses) {
+ for (OspfArea updatedArea : ospfUpdatedProcess.areas()) {
+ for (OspfInterface ospfUpdatedInterface : updatedArea.ospfInterfaceList()) {
+ OspfInterface ospfInterface = ospfInterfaceMap.get(ospfUpdatedInterface.interfaceIndex());
+ if (ospfInterface == null) {
+ ospfUpdatedInterface.setOspfArea(updatedArea);
+ ((OspfInterfaceImpl) ospfUpdatedInterface).setController(controller);
+ ((OspfInterfaceImpl) ospfUpdatedInterface).setState(OspfInterfaceState.DOWN);
+ ospfUpdatedInterface.setDr(Ip4Address.valueOf("0.0.0.0"));
+ ospfUpdatedInterface.setBdr(Ip4Address.valueOf("0.0.0.0"));
+ ospfInterfaceMap.put(ospfUpdatedInterface.interfaceIndex(), ospfUpdatedInterface);
+ ((OspfInterfaceImpl) ospfUpdatedInterface).setChannel(channel);
+ ospfUpdatedInterface.interfaceUp();
+ ospfUpdatedInterface.startDelayedAckTimer();
+ } else {
+ ospfInterface.setOspfArea(updatedArea);
+
+ if (ospfInterface.routerDeadIntervalTime() != ospfUpdatedInterface.routerDeadIntervalTime()) {
+ ospfInterface.setRouterDeadIntervalTime(ospfUpdatedInterface.routerDeadIntervalTime());
+ Map<String, OspfNbr> neighbors = ospfInterface.listOfNeighbors();
+ for (String key : neighbors.keySet()) {
+ OspfNbr ospfNbr = ospfInterface.neighbouringRouter(key);
+ ospfNbr.setRouterDeadInterval(ospfInterface.routerDeadIntervalTime());
+ ospfNbr.stopInactivityTimeCheck();
+ ospfNbr.startInactivityTimeCheck();
+ }
+ }
+ if (ospfInterface.interfaceType() != ospfUpdatedInterface.interfaceType()) {
+ ospfInterface.setInterfaceType(ospfUpdatedInterface.interfaceType());
+ if (ospfInterface.interfaceType() == OspfInterfaceType.POINT_TO_POINT.value()) {
+ ospfInterface.setDr(Ip4Address.valueOf("0.0.0.0"));
+ ospfInterface.setBdr(Ip4Address.valueOf("0.0.0.0"));
+ }
+ ospfInterface.removeNeighbors();
+ }
+ if (ospfInterface.helloIntervalTime() != ospfUpdatedInterface.helloIntervalTime()) {
+ ospfInterface.setHelloIntervalTime(ospfUpdatedInterface.helloIntervalTime());
+ ospfInterface.stopHelloTimer();
+ ospfInterface.startHelloTimer();
+ }
+ ospfInterfaceMap.put(ospfInterface.interfaceIndex(), ospfInterface);
+ }
+ }
+ }
}
}
/**
- * Gets called when no hello message received for particular period.
- *
- * @param ch channel instance
- * @throws Exception might throws exception
+ * Initialize channel, start hello sender and initialize LSDB.
*/
- public void waitTimer(Channel ch) throws Exception {
- log.debug("OSPFInterfaceChannelHandler::waitTimer ");
- //section 9.4
- if (((OspfInterfaceImpl) ospfInterface).state() == OspfInterfaceState.WAITING) {
- electRouter(ch);
+ private void initialize() throws Exception {
+ log.debug("OspfChannelHandler initialize..!!!");
+ if (configPacket != null) {
+ log.debug("OspfChannelHandler initialize -> sentConfig packet of length ::"
+ + configPacket.length);
+ sentConfigPacket(configPacket);
}
- }
-
- /**
- * Neighbor change event is triggered when the router priority gets changed.
- *
- * @throws Exception might throws exception
- */
- public void neighborChange() throws Exception {
- log.debug("OSPFInterfaceChannelHandler::neighborChange ");
- if (((OspfInterfaceImpl) ospfInterface).state() == OspfInterfaceState.DR ||
- ((OspfInterfaceImpl) ospfInterface).state() == OspfInterfaceState.BDR ||
- ((OspfInterfaceImpl) ospfInterface).state() == OspfInterfaceState.DROTHER) {
- electRouter(channel);
- }
- }
-
- /**
- * Gets called when an interface is down.
- * All interface variables are reset, and interface timers disabled.
- * Also all neighbor connections associated with the interface are destroyed.
- */
- public void interfaceDown() {
- log.debug("OSPFInterfaceChannelHandler::interfaceDown ");
- stopHelloTimer();
- ospfInterface.listOfNeighbors().clear();
- ((OspfInterfaceImpl) ospfInterface).setState(OspfInterfaceState.DOWN);
+ initializeInterfaceMap();
}
@Override
public void channelConnected(ChannelHandlerContext ctx, ChannelStateEvent evt) throws Exception {
log.info("OSPF channelConnected from {}", evt.getChannel().getRemoteAddress());
- channel = evt.getChannel();
- interfaceUp();
- startDelayedAckTimer();
+ this.channel = evt.getChannel();
+ initialize();
}
@Override
public void channelDisconnected(ChannelHandlerContext ctx, ChannelStateEvent evt) {
- interfaceDown();
- stopDelayedAckTimer();
log.debug("OspfChannelHandler::channelDisconnected...!!!");
- }
- @Override
- public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e) throws Exception {
- log.info("[exceptionCaught]: " + e.toString());
- if (e.getCause() instanceof ReadTimeoutException) {
- // device timeout
- log.error("Disconnecting device {} due to read timeout", e.getChannel().getRemoteAddress());
- return;
- } else if (e.getCause() instanceof ClosedChannelException) {
- log.debug("Channel for OSPF {} already closed", e.getChannel().getRemoteAddress());
- } else if (e.getCause() instanceof IOException) {
- log.error("Disconnecting OSPF {} due to IO Error: {}", e.getChannel().getRemoteAddress(),
- e.getCause().getMessage());
- if (log.isDebugEnabled()) {
- log.debug("StackTrace for previous Exception: {}", e.getCause());
+ for (Integer interfaceIndex : ospfInterfaceMap.keySet()) {
+ OspfInterface anInterface = ospfInterfaceMap.get(interfaceIndex);
+ if (anInterface != null) {
+ anInterface.interfaceDown();
+ anInterface.stopDelayedAckTimer();
}
- } else if (e.getCause() instanceof OspfParseException) {
- OspfParseException errMsg = (OspfParseException) e.getCause();
- byte errorCode = errMsg.errorCode();
- byte errorSubCode = errMsg.errorSubCode();
- log.error("Error while parsing message from OSPF {}, ErrorCode {}",
- e.getChannel().getRemoteAddress(), errorCode);
- } else if (e.getCause() instanceof RejectedExecutionException) {
- log.warn("Could not process message: queue full");
- } else {
- log.error("Error while processing message from OSPF {}, state {}",
- e.getChannel().getRemoteAddress(), ((OspfInterfaceImpl) ospfInterface).state());
+ }
+
+ if (controller != null) {
+ controller.connectPeer();
}
}
@Override
- public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception {
+ public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent
+ e) throws Exception {
+ log.debug("[exceptionCaught]: " + e.toString());
+ if (e.getCause() instanceof ReadTimeoutException) {
+ log.debug("Disconnecting device {} due to read timeout", e.getChannel().getRemoteAddress());
+ return;
+ } else if (e.getCause() instanceof ClosedChannelException) {
+ log.debug("Channel for OSPF {} already closed", e.getChannel().getRemoteAddress());
+ } else if (e.getCause() instanceof IOException) {
+ log.debug("Disconnecting OSPF {} due to IO Error: {}", e.getChannel().getRemoteAddress(),
+ e.getCause().getMessage());
+ } else if (e.getCause() instanceof OspfParseException) {
+ OspfParseException errMsg = (OspfParseException) e.getCause();
+ byte errorCode = errMsg.errorCode();
+ byte errorSubCode = errMsg.errorSubCode();
+ log.debug("Error while parsing message from OSPF {}, ErrorCode {}",
+ e.getChannel().getRemoteAddress(), errorCode);
+ } else if (e.getCause() instanceof RejectedExecutionException) {
+ log.debug("Could not process message: queue full");
+ } else {
+ log.debug("Error while processing message from OSPF {}, {}",
+ e.getChannel().getRemoteAddress(), e.getCause().getMessage());
+ }
+ }
+
+ @Override
+ public void messageReceived(ChannelHandlerContext ctx, MessageEvent
+ e) throws Exception {
log.debug("OspfChannelHandler::messageReceived...!!!");
Object message = e.getMessage();
if (message instanceof List) {
List<OspfMessage> ospfMessageList = (List<OspfMessage>) message;
- log.debug("OspfChannelHandler::List of OspfMessages Size {}", ospfMessageList.size());
+ log.debug("OspfChannelHandler::List of IsisMessages Size {}", ospfMessageList.size());
if (ospfMessageList != null) {
for (OspfMessage ospfMessage : ospfMessageList) {
processOspfMessage(ospfMessage, ctx);
@@ -280,1121 +244,28 @@
* @param ctx channel handler context instance.
* @throws Exception might throws exception
*/
- public void processOspfMessage(OspfMessage ospfMessage, ChannelHandlerContext ctx) throws Exception {
+ public void processOspfMessage(OspfMessage
+ ospfMessage, ChannelHandlerContext ctx) throws Exception {
log.debug("OspfChannelHandler::processOspfMessage...!!!");
-
- if (!validateMessage(ospfMessage)) {
- return;
- }
-
- switch (ospfMessage.ospfMessageType().value()) {
- case OspfParameters.HELLO:
- processHelloMessage(ospfMessage, ctx);
- break;
- case OspfParameters.DD:
- processDdMessage(ospfMessage, ctx);
- break;
- case OspfParameters.LSREQUEST:
- processLsRequestMessage(ospfMessage, ctx);
- break;
- case OspfParameters.LSUPDATE:
- processLsUpdateMessage(ospfMessage, ctx);
- break;
- case OspfParameters.LSACK:
- processLsAckMessage(ospfMessage, ctx);
- break;
- default:
- log.debug("Unknown packet to process...!!!");
- break;
+ int interfaceIndex = ospfMessage.interfaceIndex();
+ OspfInterface ospfInterface = ospfInterfaceMap.get(interfaceIndex);
+ if (ospfInterface != null) {
+ ospfInterface.processOspfMessage(ospfMessage, ctx);
}
}
/**
- * Validates the OSPF message received.
+ * Sends the interface configuration packet to server.
*
- * @param ospfMessage OSPF message.
- * @return true if it is a valid else false.
- * @throws Exception might throws exception
+ * @param configPacket interface configuration
*/
- private boolean validateMessage(OspfMessage ospfMessage) throws Exception {
- boolean isValid = true;
- OspfPacketHeader header = (OspfPacketHeader) ospfMessage;
-
- //added the check to eliminate self origin packets also two interfaces on same router.
- if (!header.sourceIp().equals(ospfInterface.ipAddress()) && !header.routerId().equals(
- ospfArea.routerId())) {
- //Verify the checksum
- ChecksumCalculator checksum = new ChecksumCalculator();
- if (!checksum.isValidOspfCheckSum(ospfMessage, OspfUtil.OSPFPACKET_CHECKSUM_POS1,
- OspfUtil.OSPFPACKET_CHECKSUM_POS2)) {
- log.debug("Checksum mismatch. Received packet type {} ", ospfMessage.ospfMessageType());
- return false;
- }
- if (((OspfPacketHeader) ospfMessage).ospfVersion() != OspfUtil.OSPF_VERSION_2) {
- log.debug("Received osfpMessage Version should match with Interface Version ");
- return false;
- }
- if (!((OspfPacketHeader) ospfMessage).areaId().equals(ospfArea.areaId())) {
- log.debug("Received ospf packets are from different area than our Area ID. " +
- "Received Area ID {}, Our AreaId {} ",
- ((OspfPacketHeader) ospfMessage).areaId(), ospfArea.areaId());
- return false;
- }
-
- //According to RFC-2328 (8.2)
- /**
- * ABR should receive packets from backbone 0.0.0.0 as we are not acting as ABR
- * we are rejecting the packet.
- */
- if (((OspfPacketHeader) ospfMessage).areaId().equals(Ip4Address.valueOf("0.0.0.0"))) {
- log.debug("ABR should receive packets from backbone 0.0.0.0 as we are not acting as " +
- "ABR we are rejecting the ospf packet");
- return false;
- }
- if (ospfInterface.interfaceType() == OspfInterfaceType.BROADCAST.value() &&
- !OspfUtil.sameNetwork(((OspfPacketHeader) ospfMessage).sourceIp(),
- ospfInterface.ipAddress(), ospfInterface.ipNetworkMask())) {
- log.debug("Received packets from different subnets. Discarding...!!!");
- return false;
- }
+ public void sentConfigPacket(byte[] configPacket) {
+ if (channel != null) {
+ channel.write(configPacket);
+ log.debug("OspfChannelHandler sentConfigPacket packet sent..!!!");
} else {
- isValid = false;
- }
-
- return isValid;
- }
-
- /**
- * Processes Hello message.
- *
- * @param ospfMessage OSPF message instance.
- * @param ctx context instance.
- * @throws Exception might throws exception
- */
- void processHelloMessage(OspfMessage ospfMessage, ChannelHandlerContext ctx) throws Exception {
- log.debug("OspfChannelHandler::processHelloMessage...!!!");
- HelloPacket helloPacket = (HelloPacket) ospfMessage;
-
- // processing of hello packet as per RFC 2328 section 10.5
- log.debug("OspfChannelHandler::processHelloMessage::Interface Type {} OSPFInterfaceState {} ",
- ospfInterface.interfaceType(), ((OspfInterfaceImpl) ospfInterface).state());
-
- if (ospfInterface.interfaceType() != OspfInterfaceType.POINT_TO_POINT.value()) {
- if (!helloPacket.networkMask().equals(ospfInterface.ipNetworkMask())) {
- log.debug("OspfChannelHandler::processHelloMessage::Hello Packet Received does not " +
- "match the same network mask as the configure Interface");
- return;
- }
- }
- if (helloPacket.helloInterval() != ospfInterface.helloIntervalTime()) {
- log.debug("OspfChannelHandler::processHelloMessage::Hello Packet Received have the same " +
- "hello interval as configured Interface");
- return;
- }
- if (helloPacket.routerDeadInterval() != ospfInterface.routerDeadIntervalTime()) {
- log.debug("OspfChannelHandler::processHelloMessage::Hello Packet Received have the same " +
- "Router Dead interval as configured Interface");
- return;
- }
-
- if (ospfInterface.interfaceType() == OspfInterfaceType.POINT_TO_POINT.value()) {
- // to verify if the neighbor which sent the hello is present in the OSPF Interface neighboring list .
- OspfNbr nbr;
- if (!ospfInterface.isNeighborInList(helloPacket.routerId().toString())) {
- nbr = new OspfNbrImpl(ospfArea, ospfInterface, helloPacket.sourceIp(),
- helloPacket.routerId(), helloPacket.options(), this, topologyForDeviceAndLink);
- ospfInterface.addNeighbouringRouter(nbr);
- } else {
- nbr = ospfInterface.neighbouringRouter(helloPacket.routerId().toString());
- nbr.setRouterPriority(helloPacket.routerPriority());
- }
- if (!helloPacket.containsNeighbour(ospfArea.routerId())) {
- ((OspfNbrImpl) nbr).oneWayReceived(helloPacket, channel);
- } else {
- ((OspfNbrImpl) nbr).twoWayReceived(helloPacket, ctx.getChannel());
- }
- } else if (ospfInterface.interfaceType() == OspfInterfaceType.BROADCAST.value()) {
-
- if (((OspfInterfaceImpl) ospfInterface).state() == OspfInterfaceState.WAITING) {
- if ((!helloPacket.dr().equals(Ip4Address.valueOf("0.0.0.0"))) &&
- (!helloPacket.bdr().equals(Ip4Address.valueOf("0.0.0.0")))) {
- stopWaitTimer();
- ospfInterface.setDr(helloPacket.dr());
- ospfInterface.setBdr(helloPacket.bdr());
- if (helloPacket.dr().equals(ospfInterface.ipAddress())) {
- ((OspfInterfaceImpl) ospfInterface).setState(OspfInterfaceState.DR);
- //refresh router Lsa
- ospfArea.refreshArea(ospfInterface);
- } else if (helloPacket.bdr().equals(ospfInterface.ipAddress())) {
- ((OspfInterfaceImpl) ospfInterface).setState(OspfInterfaceState.BDR);
- //refresh router Lsa
- ospfArea.refreshArea(ospfInterface);
- } else {
- ((OspfInterfaceImpl) ospfInterface).setState(OspfInterfaceState.DROTHER);
- ospfArea.refreshArea(ospfInterface);
- }
-
- } else if (!helloPacket.dr().equals(Ip4Address.valueOf("0.0.0.0")) ||
- !helloPacket.bdr().equals(Ip4Address.valueOf("0.0.0.0"))) {
- ospfInterface.setDr(helloPacket.dr());
- ospfInterface.setBdr(helloPacket.bdr());
- }
- Ip4Address sourceIp = helloPacket.sourceIp();
- OspfNbr nbr;
- if (!ospfInterface.isNeighborInList(helloPacket.routerId().toString())) {
- nbr = new OspfNbrImpl(ospfArea, ospfInterface, sourceIp, helloPacket.routerId(),
- helloPacket.options(), this, topologyForDeviceAndLink);
- nbr.setNeighborId(helloPacket.routerId());
- nbr.setNeighborBdr(helloPacket.bdr());
- nbr.setNeighborDr(helloPacket.dr());
- nbr.setRouterPriority(helloPacket.routerPriority());
- ospfInterface.addNeighbouringRouter(nbr);
- } else {
- nbr = ospfInterface.neighbouringRouter(helloPacket.routerId().toString());
- nbr.setRouterPriority(helloPacket.routerPriority());
- }
- if (!helloPacket.containsNeighbour(ospfArea.routerId())) {
- ((OspfNbrImpl) nbr).oneWayReceived(helloPacket, channel);
- } else {
- ((OspfNbrImpl) nbr).twoWayReceived(helloPacket, ctx.getChannel());
- }
-
- if (helloPacket.dr().equals(sourceIp)) {
- if (helloPacket.bdr().equals(Ip4Address.valueOf("0.0.0.0"))) {
- // call backup seen
- stopWaitTimer();
- backupSeen(ctx.getChannel());
- }
- }
-
- if (helloPacket.bdr().equals(sourceIp)) {
- // call backup seen
- stopWaitTimer();
- backupSeen(ctx.getChannel());
- }
- } else {
-
- if ((!helloPacket.dr().equals(Ip4Address.valueOf("0.0.0.0")) ||
- !helloPacket.bdr().equals(Ip4Address.valueOf("0.0.0.0")))
- && ospfInterface.routerPriority() == 0) {
- ospfInterface.setDr(helloPacket.dr());
- ospfInterface.setBdr(helloPacket.bdr());
- }
- //To verify if the neighbor which sent the hello is present in the OSPF Interface neighboring list .
- Ip4Address sourceIp = helloPacket.sourceIp();
- OspfNbr nbr;
- if (!ospfInterface.isNeighborInList(helloPacket.routerId().toString())) {
- nbr = new OspfNbrImpl(ospfArea, ospfInterface, sourceIp, helloPacket.routerId(),
- helloPacket.options(), this, topologyForDeviceAndLink);
- nbr.setNeighborId(helloPacket.routerId());
- nbr.setNeighborBdr(helloPacket.bdr());
- nbr.setNeighborDr(helloPacket.dr());
- nbr.setRouterPriority(helloPacket.routerPriority());
- ospfInterface.addNeighbouringRouter(nbr);
- ((OspfNbrImpl) nbr).oneWayReceived(helloPacket, channel);
- } else {
- log.debug("OspfChannelHandler::NeighborInList::helloPacket.bdr(): {}, " +
- "helloPacket.dr(): {}", helloPacket.bdr(), helloPacket.dr());
- nbr = ospfInterface.neighbouringRouter(helloPacket.routerId().toString());
- nbr.setRouterPriority(helloPacket.routerPriority());
- if (!helloPacket.containsNeighbour(ospfArea.routerId())) {
- ((OspfNbrImpl) nbr).oneWayReceived(helloPacket, channel);
- } else {
- ((OspfNbrImpl) nbr).twoWayReceived(helloPacket, ctx.getChannel());
- }
- if (nbr.routerPriority() != helloPacket.routerPriority()) {
- nbr.setNeighborBdr(helloPacket.bdr());
- nbr.setNeighborDr(helloPacket.dr());
- neighborChange();
- }
-
-
- if (nbr.neighborIpAddr().equals(helloPacket.dr()) &&
- !(nbr.neighborIpAddr().equals(nbr.neighborDr()))) {
- nbr.setNeighborBdr(helloPacket.bdr());
- nbr.setNeighborDr(helloPacket.dr());
- neighborChange();
- }
-
- if (!(nbr.neighborIpAddr().equals(helloPacket.dr())) &&
- (nbr.neighborIpAddr().equals(nbr.neighborDr()))) {
- nbr.setNeighborBdr(helloPacket.bdr());
- nbr.setNeighborDr(helloPacket.dr());
- neighborChange();
- }
-
- if (nbr.neighborIpAddr().equals(helloPacket.bdr()) &&
- !(nbr.neighborIpAddr().equals(nbr.neighborBdr()))) {
- nbr.setNeighborBdr(helloPacket.bdr());
- nbr.setNeighborDr(helloPacket.dr());
- neighborChange();
- }
-
- if (!(nbr.neighborIpAddr().equals(helloPacket.bdr())) &&
- (nbr.neighborIpAddr().equals(nbr.neighborBdr()))) {
- nbr.setNeighborBdr(helloPacket.bdr());
- nbr.setNeighborDr(helloPacket.dr());
- neighborChange();
- }
-
- nbr.setNeighborBdr(helloPacket.bdr());
- nbr.setNeighborDr(helloPacket.dr());
- }
-
- }
- }
- }
-
- /**
- * process the DD message which received.
- *
- * @param ospfMessage OSPF message instance.
- * @param ctx channel handler context instance
- * @throws Exception might throws exception
- */
- void processDdMessage(OspfMessage ospfMessage, ChannelHandlerContext ctx) throws Exception {
- log.debug("OspfChannelHandler::processDdMessage...!!!");
-
- DdPacket ddPacket = (DdPacket) ospfMessage;
- log.debug("Got DD packet from {}", ddPacket.sourceIp());
- //check it is present in listOfNeighbors
- Ip4Address neighbourId = ddPacket.routerId();
- OspfNbr nbr = ospfInterface.neighbouringRouter(neighbourId.toString());
-
- if (nbr != null) {
- log.debug("OspfChannelHandler::processDdMessage:: OSPFNeighborState {}", nbr.getState());
- // set options for the NBR
- nbr.setIsOpaqueCapable(ddPacket.isOpaqueCapable());
- if (ddPacket.imtu() > ospfInterface.mtu()) {
- log.debug("the MTU size is greater than the interface MTU");
- return;
- }
- if (nbr.getState() == OspfNeighborState.DOWN) {
- return;
- }
- if (nbr.getState() == OspfNeighborState.ATTEMPT) {
- return;
- }
- if (nbr.getState() == OspfNeighborState.TWOWAY) {
- nbr.adjOk(channel);
- return;
- }
- //if init is the state call twoWayReceived
- if (nbr.getState() == OspfNeighborState.INIT) {
- ((OspfNbrImpl) nbr).twoWayReceived(ddPacket, ctx.getChannel());
- } else if (nbr.getState() == OspfNeighborState.EXSTART) {
- //get I,M,MS Bits
- int initialize = ddPacket.isInitialize();
- int more = ddPacket.isMore();
- int masterOrSlave = ddPacket.isMaster();
- int options = ddPacket.options();
- nbr.setOptions(options);
-
- if (initialize == OspfUtil.INITIALIZE_SET && more == OspfUtil.MORE_SET &&
- masterOrSlave == OspfUtil.IS_MASTER) {
- if (ddPacket.getLsaHeaderList().isEmpty()) {
- if (OspfUtil.ipAddressToLong(ddPacket.routerId().toString()) >
- OspfUtil.ipAddressToLong(ospfArea.routerId().toString())) {
- nbr.setIsMaster(OspfUtil.IS_MASTER);
- ((OspfNbrImpl) nbr).setLastDdPacket(ddPacket);
- nbr.setDdSeqNum(ddPacket.sequenceNo());
- nbr.setOptions(ddPacket.options());
- ((OspfNbrImpl) nbr).negotiationDone(ddPacket, true, ddPacket.getLsaHeaderList(),
- ctx.getChannel());
- }
- }
- }
- if (initialize == OspfUtil.INITIALIZE_NOTSET && masterOrSlave == OspfUtil.NOT_MASTER) {
- if (nbr.ddSeqNum() == ddPacket.sequenceNo()) {
- if (OspfUtil.ipAddressToLong(ddPacket.routerId().toString()) <
- OspfUtil.ipAddressToLong(ospfArea.routerId().toString())) {
- ((OspfNbrImpl) nbr).setLastDdPacket(ddPacket);
- nbr.setOptions(ddPacket.options());
- nbr.setDdSeqNum(nbr.ddSeqNum() + 1);
- ((OspfNbrImpl) nbr).negotiationDone(ddPacket, false, ddPacket.getLsaHeaderList(),
- ctx.getChannel());
- }
- }
- }
-
- } else if (nbr.getState() == OspfNeighborState.EXCHANGE) {
- //get I,M,MS Bits
- log.debug("Neighbor state:: EXCHANGE");
- boolean isDuplicateDDPacket = compareDdPackets(ddPacket, ((OspfNbrImpl) nbr).lastDdPacket());
- int initialize = ddPacket.isInitialize();
- int more = ddPacket.isMore();
- int masterOrSlave = ddPacket.isMaster();
- int options = ddPacket.options();
-
- if (!isDuplicateDDPacket) {
- //if dd packet is not duplicate then continue
- if (nbr.isMaster() != masterOrSlave) {
- DdPacket newResPacket =
- (DdPacket) ((OspfNbrImpl) nbr).seqNumMismatch("Master/Slave Inconsistency");
- newResPacket.setDestinationIp(ddPacket.sourceIp());
- log.debug("Sending back DDPacket to {}", ddPacket.sourceIp());
- ctx.getChannel().write(newResPacket);
- } else if (initialize == 1) {
- DdPacket newResPacket =
- (DdPacket) ((OspfNbrImpl) nbr).seqNumMismatch("Initialize bit inconsistency");
- newResPacket.setDestinationIp(ddPacket.sourceIp());
- log.debug("Sending back DDPacket to {}", ddPacket.sourceIp());
- ctx.getChannel().write(newResPacket);
- } else {
-
- if (masterOrSlave == OspfUtil.NOT_MASTER) {
- if (ddPacket.sequenceNo() == nbr.ddSeqNum()) {
- //Process the DD Packet
- ((OspfNbrImpl) nbr).processDdPacket(false, ddPacket, ctx.getChannel());
- log.debug("Received DD Packet");
- } else {
- DdPacket newResPacket =
- (DdPacket) ((OspfNbrImpl) nbr).seqNumMismatch("Sequence Number Mismatch");
- newResPacket.setDestinationIp(ddPacket.sourceIp());
- log.debug("Sending back DDPacket to {}", ddPacket.sourceIp());
- ctx.getChannel().write(newResPacket);
- }
- } else {
- //we are the slave
- if (ddPacket.sequenceNo() == (nbr.ddSeqNum() + 1)) {
- ((OspfNbrImpl) nbr).setLastDdPacket(ddPacket);
- ((OspfNbrImpl) nbr).processDdPacket(true, ddPacket, ctx.getChannel());
- log.debug("Process DD Packet");
- } else {
- DdPacket newResPacket =
- (DdPacket) ((OspfNbrImpl) nbr).seqNumMismatch("options inconsistency");
- newResPacket.setDestinationIp(ddPacket.sourceIp());
- log.debug("Sending back DDPacket to {}", ddPacket.sourceIp());
- ctx.getChannel().write(newResPacket);
- }
- }
- }
- } else {
- if (masterOrSlave == OspfUtil.NOT_MASTER) {
- return;
- } else {
- DdPacket newResPacket = ((OspfNbrImpl) nbr).lastSentDdPacket();
- log.debug("Sending back DDPacket to {}", ddPacket.sourceIp());
- ctx.getChannel().write(newResPacket);
- }
- }
- } else if (nbr.getState() == OspfNeighborState.LOADING || nbr.getState() == OspfNeighborState.FULL) {
- //In case if we are slave then we have to send the last received DD Packet
- int options = ddPacket.options();
- if (nbr.options() != options) {
- OspfMessage newResPacket = ((OspfNbrImpl) nbr).seqNumMismatch("Initialize bit inconsistency");
- newResPacket.setDestinationIp(ddPacket.sourceIp());
- ctx.getChannel().write(newResPacket);
- } else if (ddPacket.isInitialize() == OspfUtil.INITIALIZE_SET) {
- OspfMessage newResPacket = ((OspfNbrImpl) nbr).seqNumMismatch("Initialize bit inconsistency");
- newResPacket.setDestinationIp(ddPacket.sourceIp());
- ctx.getChannel().write(newResPacket);
- }
- boolean isDuplicate = compareDdPackets(ddPacket, ((OspfNbrImpl) nbr).lastDdPacket());
- //we are master
- if (nbr.isMaster() != OspfUtil.IS_MASTER) {
- // check if the packet is duplicate, duplicates should be discarded by the master
- if (isDuplicate) {
- log.debug("received a duplicate DD packet");
- }
- } else {
- //The slave must respond to duplicates by repeating the last Database Description packet
- //that it had sent.
- if (isDuplicate) {
- ddPacket.setDestinationIp(ddPacket.sourceIp());
- ctx.getChannel().write(((OspfNbrImpl) nbr).lastSentDdPacket());
- log.debug("Sending back the duplicate packet ");
- }
- }
- }
- }
- }
-
- /**
- * Process the Ls Request message.
- *
- * @param ospfMessage OSPF message instance.
- * @param ctx channel handler context instance.
- * @throws Exception might throws exception
- */
- void processLsRequestMessage(OspfMessage ospfMessage, ChannelHandlerContext ctx) throws Exception {
- log.debug("OspfChannelHandler::processLsRequestMessage...!!!");
- LsRequest lsrPacket = (LsRequest) ospfMessage;
- OspfNbr nbr = ospfInterface.neighbouringRouter(lsrPacket.routerId().toString());
-
- if (nbr.getState() == OspfNeighborState.EXCHANGE || nbr.getState() == OspfNeighborState.LOADING ||
- nbr.getState() == OspfNeighborState.FULL) {
-
- LsRequest reqMsg = (LsRequest) ospfMessage;
- if (reqMsg.getLinkStateRequests().isEmpty()) {
- log.debug("Received Link State Request Vector is Empty ");
- return;
- } else {
- //Send the LsUpdate back
- ListIterator<LsRequestPacket> listItr = reqMsg.getLinkStateRequests().listIterator();
- while (listItr.hasNext()) {
- LsUpdate lsupdate = new LsUpdate();
- lsupdate.setOspfVer(OspfUtil.OSPF_VERSION);
- lsupdate.setOspftype(OspfPacketType.LSUPDATE.value());
- lsupdate.setRouterId(ospfArea.routerId());
- lsupdate.setAreaId(ospfArea.areaId());
- lsupdate.setAuthType(OspfUtil.NOT_ASSIGNED);
- lsupdate.setAuthentication(OspfUtil.NOT_ASSIGNED);
- lsupdate.setOspfPacLength(OspfUtil.NOT_ASSIGNED); // to calculate packet length
- lsupdate.setChecksum(OspfUtil.NOT_ASSIGNED);
-
- //limit to mtu
- int currentLength = OspfUtil.OSPF_HEADER_LENGTH + OspfUtil.FOUR_BYTES;
- int maxSize = ospfInterface.mtu() -
- OspfUtil.LSA_HEADER_LENGTH; // subtract a normal IP header.
- int noLsa = 0;
- while (listItr.hasNext()) {
- LsRequestPacket lsRequest = (LsRequestPacket) listItr.next();
- // to verify length of the LSA
- LsaWrapper wrapper = ospfArea.getLsa(lsRequest.lsType(), lsRequest.linkStateId(),
- lsRequest.ownRouterId());
- OspfLsa ospflsa = wrapper.ospfLsa();
- if ((currentLength + ((LsaWrapperImpl) wrapper).lsaHeader().lsPacketLen()) >= maxSize) {
- listItr.previous();
- break;
- }
- if (ospflsa != null) {
- lsupdate.addLsa(ospflsa);
- noLsa++;
-
- currentLength = currentLength + ((LsaWrapperImpl) wrapper).lsaHeader().lsPacketLen();
- } else {
- nbr.badLSReq(channel);
- }
- }
- lsupdate.setNumberOfLsa(noLsa);
- //set the destination
- if (((OspfInterfaceImpl) ospfInterface).state() == OspfInterfaceState.DR ||
- ((OspfInterfaceImpl) ospfInterface).state() == OspfInterfaceState.BDR ||
- ((OspfInterfaceImpl) ospfInterface).state() == OspfInterfaceState.POINT2POINT) {
- lsupdate.setDestinationIp(OspfUtil.ALL_SPF_ROUTERS);
- } else if (((OspfInterfaceImpl) ospfInterface).state() == OspfInterfaceState.DROTHER) {
- lsupdate.setDestinationIp(OspfUtil.ALL_DROUTERS);
- }
- ctx.getChannel().write(lsupdate);
- }
- }
- }
- }
-
- /**
- * Process the ls update message.
- *
- * @param ospfMessage OSPF message instance.
- * @param ctx channel handler context instance.
- * @throws Exception might throws exception
- */
- void processLsUpdateMessage(OspfMessage ospfMessage, ChannelHandlerContext ctx) throws Exception {
- log.debug("OspfChannelHandler::processLsUpdateMessage");
- LsUpdate lsUpdate = (LsUpdate) ospfMessage;
- String neighbourId = lsUpdate.routerId().toString();
- //LSUpdate packet has been associated with a particular neighbor.
- //Neighbor should not be in lesser state than Exchange.
- if (ospfInterface.isNeighborInList(neighbourId)) {
- OspfNbrImpl nbr = (OspfNbrImpl) ospfInterface.neighbouringRouter(neighbourId);
- if (nbr.getState() == OspfNeighborState.EXCHANGE ||
- nbr.getState() == OspfNeighborState.LOADING) {
- nbr.processLsUpdate(lsUpdate, ctx.getChannel());
- } else if (nbr.getState() == OspfNeighborState.FULL) {
- if (lsUpdate.noLsa() != 0) {
- List<OspfLsa> list = lsUpdate.getLsaList();
- Iterator itr = list.iterator();
- while (itr.hasNext()) {
- LsaHeader lsa = (LsaHeader) itr.next();
- nbr.processReceivedLsa(lsa, true, ctx.getChannel(), lsUpdate.sourceIp());
- }
- } else {
- return;
- }
- }
- }
- }
-
- /**
- * Process the ls acknowledge message.
- *
- * @param ospfMessage OSPF message instance.
- * @param ctx channel handler context instance.
- * @throws Exception might throws exception
- */
- void processLsAckMessage(OspfMessage ospfMessage, ChannelHandlerContext ctx) throws Exception {
- log.debug("OspfChannelHandler::processLsAckMessage");
- LsAcknowledge lsAckPacket = (LsAcknowledge) ospfMessage;
- //check it is present in listOfNeighbors
- OspfNbrImpl nbr = (OspfNbrImpl) ospfInterface.neighbouringRouter(lsAckPacket.routerId().toString());
- if (nbr != null) {
- if (nbr.getState().getValue() < OspfNeighborState.EXCHANGE.getValue()) {
- // discard the packet.
- return;
- } else {
- // process ls acknowledgements
- Iterator itr = lsAckPacket.getLinkStateHeaders().iterator();
- while (itr.hasNext()) {
- LsaHeader lsRequest = (LsaHeader) itr.next();
-
- OspfLsa ospfLsa =
- (OspfLsa) nbr.getPendingReTxList().get(((OspfAreaImpl) ospfArea).getLsaKey(lsRequest));
- if (lsRequest != null && ospfLsa != null) {
- String isSame = ((OspfLsdbImpl) ospfArea.database()).isNewerOrSameLsa(
- lsRequest, (LsaHeader) ospfLsa);
- if (isSame.equals("same")) {
- nbr.getPendingReTxList().remove(((OspfAreaImpl) ospfArea).getLsaKey(lsRequest));
- }
- }
- }
- }
- }
- }
-
- /**
- * Compares two Dd Packets to check whether its duplicate or not.
- *
- * @param receivedDPacket received DD packet from network.
- * @param lastDdPacket Last DdPacket which we sent.
- * @return true if it is a duplicate packet else false.
- */
- public boolean compareDdPackets(DdPacket receivedDPacket, DdPacket lastDdPacket) {
- if (receivedDPacket.isInitialize() == lastDdPacket.isInitialize()) {
- if (receivedDPacket.isMaster() == lastDdPacket.isMaster()) {
- if (receivedDPacket.isMore() == lastDdPacket.isMore()) {
- if (receivedDPacket.options() == lastDdPacket.options()) {
- if (receivedDPacket.sequenceNo() == lastDdPacket.sequenceNo()) {
- return true;
- }
- }
- }
- }
- }
- return false;
- }
-
- /**
- * Closes the Netty channel.
- *
- * @param ctx the Channel Handler Context
- */
- void closeChannel(ChannelHandlerContext ctx) {
- log.debug("OspfChannelHandler::closeChannel");
- isClosed = true;
- ctx.getChannel().close();
- }
-
- /**
- * Starts the hello timer which sends hello packet every configured seconds.
- *
- * @param period the interval to run task
- */
- private void startHelloTimer(long period) {
- log.debug("OSPFInterfaceChannelHandler::startHelloTimer");
- exServiceHello = Executors.newSingleThreadScheduledExecutor();
- helloTimerTask = new InternalHelloTimer();
- final ScheduledFuture<?> helloHandle =
- exServiceHello.scheduleAtFixedRate(helloTimerTask, delay, period, TimeUnit.SECONDS);
- }
-
- /**
- * Stops the hello timer.
- */
- private void stopHelloTimer() {
- log.debug("OSPFInterfaceChannelHandler::stopHelloTimer ");
- exServiceHello.shutdown();
- }
-
- /**
- * Starts the wait timer.
- */
- private void startWaitTimer() {
- log.debug("OSPFNbr::startWaitTimer");
- exServiceWait = Executors.newSingleThreadScheduledExecutor();
- waitTimerTask = new InternalWaitTimer();
- final ScheduledFuture<?> waitTimerHandle =
- exServiceWait.schedule(waitTimerTask, ospfInterface.routerDeadIntervalTime(),
- TimeUnit.SECONDS);
- }
-
- /**
- * Stops the wait timer.
- */
- private void stopWaitTimer() {
- log.debug("OSPFNbr::stopWaitTimer ");
- exServiceWait.shutdown();
- }
-
- /**
- * Starts the timer which waits for configured seconds and sends Delayed Ack Packet.
- */
- private void startDelayedAckTimer() {
- if (!isDelayedAckTimerScheduled) {
- log.debug("Started DelayedAckTimer...!!!");
- exServiceDelayedAck = Executors.newSingleThreadScheduledExecutor();
- delayedAckTimerTask = new InternalDelayedAckTimer();
- final ScheduledFuture<?> delayAckHandle =
- exServiceDelayedAck.scheduleAtFixedRate(delayedAckTimerTask, delayedAckTimerInterval,
- delayedAckTimerInterval, TimeUnit.MILLISECONDS);
- isDelayedAckTimerScheduled = true;
- }
- }
-
- /**
- * Stops the delayed acknowledge timer.
- */
- private void stopDelayedAckTimer() {
- if (isDelayedAckTimerScheduled) {
- log.debug("Stopped DelayedAckTimer...!!!");
- isDelayedAckTimerScheduled = false;
- exServiceDelayedAck.shutdown();
- }
- }
-
- /**
- * Performs DR election.
- *
- * @param ch Netty Channel instance.
- * @throws Exception might throws exception
- */
- public void electRouter(Channel ch) throws Exception {
-
- Ip4Address currentDr = ospfInterface.dr();
- Ip4Address currentBdr = ospfInterface.bdr();
- OspfInterfaceState oldState = ((OspfInterfaceImpl) ospfInterface).state();
- OspfInterfaceState newState;
-
- log.debug("OSPFInterfaceChannelHandler::electRouter -> currentDr: {}, currentBdr: {}",
- currentDr, currentBdr);
- List<OspfEligibleRouter> eligibleRouters = calculateListOfEligibleRouters(new OspfEligibleRouter());
-
- log.debug("OSPFInterfaceChannelHandler::electRouter -> eligibleRouters: {}", eligibleRouters);
- OspfEligibleRouter electedBdr = electBdr(eligibleRouters);
- OspfEligibleRouter electedDr = electDr(eligibleRouters, electedBdr);
-
- ospfInterface.setBdr(electedBdr.getIpAddress());
- ospfInterface.setDr(electedDr.getIpAddress());
-
- if (electedBdr.getIpAddress().equals(ospfInterface.ipAddress()) &&
- !electedBdr.getIpAddress().equals(currentBdr)) {
- ((OspfInterfaceImpl) ospfInterface).setState(OspfInterfaceState.BDR);
- }
-
- if (electedDr.getIpAddress().equals(ospfInterface.ipAddress()) &&
- !electedDr.getIpAddress().equals(currentDr)) {
- ((OspfInterfaceImpl) ospfInterface).setState(OspfInterfaceState.DR);
- }
-
- if (((OspfInterfaceImpl) ospfInterface).state() != oldState &&
- !(((OspfInterfaceImpl) ospfInterface).state() == OspfInterfaceState.DROTHER &&
- oldState.value() < OspfInterfaceState.DROTHER.value())) {
- log.debug("Recalculating as the State is changed ");
- log.debug("OSPFInterfaceChannelHandler::electRouter -> currentDr: {}, currentBdr: {}",
- currentDr, currentBdr);
- eligibleRouters = calculateListOfEligibleRouters(new OspfEligibleRouter());
-
- log.debug("OSPFInterfaceChannelHandler::electRouter -> eligibleRouters: {}", eligibleRouters);
- electedBdr = electBdr(eligibleRouters);
- electedDr = electDr(eligibleRouters, electedBdr);
-
- ospfInterface.setBdr(electedBdr.getIpAddress());
- ospfInterface.setDr(electedDr.getIpAddress());
- }
-
- if (electedBdr.getIpAddress().equals(ospfInterface.ipAddress()) &&
- !electedBdr.getIpAddress().equals(currentBdr)) {
- ((OspfInterfaceImpl) ospfInterface).setState(OspfInterfaceState.BDR);
- ospfArea.refreshArea(ospfInterface);
- }
-
- if (electedDr.getIpAddress().equals(ospfInterface.ipAddress()) &&
- !electedDr.getIpAddress().equals(currentDr)) {
- ((OspfInterfaceImpl) ospfInterface).setState(OspfInterfaceState.DR);
- //Refresh Router Lsa & Network Lsa
- ospfArea.refreshArea(ospfInterface);
- }
-
- if (currentDr != electedDr.getIpAddress() || currentBdr != electedBdr.getIpAddress()) {
- Set<String> negibhorIdList;
- negibhorIdList = ospfInterface.listOfNeighbors().keySet();
- for (String routerid : negibhorIdList) {
- OspfNbrImpl nbr = (OspfNbrImpl) ospfInterface.neighbouringRouter(routerid);
- if (nbr.getState().getValue() >= OspfNeighborState.TWOWAY.getValue()) {
- nbr.adjOk(ch);
- }
- }
- }
-
- log.debug("OSPFInterfaceChannelHandler::electRouter -> ElectedDR: {}, ElectedBDR: {}",
- electedDr.getIpAddress(), electedBdr.getIpAddress());
- }
-
-
- /**
- * BDR Election process. Find the list of eligible router to participate in the process.
- *
- * @param electedDr router elected as DR.
- * @return list of eligible routers
- */
- public List<OspfEligibleRouter> calculateListOfEligibleRouters(OspfEligibleRouter electedDr) {
- log.debug("OSPFNbr::calculateListOfEligibleRouters ");
- Set<String> neighborIdList;
- List<OspfEligibleRouter> eligibleRouters = new ArrayList<>();
-
- neighborIdList = ospfInterface.listOfNeighbors().keySet();
- for (String routerId : neighborIdList) {
- OspfNbrImpl nbr = (OspfNbrImpl) ospfInterface.neighbouringRouter(routerId);
- if (nbr.getState().getValue() >= OspfNeighborState.TWOWAY.getValue() &&
- nbr.routerPriority() > 0) {
- OspfEligibleRouter router = new OspfEligibleRouter();
- router.setIpAddress(nbr.neighborIpAddr());
- router.setRouterId(nbr.neighborId());
- router.setRouterPriority(nbr.routerPriority());
- if (nbr.neighborDr().equals(nbr.neighborIpAddr()) ||
- electedDr.getIpAddress().equals(nbr.neighborIpAddr())) {
- router.setIsDr(true);
- } else if (nbr.neighborBdr().equals(nbr.neighborIpAddr())) {
- router.setIsBdr(true);
- }
- eligibleRouters.add(router);
- }
- }
- // interface does not have states like two and all
- if (ospfInterface.routerPriority() > 0) {
- OspfEligibleRouter router = new OspfEligibleRouter();
- router.setIpAddress(ospfInterface.ipAddress());
- router.setRouterId(ospfArea.routerId());
- router.setRouterPriority(ospfInterface.routerPriority());
- if (ospfInterface.dr().equals(ospfInterface.ipAddress()) ||
- electedDr.getIpAddress().equals(ospfInterface.ipAddress())) {
- router.setIsDr(true);
- } else if (ospfInterface.bdr().equals(ospfInterface.ipAddress()) &&
- !ospfInterface.dr().equals(ospfInterface.ipAddress())) {
- router.setIsBdr(true);
- }
-
- eligibleRouters.add(router);
- }
-
- return eligibleRouters;
- }
-
- /**
- * Based on router priority assigns BDR.
- *
- * @param eligibleRouters list of routers to participate in bdr election.
- * @return OSPF Eligible router instance.
- */
- public OspfEligibleRouter electBdr(List<OspfEligibleRouter> eligibleRouters) {
- log.debug("OSPFInterfaceChannelHandler::electBdr -> eligibleRouters: {}", eligibleRouters);
- List<OspfEligibleRouter> declaredAsBdr = new ArrayList<>();
- List<OspfEligibleRouter> notDrAndBdr = new ArrayList<>();
- for (OspfEligibleRouter router : eligibleRouters) {
- if (router.isBdr()) {
- declaredAsBdr.add(router);
- }
- if (!router.isBdr() && !router.isDr()) {
- notDrAndBdr.add(router);
- }
- }
-
- OspfEligibleRouter electedBdr = new OspfEligibleRouter();
- if (!declaredAsBdr.isEmpty()) {
- if (declaredAsBdr.size() == 1) {
- electedBdr = declaredAsBdr.get(0);
- } else if (declaredAsBdr.size() > 1) {
- electedBdr = selectRouterBasedOnPriority(declaredAsBdr);
- }
- } else {
- if (notDrAndBdr.size() == 1) {
- electedBdr = notDrAndBdr.get(0);
- } else if (notDrAndBdr.size() > 1) {
- electedBdr = selectRouterBasedOnPriority(notDrAndBdr);
- }
- }
-
- electedBdr.setIsBdr(true);
- electedBdr.setIsDr(false);
-
- return electedBdr;
- }
-
- /**
- * DR Election process.
- *
- * @param eligibleRouters list of eligible routers.
- * @param electedBdr Elected Bdr, OSPF eligible router instance.
- * @return OSPF eligible router instance.
- */
- public OspfEligibleRouter electDr(List<OspfEligibleRouter> eligibleRouters,
- OspfEligibleRouter electedBdr) {
-
- List<OspfEligibleRouter> declaredAsDr = new ArrayList<>();
- for (OspfEligibleRouter router : eligibleRouters) {
- if (router.isDr()) {
- declaredAsDr.add(router);
- }
- }
-
- OspfEligibleRouter electedDr = new OspfEligibleRouter();
- if (!declaredAsDr.isEmpty()) {
- if (declaredAsDr.size() == 1) {
- electedDr = declaredAsDr.get(0);
- } else if (eligibleRouters.size() > 1) {
- electedDr = selectRouterBasedOnPriority(declaredAsDr);
- }
- } else {
- electedDr = electedBdr;
- electedDr.setIsDr(true);
- electedDr.setIsBdr(false);
- }
-
- return electedDr;
- }
-
- /**
- * DR election process.
- *
- * @param routersList list of eligible routers.
- * @return OSPF eligible router instance.
- */
- public OspfEligibleRouter selectRouterBasedOnPriority(List<OspfEligibleRouter> routersList) {
-
- OspfEligibleRouter initialRouter = routersList.get(0);
-
- for (int i = 1; i < routersList.size(); i++) {
- OspfEligibleRouter router = routersList.get(i);
- if (router.getRouterPriority() > initialRouter.getRouterPriority()) {
- initialRouter = router;
- } else if (router.getRouterPriority() == initialRouter.getRouterPriority()) {
- try {
- //if (router.getIpAddress().toInt() > initialRouter.getIpAddress().toInt()) {
- if (OspfUtil.ipAddressToLong(router.getIpAddress().toString()) >
- OspfUtil.ipAddressToLong(initialRouter.getIpAddress().toString())) {
- initialRouter = router;
- }
- } catch (Exception e) {
- log.debug("OSPFInterfaceChannelHandler::selectRouterBasedOnPriority ->" +
- " eligibleRouters: {}", initialRouter);
- }
- }
- }
-
- return initialRouter;
- }
-
- /**
- * Adds device information.
- *
- * @param ospfRouter OSPF router instance
- */
- public void addDeviceInformation(OspfRouter ospfRouter) {
- controller.addDeviceDetails(ospfRouter);
- }
-
- /**
- * removes device information.
- *
- * @param ospfRouter OSPF neighbor instance
- */
- public void removeDeviceInformation(OspfRouter ospfRouter) {
- controller.removeDeviceDetails(ospfRouter);
- }
-
- /**
- * Adds link information.
- *
- * @param ospfRouter OSPF router instance
- * @param ospfLinkTed list link ted instances
- */
- public void addLinkInformation(OspfRouter ospfRouter, OspfLinkTed ospfLinkTed) {
- controller.addLinkDetails(ospfRouter, ospfLinkTed);
- }
-
- /**
- * Removes link information.
- *
- * @param ospfNbr OSPF neighbor instance
- */
- public void removeLinkInformation(OspfNbr ospfNbr) {
- controller.removeLinkDetails(buildOspfRouterDetails(ospfNbr));
- }
-
- /**
- * Builds router details.
- *
- * @param ospfNbr OSPF neighbor instance
- * @return OSPF router instance
- */
- private OspfRouter buildOspfRouterDetails(OspfNbr ospfNbr) {
- OspfRouter ospfRouter = new OspfRouterImpl();
- ospfRouter.setRouterIp(ospfNbr.neighborId());
- ospfRouter.setInterfaceId(ospfInterface.ipAddress());
- ospfRouter.setAreaIdOfInterface(ospfArea.areaId());
-
- ospfRouter.setDeviceTed(new OspfDeviceTedImpl());
-
- return ospfRouter;
- }
-
- /**
- * Represents a Hello task which sent a hello message every configured time interval.
- */
- private class InternalHelloTimer implements Runnable {
-
- /**
- * Creates an instance of Hello Timer.
- */
- InternalHelloTimer() {
- }
-
- @Override
- public void run() {
- if (!isClosed && channel != null && channel.isOpen() && channel.isConnected()) {
-
- HelloPacket hellopacket = new HelloPacket();
- //Headers
- hellopacket.setOspfVer(OspfUtil.OSPF_VERSION);
- hellopacket.setOspftype(OspfPacketType.HELLO.value());
- hellopacket.setOspfPacLength(0); //will be modified while encoding
- hellopacket.setRouterId(ospfArea.routerId());
- hellopacket.setAreaId(ospfArea.areaId());
- hellopacket.setChecksum(0); //will be modified while encoding
- hellopacket.setAuthType(Integer.parseInt(ospfInterface.authType()));
- hellopacket.setAuthentication(Integer.parseInt(ospfInterface.authKey()));
- //Body
- hellopacket.setNetworkMask(ospfInterface.ipNetworkMask());
- hellopacket.setOptions(ospfArea.options());
- hellopacket.setHelloInterval(ospfInterface.helloIntervalTime());
- hellopacket.setRouterPriority(ospfInterface.routerPriority());
- hellopacket.setRouterDeadInterval(ospfInterface.routerDeadIntervalTime());
- hellopacket.setDr(ospfInterface.dr());
- hellopacket.setBdr(ospfInterface.bdr());
-
- HashMap<String, OspfNbr> listOfNeighbors = ospfInterface.listOfNeighbors();
- Set<String> keys = listOfNeighbors.keySet();
- Iterator itr = keys.iterator();
- while (itr.hasNext()) {
- String nbrKey = (String) itr.next();
- OspfNbrImpl nbr = (OspfNbrImpl) listOfNeighbors.get(nbrKey);
- if (nbr.getState() != OspfNeighborState.DOWN) {
- hellopacket.addNeighbor(Ip4Address.valueOf(nbrKey));
- }
- }
- // build a hello Packet
- if (channel == null || !channel.isOpen() || !channel.isConnected()) {
- log.debug("Hello Packet not sent !!.. Channel Issue...");
- return;
- }
-
- hellopacket.setDestinationIp(OspfUtil.ALL_SPF_ROUTERS);
- ChannelFuture future = channel.write(hellopacket);
- if (future.isSuccess()) {
- log.debug("Hello Packet successfully sent !!");
- } else {
- future.awaitUninterruptibly();
- }
-
- }
- }
- }
-
- /**
- * Represents a Wait Timer task which waits the interface state to become WAITING.
- * It initiates DR election process.
- */
- private class InternalWaitTimer implements Runnable {
- Channel ch;
-
- /**
- * Creates an instance of Wait Timer.
- */
- InternalWaitTimer() {
- this.ch = channel;
- }
-
- @Override
- public void run() {
- log.debug("Wait timer expires...");
- if (ch != null && ch.isConnected()) {
- try {
- waitTimer(ch);
- } catch (Exception e) {
- log.debug("Exception at wait timer ...!!!");
- }
-
- }
- }
- }
-
- /**
- * Represents a task which sent a LS Acknowledge from the link state headers list.
- */
- private class InternalDelayedAckTimer implements Runnable {
- Channel ch;
-
- /**
- * Creates an instance of Delayed acknowledge timer.
- */
- InternalDelayedAckTimer() {
- this.ch = channel;
- }
-
- @Override
- public void run() {
- if (!((OspfInterfaceImpl) ospfInterface).linkStateHeaders().isEmpty()) {
- isDelayedAckTimerScheduled = true;
- if (ch != null && ch.isConnected()) {
-
- List<LsaHeader> listOfLsaHeadersAcknowledged = new ArrayList<>();
- List<LsaHeader> listOfLsaHeaders = ((OspfInterfaceImpl) ospfInterface).linkStateHeaders();
- log.debug("Delayed Ack, Number of Lsa's to Ack {}", listOfLsaHeaders.size());
- Iterator itr = listOfLsaHeaders.iterator();
- while (itr.hasNext()) {
- LsAcknowledge ackContent = new LsAcknowledge();
- //Setting OSPF Header
- ackContent.setOspfVer(OspfUtil.OSPF_VERSION);
- ackContent.setOspftype(OspfPacketType.LSAACK.value());
- ackContent.setRouterId(ospfArea.routerId());
- ackContent.setAreaId(ospfArea.areaId());
- ackContent.setAuthType(OspfUtil.NOT_ASSIGNED);
- ackContent.setAuthentication(OspfUtil.NOT_ASSIGNED);
- ackContent.setOspfPacLength(OspfUtil.NOT_ASSIGNED);
- ackContent.setChecksum(OspfUtil.NOT_ASSIGNED);
- //limit to mtu
- int currentLength = OspfUtil.OSPF_HEADER_LENGTH;
- int maxSize = ospfInterface.mtu() -
- OspfUtil.LSA_HEADER_LENGTH; // subtract a normal IP header.
- while (itr.hasNext()) {
- if ((currentLength + OspfUtil.LSA_HEADER_LENGTH) >= maxSize) {
- break;
- }
- LsaHeader lsaHeader = (LsaHeader) itr.next();
- ackContent.addLinkStateHeader(lsaHeader);
- currentLength = currentLength + OspfUtil.LSA_HEADER_LENGTH;
- listOfLsaHeadersAcknowledged.add(lsaHeader);
- log.debug("Delayed Ack, Added Lsa's to Ack {}", lsaHeader);
- }
-
- log.debug("Delayed Ack, Number of Lsa's in LsAck packet {}",
- ackContent.getLinkStateHeaders().size());
-
- //set the destination
- if (((OspfInterfaceImpl) ospfInterface).state() == OspfInterfaceState.DR ||
- ((OspfInterfaceImpl) ospfInterface).state() == OspfInterfaceState.BDR
- || ((OspfInterfaceImpl) ospfInterface).state() == OspfInterfaceState.POINT2POINT) {
- ackContent.setDestinationIp(OspfUtil.ALL_SPF_ROUTERS);
- } else if (((OspfInterfaceImpl) ospfInterface).state() == OspfInterfaceState.DROTHER) {
- ackContent.setDestinationIp(OspfUtil.ALL_DROUTERS);
- }
- ch.write(ackContent);
- for (LsaHeader lsa : listOfLsaHeadersAcknowledged) {
- ((OspfInterfaceImpl) ospfInterface).linkStateHeaders().remove(lsa);
- ospfInterface.removeLsaFromNeighborMap(((OspfAreaImpl) ospfArea).getLsaKey(lsa));
- }
- }
- }
- }
+ log.debug("OspfChannelHandler sentConfigPacket channel not connected - re try..!!!");
+ this.configPacket = configPacket;
}
}
}
\ No newline at end of file
diff --git a/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/impl/OspfMessageDecoder.java b/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/impl/OspfMessageDecoder.java
index baeae99..1d6ae23 100644
--- a/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/impl/OspfMessageDecoder.java
+++ b/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/impl/OspfMessageDecoder.java
@@ -19,8 +19,10 @@
import org.jboss.netty.channel.Channel;
import org.jboss.netty.channel.ChannelHandlerContext;
import org.jboss.netty.handler.codec.frame.FrameDecoder;
-import org.onosproject.ospf.protocol.ospfpacket.OspfMessage;
+import org.onlab.packet.Ip4Address;
+import org.onosproject.ospf.controller.OspfMessage;
import org.onosproject.ospf.protocol.ospfpacket.OspfMessageReader;
+import org.onosproject.ospf.protocol.util.OspfUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -35,24 +37,35 @@
private static final Logger log = LoggerFactory.getLogger(OspfMessageDecoder.class);
@Override
- protected Object decode(ChannelHandlerContext ctx, Channel channel, ChannelBuffer channelBuffer) throws Exception {
- log.debug("OspfMessageDecoder::Message received <:> length {}", channelBuffer.readableBytes());
- log.debug("channelBuffer.readableBytes - decode {}", channelBuffer.readableBytes());
+ protected Object decode(ChannelHandlerContext ctx, Channel channel, ChannelBuffer buffer) throws Exception {
+ log.debug("OspfMessageDecoder::Message received <:> length {}", buffer.readableBytes());
if (!channel.isConnected()) {
log.info("Channel is not connected.");
return null;
}
-
OspfMessageReader messageReader = new OspfMessageReader();
List<OspfMessage> ospfMessageList = new LinkedList<>();
-
- while (channelBuffer.readableBytes() > 0) {
- OspfMessage message = messageReader.readFromBuffer(channelBuffer);
+ while (buffer.readableBytes() >= OspfUtil.MINIMUM_FRAME_LEN) {
+ ChannelBuffer ospfDataBuffer = buffer.readBytes(OspfUtil.MINIMUM_FRAME_LEN);
+ int readableBytes = ospfDataBuffer.readableBytes();
+ OspfMessage message = messageReader.readFromBuffer(ospfDataBuffer);
if (message != null) {
+ if (ospfDataBuffer.readableBytes() >= OspfUtil.METADATA_LEN) {
+ ospfDataBuffer.readerIndex(readableBytes - OspfUtil.METADATA_LEN);
+ log.debug("IsisMessageDecoder::Reading metadata <:> length {}", ospfDataBuffer.readableBytes());
+
+
+ int interfaceIndex = ospfDataBuffer.readByte();
+ byte[] sourceIpBytes = new byte[OspfUtil.FOUR_BYTES];
+ ospfDataBuffer.readBytes(sourceIpBytes, 0, OspfUtil.FOUR_BYTES);
+ Ip4Address sourceIP = Ip4Address.valueOf(sourceIpBytes);
+
+ message.setSourceIp(sourceIP);
+ message.setInterfaceIndex(interfaceIndex);
+ }
ospfMessageList.add(message);
}
}
-
- return ospfMessageList;
+ return (ospfMessageList.size() > 0) ? ospfMessageList : null;
}
}
\ No newline at end of file
diff --git a/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/impl/OspfMessageEncoder.java b/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/impl/OspfMessageEncoder.java
index 95bdcdc..8ac971c 100644
--- a/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/impl/OspfMessageEncoder.java
+++ b/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/impl/OspfMessageEncoder.java
@@ -17,15 +17,10 @@
package org.onosproject.ospf.controller.impl;
import org.jboss.netty.buffer.ChannelBuffer;
+import org.jboss.netty.buffer.ChannelBuffers;
import org.jboss.netty.channel.Channel;
import org.jboss.netty.channel.ChannelHandlerContext;
import org.jboss.netty.handler.codec.oneone.OneToOneEncoder;
-import org.onosproject.ospf.controller.OspfInterface;
-import org.onosproject.ospf.controller.area.OspfInterfaceImpl;
-import org.onosproject.ospf.protocol.ospfpacket.OspfMessage;
-import org.onosproject.ospf.protocol.ospfpacket.OspfMessageWriter;
-import org.onosproject.ospf.protocol.util.OspfInterfaceState;
-import org.onosproject.ospf.protocol.util.OspfUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -35,46 +30,15 @@
public class OspfMessageEncoder extends OneToOneEncoder {
private static final Logger log = LoggerFactory.getLogger(OspfMessageEncoder.class);
- private OspfInterface ospfInterface;
-
-
- /**
- * Creates an instance of OSPF message encoder.
- */
- OspfMessageEncoder() {
- }
-
- /**
- * Creates an instance of OSPF message encoder.
- *
- * @param ospfInterface OSPF interface instance
- */
- OspfMessageEncoder(OspfInterface ospfInterface) {
- this.ospfInterface = ospfInterface;
- }
@Override
protected Object encode(ChannelHandlerContext ctx, Channel channel, Object msg) throws Exception {
- log.debug("Encoding ospfMessage...!!!");
- if (!(msg instanceof OspfMessage)) {
- log.debug("Invalid msg.");
- return msg;
- }
+ byte[] byteMsg = (byte[]) msg;
+ log.debug("Encoding ospfMessage of length {}", byteMsg.length);
+ ChannelBuffer channelBuffer = ChannelBuffers.buffer(byteMsg.length);
+ channelBuffer.writeBytes(byteMsg);
- OspfMessage ospfMessage = (OspfMessage) msg;
- OspfMessageWriter messageWriter = new OspfMessageWriter();
- if (((OspfInterfaceImpl) ospfInterface).state().equals(OspfInterfaceState.POINT2POINT)) {
- ospfMessage.setDestinationIp(OspfUtil.ALL_SPF_ROUTERS);
- }
- ChannelBuffer buf = messageWriter.writeToBuffer(ospfMessage,
- ((OspfInterfaceImpl) ospfInterface).state().value(),
- ospfInterface.interfaceType());
- log.info("OspfMessageEncoder sending packet of lenght {}", buf.readableBytes());
- log.debug("OspfMessageEncoder sending packet of lenght {}", buf.readableBytes());
- log.debug("Sending {} Message to {}, Length :: {}, <=> {}", ospfMessage.ospfMessageType(),
- ospfMessage.destinationIp(), buf.readableBytes(), buf.array());
-
- return buf;
+ return channelBuffer;
}
}
diff --git a/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/impl/OspfNbrImpl.java b/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/impl/OspfNbrImpl.java
index 1233c28..800d571 100644
--- a/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/impl/OspfNbrImpl.java
+++ b/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/impl/OspfNbrImpl.java
@@ -28,8 +28,10 @@
import org.onosproject.ospf.controller.OspfLsa;
import org.onosproject.ospf.controller.OspfLsaType;
import org.onosproject.ospf.controller.OspfLsdb;
+import org.onosproject.ospf.controller.OspfMessage;
import org.onosproject.ospf.controller.OspfNbr;
import org.onosproject.ospf.controller.OspfNeighborState;
+import org.onosproject.ospf.controller.OspfPacketType;
import org.onosproject.ospf.controller.OspfRouter;
import org.onosproject.ospf.controller.TopologyForDeviceAndLink;
import org.onosproject.ospf.controller.area.OspfAreaImpl;
@@ -40,7 +42,7 @@
import org.onosproject.ospf.protocol.lsa.OpaqueLsaHeader;
import org.onosproject.ospf.protocol.lsa.types.OpaqueLsa10;
import org.onosproject.ospf.protocol.lsa.types.TopLevelTlv;
-import org.onosproject.ospf.protocol.ospfpacket.OspfMessage;
+import org.onosproject.ospf.protocol.ospfpacket.OspfMessageWriter;
import org.onosproject.ospf.protocol.ospfpacket.OspfPacketHeader;
import org.onosproject.ospf.protocol.ospfpacket.subtype.LsRequestPacket;
import org.onosproject.ospf.protocol.ospfpacket.types.DdPacket;
@@ -49,7 +51,6 @@
import org.onosproject.ospf.protocol.ospfpacket.types.LsUpdate;
import org.onosproject.ospf.protocol.util.ChecksumCalculator;
import org.onosproject.ospf.protocol.util.OspfInterfaceState;
-import org.onosproject.ospf.protocol.util.OspfPacketType;
import org.onosproject.ospf.protocol.util.OspfParameters;
import org.onosproject.ospf.protocol.util.OspfUtil;
import org.slf4j.Logger;
@@ -181,7 +182,6 @@
* A link to the OSPF-Area this Neighbor Data Structure belongs to.
*/
private OspfArea ospfArea;
- private OspfInterfaceChannelHandler handler;
private List<TopLevelTlv> topLevelTlvs = new ArrayList<>();
private List<DeviceInformation> deviceInformationList = new ArrayList<>();
@@ -195,12 +195,11 @@
* @param ipAddr IP address
* @param routerId router id
* @param options options
- * @param handler channel handler instance
* @param topologyForDeviceAndLinkCommon topology for device and link instance
*/
public OspfNbrImpl(OspfArea paramOspfArea, OspfInterface paramOspfInterface,
Ip4Address ipAddr, Ip4Address routerId, int options,
- OspfInterfaceChannelHandler handler, TopologyForDeviceAndLink topologyForDeviceAndLinkCommon) {
+ TopologyForDeviceAndLink topologyForDeviceAndLinkCommon) {
this.ospfArea = paramOspfArea;
this.ospfInterface = paramOspfInterface;
state = OspfNeighborState.DOWN;
@@ -211,7 +210,6 @@
this.options = options;
lastDdPacket = new DdPacket();
routerDeadInterval = paramOspfInterface.routerDeadIntervalTime();
- this.handler = handler;
this.topologyForDeviceAndLink = topologyForDeviceAndLinkCommon;
}
@@ -243,6 +241,15 @@
}
/**
+ * Sets router dead interval.
+ *
+ * @param routerDeadInterval router dead interval
+ */
+ public void setRouterDeadInterval(int routerDeadInterval) {
+ this.routerDeadInterval = routerDeadInterval;
+ }
+
+ /**
* Have seen a Neighbor, but the Neighbor doesn't know about me.
*
* @param ospfHello Hello Packet instance
@@ -313,7 +320,8 @@
startRxMtDdTimer(channel);
//setting destination ip
ddPacket.setDestinationIp(packet.sourceIp());
- channel.write(ddPacket);
+ byte[] messageToWrite = getMessage(ddPacket);
+ channel.write(messageToWrite);
} else {
state = OspfNeighborState.TWOWAY;
}
@@ -409,7 +417,8 @@
setLastSentDdPacket(ddPacket);
getIsMoreBit();
- ch.write(lastSentDdPacket());
+ byte[] messageToWrite = getMessage(lastSentDdPacket);
+ ch.write(messageToWrite);
} else {
// process LSA Vector's List, Add it to LSRequestList.
processLsas(payload);
@@ -437,7 +446,8 @@
setLastSentDdPacket(ddPacket);
getIsMoreBit();
ddPacket.setDestinationIp(packet.sourceIp());
- ch.write(lastSentDdPacket());
+ byte[] messageToWrite = getMessage(lastSentDdPacket);
+ ch.write(messageToWrite);
startRxMtDdTimer(ch);
}
}
@@ -594,7 +604,8 @@
//setting destination ip
ddPacket.setDestinationIp(neighborIpAddr());
setLastSentDdPacket(ddPacket);
- ch.write(ddPacket);
+ byte[] messageToWrite = getMessage(ddPacket);
+ ch.write(messageToWrite);
}
}
@@ -651,7 +662,8 @@
getIsMoreBit();
//Set the destination IP Address
ddPacket.setDestinationIp(dataDescPkt.sourceIp());
- ch.write(lastSentDdPacket());
+ byte[] messageToWrite = getMessage(lastSentDdPacket());
+ ch.write(messageToWrite);
startRxMtDdTimer(ch);
}
@@ -692,7 +704,8 @@
}
ddPacket.setDestinationIp(dataDescPkt.sourceIp());
- ch.write(ddPacket);
+ byte[] messageToWrite = getMessage(ddPacket);
+ ch.write(messageToWrite);
}
}
@@ -753,7 +766,8 @@
LsRequest lsRequest = buildLsRequest();
//Setting the destination address
lsRequest.setDestinationIp(header.sourceIp());
- ch.write(lsRequest);
+ byte[] messageToWrite = getMessage(lsRequest);
+ ch.write(messageToWrite);
setLastSentLsrPacket(lsRequest);
startRxMtLsrTimer(ch);
@@ -859,7 +873,8 @@
//setting destination ip
ddPacket.setDestinationIp(neighborIpAddr());
setLastSentDdPacket(ddPacket);
- ch.write(ddPacket);
+ byte[] messageToWrite = getMessage(ddPacket);
+ ch.write(messageToWrite);
}
} else if (state.getValue() >= OspfNeighborState.EXSTART.getValue()) {
if (!formAdjacencyOrNot()) {
@@ -942,39 +957,55 @@
*/
private void callDeviceAndLinkAdding(TopologyForDeviceAndLink topologyForDeviceAndLink) {
Map<String, DeviceInformation> deviceInformationMap = topologyForDeviceAndLink.deviceInformationMap();
+ Map<String, DeviceInformation> deviceInformationMapForPointToPoint =
+ topologyForDeviceAndLink.deviceInformationMapForPointToPoint();
+ Map<String, DeviceInformation> deviceInformationMapToDelete =
+ topologyForDeviceAndLink.deviceInformationMapToDelete();
Map<String, LinkInformation> linkInformationMap = topologyForDeviceAndLink.linkInformationMap();
+ Map<String, LinkInformation> linkInformationMapForPointToPoint =
+ topologyForDeviceAndLink.linkInformationMapForPointToPoint();
OspfRouter ospfRouter = new OspfRouterImpl();
- log.debug("Device Information in list format along with size {}", deviceInformationMap.size());
- for (String key : deviceInformationMap.keySet()) {
- DeviceInformation value = deviceInformationMap.get(key);
- ospfRouter.setRouterIp(value.routerId());
- ospfRouter.setAreaIdOfInterface(ospfArea.areaId());
- ospfRouter.setNeighborRouterId(value.deviceId());
- OspfDeviceTed ospfDeviceTed = new OspfDeviceTedImpl();
- List<Ip4Address> ip4Addresses = value.interfaceId();
- ospfDeviceTed.setIpv4RouterIds(ip4Addresses);
- ospfRouter.setDeviceTed(ospfDeviceTed);
- ospfRouter.setOpaque(ospfArea.isOpaqueEnabled());
- if (value.isDr()) {
- ospfRouter.setDr(value.isDr());
- } else {
- ospfRouter.setDr(false);
+
+ if (deviceInformationMap.size() != 0) {
+ for (String key : deviceInformationMap.keySet()) {
+ DeviceInformation value = deviceInformationMap.get(key);
+ ospfRouter.setRouterIp(value.routerId());
+ ospfRouter.setAreaIdOfInterface(ospfArea.areaId());
+ ospfRouter.setNeighborRouterId(value.deviceId());
+ OspfDeviceTed ospfDeviceTed = new OspfDeviceTedImpl();
+ List<Ip4Address> ip4Addresses = value.interfaceId();
+ ospfDeviceTed.setIpv4RouterIds(ip4Addresses);
+ ospfRouter.setDeviceTed(ospfDeviceTed);
+ ospfRouter.setOpaque(ospfArea.isOpaqueEnabled());
+ if (value.isDr()) {
+ ospfRouter.setDr(value.isDr());
+ } else {
+ ospfRouter.setDr(false);
+ }
+ int size = value.interfaceId().size();
+ for (int i = 0; i < size; i++) {
+ ospfRouter.setInterfaceId(value.interfaceId().get(i));
+ }
+ ((OspfInterfaceImpl) ospfInterface).addDeviceInformation(ospfRouter);
}
- int size = value.interfaceId().size();
- for (int i = 0; i < size; i++) {
- ospfRouter.setInterfaceId(value.interfaceId().get(i));
+ }
+ if (deviceInformationMapForPointToPoint.size() != 0) {
+ for (String key : deviceInformationMapForPointToPoint.keySet()) {
+ DeviceInformation value = deviceInformationMapForPointToPoint.get(key);
+ ospfRouter.setRouterIp(value.routerId());
+ ospfRouter.setAreaIdOfInterface(ospfArea.areaId());
+ ospfRouter.setNeighborRouterId(value.deviceId());
+ OspfDeviceTed ospfDeviceTed = new OspfDeviceTedImpl();
+ List<Ip4Address> ip4Addresses = value.interfaceId();
+ ospfDeviceTed.setIpv4RouterIds(ip4Addresses);
+ ospfRouter.setDeviceTed(ospfDeviceTed);
+ ospfRouter.setOpaque(value.isDr());
+ int size = value.interfaceId().size();
+ for (int i = 0; i < size; i++) {
+ ospfRouter.setInterfaceId(value.interfaceId().get(i));
+ }
+ ((OspfInterfaceImpl) ospfInterface).addDeviceInformation(ospfRouter);
}
- if (value.isAlreadyCreated()) {
- removeDeviceDetails(value.routerId());
- OspfRouter ospfRouter1 = new OspfRouterImpl();
- ospfRouter1.setRouterIp(value.routerId());
- ospfRouter1.setInterfaceId(ospfInterface.ipAddress());
- ospfRouter1.setAreaIdOfInterface(ospfArea.areaId());
- ospfRouter1.setDeviceTed(new OspfDeviceTedImpl());
- topologyForDeviceAndLink.removeLinks(value.routerId());
- handler.removeDeviceInformation(ospfRouter1);
- }
- handler.addDeviceInformation(ospfRouter);
}
for (Map.Entry<String, LinkInformation> entry : linkInformationMap.entrySet()) {
String key = entry.getKey();
@@ -983,8 +1014,8 @@
ospfRouterForLink.setInterfaceId(value.interfaceIp());
ospfRouterForLink.setAreaIdOfInterface(ospfArea.areaId());
ospfRouterForLink.setOpaque(ospfArea.isOpaqueEnabled());
- OspfLinkTed ospfLinkTed =
- topologyForDeviceAndLink.getOspfLinkTedHashMap(value.linkDestinationId().toString());
+ OspfLinkTed ospfLinkTed = topologyForDeviceAndLink.getOspfLinkTedHashMap(
+ value.linkDestinationId().toString());
if (ospfLinkTed == null) {
ospfLinkTed = new OspfLinkTedImpl();
ospfLinkTed.setMaximumLink(Bandwidth.bps(0));
@@ -996,13 +1027,9 @@
ospfRouterForLink.setRouterIp(value.linkSourceId());
ospfRouterForLink.setNeighborRouterId(value.linkDestinationId());
try {
- handler.addLinkInformation(ospfRouterForLink, ospfLinkTed);
- log.debug("LinkId, LinkSrc , LinkDest , LinkInterface values are : "
- + value.linkId() + " , " + value.linkSourceId() + " , "
- + value.linkDestinationId() + " , "
- + value.interfaceIp());
+ ((OspfInterfaceImpl) ospfInterface).addLinkInformation(ospfRouterForLink, ospfLinkTed);
} catch (Exception e) {
- log.debug("Got Exception : {}", e.getMessage());
+ log.debug("Exception addLinkInformation: " + e.getMessage());
}
}
}
@@ -1178,11 +1205,31 @@
}
}
}
+
+ constructDeviceInformationFromDb();
callDeviceAndLinkAdding(topologyForDeviceAndLink);
+
return true;
}
/**
+ * Constructs device and link information from link state database.
+ */
+ private void constructDeviceInformationFromDb() {
+ OspfLsdb database = ospfArea.database();
+ List lsas = database.getAllLsaHeaders(true, true);
+ Iterator iterator = lsas.iterator();
+ while (iterator.hasNext()) {
+ OspfLsa ospfLsa = (OspfLsa) iterator.next();
+ if (ospfLsa.getOspfLsaType().value() == OspfLsaType.ROUTER.value()) {
+ topologyForDeviceAndLink.addLocalDevice(ospfLsa, ospfInterface, ospfArea);
+ } else if (ospfLsa.getOspfLsaType().value() == OspfLsaType.NETWORK.value()) {
+ topologyForDeviceAndLink.addLocalDevice(ospfLsa, ospfInterface, ospfArea);
+ }
+ }
+ }
+
+ /**
* Checks Link State ID is equal to one of the router's own IP interface addresses.
*
* @param linkStateId link state id
@@ -1190,7 +1237,7 @@
*/
private boolean isLinkStateMatchesOwnRouterId(String linkStateId) {
boolean isLinkStateMatches = false;
- List<OspfInterface> interfaceLst = ospfArea.getInterfacesLst();
+ List<OspfInterface> interfaceLst = ospfArea.ospfInterfaceList();
for (OspfInterface ospfInterface : interfaceLst) {
if (ospfInterface.ipAddress().toString().equals(linkStateId)) {
isLinkStateMatches = true;
@@ -1262,7 +1309,8 @@
//setting the destination.
responseLsUpdate.setDestinationIp(destination);
- ch.write(responseLsUpdate);
+ byte[] messageToWrite = getMessage(responseLsUpdate);
+ ch.write(messageToWrite);
}
/**
@@ -1288,7 +1336,8 @@
ackContent.addLinkStateHeader(ackLsa);
//setting the destination IP
ackContent.setDestinationIp(sourceIp);
- ch.write(ackContent);
+ byte[] messageToWrite = getMessage(ackContent);
+ ch.write(messageToWrite);
}
/**
@@ -1314,7 +1363,7 @@
ddSummaryList.clear();
if (neighborIpAddr.equals(neighborBdr) ||
neighborIpAddr.equals(neighborDr)) {
- handler.neighborChange();
+ ((OspfInterfaceImpl) ospfInterface).neighborChange();
}
log.debug("Neighbor Went Down : "
+ this.neighborIpAddr + " , " + this.neighborId);
@@ -1324,16 +1373,14 @@
ospfRouter.setInterfaceId(ospfInterface.ipAddress());
ospfRouter.setAreaIdOfInterface(ospfArea.areaId());
ospfRouter.setDeviceTed(new OspfDeviceTedImpl());
- handler.removeDeviceInformation(ospfRouter);
+ ((OspfInterfaceImpl) ospfInterface).removeDeviceInformation(ospfRouter);
removeDeviceDetails(this.neighborIpAddr);
OspfRouter ospfRouter1 = new OspfRouterImpl();
ospfRouter1.setRouterIp(this.neighborIpAddr);
ospfRouter1.setInterfaceId(ospfInterface.ipAddress());
ospfRouter1.setAreaIdOfInterface(ospfArea.areaId());
ospfRouter1.setDeviceTed(new OspfDeviceTedImpl());
- handler.removeDeviceInformation(ospfRouter1);
- handler.removeLinkInformation(this);
- callDeviceAndLinkAdding(topologyForDeviceAndLink);
+ ((OspfInterfaceImpl) ospfInterface).removeDeviceInformation(ospfRouter1);
}
/**
@@ -1344,13 +1391,12 @@
private void removeDeviceDetails(Ip4Address routerId) {
String key = "device:" + routerId;
topologyForDeviceAndLink.removeDeviceInformationMap(key);
- topologyForDeviceAndLink.removeLinks(routerId);
}
/**
* Starts the inactivity timer.
*/
- private void startInactivityTimeCheck() {
+ public void startInactivityTimeCheck() {
if (!inActivityTimerScheduled) {
log.debug("OSPFNbr::startInactivityTimeCheck");
inActivityTimeCheckTask = new InternalInactivityTimeCheck();
@@ -1364,7 +1410,7 @@
/**
* Stops the inactivity timer.
*/
- private void stopInactivityTimeCheck() {
+ public void stopInactivityTimeCheck() {
if (inActivityTimerScheduled) {
log.debug("OSPFNbr::stopInactivityTimeCheck ");
exServiceInActivity.shutdown();
@@ -1393,7 +1439,7 @@
/**
* Stops the flooding timer.
*/
- private void stopFloodingTimer() {
+ public void stopFloodingTimer() {
if (floodingTimerScheduled) {
log.debug("OSPFNbr::stopFloodingTimer ");
exServiceFlooding.shutdown();
@@ -1420,7 +1466,7 @@
/**
* Stops the Dd Retransmission executor task.
*/
- private void stopRxMtDdTimer() {
+ public void stopRxMtDdTimer() {
if (rxmtDdPacketTimerScheduled) {
exServiceRxmtDDPacket.shutdown();
rxmtDdPacketTimerScheduled = false;
@@ -1447,7 +1493,7 @@
/**
* Stops Ls request retransmission executor task.
*/
- private void stopRxMtLsrTimer() {
+ public void stopRxMtLsrTimer() {
if (rxmtLsrTimerScheduled) {
exServiceRxmtLsr.shutdown();
rxmtLsrTimerScheduled = false;
@@ -1679,6 +1725,21 @@
return pendingReTxList;
}
+ /**
+ * Gets message as bytes.
+ *
+ * @param ospfMessage OSPF message
+ * @return OSPF message
+ */
+ private byte[] getMessage(OspfMessage ospfMessage) {
+ OspfMessageWriter messageWriter = new OspfMessageWriter();
+ if (((OspfInterfaceImpl) ospfInterface).state().equals(OspfInterfaceState.POINT2POINT)) {
+ ospfMessage.setDestinationIp(OspfUtil.ALL_SPF_ROUTERS);
+ }
+ return (messageWriter.getMessage(ospfMessage, ospfInterface.interfaceIndex(),
+ ((OspfInterfaceImpl) ospfInterface).state().value()));
+ }
+
/**
* Represents a Task which will do an inactivity time check.
@@ -1720,7 +1781,8 @@
public void run() {
if ((ch != null) && ch.isConnected()) {
DdPacket ddPacket = lastSentDdPacket();
- ch.write(ddPacket);
+ byte[] messageToWrite = getMessage(ddPacket);
+ ch.write(messageToWrite);
log.debug("Re-Transmit DD Packet .");
} else {
log.debug(
@@ -1748,7 +1810,8 @@
public void run() {
if ((ch != null) && ch.isConnected()) {
LsRequest lsrPacket = getLastSentLsrPacket();
- ch.write(lsrPacket);
+ byte[] messageToWrite = getMessage(lsrPacket);
+ ch.write(messageToWrite);
log.debug("Re-Transmit LSRequest Packet .");
} else {
log.debug(
@@ -1783,7 +1846,8 @@
for (LsUpdate lsupdate : lsUpdateList) {
//Pending for acknowledge directly sent it to neighbor
lsupdate.setDestinationIp(neighborIpAddr);
- channel.write(lsupdate);
+ byte[] messageToWrite = getMessage(lsupdate);
+ channel.write(messageToWrite);
}
}
@@ -1799,7 +1863,8 @@
(((OspfInterfaceImpl) ospfInterface).state() == OspfInterfaceState.BDR)) {
lsupdate.setDestinationIp(neighborDr);
}
- channel.write(lsupdate);
+ byte[] messageToWrite = getMessage(lsupdate);
+ channel.write(messageToWrite);
}
}
}
diff --git a/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/impl/OspfPipelineFactory.java b/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/impl/OspfPipelineFactory.java
index 394f783..1b1a108 100644
--- a/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/impl/OspfPipelineFactory.java
+++ b/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/impl/OspfPipelineFactory.java
@@ -18,57 +18,29 @@
import org.jboss.netty.channel.ChannelPipeline;
import org.jboss.netty.channel.ChannelPipelineFactory;
import org.jboss.netty.channel.Channels;
-import org.jboss.netty.handler.timeout.ReadTimeoutHandler;
-import org.jboss.netty.util.ExternalResourceReleasable;
-import org.jboss.netty.util.HashedWheelTimer;
-import org.jboss.netty.util.Timer;
-import org.onosproject.ospf.controller.OspfArea;
-import org.onosproject.ospf.controller.OspfInterface;
/**
- * Creates a ChannelPipeline for a server-side OSPF channel.
+ * Creates a ChannelPipeline for a client-side OSPF channel.
*/
-public class OspfPipelineFactory implements ChannelPipelineFactory, ExternalResourceReleasable {
-
- private static final Timer TIMER = new HashedWheelTimer();
- private Controller controller;
- private ReadTimeoutHandler readTimeoutHandler;
- private OspfArea ospfArea;
- private OspfInterface ospfInterface;
- private int holdTime = 120 * 1000;
+public class OspfPipelineFactory implements ChannelPipelineFactory {
+ private OspfInterfaceChannelHandler ospfChannelHandler;
/**
- * Creates an instance of OSPF pipeline factory.
+ * Creates an instance of OSPF channel pipeline factory.
*
- * @param controller controller instance.
- * @param ospfArea OSPF area instance.
- * @param ospfInterface OSPF interface instance.
+ * @param ospfChannelHandler OSPF channel handler instance
*/
- public OspfPipelineFactory(Controller controller, OspfArea ospfArea, OspfInterface ospfInterface) {
- super();
- this.controller = controller;
- this.ospfArea = ospfArea;
- this.ospfInterface = ospfInterface;
- readTimeoutHandler = new ReadTimeoutHandler(TIMER, holdTime);
+ public OspfPipelineFactory(OspfInterfaceChannelHandler ospfChannelHandler) {
+ this.ospfChannelHandler = ospfChannelHandler;
}
@Override
public ChannelPipeline getPipeline() throws Exception {
- OspfInterfaceChannelHandler interfaceHandler = new OspfInterfaceChannelHandler(
- controller, ospfArea, ospfInterface);
-
ChannelPipeline pipeline = Channels.pipeline();
- pipeline.addLast("encoder", new OspfMessageEncoder(ospfInterface));
- pipeline.addLast("decoder", new OspfMessageDecoder());
- pipeline.addLast("holdTime", readTimeoutHandler);
- pipeline.addLast("interfacehandler", interfaceHandler);
+ pipeline.addLast("encoder", new OspfMessageDecoder());
+ pipeline.addLast("decoder", new OspfMessageEncoder());
+ pipeline.addLast("handler", ospfChannelHandler);
return pipeline;
}
-
- @Override
- public void releaseExternalResources() {
- TIMER.stop();
- }
-
}
\ No newline at end of file
diff --git a/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/impl/TopologyForDeviceAndLinkImpl.java b/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/impl/TopologyForDeviceAndLinkImpl.java
index e488e31..86dd2cf 100644
--- a/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/impl/TopologyForDeviceAndLinkImpl.java
+++ b/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/impl/TopologyForDeviceAndLinkImpl.java
@@ -38,6 +38,7 @@
import org.onosproject.ospf.protocol.lsa.types.OpaqueLsa10;
import org.onosproject.ospf.protocol.lsa.types.RouterLsa;
import org.onosproject.ospf.protocol.lsa.types.TopLevelTlv;
+import org.onosproject.ospf.protocol.util.OspfUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -49,6 +50,7 @@
import java.util.List;
import java.util.Map;
import java.util.Set;
+import java.util.TreeSet;
/**
* Represents device and link topology information.
@@ -56,7 +58,11 @@
public class TopologyForDeviceAndLinkImpl implements TopologyForDeviceAndLink {
private static final Logger log = LoggerFactory.getLogger(TopologyForDeviceAndLinkImpl.class);
+ Set<Ip4Address> routerSet = new TreeSet<Ip4Address>();
+ Ip4Address firstValue = Ip4Address.valueOf("0.0.0.0");
private Map<String, DeviceInformation> deviceInformationMap = new LinkedHashMap();
+ private Map<Ip4Address, List<Ip4Address>> networkLsaMap = new LinkedHashMap();
+ private Map<String, DeviceInformation> deviceInformationMapForPointToPoint = new LinkedHashMap();
private Map<String, DeviceInformation> deviceInformationMapToDelete = new LinkedHashMap();
private HashMap<String, Set<OspfLsaLink>> deviceAndLinkInformation = new HashMap();
private HashMap<String, OspfLinkTed> ospfLinkTedHashMap = new LinkedHashMap();
@@ -64,6 +70,7 @@
private Ip4Address drRouterOld = Ip4Address.valueOf("0.0.0.0");
private Ip4Address adRouterId = Ip4Address.valueOf("0.0.0.0");
private Map<String, LinkInformation> linkInformationMap = new LinkedHashMap();
+ private Map<String, LinkInformation> linkInformationMapForPointToPoint = new LinkedHashMap();
private List<String> toRemove = new ArrayList<>();
/**
@@ -89,9 +96,31 @@
}
/**
- * Gets device information.
+ * Gets deviceInformation as map for Point-To-Point.
*
- * @return device information to delete from core
+ * @return deviceInformationMap
+ */
+ public Map<String, DeviceInformation> deviceInformationMapForPointToPoint() {
+ return deviceInformationMapForPointToPoint;
+ }
+
+ /**
+ * Sets deviceInformation as map for Point-To-Point..
+ *
+ * @param key key to store device information
+ * @param deviceInformationMap device information instance
+ */
+ public void setDeviceInformationMapForPointToPoint(String key, DeviceInformation deviceInformationMap) {
+ if (deviceInformationMap != null) {
+ this.deviceInformationMapForPointToPoint.put(key, deviceInformationMap);
+ }
+
+ }
+
+ /**
+ * Gets deviceInformation as map.
+ *
+ * @return deviceInformationMap to delete from core
*/
public Map<String, DeviceInformation> deviceInformationMapToDelete() {
return deviceInformationMapToDelete;
@@ -103,8 +132,7 @@
* @param key ket used to add in map
* @param deviceInformationMapToDelete map from device information to remove
*/
- public void setDeviceInformationMapToDelete(String key,
- DeviceInformation deviceInformationMapToDelete) {
+ public void setDeviceInformationMapToDelete(String key, DeviceInformation deviceInformationMapToDelete) {
if (deviceInformationMapToDelete != null) {
this.deviceInformationMapToDelete.put(key, deviceInformationMapToDelete);
}
@@ -153,6 +181,11 @@
return linkInformationMap;
}
+ private LinkInformation getLinkInformation(String key) {
+ LinkInformation linkInformation = this.linkInformationMap.get(key);
+ return linkInformation;
+ }
+
/**
* Sets link information in map.
*
@@ -166,9 +199,30 @@
}
/**
- * Removes Link Information from map.
+ * Gets linkInformation as map for PointToPoint.
*
- * @param key key used to remove from map
+ * @return linkInformationMap
+ */
+ public Map<String, LinkInformation> linkInformationMapForPointToPoint() {
+ return linkInformationMap;
+ }
+
+ /**
+ * Sets linkInformation as map for PointToPoint.
+ *
+ * @param key key to store link information
+ * @param linkInformationMap link information instance
+ */
+ public void setLinkInformationMapForPointToPoint(String key, LinkInformation linkInformationMap) {
+ if (!this.linkInformationMap.containsKey(key)) {
+ this.linkInformationMap.put(key, linkInformationMap);
+ }
+ }
+
+ /**
+ * Removes Link Information from linkInformationMap.
+ *
+ * @param key key to remove link information
*/
public void removeLinkInformationMap(String key) {
if (this.linkInformationMap.containsKey(key)) {
@@ -242,108 +296,136 @@
List<OspfLsaLink> ospfLsaLinkList = routerLsa.routerLink();
Iterator iterator = ospfLsaLinkList.iterator();
Ip4Address advertisingRouterId = routerLsa.advertisingRouter();
- adRouterId = advertisingRouterId;
while (iterator.hasNext()) {
OspfLsaLink ospfLsaLink = (OspfLsaLink) iterator.next();
Ip4Address linkId = Ip4Address.valueOf(ospfLsaLink.linkId());
Ip4Address linkData = Ip4Address.valueOf(ospfLsaLink.linkData());
if (ospfLsaLink.linkType() == 1) {
if ((advertisingRouterId.equals(ospfArea.routerId())) || (linkId.equals(ospfArea.routerId()))) {
- System.out.println("OspfInterface information will not display in web ");
- } else {
- removeDevice(advertisingRouterId);
- removeLinks(advertisingRouterId);
- DeviceInformation deviceInformationPointToPoint =
- createDeviceInformation(false, linkId, linkId, advertisingRouterId, linkData,
- ospfArea.areaId(), false);
- String key = "device:" + advertisingRouterId;
- setDeviceInformationMap(key, deviceInformationPointToPoint);
- String linkIdKey = "linkId:" + advertisingRouterId + "-" + linkId;
- addLocalLink(linkIdKey, linkData, advertisingRouterId, linkId, true, false);
- }
- } else if (ospfLsaLink.linkType() == 2) {
-
- if ((advertisingRouterId.equals(ospfArea.routerId())) || (linkId.equals(ospfArea.routerId()))) {
- log.debug("OspfInterface information will not display in web ");
- } else {
- if (linkId.equals(linkData)) {
- if (drRouter.equals(Ip4Address.valueOf("0.0.0.0"))) {
- log.debug("drRouter not elected {} ", drRouter.toString());
- } else {
- if (drRouterOld.equals(linkId)) {
- log.debug("drRouterOld same as link id {} ", drRouterOld.toString());
- } else {
- String key = "device:" + drRouterOld;
- DeviceInformation deviceInformation1 = deviceInformation(key);
- if (deviceInformation1 != null) {
- deviceInformation1.setAlreadyCreated(true);
- setDeviceInformationMapToDelete(key, deviceInformation1);
- String linkIdKey = "linkId:" + linkId + "-" + deviceInformation1.neighborId();
- addLocalLink(linkIdKey, linkData, linkId, deviceInformation1.neighborId(),
- true, false);
- String linkIdKey1 = "linkId:" + linkId + "-" + advertisingRouterId;
- addLocalLink(linkIdKey1, linkData, linkId, advertisingRouterId, true, false);
- } else {
- DeviceInformation deviceInformationToDelete =
- createDeviceInformation(true, drRouterOld, drRouterOld,
- drRouterOld, drRouterOld,
- drRouterOld, true);
- setDeviceInformationMapToDelete(key, deviceInformationToDelete);
- String linkIdKey1 = "linkId:" + linkId + "-" + advertisingRouterId;
- addLocalLink(linkIdKey1, linkData, linkId, advertisingRouterId, true, false);
- }
- }
- }
- drRouter = linkId;
- drRouterOld = linkId;
- DeviceInformation deviceInformationForDr =
- createDeviceInformation(false, linkId, advertisingRouterId, linkId, linkData,
- ospfArea.areaId(), true);
- String key = "device:" + linkId;
- setDeviceInformationMap(key, deviceInformationForDr);
- DeviceInformation deviceInformationForAdvertisingRouter =
- createDeviceInformation(false, linkId, advertisingRouterId, advertisingRouterId,
- linkData, ospfArea.areaId(), false);
- String key1 = "device:" + advertisingRouterId;
- setDeviceInformationMap(key1, deviceInformationForAdvertisingRouter);
- if (drRouter.equals(Ip4Address.valueOf("0.0.0.0"))) {
- System.out.println("Link will not get create since dr is not valid");
- //Need to analysis since this place will not get Dr information
- String linkIdKey = "linkId:" + linkId + "-" + advertisingRouterId;
- addLocalLink(linkIdKey, linkData, linkId, advertisingRouterId, true, false);
- } else {
- String linkIdKey = "linkId:" + drRouter + "-" + advertisingRouterId;
- addLocalLink(linkIdKey, linkData, drRouter, advertisingRouterId, true, false);
- }
- } else {
- DeviceInformation deviceInformationDrOther =
- createDeviceInformation(false, linkId, linkId, advertisingRouterId,
- linkData, ospfArea.areaId(), false);
+ if (!advertisingRouterId.equals(ospfArea.routerId())) {
+ DeviceInformation deviceInformationPointToPoint =
+ createDeviceInformation(false, linkId, linkId, advertisingRouterId, linkData,
+ ospfArea.areaId(), false);
String key = "device:" + advertisingRouterId;
- setDeviceInformationMap(key, deviceInformationDrOther);
- if (drRouter.equals(Ip4Address.valueOf("0.0.0.0"))) {
- String linkIdKey = "linkId:" + linkId + "-" + advertisingRouterId;
- addLocalLink(linkIdKey, linkData, linkId, advertisingRouterId, true, false);
- } else {
- String linkIdKey = "linkId:" + drRouter + "-" + advertisingRouterId;
- addLocalLink(linkIdKey, linkData, drRouter, advertisingRouterId, true, false);
- }
+ setDeviceInformationMapForPointToPoint(key, deviceInformationPointToPoint);
}
+ } else {
+ DeviceInformation deviceInformationPointToPoint =
+ createDeviceInformation(false, linkId, linkId, advertisingRouterId,
+ linkData, ospfArea.areaId(), false);
+ String key = "device:" + advertisingRouterId;
+ setDeviceInformationMapForPointToPoint(key, deviceInformationPointToPoint);
+ String linkIdKey = "linkId:" + advertisingRouterId + "-" + linkId;
+ addLocalLinkForPointToPoint(linkIdKey, linkData, advertisingRouterId, linkId, true, false);
}
}
}
}
/**
- * Creates Device and Link instance from the NetworkLsa parameters.
+ * Creates device and link instance from the network LSA parameters.
*
* @param ospfLsa OSPF LSA instance
* @param ospfArea OSPF area instance
*/
private void createDeviceAndLinkFromNetworkLsa(OspfLsa ospfLsa, OspfArea ospfArea) {
NetworkLsa networkLsa = (NetworkLsa) ospfLsa;
- Ip4Address advertisingRouterId = networkLsa.networkMask();
- System.out.println("AdvertisingRouterId is : " + advertisingRouterId);
+ Ip4Address linkStateId = Ip4Address.valueOf(networkLsa.linkStateId());
+ Set<Ip4Address> drList = networkLsaMap.keySet();
+ try {
+ Ip4Address drToReplace = null;
+ for (Ip4Address drIp : drList) {
+ if (!drIp.equals(linkStateId)) {
+ if (OspfUtil.sameNetwork(drIp, linkStateId, networkLsa.networkMask())) {
+ drToReplace = drIp;
+ String key = "device:" + drToReplace;
+ DeviceInformation deleteDr = deviceInformation(key);
+ if (deleteDr != null) {
+ deleteDr.setAlreadyCreated(true);
+ setDeviceInformationMapToDelete(key, deleteDr);
+ }
+
+ networkLsaMap.remove(drToReplace);
+ break;
+ }
+ }
+ }
+ networkLsaMap.put(linkStateId, networkLsa.attachedRouters());
+
+ } catch (Exception e) {
+ log.debug("Error::TopologyForDeviceAndLinkImpl:: {}", e.getMessage());
+ }
+ constructDeviceForBroadCastTopology(ospfArea);
+ disp();
+
+ }
+
+ private void constructDeviceForBroadCastTopology(OspfArea ospfArea) {
+
+ for (Map.Entry<Ip4Address, List<Ip4Address>> entry : networkLsaMap.entrySet()) {
+ Ip4Address key = entry.getKey();
+ DeviceInformation deviceInformationForDr = createDeviceInformation(false, key, key, key,
+ key, ospfArea.areaId(), true);
+ String dr = "device:" + key;
+ setDeviceInformationMap(dr, deviceInformationForDr);
+ List<Ip4Address> value = entry.getValue();
+ for (Ip4Address connectedRouter : value) {
+ if (!connectedRouter.equals(ospfArea.routerId())) {
+ DeviceInformation deviceInformationAttachedRouters =
+ createDeviceInformation(false, connectedRouter, key, connectedRouter,
+ key, ospfArea.areaId(), false);
+ String attachedRouters = "device:" + connectedRouter;
+ setDeviceInformationMap(attachedRouters, deviceInformationAttachedRouters);
+ String linkIdKey = "linkId:" + key + "-" + connectedRouter;
+ addLocalLink(linkIdKey, key, key, connectedRouter, true, false);
+ }
+ }
+ }
+
+ }
+
+ private void disp() {
+ for (String key : deviceInformationMap.keySet()) {
+ DeviceInformation deviceInformation = deviceInformationMap.get(key);
+ log.debug("************************************************************************");
+ log.debug("DeviceInfoList RouterId is : {} and neighbour is {} and linkdata {}",
+ deviceInformation.routerId(), deviceInformation.neighborId(), deviceInformation.interfaceId());
+ }
+
+ for (Map.Entry<String, LinkInformation> entry : linkInformationMap.entrySet()) {
+ String linkDetail = entry.getKey();
+ log.debug("Link From and to is " + linkDetail);
+ }
+ log.debug("Devices Needs to delete from Core are : " + deviceInformationMapToDelete.size());
+ for (String key : deviceInformationMapToDelete.keySet()) {
+ DeviceInformation value = deviceInformationMapToDelete.get(key);
+ if (value.isAlreadyCreated()) {
+ log.debug("Device is deleted from list " + value.routerId());
+ }
+ }
+ }
+
+ private void getLinksToDelete(Set<Ip4Address> list, Ip4Address value, OspfArea ospfArea) {
+
+ Iterator iterator = list.iterator();
+
+ while (iterator.hasNext()) {
+ Ip4Address secondValue = (Ip4Address) iterator.next();
+ if (!value.equals("0.0.0.0")) {
+ if ((!value.equals(secondValue))) {
+ if ((!secondValue.equals(ospfArea.routerId()))) {
+ String key = "link:" + value.toString() + "-" + secondValue.toString();
+ String key1 = "link:" + secondValue.toString() + "-" + value.toString();
+ LinkInformation linkDetails = getLinkInformation(key);
+ LinkInformation linkDetailsOther = getLinkInformation(key1);
+ linkInformationMapForPointToPoint.put(key, linkDetails);
+ linkInformationMapForPointToPoint.put(key1, linkDetailsOther);
+ }
+ }
+ }
+
+ }
+
}
/**
@@ -444,13 +526,40 @@
}
/**
+ * Adds link information to LinkInformationMap for PointToPoint.
+ *
+ * @param advertisingRouter advertising router
+ * @param linkData link data
+ * @param linkSrc link source
+ * @param linkDest link destination
+ * @param opaqueEnabled whether opaque is enabled or not
+ * @param linkSrcIdNotRouterId whether link is source id or router id
+ */
+ public void addLocalLinkForPointToPoint(String advertisingRouter, Ip4Address linkData, Ip4Address linkSrc,
+ Ip4Address linkDest, boolean opaqueEnabled, boolean linkSrcIdNotRouterId) {
+ String linkKey = "link:";
+ LinkInformation linkInformation = new LinkInformationImpl();
+ linkInformation.setLinkId(advertisingRouter);
+ linkInformation.setLinkSourceId(linkSrc);
+ linkInformation.setLinkDestinationId(linkDest);
+ linkInformation.setAlreadyCreated(false);
+ linkInformation.setLinkSrcIdNotRouterId(linkSrcIdNotRouterId);
+ linkInformation.setInterfaceIp(linkData);
+ if (linkDest != null) {
+ linkInformation.setLinkSrcIdNotRouterId(false);
+ }
+ linkKey = linkKey + "-" + linkSrc + "-" + linkDest;
+ setLinkInformationMapForPointToPoint(linkKey, linkInformation);
+ }
+
+ /**
* Removes links from LinkInformationMap.
*
* @param routerId router id
*/
public void removeLinks(Ip4Address routerId) {
- Map<String, LinkInformation> linkInformationMaplocal = linkInformationMap;
- if (linkInformationMaplocal != null) {
+ Map<String, LinkInformation> linkInformationMapLocal = linkInformationMap;
+ if (linkInformationMapLocal != null) {
for (Map.Entry<String, LinkInformation> entry : linkInformationMap.entrySet()) {
String key = entry.getKey();
boolean check = key.contains(routerId.toString());
diff --git a/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/lsdb/LsaWrapperImpl.java b/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/lsdb/LsaWrapperImpl.java
index 42f05cd..a883f72 100644
--- a/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/lsdb/LsaWrapperImpl.java
+++ b/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/lsdb/LsaWrapperImpl.java
@@ -49,6 +49,15 @@
private int binNumber = -1;
private OspfInterface ospfInterface;
private LsdbAge lsdbAge;
+ private int ageCounterRollOverWhenAdded;
+
+ public int getAgeCounterRollOverWhenAdded() {
+ return ageCounterRollOverWhenAdded;
+ }
+
+ public void setAgeCounterRollOverWhenAdded(int ageCounterRollOverWhenAdded) {
+ this.ageCounterRollOverWhenAdded = ageCounterRollOverWhenAdded;
+ }
/**
* Gets the LSA type.
@@ -318,6 +327,8 @@
if (currentAge >= OspfParameters.MAXAGE) {
return OspfParameters.MAXAGE;
+ } else if ((currentAge == lsaAgeReceived) && ageCounterRollOverWhenAdded != lsdbAge.getAgeCounterRollOver()) {
+ return OspfParameters.MAXAGE;
}
return currentAge;
diff --git a/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/lsdb/LsdbAgeImpl.java b/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/lsdb/LsdbAgeImpl.java
index 24bb717..348de07 100644
--- a/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/lsdb/LsdbAgeImpl.java
+++ b/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/lsdb/LsdbAgeImpl.java
@@ -41,7 +41,7 @@
private static final Logger log =
LoggerFactory.getLogger(LsdbAgeImpl.class);
- protected int ageCounter = 0;
+ protected static int ageCounter = 0;
private InternalAgeTimer dbAgeTimer;
private ScheduledExecutorService exServiceage;
// creating age bins of MAXAGE
diff --git a/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/lsdb/OspfLsdbImpl.java b/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/lsdb/OspfLsdbImpl.java
index 3df627d..f76a4db 100644
--- a/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/lsdb/OspfLsdbImpl.java
+++ b/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/lsdb/OspfLsdbImpl.java
@@ -267,6 +267,7 @@
lsaWrapper.setLsaHeader(newLsa);
lsaWrapper.setLsaAgeReceived(newLsa.age());
lsaWrapper.setAgeCounterWhenReceived(lsdbAge.getAgeCounter());
+ lsaWrapper.setAgeCounterRollOverWhenAdded(lsdbAge.getAgeCounterRollOver());
lsaWrapper.setIsSelfOriginated(isSelfOriginated);
lsaWrapper.setIsSelfOriginated(isSelfOriginated);
lsaWrapper.setOspfInterface(ospfInterface);
diff --git a/protocols/ospf/ctl/src/test/java/org/onosproject/ospf/controller/area/OspfAreaImplTest.java b/protocols/ospf/ctl/src/test/java/org/onosproject/ospf/controller/area/OspfAreaImplTest.java
index 011397c..98baa0f 100644
--- a/protocols/ospf/ctl/src/test/java/org/onosproject/ospf/controller/area/OspfAreaImplTest.java
+++ b/protocols/ospf/ctl/src/test/java/org/onosproject/ospf/controller/area/OspfAreaImplTest.java
@@ -15,29 +15,25 @@
*/
package org.onosproject.ospf.controller.area;
-import org.easymock.EasyMock;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.onlab.packet.Ip4Address;
-import org.onosproject.ospf.controller.OspfArea;
-import org.onosproject.ospf.controller.OspfAreaAddressRange;
import org.onosproject.ospf.controller.OspfInterface;
-import org.onosproject.ospf.controller.OspfNbr;
import org.onosproject.ospf.controller.OspfNeighborState;
import org.onosproject.ospf.controller.TopologyForDeviceAndLink;
-import org.onosproject.ospf.controller.impl.Controller;
-import org.onosproject.ospf.controller.impl.OspfInterfaceChannelHandler;
import org.onosproject.ospf.controller.impl.OspfNbrImpl;
import org.onosproject.ospf.controller.impl.TopologyForDeviceAndLinkImpl;
import org.onosproject.ospf.controller.lsdb.LsaWrapperImpl;
import org.onosproject.ospf.protocol.lsa.LsaHeader;
+import org.onosproject.ospf.protocol.lsa.OpaqueLsaHeader;
import org.onosproject.ospf.protocol.lsa.types.NetworkLsa;
+import org.onosproject.ospf.protocol.lsa.types.OpaqueLsa10;
import org.onosproject.ospf.protocol.lsa.types.RouterLsa;
import org.onosproject.ospf.protocol.util.OspfInterfaceState;
+import org.onosproject.ospf.protocol.util.OspfParameters;
import java.util.ArrayList;
-import java.util.HashMap;
import java.util.List;
import static org.hamcrest.MatcherAssert.assertThat;
@@ -50,66 +46,66 @@
private OspfAreaImpl ospfArea;
private int result;
- private OspfInterfaceImpl ospfInterface;
- private HashMap<String, OspfNbr> ospfNbrList;
- private List<OspfInterface> ospfInterfaces;
+ private List<OspfInterface> ospfInterfaces = new ArrayList<>();
private OspfInterfaceImpl ospfInterface1;
private OspfInterfaceImpl ospfInterface2;
private OspfInterfaceImpl ospfInterface3;
- private OspfInterfaceImpl ospfInterface4;
- private OspfInterfaceImpl ospfInterface5;
- private OspfInterfaceImpl ospfInterface6;
- private NetworkLsa networkLsa;
private OspfNbrImpl ospfNbr;
- private RouterLsa routerLsa;
- private List<OspfAreaAddressRange> ospfAreaAddressRanges;
+ private OspfNbrImpl ospfNbr1;
+ private NetworkLsa networkLsa;
private LsaHeader lsaHeader;
+ private Ip4Address ip4Address = Ip4Address.valueOf("10.10.10.10");
+ private Ip4Address ip4Address1 = Ip4Address.valueOf("11.11.11.11");
+ private Ip4Address networkAddress = Ip4Address.valueOf("255.255.255.255");
private TopologyForDeviceAndLink topologyForDeviceAndLink;
+ private RouterLsa routerLsa;
+ private OpaqueLsaHeader opaqueLsaHeader;
+ private OpaqueLsa10 opaqueLsa10;
@Before
public void setUp() throws Exception {
+ lsaHeader = new LsaHeader();
+ opaqueLsaHeader = new OpaqueLsaHeader();
+ opaqueLsaHeader.setAdvertisingRouter(ip4Address);
+ lsaHeader.setAdvertisingRouter(ip4Address);
+ routerLsa = new RouterLsa(lsaHeader);
+ routerLsa.setAdvertisingRouter(ip4Address);
+ opaqueLsa10 = new OpaqueLsa10(opaqueLsaHeader);
ospfArea = new OspfAreaImpl();
+ ospfInterface1 = new OspfInterfaceImpl();
topologyForDeviceAndLink = new TopologyForDeviceAndLinkImpl();
+ ospfNbr = new OspfNbrImpl(ospfArea, ospfInterface1, ip4Address, ip4Address1,
+ 2, topologyForDeviceAndLink);
+ ospfNbr.setState(OspfNeighborState.EXCHANGE);
+ ospfNbr1 = new OspfNbrImpl(ospfArea, ospfInterface1, ip4Address, ip4Address1,
+ 2, topologyForDeviceAndLink);
+ ospfNbr1.setState(OspfNeighborState.FULL);
+ ospfNbr1.setNeighborId(ip4Address);
+ ospfNbr.setNeighborId(ip4Address);
+ ospfNbr.setIsOpaqueCapable(true);
+ ospfInterface1.addNeighbouringRouter(ospfNbr);
+ ospfInterface1.addNeighbouringRouter(ospfNbr1);
+ ospfInterface2 = new OspfInterfaceImpl();
+ ospfInterface2.setIpAddress(ip4Address);
+ ospfInterface2.setIpNetworkMask(networkAddress);
+ ospfInterface2.setState(OspfInterfaceState.LOOPBACK);
+ ospfInterface2.addNeighbouringRouter(ospfNbr);
+ ospfInterface2.addNeighbouringRouter(ospfNbr1);
+ ospfInterfaces.add(ospfInterface2);
}
@After
public void tearDown() throws Exception {
ospfArea = null;
- ospfInterface = null;
- ospfNbrList = null;
ospfInterfaces = null;
- ospfAreaAddressRanges = null;
lsaHeader = null;
- routerLsa = null;
- ospfNbr = null;
networkLsa = null;
ospfInterface1 = null;
ospfInterface2 = null;
ospfInterface3 = null;
- ospfInterface4 = null;
- ospfInterface5 = null;
- ospfInterface6 = null;
}
- /**
- * Tests equals() method.
- */
- @Test
- public void testEquals() throws Exception {
- ospfArea = new OspfAreaImpl();
- ospfInterface = new OspfInterfaceImpl();
- ospfArea.setTransitCapability(true);
- ospfArea.setExternalRoutingCapability(true);
- ospfArea.setStubCost(100);
- ospfArea.initializeDb();
- ospfArea.setAddressRanges(ospfAreaAddressRanges);
- assertThat(ospfArea.equals(ospfArea), is(true));
- ospfArea = EasyMock.createMock(OspfAreaImpl.class);
- assertThat(ospfArea.equals(ospfArea), is(true));
- OspfArea ospfArea = new OspfAreaImpl();
- assertThat(ospfArea.equals(ospfArea), is(true));
- }
/**
* Tests hashCode() method.
@@ -165,66 +161,6 @@
assertThat(ospfArea, is(notNullValue()));
}
- /**
- * Tests refreshArea() method.
- */
- @Test
- public void testRefreshArea() throws Exception {
-
- ospfInterface = new OspfInterfaceImpl();
- ospfInterface.setState(OspfInterfaceState.DR);
- ospfNbrList = new HashMap();
- ospfNbrList.put("1.1.1.1", new OspfNbrImpl(new OspfAreaImpl(), new OspfInterfaceImpl(),
- Ip4Address.valueOf("1.1.1.1"),
- Ip4Address.valueOf("2.2.2.2"), 2,
- new OspfInterfaceChannelHandler(new Controller(),
- new OspfAreaImpl(),
- new OspfInterfaceImpl()),
- topologyForDeviceAndLink));
- ospfNbrList.put("2.2.2.2", new OspfNbrImpl(new OspfAreaImpl(), new OspfInterfaceImpl(),
- Ip4Address.valueOf("1.1.1.1"),
- Ip4Address.valueOf("2.2.2.2"), 2,
- new OspfInterfaceChannelHandler(new Controller(),
- new OspfAreaImpl(),
- new OspfInterfaceImpl()),
- topologyForDeviceAndLink));
- ospfNbrList.put("3.3.3.3", new OspfNbrImpl(new OspfAreaImpl(), new OspfInterfaceImpl(),
- Ip4Address.valueOf("1.1.1.1"),
- Ip4Address.valueOf("2.2.2.2"), 2,
- new OspfInterfaceChannelHandler(new Controller(),
- new OspfAreaImpl(),
- new OspfInterfaceImpl()),
- topologyForDeviceAndLink));
- ospfNbrList.put("4.4.4.4", new OspfNbrImpl(new OspfAreaImpl(), new OspfInterfaceImpl(),
- Ip4Address.valueOf("1.1.1.1"),
- Ip4Address.valueOf("2.2.2.2"), 2,
- new OspfInterfaceChannelHandler(new Controller(),
- new OspfAreaImpl(),
- new OspfInterfaceImpl()),
- topologyForDeviceAndLink));
-
- ospfInterface.setListOfNeighbors(ospfNbrList);
- ospfInterface.setIpAddress(Ip4Address.valueOf("10.10.10.10"));
- ospfInterface.setIpNetworkMask(Ip4Address.valueOf("255.255.255.255"));
- ospfInterfaces = new ArrayList();
- ospfInterface1 = new OspfInterfaceImpl();
- ospfInterface1.setIpAddress(Ip4Address.valueOf("1.1.1.1"));
- ospfInterfaces.add(ospfInterface1);
- ospfInterface2 = new OspfInterfaceImpl();
- ospfInterface2.setIpAddress(Ip4Address.valueOf("2.2.2.2"));
- ospfInterfaces.add(ospfInterface2);
- ospfInterface3 = new OspfInterfaceImpl();
- ospfInterface3.setIpAddress(Ip4Address.valueOf("3.3.3.3"));
- ospfInterfaces.add(ospfInterface3);
- ospfArea.setInterfacesLst(ospfInterfaces);
- ospfArea.setRouterId(Ip4Address.valueOf("111.111.111.111"));
- networkLsa = ospfArea.buildNetworkLsa(Ip4Address.valueOf("1.1.1.1"),
- Ip4Address.valueOf("255.255.255.255"));
- ospfArea.refreshArea(ospfInterface);
- assertThat(ospfNbrList.size(), is(4));
- assertThat(networkLsa, is(notNullValue()));
- assertThat(ospfArea, is(notNullValue()));
- }
/**
* Tests buildNetworkLsa() method.
@@ -241,7 +177,7 @@
ospfInterface3 = new OspfInterfaceImpl();
ospfInterface3.setIpAddress(Ip4Address.valueOf("3.3.3.3"));
ospfInterfaces.add(ospfInterface3);
- ospfArea.setInterfacesLst(ospfInterfaces);
+ ospfArea.setOspfInterfaceList(ospfInterfaces);
ospfArea.setRouterId(Ip4Address.valueOf("111.111.111.111"));
networkLsa = ospfArea.buildNetworkLsa(Ip4Address.valueOf("1.1.1.1"),
Ip4Address.valueOf("255.255.255.255"));
@@ -250,118 +186,6 @@
assertThat(ospfArea, is(notNullValue()));
}
- /**
- * Tests buildNetworkLsa() method.
- */
- @Test
- public void testBuildNetworkLsa1() throws Exception {
- ospfInterfaces = new ArrayList();
- ospfInterface1 = new OspfInterfaceImpl();
- ospfInterface1.setIpAddress(Ip4Address.valueOf("1.1.1.1"));
- ospfInterface1.setIpNetworkMask(Ip4Address.valueOf("255.255.255.255"));
- ospfInterface1.setState(OspfInterfaceState.POINT2POINT);
- ospfNbr = new OspfNbrImpl(new OspfAreaImpl(), new OspfInterfaceImpl(),
- Ip4Address.valueOf("1.1.1.1"),
- Ip4Address.valueOf("2.2.2.2"), 2,
- new OspfInterfaceChannelHandler(new Controller(),
- new OspfAreaImpl(),
- new OspfInterfaceImpl()),
- topologyForDeviceAndLink);
- ospfNbr.setState(OspfNeighborState.FULL);
- ospfInterface1.addNeighbouringRouter(ospfNbr);
- ospfInterfaces.add(ospfInterface1);
- ospfArea.setInterfacesLst(ospfInterfaces);
- ospfArea.setRouterId(Ip4Address.valueOf("111.111.111.111"));
- networkLsa = ospfArea.buildNetworkLsa(Ip4Address.valueOf("1.1.1.1"),
- Ip4Address.valueOf("255.255.255.255"));
- assertThat(ospfInterfaces.size(), is(1));
- assertThat(networkLsa, is(notNullValue()));
- assertThat(ospfArea, is(notNullValue()));
- }
-
- /**
- * Tests buildRouterLsa() method.
- */
- @Test
- public void testBuildRouterLsa() throws Exception {
- ospfNbrList = new HashMap();
- ospfNbr = new OspfNbrImpl(new OspfAreaImpl(), new OspfInterfaceImpl(),
- Ip4Address.valueOf("1.1.1.1"),
- Ip4Address.valueOf("2.2.2.2"), 2,
- new OspfInterfaceChannelHandler(new Controller(),
- new OspfAreaImpl(),
- new OspfInterfaceImpl()),
- topologyForDeviceAndLink);
- ospfNbr.setState(OspfNeighborState.FULL);
- ospfInterfaces = new ArrayList();
- ospfInterface1 = new OspfInterfaceImpl();
- ospfInterface1.setIpAddress(Ip4Address.valueOf("1.1.1.1"));
- ospfInterface1.setState(OspfInterfaceState.DOWN);
- ospfInterface1.addNeighbouringRouter(ospfNbr);
- ospfInterfaces.add(ospfInterface1);
- ospfInterface2 = new OspfInterfaceImpl();
- ospfInterface2.setState(OspfInterfaceState.LOOPBACK);
- ospfInterface2.setIpAddress(Ip4Address.valueOf("2.2.2.2"));
- ospfInterface2.addNeighbouringRouter(ospfNbr);
- ospfInterfaces.add(ospfInterface2);
- ospfInterface3 = new OspfInterfaceImpl();
- ospfInterface3.setIpAddress(Ip4Address.valueOf("3.3.3.3"));
- ospfInterface3.setState(OspfInterfaceState.POINT2POINT);
- ospfInterface3.setIpNetworkMask(Ip4Address.valueOf("255.255.255.255"));
- ospfInterface3.addNeighbouringRouter(ospfNbr);
- ospfInterface3.setListOfNeighbors(ospfNbrList);
- ospfInterfaces.add(ospfInterface3);
- ospfInterface4 = new OspfInterfaceImpl();
- ospfInterface4.setState(OspfInterfaceState.WAITING);
- ospfInterface4.setIpAddress(Ip4Address.valueOf("3.3.3.3"));
- ospfInterface4.setIpNetworkMask(Ip4Address.valueOf("255.255.255.255"));
- ospfInterfaces.add(ospfInterface4);
- ospfInterface5 = new OspfInterfaceImpl();
- ospfInterface5.setState(OspfInterfaceState.DR);
- ospfInterface5.setIpAddress(Ip4Address.valueOf("3.3.3.3"));
- ospfInterfaces.add(ospfInterface5);
- ospfInterface6 = new OspfInterfaceImpl();
- ospfInterface6.setState(OspfInterfaceState.BDR);
- ospfInterface6.setIpAddress(Ip4Address.valueOf("3.3.3.3"));
- ospfInterface6.setDr(Ip4Address.valueOf("3.3.3.3"));
- ospfInterfaces.add(ospfInterface6);
- ospfArea.setInterfacesLst(ospfInterfaces);
- ospfArea.setRouterId(Ip4Address.valueOf("111.111.111.111"));
- assertThat(ospfInterfaces.size(), is(6));
- routerLsa = ospfArea.buildRouterLsa(ospfInterface1);
- assertThat(routerLsa, is(notNullValue()));
- routerLsa = ospfArea.buildRouterLsa(ospfInterface2);
- assertThat(routerLsa, is(notNullValue()));
- routerLsa = ospfArea.buildRouterLsa(ospfInterface3);
- assertThat(routerLsa, is(notNullValue()));
- assertThat(ospfArea, is(notNullValue()));
- }
-
- /**
- * Tests buildRouterLsa() method.
- */
- @Test
- public void testBuildRouterLsa1() throws Exception {
- ospfInterfaces = new ArrayList();
- ospfInterface1 = new OspfInterfaceImpl();
- ospfInterface1.setIpAddress(Ip4Address.valueOf("1.1.1.1"));
- ospfInterface1.setIpNetworkMask(Ip4Address.valueOf("255.255.255.255"));
- ospfInterface1.setState(OspfInterfaceState.POINT2POINT);
- ospfNbr = new OspfNbrImpl(new OspfAreaImpl(), new OspfInterfaceImpl(),
- Ip4Address.valueOf("1.1.1.1"),
- Ip4Address.valueOf("2.2.2.2"), 2,
- new OspfInterfaceChannelHandler(new Controller(),
- new OspfAreaImpl(),
- new OspfInterfaceImpl()),
- topologyForDeviceAndLink);
- ospfNbr.setState(OspfNeighborState.FULL);
- ospfInterface1.addNeighbouringRouter(ospfNbr);
- ospfInterfaces.add(ospfInterface1);
- ospfArea.setInterfacesLst(ospfInterfaces);
- ospfArea.setRouterId(Ip4Address.valueOf("111.111.111.111"));
- routerLsa = ospfArea.buildRouterLsa(ospfInterface1);
- assertThat(routerLsa, is(notNullValue()));
- }
/**
* Tests areaId() getter method.
@@ -381,51 +205,6 @@
assertThat(ospfArea.areaId(), is(Ip4Address.valueOf("1.1.1.1")));
}
- /**
- * Tests addressRanges() getter method.
- */
- @Test
- public void testGetAddressRanges() throws Exception {
- ospfAreaAddressRanges = new ArrayList();
- ospfAreaAddressRanges.add(new OspfAreaAddressRangeImpl());
- ospfAreaAddressRanges.add(new OspfAreaAddressRangeImpl());
- ospfAreaAddressRanges.add(new OspfAreaAddressRangeImpl());
- ospfAreaAddressRanges.add(new OspfAreaAddressRangeImpl());
- ospfArea.setAddressRanges(ospfAreaAddressRanges);
- assertThat(ospfArea.addressRanges().size(), is(4));
- }
-
- /**
- * Tests addressRanges() setter method.
- */
- @Test
- public void testSetAddressRanges() throws Exception {
- ospfAreaAddressRanges = new ArrayList();
- ospfAreaAddressRanges.add(new OspfAreaAddressRangeImpl());
- ospfAreaAddressRanges.add(new OspfAreaAddressRangeImpl());
- ospfAreaAddressRanges.add(new OspfAreaAddressRangeImpl());
- ospfAreaAddressRanges.add(new OspfAreaAddressRangeImpl());
- ospfArea.setAddressRanges(ospfAreaAddressRanges);
- assertThat(ospfArea.addressRanges().size(), is(4));
- }
-
- /**
- * Tests isTransitCapability() getter method.
- */
- @Test
- public void testIsTransitCapability() throws Exception {
- ospfArea.setTransitCapability(true);
- assertThat(ospfArea.isTransitCapability(), is(true));
- }
-
- /**
- * Tests isTransitCapability() setter method.
- */
- @Test
- public void testSetTransitCapability() throws Exception {
- ospfArea.setTransitCapability(true);
- assertThat(ospfArea.isTransitCapability(), is(true));
- }
/**
* Tests isExternalRoutingCapability() getter method.
@@ -445,26 +224,9 @@
assertThat(ospfArea.isExternalRoutingCapability(), is(true));
}
- /**
- * Tests stubCost() getter method.
- */
- @Test
- public void testGetStubCost() throws Exception {
- ospfArea.setStubCost(100);
- assertThat(ospfArea.stubCost(), is(100));
- }
/**
- * Tests stubCost() setter method.
- */
- @Test
- public void testSetStubCost() throws Exception {
- ospfArea.setStubCost(100);
- assertThat(ospfArea.stubCost(), is(100));
- }
-
- /**
- * Tests getInterfacesLst() getter method.
+ * Tests ospfInterfaceList() getter method.
*/
@Test
public void testGetInterfacesLst() throws Exception {
@@ -478,9 +240,9 @@
ospfInterface3 = new OspfInterfaceImpl();
ospfInterface3.setIpAddress(Ip4Address.valueOf("3.3.3.3"));
ospfInterfaces.add(ospfInterface3);
- ospfArea.setInterfacesLst(ospfInterfaces);
+ ospfArea.setOspfInterfaceList(ospfInterfaces);
assertThat(ospfInterfaces.size(), is(3));
- assertThat(ospfArea.getInterfacesLst(), is(notNullValue()));
+ assertThat(ospfArea.ospfInterfaceList(), is(notNullValue()));
}
/**
@@ -498,32 +260,11 @@
ospfInterface3 = new OspfInterfaceImpl();
ospfInterface3.setIpAddress(Ip4Address.valueOf("3.3.3.3"));
ospfInterfaces.add(ospfInterface3);
- ospfArea.setInterfacesLst(ospfInterfaces);
+ ospfArea.setOspfInterfaceList(ospfInterfaces);
assertThat(ospfInterfaces.size(), is(3));
- assertThat(ospfArea.getInterfacesLst(), is(notNullValue()));
+ assertThat(ospfArea.ospfInterfaceList(), is(notNullValue()));
}
- /**
- * Tests noNeighborInLsaExchangeProcess() method.
- */
- @Test
- public void testNoNeighborInLsaExchangeProcess() throws Exception {
- ospfInterfaces = new ArrayList();
- ospfInterface1 = new OspfInterfaceImpl();
- ospfInterface1.setIpAddress(Ip4Address.valueOf("1.1.1.1"));
- ospfNbr = new OspfNbrImpl(new OspfAreaImpl(), new OspfInterfaceImpl(),
- Ip4Address.valueOf("1.1.1.1"),
- Ip4Address.valueOf("2.2.2.2"), 2,
- new OspfInterfaceChannelHandler(new Controller(),
- new OspfAreaImpl(),
- new OspfInterfaceImpl()),
- topologyForDeviceAndLink);
- ospfNbr.setState(OspfNeighborState.EXCHANGE.EXCHANGE);
- ospfInterface1.addNeighbouringRouter(ospfNbr);
- ospfInterfaces.add(ospfInterface1);
- ospfArea.setInterfacesLst(ospfInterfaces);
- assertThat(ospfArea.noNeighborInLsaExchangeProcess(), is(false));
- }
/**
* Tests getLsaHeaders() method.
@@ -620,27 +361,6 @@
assertThat(ospfArea.toString(), is(notNullValue()));
}
- /**
- * Tests getNeighborsInFullState() method.
- */
- @Test
- public void testGetNeighborsinFullState() throws Exception {
- ospfInterfaces = new ArrayList();
- ospfInterface1 = new OspfInterfaceImpl();
- ospfInterface1.setIpAddress(Ip4Address.valueOf("1.1.1.1"));
- ospfNbr = new OspfNbrImpl(new OspfAreaImpl(), new OspfInterfaceImpl(),
- Ip4Address.valueOf("1.1.1.1"),
- Ip4Address.valueOf("2.2.2.2"), 2,
- new OspfInterfaceChannelHandler(new Controller(),
- new OspfAreaImpl(),
- new OspfInterfaceImpl()),
- topologyForDeviceAndLink);
- ospfNbr.setState(OspfNeighborState.FULL);
- ospfInterface1.addNeighbouringRouter(ospfNbr);
- ospfInterfaces.add(ospfInterface1);
- ospfArea.setInterfacesLst(ospfInterfaces);
- assertThat(ospfArea.getNeighborsInFullState(ospfInterface1).size(), is(1));
- }
/**
* Tests getLsaKey() method.
@@ -652,30 +372,6 @@
assertThat(ospfArea.getLsaKey(lsaHeader), is(notNullValue()));
}
- /**
- * Tests addToOtherNeighborLsaTxList() method.
- */
- @Test
- public void testAddToOtherNeighborLsaTxList() throws Exception {
- ospfInterfaces = new ArrayList();
- ospfInterface1 = new OspfInterfaceImpl();
- ospfInterface1.setIpAddress(Ip4Address.valueOf("1.1.1.1"));
- ospfNbr = new OspfNbrImpl(new OspfAreaImpl(), new OspfInterfaceImpl(),
- Ip4Address.valueOf("1.1.1.1"),
- Ip4Address.valueOf("2.2.2.2"), 2,
- new OspfInterfaceChannelHandler(new Controller(),
- new OspfAreaImpl(),
- new OspfInterfaceImpl()),
- topologyForDeviceAndLink);
- ospfNbr.setState(OspfNeighborState.FULL);
- ospfInterface1.addNeighbouringRouter(ospfNbr);
- ospfInterfaces.add(ospfInterface1);
- ospfArea.setInterfacesLst(ospfInterfaces);
- lsaHeader = new LsaHeader();
- lsaHeader.setAdvertisingRouter(Ip4Address.valueOf("1.1.1.1"));
- ospfArea.addToOtherNeighborLsaTxList(lsaHeader);
- assertThat(ospfArea, is(notNullValue()));
- }
/**
* Tests options() getter method.
@@ -719,4 +415,54 @@
public void testOpaqueEnabledOptionsa() throws Exception {
assertThat(ospfArea.opaqueEnabledOptions(), is(66));
}
+
+ /**
+ * Tests noNeighborInLsaExchangeProcess() method.
+ */
+ @Test
+ public void testNoNeighborInLsaExchangeProcess() throws Exception {
+ ospfArea.setOspfInterfaceList(ospfInterfaces);
+ ospfArea.noNeighborInLsaExchangeProcess();
+ assertThat(ospfArea, is(notNullValue()));
+ }
+
+ /**
+ * Tests getNeighborsInFullState() method.
+ */
+ @Test
+ public void testGetNeighborsInFullState() throws Exception {
+ ospfArea.getNeighborsInFullState(ospfInterface1);
+ assertThat(ospfArea, is(notNullValue()));
+ }
+
+ /**
+ * Tests addToOtherNeighborLsaTxList() method.
+ */
+ @Test
+ public void testAddToOtherNeighborLsaTxList() throws Exception {
+ ospfArea.setOspfInterfaceList(ospfInterfaces);
+ ospfArea.addToOtherNeighborLsaTxList(routerLsa);
+ assertThat(ospfArea, is(notNullValue()));
+
+ opaqueLsa10.setLsType(OspfParameters.LINK_LOCAL_OPAQUE_LSA);
+ ospfArea.addToOtherNeighborLsaTxList(opaqueLsa10);
+ assertThat(ospfArea, is(notNullValue()));
+ }
+
+ /**
+ * Tests buildRouterLsa() method.
+ */
+ @Test
+ public void testBuildRouterLsa() throws Exception {
+ ospfArea.setRouterId(ip4Address);
+ ospfArea.setOspfInterfaceList(ospfInterfaces);
+ ospfInterface1.setState(OspfInterfaceState.POINT2POINT);
+ ospfInterface1.setIpAddress(ip4Address);
+ ospfInterface1.setIpNetworkMask(networkAddress);
+ ospfInterfaces.add(ospfInterface1);
+ ospfArea.buildRouterLsa(ospfInterface1);
+ ospfArea.setOspfInterfaceList(ospfInterfaces);
+ assertThat(ospfArea, is(notNullValue()));
+
+ }
}
\ No newline at end of file
diff --git a/protocols/ospf/ctl/src/test/java/org/onosproject/ospf/controller/area/OspfInterfaceImplTest.java b/protocols/ospf/ctl/src/test/java/org/onosproject/ospf/controller/area/OspfInterfaceImplTest.java
index 640aee0..438357b 100644
--- a/protocols/ospf/ctl/src/test/java/org/onosproject/ospf/controller/area/OspfInterfaceImplTest.java
+++ b/protocols/ospf/ctl/src/test/java/org/onosproject/ospf/controller/area/OspfInterfaceImplTest.java
@@ -15,21 +15,55 @@
*/
package org.onosproject.ospf.controller.area;
+import org.easymock.EasyMock;
+import org.jboss.netty.buffer.ChannelBuffer;
+import org.jboss.netty.buffer.ChannelBuffers;
+import org.jboss.netty.buffer.HeapChannelBufferFactory;
+import org.jboss.netty.channel.Channel;
+import org.jboss.netty.channel.ChannelConfig;
+import org.jboss.netty.channel.ChannelHandlerContext;
+import org.jboss.netty.channel.ChannelStateEvent;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.onlab.packet.Ip4Address;
+import org.onosproject.ospf.controller.OspfAreaAddressRange;
+import org.onosproject.ospf.controller.OspfInterface;
+import org.onosproject.ospf.controller.OspfLsaType;
+import org.onosproject.ospf.controller.OspfMessage;
import org.onosproject.ospf.controller.OspfNbr;
+import org.onosproject.ospf.controller.OspfNeighborState;
+import org.onosproject.ospf.controller.OspfProcess;
import org.onosproject.ospf.controller.TopologyForDeviceAndLink;
import org.onosproject.ospf.controller.impl.Controller;
import org.onosproject.ospf.controller.impl.OspfInterfaceChannelHandler;
+import org.onosproject.ospf.controller.impl.OspfLinkTedImpl;
import org.onosproject.ospf.controller.impl.OspfNbrImpl;
+import org.onosproject.ospf.controller.impl.OspfRouterImpl;
import org.onosproject.ospf.controller.impl.TopologyForDeviceAndLinkImpl;
+import org.onosproject.ospf.controller.util.OspfEligibleRouter;
+import org.onosproject.ospf.controller.util.OspfInterfaceType;
+import org.onosproject.ospf.exceptions.OspfParseException;
+import org.onosproject.ospf.protocol.lsa.LsaHeader;
import org.onosproject.ospf.protocol.lsa.OpaqueLsaHeader;
+import org.onosproject.ospf.protocol.lsa.TlvHeader;
+import org.onosproject.ospf.protocol.lsa.tlvtypes.RouterTlv;
+import org.onosproject.ospf.protocol.lsa.types.OpaqueLsa10;
+import org.onosproject.ospf.protocol.lsa.types.RouterLsa;
+import org.onosproject.ospf.protocol.ospfpacket.subtype.LsRequestPacket;
+import org.onosproject.ospf.protocol.ospfpacket.types.DdPacket;
+import org.onosproject.ospf.protocol.ospfpacket.types.HelloPacket;
+import org.onosproject.ospf.protocol.ospfpacket.types.LsAcknowledge;
+import org.onosproject.ospf.protocol.ospfpacket.types.LsRequest;
+import org.onosproject.ospf.protocol.ospfpacket.types.LsUpdate;
+import org.onosproject.ospf.protocol.util.ChecksumCalculator;
import org.onosproject.ospf.protocol.util.OspfInterfaceState;
+import java.net.UnknownHostException;
+import java.util.ArrayList;
import java.util.HashMap;
+import java.util.List;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.is;
@@ -39,18 +73,54 @@
* Unit test class for OspfInterfaceImpl.
*/
public class OspfInterfaceImplTest {
-
+ private List<OspfAreaAddressRange> addressRanges = new ArrayList();
+ private List<OspfInterface> ospfInterfaces = new ArrayList();
private OspfInterfaceImpl ospfInterface;
private OspfNbrImpl ospfNbr;
private OpaqueLsaHeader opaqueLsaHeader;
private int result;
+ private OspfAreaImpl ospfArea;
private HashMap<String, OspfNbr> ospfNbrHashMap;
private TopologyForDeviceAndLink topologyForDeviceAndLink;
+ private Channel channel;
+ private ChannelHandlerContext channelHandlerContext;
+ private ChannelStateEvent channelStateEvent;
+ private HelloPacket helloPacket;
+ private DdPacket ddPacket;
+ private ChecksumCalculator checksumCalculator;
+ private byte[] byteArray;
+ private byte[] checkArray;
+ private OspfInterfaceChannelHandler ospfInterfaceChannelHandler;
+ private LsRequest lsRequest;
+ private ChannelBuffer buf;
+ private LsUpdate lsUpdate;
+ private LsAcknowledge lsAck;
+ private Controller controller;
+ private List<OspfProcess> ospfProcesses = new ArrayList();
+ private OspfProcess ospfProcess;
+ private OspfEligibleRouter ospfEligibleRouter;
@Before
public void setUp() throws Exception {
+ ospfProcess = new OspfProcessImpl();
+ ospfProcesses.add(ospfProcess);
ospfInterface = new OspfInterfaceImpl();
topologyForDeviceAndLink = new TopologyForDeviceAndLinkImpl();
+ channel = EasyMock.createMock(Channel.class);
+ ospfArea = createOspfArea();
+ ospfInterface = createOspfInterface();
+ ospfNbrHashMap = new HashMap();
+ topologyForDeviceAndLink = new TopologyForDeviceAndLinkImpl();
+ ospfNbr = new OspfNbrImpl(ospfArea, ospfInterface, Ip4Address.valueOf("10.10.10.10"),
+ Ip4Address.valueOf("2.2.2.2"), 2,
+ topologyForDeviceAndLink);
+ ospfNbr.setNeighborId(Ip4Address.valueOf("10.10.10.10"));
+ ospfNbr.setRouterPriority(0);
+ ospfNbr.setNeighborDr(Ip4Address.valueOf("13.13.13.13"));
+ ospfInterface.addNeighbouringRouter(ospfNbr);
+ controller = new Controller();
+ ospfInterfaceChannelHandler = new OspfInterfaceChannelHandler(controller, ospfProcesses);
+
}
@After
@@ -113,9 +183,7 @@
public void testAddNeighbouringRouter() throws Exception {
ospfNbr = new OspfNbrImpl(new OspfAreaImpl(), new OspfInterfaceImpl(),
Ip4Address.valueOf("1.1.1.1"), Ip4Address.valueOf("2.2.2.2"), 2,
- new OspfInterfaceChannelHandler(new Controller(), new OspfAreaImpl(),
- new OspfInterfaceImpl()),
- topologyForDeviceAndLink);
+ topologyForDeviceAndLink);
ospfNbr.setNeighborId(Ip4Address.valueOf("111.111.111.111"));
ospfInterface.addNeighbouringRouter(ospfNbr);
assertThat(ospfInterface, is(notNullValue()));
@@ -129,9 +197,7 @@
public void testGetNeighbouringRouter() throws Exception {
ospfNbr = new OspfNbrImpl(new OspfAreaImpl(), new OspfInterfaceImpl(),
Ip4Address.valueOf("1.1.1.1"), Ip4Address.valueOf("2.2.2.2"), 2,
- new OspfInterfaceChannelHandler(new Controller(), new OspfAreaImpl(),
- new OspfInterfaceImpl()),
- topologyForDeviceAndLink);
+ topologyForDeviceAndLink);
ospfNbr.setNeighborId(Ip4Address.valueOf("111.111.111.111"));
ospfInterface.addNeighbouringRouter(ospfNbr);
assertThat(ospfInterface.neighbouringRouter("111.111.111.111"), is(notNullValue()));
@@ -164,9 +230,7 @@
public void testIsNeighborinList() throws Exception {
ospfNbr = new OspfNbrImpl(new OspfAreaImpl(), new OspfInterfaceImpl(),
Ip4Address.valueOf("1.1.1.1"), Ip4Address.valueOf("2.2.2.2"), 2,
- new OspfInterfaceChannelHandler(new Controller(), new OspfAreaImpl(),
- new OspfInterfaceImpl()),
- topologyForDeviceAndLink);
+ topologyForDeviceAndLink);
ospfNbr.setNeighborId(Ip4Address.valueOf("111.111.111.111"));
ospfInterface.addNeighbouringRouter(ospfNbr);
assertThat(ospfInterface.isNeighborInList("111.111.111.111"), is(notNullValue()));
@@ -180,10 +244,7 @@
ospfNbrHashMap = new HashMap();
ospfNbr = new OspfNbrImpl(new OspfAreaImpl(), new OspfInterfaceImpl(),
Ip4Address.valueOf("1.1.1.1"), Ip4Address.valueOf("2.2.2.2"), 2,
- new OspfInterfaceChannelHandler(new Controller(),
- new OspfAreaImpl(),
- new OspfInterfaceImpl()),
- topologyForDeviceAndLink);
+ topologyForDeviceAndLink);
ospfNbr.setNeighborId(Ip4Address.valueOf("111.111.111.111"));
ospfNbrHashMap.put("111.111.111.111", ospfNbr);
ospfInterface.setListOfNeighbors(ospfNbrHashMap);
@@ -198,9 +259,7 @@
ospfNbrHashMap = new HashMap();
ospfNbr = new OspfNbrImpl(new OspfAreaImpl(), new OspfInterfaceImpl(),
Ip4Address.valueOf("1.1.1.1"), Ip4Address.valueOf("2.2.2.2"), 2,
- new OspfInterfaceChannelHandler(new Controller(), new OspfAreaImpl(),
- new OspfInterfaceImpl()),
- topologyForDeviceAndLink);
+ topologyForDeviceAndLink);
ospfNbr.setNeighborId(Ip4Address.valueOf("111.111.111.111"));
ospfNbrHashMap.put("111.111.111.111", ospfNbr);
ospfInterface.setListOfNeighbors(ospfNbrHashMap);
@@ -244,24 +303,6 @@
}
/**
- * Tests areaId() getter method.
- */
- @Test
- public void testGetAreaId() throws Exception {
- ospfInterface.setAreaId(1);
- assertThat(ospfInterface.areaId(), is(1));
- }
-
- /**
- * Tests areaId() setter method.
- */
- @Test
- public void testSetAreaId() throws Exception {
- ospfInterface.setAreaId(1);
- assertThat(ospfInterface.areaId(), is(1));
- }
-
- /**
* Tests helloIntervalTime() getter method.
*/
@Test
@@ -316,78 +357,6 @@
}
/**
- * Tests interfaceCost() getter method.
- */
- @Test
- public void testGetInterfaceCost() throws Exception {
- ospfInterface.setInterfaceCost(100);
- assertThat(ospfInterface.interfaceCost(), is(100));
- }
-
- /**
- * Tests interfaceCost() setter method.
- */
- @Test
- public void testSetInterfaceCost() throws Exception {
- ospfInterface.setInterfaceCost(100);
- assertThat(ospfInterface.interfaceCost(), is(100));
- }
-
- /**
- * Tests authType() getter method.
- */
- @Test
- public void testGetAuthType() throws Exception {
- ospfInterface.setAuthType("00");
- assertThat(ospfInterface.authType(), is("00"));
- }
-
- /**
- * Tests authType() setter method.
- */
- @Test
- public void testSetAuthType() throws Exception {
- ospfInterface.setAuthType("00");
- assertThat(ospfInterface.authType(), is("00"));
- }
-
- /**
- * Tests authKey() getter method.
- */
- @Test
- public void testGetAuthKey() throws Exception {
- ospfInterface.setAuthKey("00");
- assertThat(ospfInterface.authKey(), is("00"));
- }
-
- /**
- * Tests authKey() setter method.
- */
- @Test
- public void testSetAuthKey() throws Exception {
- ospfInterface.setAuthKey("00");
- assertThat(ospfInterface.authKey(), is("00"));
- }
-
- /**
- * Tests pollInterval() getter method.
- */
- @Test
- public void testGetPollInterval() throws Exception {
- ospfInterface.setPollInterval(100);
- assertThat(ospfInterface.pollInterval(), is(100));
- }
-
- /**
- * Tests pollInterval() setter method.
- */
- @Test
- public void testSetPollInterval() throws Exception {
- ospfInterface.setPollInterval(100);
- assertThat(ospfInterface.pollInterval(), is(100));
- }
-
- /**
* Tests mtu() getter method.
*/
@Test
@@ -460,29 +429,11 @@
}
/**
- * Tests transmitDelay() getter method.
- */
- @Test
- public void testGetTransmitDelay() throws Exception {
- ospfInterface.setTransmitDelay(100);
- assertThat(ospfInterface.transmitDelay(), is(100));
- }
-
- /**
- * Tests transmitDelay() setter method.
- */
- @Test
- public void testSetTransmitDelay() throws Exception {
- ospfInterface.setTransmitDelay(100);
- assertThat(ospfInterface.transmitDelay(), is(100));
- }
-
- /**
* Tests equals() method.
*/
@Test
public void testEquals() throws Exception {
- assertThat(ospfInterface.equals(new OspfInterfaceImpl()), is(true));
+ assertThat(ospfInterface.equals(new OspfInterfaceImpl()), is(false));
}
/**
@@ -501,4 +452,1021 @@
public void testToString() throws Exception {
assertThat(ospfInterface.toString(), is(notNullValue()));
}
+
+ /**
+ * Tests to interfaceUp() method.
+ */
+ @Test(expected = Exception.class)
+ public void testInterfaceUp() throws Exception {
+ ospfInterface.setInterfaceType(OspfInterfaceType.POINT_TO_POINT.value());
+ ospfInterface.interfaceUp();
+ assertThat(ospfInterface, is(notNullValue()));
+ }
+
+ /**
+ * Tests to interfaceUp() method.
+ */
+ @Test(expected = Exception.class)
+ public void testInterfaceUp1() throws Exception {
+
+ ospfInterface.setInterfaceType(OspfInterfaceType.BROADCAST.value());
+ ospfInterface.interfaceUp();
+ assertThat(ospfInterface, is(notNullValue()));
+ }
+
+ /**
+ * Tests to interfaceUp() method.
+ */
+ @Test(expected = Exception.class)
+ public void testInterfaceUp2() throws Exception {
+
+ ospfInterface.setRouterPriority(1);
+ ospfInterface.setInterfaceType(OspfInterfaceType.BROADCAST.value());
+ ospfInterface.interfaceUp();
+ assertThat(ospfInterface, is(notNullValue()));
+ }
+
+ /**
+ * Tests to backupSeen() method.
+ */
+ @Test
+ public void testBackupSeen() throws Exception {
+ ospfInterface.setOspfArea(ospfArea);
+ ospfInterface.setState(OspfInterfaceState.WAITING);
+ ospfInterface.backupSeen(channel);
+ assertThat(ospfInterface, is(notNullValue()));
+ }
+
+ /**
+ * Tests to waitTimer() method.
+ */
+ @Test
+ public void testWaitTimer() throws Exception {
+ ospfInterface.setOspfArea(ospfArea);
+ ospfInterface.setState(OspfInterfaceState.WAITING);
+ ospfInterface.waitTimer(channel);
+ assertThat(ospfInterface, is(notNullValue()));
+ }
+
+ /**
+ * Tests to callDrElection() method.
+ */
+ @Test
+ public void testCallDrElection() throws Exception {
+ ospfInterface.setOspfArea(ospfArea);
+ ospfInterface.setState(OspfInterfaceState.WAITING);
+ ospfInterface.callDrElection(channel);
+ assertThat(ospfInterface, is(notNullValue()));
+ }
+
+ /**
+ * Tests to neighborChange() method.
+ */
+ @Test
+ public void testNeighborChange() throws Exception {
+ ospfInterface.setOspfArea(ospfArea);
+ ospfInterface.setState(OspfInterfaceState.DR);
+ ospfInterface.neighborChange();
+ assertThat(ospfInterface, is(notNullValue()));
+ }
+
+ /**
+ * Tests to interfaceDown() method.
+ */
+ @Test(expected = Exception.class)
+ public void testInterfaceDown() throws Exception {
+ ospfInterface.interfaceDown();
+ assertThat(ospfInterface, is(notNullValue()));
+ }
+
+ /**
+ * Tests processOspfMessage() method.
+ */
+ @Test
+ public void testProcessOspfMessage() throws Exception {
+ ospfInterface.setOspfArea(ospfArea);
+ ospfInterface.setInterfaceType(OspfInterfaceType.POINT_TO_POINT.value());
+ ospfInterface.setIpNetworkMask(Ip4Address.valueOf("0.0.0.0"));
+ ospfInterface.setIpAddress(Ip4Address.valueOf("11.11.11.11"));
+ ospfInterface.setInterfaceType(2);
+ ospfArea.setAreaId(Ip4Address.valueOf("12.12.12.12"));
+ channelHandlerContext = EasyMock.createMock(ChannelHandlerContext.class);
+ OspfMessage message;
+ helloPacket = new HelloPacket();
+ helloPacket.setSourceIp(Ip4Address.valueOf("1.1.0.1"));
+ helloPacket.setRouterId(Ip4Address.valueOf("10.10.10.10"));
+ helloPacket.setOspfVer(2);
+ helloPacket.setAreaId(Ip4Address.valueOf("12.12.12.12"));
+ helloPacket.setOptions(2);
+ helloPacket.setNetworkMask(Ip4Address.valueOf("3.3.3.3"));
+ helloPacket.setOspftype(1);
+ helloPacket.setAuthType(0);
+ helloPacket.setHelloInterval(60);
+ helloPacket.setRouterDeadInterval(60);
+ helloPacket.setAuthentication(0);
+ helloPacket.setNetworkMask(Ip4Address.valueOf("1.1.1.1"));
+ checksumCalculator = new ChecksumCalculator();
+ byteArray = helloPacket.asBytes();
+ helloPacket.setOspfPacLength(byteArray.length);
+ checkArray = checksumCalculator.calculateOspfCheckSum(byteArray, 12, 13);
+ checkArray[0] = -51;
+ checkArray[1] = 52;
+ buf = ChannelBuffers.copiedBuffer(checkArray);
+ helloPacket.setChecksum(buf.readUnsignedShort());
+ message = helloPacket;
+ ospfInterface.processOspfMessage(message, channelHandlerContext);
+ ddPacket = new DdPacket();
+ ddPacket.setSourceIp(Ip4Address.valueOf("1.1.1.1"));
+ ddPacket.setRouterId(Ip4Address.valueOf("10.10.10.10"));
+ ddPacket.setOspfVer(2);
+ ddPacket.setAreaId(Ip4Address.valueOf("12.12.12.12"));
+ ddPacket.setOptions(2);
+ ddPacket.setOspftype(2);
+ ddPacket.setAuthType(0);
+ ddPacket.setAuthentication(0);
+ checksumCalculator = new ChecksumCalculator();
+ byteArray = ddPacket.asBytes();
+ ddPacket.setOspfPacLength(byteArray.length);
+ checkArray = checksumCalculator.calculateOspfCheckSum(byteArray, 12, 13);
+ checkArray[0] = -49;
+ checkArray[1] = -79;
+ buf = ChannelBuffers.copiedBuffer(checkArray);
+ ddPacket.setChecksum(buf.readUnsignedShort());
+ channelHandlerContext = null;
+ channelHandlerContext = EasyMock.createMock(ChannelHandlerContext.class);
+ message = ddPacket;
+ ospfInterface.processOspfMessage(message, channelHandlerContext);
+ lsRequest = new LsRequest();
+ lsRequest.setSourceIp(Ip4Address.valueOf("1.1.1.1"));
+ lsRequest.setRouterId(Ip4Address.valueOf("10.10.10.10"));
+ lsRequest.setOspfVer(2);
+ lsRequest.setAreaId(Ip4Address.valueOf("12.12.12.12"));
+ lsRequest.setOspftype(3);
+ lsRequest.setAuthType(0);
+ lsRequest.setAuthentication(0);
+ checksumCalculator = new ChecksumCalculator();
+ byteArray = lsRequest.asBytes();
+ lsRequest.setOspfPacLength(byteArray.length);
+ checkArray = checksumCalculator.calculateOspfCheckSum(byteArray, 12, 13);
+ checkArray[0] = -47;
+ checkArray[1] = -72;
+ buf = ChannelBuffers.copiedBuffer(checkArray);
+ lsRequest.setChecksum(buf.readUnsignedShort());
+ message = lsRequest;
+ channelHandlerContext = null;
+ channelHandlerContext = EasyMock.createMock(ChannelHandlerContext.class);
+ ospfInterface.processOspfMessage(message, channelHandlerContext);
+ lsUpdate = new LsUpdate();
+ lsUpdate.setSourceIp(Ip4Address.valueOf("1.1.1.1"));
+ lsUpdate.setRouterId(Ip4Address.valueOf("10.10.10.10"));
+ lsUpdate.setOspfVer(2);
+ lsUpdate.setAreaId(Ip4Address.valueOf("12.12.12.12"));
+ lsUpdate.setOspftype(4);
+ lsUpdate.setAuthType(0);
+ lsUpdate.setAuthentication(0);
+ checksumCalculator = new ChecksumCalculator();
+ byteArray = lsUpdate.asBytes();
+ lsUpdate.setOspfPacLength(byteArray.length);
+ checkArray = checksumCalculator.calculateOspfCheckSum(byteArray, 12, 13);
+ checkArray[0] = -47;
+ checkArray[1] = -77;
+ buf = ChannelBuffers.copiedBuffer(checkArray);
+ lsUpdate.setChecksum(buf.readUnsignedShort());
+ message = lsUpdate;
+ ospfInterface.processOspfMessage(message, channelHandlerContext);
+ lsAck = new LsAcknowledge();
+ lsAck.setSourceIp(Ip4Address.valueOf("1.1.1.1"));
+ lsAck.setRouterId(Ip4Address.valueOf("10.10.10.10"));
+ lsAck.setOspfVer(2);
+ lsAck.setAreaId(Ip4Address.valueOf("12.12.12.12"));
+ lsAck.setOspftype(5);
+ lsAck.setAuthType(0);
+ lsAck.setAuthentication(0);
+ checksumCalculator = new ChecksumCalculator();
+ byteArray = lsAck.asBytes();
+ lsAck.setOspfPacLength(byteArray.length);
+ checkArray = checksumCalculator.calculateOspfCheckSum(byteArray, 12, 13);
+ checkArray[0] = -47;
+ checkArray[1] = -74;
+ buf = ChannelBuffers.copiedBuffer(checkArray);
+ lsAck.setChecksum(buf.readUnsignedShort());
+ message = lsAck;
+ channelHandlerContext = null;
+ channelHandlerContext = EasyMock.createMock(ChannelHandlerContext.class);
+ ospfInterface.processOspfMessage(message, channelHandlerContext);
+ assertThat(ospfInterface, is(notNullValue()));
+ }
+
+ /**
+ * Tests processHelloMessage() method.
+ */
+ @Test
+ public void testProcessHelloMessage() throws Exception {
+ ospfInterface.setIpAddress(Ip4Address.valueOf("11.11.11.11"));
+ ospfInterface.setInterfaceType(1);
+ ospfInterface.setIpNetworkMask(Ip4Address.valueOf("244.244.244.244"));
+ ospfInterface.setHelloIntervalTime(10);
+ ospfInterface.setRouterDeadIntervalTime(10);
+ ospfArea.setAreaId(Ip4Address.valueOf("12.12.12.12"));
+ channelHandlerContext = EasyMock.createMock(ChannelHandlerContext.class);
+ OspfMessage message;
+ helloPacket = new HelloPacket();
+ helloPacket.setSourceIp(Ip4Address.valueOf("1.1.1.1"));
+ helloPacket.setOspfVer(2);
+ helloPacket.setAreaId(Ip4Address.valueOf("12.12.12.12"));
+ helloPacket.setNetworkMask(Ip4Address.valueOf("244.244.244.244"));
+ helloPacket.setHelloInterval(10);
+ helloPacket.setRouterDeadInterval(10);
+ helloPacket.setDr(Ip4Address.valueOf("10.10.10.10"));
+ helloPacket.setBdr(Ip4Address.valueOf("11.11.11.11"));
+ helloPacket.setRouterId(Ip4Address.valueOf("111.111.111.111"));
+ message = helloPacket;
+ ospfInterface.processHelloMessage(message, channelHandlerContext);
+ assertThat(ospfInterfaceChannelHandler, is(notNullValue()));
+ }
+
+ /**
+ * Tests processHelloMessage() method.
+ */
+ @Test
+ public void testProcessHelloMessage1() throws Exception {
+ ospfInterface.setOspfArea(ospfArea);
+ ospfInterface.setInterfaceType(2);
+ ospfInterface.setRouterPriority(1);
+ ospfInterface.interfaceUp();
+ ospfInterface.setIpAddress(Ip4Address.valueOf("11.11.11.11"));
+ ospfInterface.setState(OspfInterfaceState.WAITING);
+ ospfInterface.setInterfaceType(2);
+ ospfInterface.setIpNetworkMask(Ip4Address.valueOf("244.244.244.244"));
+ ospfInterface.setHelloIntervalTime(10);
+ ospfInterface.setRouterDeadIntervalTime(10);
+ ospfArea.setAreaId(Ip4Address.valueOf("12.12.12.12"));
+ channelHandlerContext = EasyMock.createMock(ChannelHandlerContext.class);
+ OspfMessage message;
+ helloPacket = new HelloPacket();
+ helloPacket.setSourceIp(Ip4Address.valueOf("1.1.1.1"));
+ helloPacket.setOspfVer(2);
+ helloPacket.setAreaId(Ip4Address.valueOf("12.12.12.12"));
+ helloPacket.setNetworkMask(Ip4Address.valueOf("244.244.244.244"));
+ helloPacket.setHelloInterval(10);
+ helloPacket.setRouterDeadInterval(10);
+ helloPacket.setDr(Ip4Address.valueOf("10.10.10.10"));
+ helloPacket.setBdr(Ip4Address.valueOf("11.11.11.11"));
+ helloPacket.setRouterId(Ip4Address.valueOf("2.2.2.2"));
+ message = helloPacket;
+ channelHandlerContext = null;
+ channelHandlerContext = EasyMock.createMock(ChannelHandlerContext.class);
+ ospfInterface.processHelloMessage(message, channelHandlerContext);
+ assertThat(ospfInterfaceChannelHandler, is(notNullValue()));
+ ospfNbrHashMap = new HashMap();
+ ospfNbr = new OspfNbrImpl(ospfArea, ospfInterface, Ip4Address.valueOf("10.10.10.10"),
+ Ip4Address.valueOf("2.2.2.2"), 2,
+ topologyForDeviceAndLink);
+ ospfNbr.setNeighborId(Ip4Address.valueOf("2.2.2.2"));
+ ospfNbr.setRouterPriority(0);
+ ospfNbr.setNeighborDr(Ip4Address.valueOf("13.13.13.13"));
+ ospfInterface.addNeighbouringRouter(ospfNbr);
+ channelHandlerContext = null;
+ channelHandlerContext = EasyMock.createMock(ChannelHandlerContext.class);
+ ospfInterface.processHelloMessage(message, channelHandlerContext);
+ assertThat(ospfInterfaceChannelHandler, is(notNullValue()));
+ }
+
+ /**
+ * Tests processDdMessage() method.
+ */
+ @Test
+ public void testProcessDdMessage() throws Exception {
+ ospfInterface.setOspfArea(ospfArea);
+ ospfInterface.setIpAddress(Ip4Address.valueOf("11.11.11.11"));
+ ospfInterface.setInterfaceType(2);
+ ospfInterface.setIpNetworkMask(Ip4Address.valueOf("255.255.255.255"));
+ ospfInterface.setHelloIntervalTime(10);
+ ospfInterface.setRouterDeadIntervalTime(10);
+ ospfArea.setAreaId(Ip4Address.valueOf("12.12.12.12"));
+ channelHandlerContext = EasyMock.createMock(ChannelHandlerContext.class);
+ OspfMessage message;
+ ddPacket = new DdPacket();
+ ddPacket.setSourceIp(Ip4Address.valueOf("1.1.1.1"));
+ ddPacket.setOspfVer(2);
+ ddPacket.setAreaId(Ip4Address.valueOf("12.12.12.12"));
+ ddPacket.setRouterId(Ip4Address.valueOf("2.2.2.2"));
+ ddPacket.setIsOpaqueCapable(true);
+ ddPacket.setIsMore(1);
+ ddPacket.setIsInitialize(1);
+ ddPacket.setIsMaster(1);
+ ddPacket.setSequenceNo(123);
+ message = ddPacket;
+ ospfNbrHashMap = new HashMap();
+ ospfNbr = new OspfNbrImpl(ospfArea, ospfInterface, Ip4Address.valueOf("10.10.10.10"),
+ Ip4Address.valueOf("2.2.2.2"), 2,
+ topologyForDeviceAndLink);
+ ospfNbr.setLastDdPacket(createDdPacket());
+ ospfNbr.setNeighborId(Ip4Address.valueOf("2.2.2.2"));
+ ospfNbr.setState(OspfNeighborState.EXSTART);
+ ospfNbr.setRouterPriority(0);
+ ospfNbr.setNeighborDr(Ip4Address.valueOf("13.13.13.13"));
+ ospfNbr.setDdSeqNum(123);
+ ospfInterface.addNeighbouringRouter(ospfNbr);
+ channelHandlerContext = null;
+ channelHandlerContext = EasyMock.createMock(ChannelHandlerContext.class);
+ ospfInterface.processDdMessage(message, channelHandlerContext);
+ assertThat(ospfInterfaceChannelHandler, is(notNullValue()));
+ }
+
+ /**
+ * Tests processDdMessage() method.
+ */
+ @Test(expected = Exception.class)
+ public void testProcessDdMessage3() throws Exception {
+ ospfInterface.setIpAddress(Ip4Address.valueOf("11.11.11.11"));
+ ospfInterface.setInterfaceType(2);
+ ospfInterface.setIpNetworkMask(Ip4Address.valueOf("255.255.255.255"));
+ ospfInterface.setHelloIntervalTime(10);
+ ospfInterface.setRouterDeadIntervalTime(10);
+ ospfArea.setAreaId(Ip4Address.valueOf("12.12.12.12"));
+ channelHandlerContext = EasyMock.createMock(ChannelHandlerContext.class);
+ OspfMessage message;
+ ddPacket = new DdPacket();
+ ddPacket.setSourceIp(Ip4Address.valueOf("1.1.1.1"));
+ ddPacket.setOspfVer(2);
+ ddPacket.setAreaId(Ip4Address.valueOf("12.12.12.12"));
+ ddPacket.setRouterId(Ip4Address.valueOf("2.2.2.2"));
+ ddPacket.setIsOpaqueCapable(true);
+ ddPacket.setIsMore(1);
+ ddPacket.setIsInitialize(1);
+ ddPacket.setIsMaster(1);
+ ddPacket.setSequenceNo(123);
+ message = ddPacket;
+ ospfNbrHashMap = new HashMap();
+ ospfNbr = new OspfNbrImpl(ospfArea, ospfInterface, Ip4Address.valueOf("10.10.10.10"),
+ Ip4Address.valueOf("2.2.2.2"), 2,
+ topologyForDeviceAndLink);
+ ospfNbr.setLastDdPacket(createDdPacket());
+ ospfNbr.setNeighborId(Ip4Address.valueOf("2.2.2.2"));
+ ospfNbr.setState(OspfNeighborState.EXSTART);
+ ospfNbr.setRouterPriority(0);
+ ospfNbr.setNeighborDr(Ip4Address.valueOf("13.13.13.13"));
+ ospfNbr.setDdSeqNum(123);
+ ospfInterface.addNeighbouringRouter(ospfNbr);
+ ddPacket.setIsMore(1);
+ ddPacket.setIsInitialize(0);
+ ddPacket.setIsMaster(0);
+ ddPacket.setSequenceNo(123);
+ ospfInterface.addNeighbouringRouter(ospfNbr);
+ channelHandlerContext = null;
+ channelHandlerContext = EasyMock.createMock(ChannelHandlerContext.class);
+ ospfInterface.processDdMessage(message, channelHandlerContext);
+ assertThat(ospfInterfaceChannelHandler, is(notNullValue()));
+ }
+
+ /**
+ * Tests processDdMessage() method.
+ */
+ @Test(expected = Exception.class)
+ public void testProcessDdMessage1() throws Exception {
+ ospfInterface.setIpAddress(Ip4Address.valueOf("11.11.11.11"));
+ ospfInterface.setInterfaceType(2);
+ ospfInterface.setIpNetworkMask(Ip4Address.valueOf("255.255.255.255"));
+ ospfInterface.setHelloIntervalTime(10);
+ ospfInterface.setRouterDeadIntervalTime(10);
+ ospfArea.setAreaId(Ip4Address.valueOf("12.12.12.12"));
+ channelHandlerContext = EasyMock.createMock(ChannelHandlerContext.class);
+ OspfMessage message;
+ ddPacket = new DdPacket();
+ ddPacket.setSourceIp(Ip4Address.valueOf("1.1.1.1"));
+ ddPacket.setOspfVer(2);
+ ddPacket.setAreaId(Ip4Address.valueOf("12.12.12.12"));
+ ddPacket.setRouterId(Ip4Address.valueOf("2.2.2.2"));
+ ddPacket.setIsOpaqueCapable(true);
+ ddPacket.setIsMore(1);
+ ddPacket.setIsInitialize(1);
+ ddPacket.setIsMaster(1);
+ ddPacket.setSequenceNo(123);
+ message = ddPacket;
+ ospfNbrHashMap = new HashMap();
+ ospfNbr = new OspfNbrImpl(ospfArea, ospfInterface, Ip4Address.valueOf("10.10.10.10"),
+ Ip4Address.valueOf("2.2.2.2"), 2,
+ topologyForDeviceAndLink);
+ ospfNbr.setLastDdPacket(createDdPacket());
+ ospfNbr.setNeighborId(Ip4Address.valueOf("2.2.2.2"));
+ ospfNbr.setState(OspfNeighborState.EXCHANGE);
+ ospfNbr.setRouterPriority(0);
+ ospfNbr.setNeighborDr(Ip4Address.valueOf("13.13.13.13"));
+ ospfNbr.setDdSeqNum(123);
+ ospfInterface.addNeighbouringRouter(ospfNbr);
+ ddPacket.setIsMore(1);
+ ddPacket.setIsInitialize(0);
+ ddPacket.setIsMaster(0);
+ ddPacket.setSequenceNo(123);
+ ospfInterface.addNeighbouringRouter(ospfNbr);
+ channelHandlerContext = null;
+ channelHandlerContext = EasyMock.createMock(ChannelHandlerContext.class);
+ ospfInterface.processDdMessage(message, channelHandlerContext);
+ assertThat(ospfInterfaceChannelHandler, is(notNullValue()));
+
+ }
+
+ /**
+ * Tests processDdMessage() method.
+ */
+ @Test(expected = Exception.class)
+ public void testProcessDdMessage2() throws Exception {
+ ospfInterface.setIpAddress(Ip4Address.valueOf("11.11.11.11"));
+ ospfInterface.setInterfaceType(2);
+ ospfInterface.setIpNetworkMask(Ip4Address.valueOf("255.255.255.255"));
+ ospfInterface.setHelloIntervalTime(10);
+ ospfInterface.setRouterDeadIntervalTime(10);
+ ospfArea.setAreaId(Ip4Address.valueOf("12.12.12.12"));
+ channelHandlerContext = EasyMock.createMock(ChannelHandlerContext.class);
+ OspfMessage message;
+ ddPacket = new DdPacket();
+ ddPacket.setSourceIp(Ip4Address.valueOf("1.1.1.1"));
+ ddPacket.setOspfVer(2);
+ ddPacket.setAreaId(Ip4Address.valueOf("12.12.12.12"));
+ ddPacket.setRouterId(Ip4Address.valueOf("2.2.2.2"));
+ ddPacket.setIsOpaqueCapable(true);
+ ddPacket.setIsMore(1);
+ ddPacket.setIsInitialize(1);
+ ddPacket.setIsMaster(1);
+ ddPacket.setSequenceNo(123);
+ message = ddPacket;
+ ospfNbrHashMap = new HashMap();
+ ospfNbr = new OspfNbrImpl(ospfArea, ospfInterface, Ip4Address.valueOf("10.10.10.10"),
+ Ip4Address.valueOf("2.2.2.2"), 2,
+ topologyForDeviceAndLink);
+ ospfNbr.setLastDdPacket(createDdPacket());
+ ospfNbr.setNeighborId(Ip4Address.valueOf("2.2.2.2"));
+ ospfNbr.setState(OspfNeighborState.LOADING);
+ ospfNbr.setRouterPriority(0);
+ ospfNbr.setNeighborDr(Ip4Address.valueOf("13.13.13.13"));
+ ospfNbr.setDdSeqNum(123);
+ ospfInterface.addNeighbouringRouter(ospfNbr);
+ ospfInterface.setState(OspfInterfaceState.POINT2POINT);
+ channelHandlerContext = null;
+ channelHandlerContext = EasyMock.createMock(ChannelHandlerContext.class);
+ ospfInterface.processDdMessage(message, channelHandlerContext);
+ assertThat(ospfInterfaceChannelHandler, is(notNullValue()));
+
+ }
+
+ /**
+ * Tests processDdMessage() method.
+ */
+ @Test(expected = Exception.class)
+ public void testProcessDdMessage4() throws Exception {
+ ospfInterface.setIpAddress(Ip4Address.valueOf("11.11.11.11"));
+ ospfInterface.setInterfaceType(2);
+ ospfInterface.setIpNetworkMask(Ip4Address.valueOf("255.255.255.255"));
+ ospfInterface.setHelloIntervalTime(10);
+ ospfInterface.setRouterDeadIntervalTime(10);
+ ospfArea.setAreaId(Ip4Address.valueOf("12.12.12.12"));
+ channelHandlerContext = EasyMock.createMock(ChannelHandlerContext.class);
+ OspfMessage message;
+ ddPacket = new DdPacket();
+ ddPacket.setSourceIp(Ip4Address.valueOf("1.1.1.1"));
+ ddPacket.setOspfVer(2);
+ ddPacket.setAreaId(Ip4Address.valueOf("12.12.12.12"));
+ ddPacket.setRouterId(Ip4Address.valueOf("2.2.2.2"));
+ ddPacket.setIsOpaqueCapable(true);
+ ddPacket.setIsMore(1);
+ ddPacket.setIsInitialize(1);
+ ddPacket.setIsMaster(1);
+ ddPacket.setSequenceNo(123);
+ message = ddPacket;
+ ospfNbrHashMap = new HashMap();
+ ospfNbr = new OspfNbrImpl(ospfArea, ospfInterface, Ip4Address.valueOf("10.10.10.10"),
+ Ip4Address.valueOf("2.2.2.2"), 2,
+ topologyForDeviceAndLink);
+ ospfNbr.setLastDdPacket(createDdPacket());
+ ospfNbr.setNeighborId(Ip4Address.valueOf("2.2.2.2"));
+ ospfNbr.setState(OspfNeighborState.EXCHANGE);
+ ospfNbr.setRouterPriority(0);
+ ospfNbr.setNeighborDr(Ip4Address.valueOf("13.13.13.13"));
+ ospfNbr.setDdSeqNum(123);
+ ospfInterface.addNeighbouringRouter(ospfNbr);
+ ospfInterface.setState(OspfInterfaceState.POINT2POINT);
+ channelHandlerContext = null;
+ channelHandlerContext = EasyMock.createMock(ChannelHandlerContext.class);
+ ddPacket.setIsMore(1);
+ ddPacket.setIsInitialize(0);
+ ddPacket.setIsMaster(1);
+ ddPacket.setSequenceNo(123);
+ ospfInterface.addNeighbouringRouter(ospfNbr);
+ ospfNbr.setState(OspfNeighborState.EXCHANGE);
+ ospfInterface.addNeighbouringRouter(ospfNbr);
+ channelHandlerContext = null;
+ channelHandlerContext = EasyMock.createMock(ChannelHandlerContext.class);
+ ospfInterface.processDdMessage(message, channelHandlerContext);
+ assertThat(ospfInterfaceChannelHandler, is(notNullValue()));
+
+ }
+
+ /**
+ * Tests processDdMessage() method.
+ */
+ @Test(expected = Exception.class)
+ public void testProcessDdMessage5() throws Exception {
+ ospfInterface.setIpAddress(Ip4Address.valueOf("11.11.11.11"));
+ ospfInterface.setInterfaceType(2);
+ ospfInterface.setIpNetworkMask(Ip4Address.valueOf("255.255.255.255"));
+ ospfInterface.setHelloIntervalTime(10);
+ ospfInterface.setRouterDeadIntervalTime(10);
+ ospfArea.setAreaId(Ip4Address.valueOf("12.12.12.12"));
+ channelHandlerContext = EasyMock.createMock(ChannelHandlerContext.class);
+ OspfMessage message;
+ ddPacket = new DdPacket();
+ ddPacket.setSourceIp(Ip4Address.valueOf("1.1.1.1"));
+ ddPacket.setOspfVer(2);
+ ddPacket.setAreaId(Ip4Address.valueOf("12.12.12.12"));
+ ddPacket.setRouterId(Ip4Address.valueOf("2.2.2.2"));
+ ddPacket.setIsOpaqueCapable(true);
+ ddPacket.setIsMore(1);
+ ddPacket.setIsInitialize(1);
+ ddPacket.setIsMaster(1);
+ ddPacket.setSequenceNo(123);
+ message = ddPacket;
+ ospfNbrHashMap = new HashMap();
+ ospfNbr = new OspfNbrImpl(ospfArea, ospfInterface, Ip4Address.valueOf("10.10.10.10"),
+ Ip4Address.valueOf("2.2.2.2"), 2,
+ topologyForDeviceAndLink);
+ ospfNbr.setLastDdPacket(createDdPacket());
+ ospfNbr.setNeighborId(Ip4Address.valueOf("2.2.2.2"));
+ ospfNbr.setState(OspfNeighborState.EXCHANGE);
+ ospfNbr.setRouterPriority(0);
+ ospfNbr.setNeighborDr(Ip4Address.valueOf("13.13.13.13"));
+ ospfNbr.setDdSeqNum(123);
+ ospfInterface.addNeighbouringRouter(ospfNbr);
+ ospfInterface.setState(OspfInterfaceState.POINT2POINT);
+ channelHandlerContext = null;
+ channelHandlerContext = EasyMock.createMock(ChannelHandlerContext.class);
+ ddPacket.setIsMore(1);
+ ddPacket.setIsInitialize(1);
+ ddPacket.setIsMaster(0);
+ ddPacket.setSequenceNo(123);
+ ospfInterface.addNeighbouringRouter(ospfNbr);
+ ospfNbr.setState(OspfNeighborState.EXCHANGE);
+ ospfInterface.addNeighbouringRouter(ospfNbr);
+ channelHandlerContext = null;
+ channelHandlerContext = EasyMock.createMock(ChannelHandlerContext.class);
+ ospfInterface.processDdMessage(message, channelHandlerContext);
+ assertThat(ospfInterfaceChannelHandler, is(notNullValue()));
+
+ }
+
+ /**
+ * Tests processDdMessage() method.
+ */
+ @Test(expected = Exception.class)
+ public void testProcessDdMessage6() throws Exception {
+ ospfInterface.setIpAddress(Ip4Address.valueOf("11.11.11.11"));
+ ospfInterface.setInterfaceType(2);
+ ospfInterface.setIpNetworkMask(Ip4Address.valueOf("255.255.255.255"));
+ ospfInterface.setHelloIntervalTime(10);
+ ospfInterface.setRouterDeadIntervalTime(10);
+ ospfArea.setAreaId(Ip4Address.valueOf("12.12.12.12"));
+ channelHandlerContext = EasyMock.createMock(ChannelHandlerContext.class);
+ OspfMessage message;
+ ddPacket = new DdPacket();
+ ddPacket.setSourceIp(Ip4Address.valueOf("1.1.1.1"));
+ ddPacket.setOspfVer(2);
+ ddPacket.setAreaId(Ip4Address.valueOf("12.12.12.12"));
+ ddPacket.setRouterId(Ip4Address.valueOf("2.2.2.2"));
+ ddPacket.setIsOpaqueCapable(true);
+ ddPacket.setIsMore(1);
+ ddPacket.setIsInitialize(1);
+ ddPacket.setIsMaster(1);
+ ddPacket.setSequenceNo(123);
+ message = ddPacket;
+ ospfNbrHashMap = new HashMap();
+ ospfNbr = new OspfNbrImpl(ospfArea, ospfInterface, Ip4Address.valueOf("10.10.10.10"),
+ Ip4Address.valueOf("2.2.2.2"), 2,
+ topologyForDeviceAndLink);
+ ospfNbr.setLastDdPacket(createDdPacket());
+ ospfNbr.setNeighborId(Ip4Address.valueOf("2.2.2.2"));
+ ospfNbr.setState(OspfNeighborState.FULL);
+ ospfNbr.setRouterPriority(0);
+ ospfNbr.setNeighborDr(Ip4Address.valueOf("13.13.13.13"));
+ ospfNbr.setDdSeqNum(123);
+ ospfInterface.addNeighbouringRouter(ospfNbr);
+ ospfInterface.setState(OspfInterfaceState.POINT2POINT);
+ channelHandlerContext = null;
+ channelHandlerContext = EasyMock.createMock(ChannelHandlerContext.class);
+ ddPacket.setIsMore(1);
+ ddPacket.setIsInitialize(1);
+ ddPacket.setIsMaster(0);
+ ddPacket.setSequenceNo(123);
+ ospfInterface.addNeighbouringRouter(ospfNbr);
+ ospfNbr.setState(OspfNeighborState.FULL);
+ ospfInterface.addNeighbouringRouter(ospfNbr);
+ channelHandlerContext = null;
+ channelHandlerContext = EasyMock.createMock(ChannelHandlerContext.class);
+ ospfInterface.processDdMessage(message, channelHandlerContext);
+ assertThat(ospfInterfaceChannelHandler, is(notNullValue()));
+
+ }
+
+ /**
+ * Tests processLsRequestMessage() method.
+ */
+ @Test(expected = Exception.class)
+ public void testProcessLSRequestMessage() throws Exception {
+ ospfArea.setRouterId(Ip4Address.valueOf("11.11.11.11"));
+ ospfArea.setAreaId(Ip4Address.valueOf("12.12.12.12"));
+ ospfInterface.setOspfArea(ospfArea);
+ ospfInterface.setIpAddress(Ip4Address.valueOf("11.11.11.11"));
+ ospfInterface.setInterfaceType(2);
+ ospfInterface.setIpNetworkMask(Ip4Address.valueOf("255.255.255.255"));
+ ospfInterface.setHelloIntervalTime(10);
+ ospfInterface.setRouterDeadIntervalTime(10);
+ channelHandlerContext = EasyMock.createMock(ChannelHandlerContext.class);
+ OspfMessage message;
+ lsRequest = new LsRequest();
+ lsRequest.setSourceIp(Ip4Address.valueOf("1.1.1.1"));
+ lsRequest.setOspfVer(2);
+ lsRequest.setAreaId(Ip4Address.valueOf("12.12.12.12"));
+ lsRequest.setRouterId(Ip4Address.valueOf("10.226.165.100"));
+ List<LsRequestPacket> lsRequests = new ArrayList();
+ LsRequestPacket lsRequestPacket = new LsRequestPacket();
+ lsRequestPacket.setLsType(OspfLsaType.AREA_LOCAL_OPAQUE_LSA.value());
+ lsRequestPacket.setLinkStateId("2.2.2.2");
+ lsRequestPacket.setOwnRouterId("10.226.165.100");
+ lsRequests.add(lsRequestPacket);
+ lsRequests.add(lsRequestPacket);
+ lsRequest.addLinkStateRequests(lsRequestPacket);
+ message = lsRequest;
+ ospfNbrHashMap = new HashMap();
+ ospfNbr.setState(OspfNeighborState.EXCHANGE);
+ ospfNbr = new OspfNbrImpl(ospfArea, createOspfInterface(), Ip4Address.valueOf("10.10.10.10"),
+ Ip4Address.valueOf("10.226.165.100"), 2,
+ topologyForDeviceAndLink);
+ ospfNbr.setLastDdPacket(createDdPacket());
+ ospfNbr.setNeighborId(Ip4Address.valueOf("10.226.165.100"));
+ ospfNbr.setState(OspfNeighborState.FULL);
+ ospfNbr.setRouterPriority(0);
+ ospfNbr.setNeighborDr(Ip4Address.valueOf("13.13.13.13"));
+ ospfNbr.setDdSeqNum(123);
+ ospfInterface.addNeighbouringRouter(ospfNbr);
+ OpaqueLsaHeader lsaHeader = new OpaqueLsaHeader();
+ lsaHeader.setLsType(OspfLsaType.AREA_LOCAL_OPAQUE_LSA.value());
+ lsaHeader.setLinkStateId("2.2.2.2");
+ lsaHeader.setAdvertisingRouter(Ip4Address.valueOf("10.226.165.100"));
+ OpaqueLsa10 opaqueLsa10 = new OpaqueLsa10(lsaHeader);
+ ospfArea.addLsa(opaqueLsa10, false, ospfInterface);
+ ospfInterface.setOspfArea(ospfArea);
+ ospfInterface.processLsRequestMessage(message, channelHandlerContext);
+ assertThat(ospfInterface, is(notNullValue()));
+ }
+
+ /**
+ * Tests processLsUpdateMessage() method.
+ */
+ @Test
+ public void testProcessLSUpdateMessage() throws Exception {
+ ospfInterface.setIpAddress(Ip4Address.valueOf("11.11.11.11"));
+ ospfInterface.setInterfaceType(2);
+ ospfInterface.setIpNetworkMask(Ip4Address.valueOf("255.255.255.255"));
+ ospfInterface.setHelloIntervalTime(10);
+ ospfInterface.setRouterDeadIntervalTime(10);
+ ospfArea.setAreaId(Ip4Address.valueOf("12.12.12.12"));
+ channelHandlerContext = EasyMock.createMock(ChannelHandlerContext.class);
+ OspfMessage message;
+ lsUpdate = new LsUpdate();
+ lsUpdate.setSourceIp(Ip4Address.valueOf("1.1.1.1"));
+ lsUpdate.setOspfVer(2);
+ lsUpdate.setAreaId(Ip4Address.valueOf("12.12.12.12"));
+ lsUpdate.setRouterId(Ip4Address.valueOf("10.226.165.100"));
+ RouterLsa routerLsa = new RouterLsa();
+ lsUpdate.addLsa(routerLsa);
+ lsUpdate.setNumberOfLsa(1);
+ message = lsUpdate;
+ ospfNbrHashMap = new HashMap();
+ ospfNbr.setState(OspfNeighborState.FULL);
+ ospfNbr = new OspfNbrImpl(ospfArea, createOspfInterface(), Ip4Address.valueOf("10.10.10.10"),
+ Ip4Address.valueOf("10.226.165.100"), 2,
+ topologyForDeviceAndLink);
+ ospfNbr.setLastDdPacket(createDdPacket());
+ ospfNbr.setNeighborId(Ip4Address.valueOf("2.2.2.2"));
+ ospfNbr.setState(OspfNeighborState.FULL);
+ ospfNbr.setRouterPriority(0);
+ ospfNbr.setNeighborDr(Ip4Address.valueOf("13.13.13.13"));
+ ospfNbr.setDdSeqNum(123);
+ ospfInterface.addNeighbouringRouter(ospfNbr);
+ channelHandlerContext = null;
+ channelHandlerContext = EasyMock.createMock(ChannelHandlerContext.class);
+ ospfInterface.processLsUpdateMessage(message, channelHandlerContext);
+ assertThat(ospfInterfaceChannelHandler, is(notNullValue()));
+
+ }
+
+ @Test(expected = Exception.class)
+ public void testProcessLSAckMessage() throws Exception {
+ ospfInterface.setIpAddress(Ip4Address.valueOf("11.11.11.11"));
+ ospfInterface.setInterfaceType(2);
+ ospfInterface.setIpNetworkMask(Ip4Address.valueOf("255.255.255.255"));
+ ospfInterface.setHelloIntervalTime(10);
+ ospfInterface.setRouterDeadIntervalTime(10);
+ ospfArea.setAreaId(Ip4Address.valueOf("12.12.12.12"));
+ channelHandlerContext = EasyMock.createMock(ChannelHandlerContext.class);
+ OspfMessage message;
+ lsAck = new LsAcknowledge();
+ lsAck.setSourceIp(Ip4Address.valueOf("1.1.1.1"));
+ lsAck.setOspfVer(2);
+ lsAck.setAreaId(Ip4Address.valueOf("12.12.12.12"));
+ LsaHeader lsaHeader = new LsaHeader();
+ lsAck.addLinkStateHeader(lsaHeader);
+ message = lsAck;
+ ospfNbr = new OspfNbrImpl(ospfArea, createOspfInterface(), Ip4Address.valueOf("10.10.10.10"),
+ Ip4Address.valueOf("10.226.165.100"), 2,
+ topologyForDeviceAndLink);
+ ospfNbr.setLastDdPacket(createDdPacket());
+ ospfNbr.setNeighborId(Ip4Address.valueOf("2.2.2.2"));
+ ospfNbr.setState(OspfNeighborState.FULL);
+ ospfNbr.setRouterPriority(0);
+ ospfNbr.setNeighborDr(Ip4Address.valueOf("13.13.13.13"));
+ ospfNbr.setDdSeqNum(123);
+ channelHandlerContext = null;
+ channelHandlerContext = EasyMock.createMock(ChannelHandlerContext.class);
+ ospfInterface.processLsAckMessage(message, channelHandlerContext);
+ assertThat(ospfInterfaceChannelHandler, is(notNullValue()));
+
+ }
+
+ /**
+ * Tests electRouter() method.
+ */
+ @Test
+ public void testElectRouter() throws Exception {
+ ospfInterface.setOspfArea(ospfArea);
+ ospfInterface.setDr(Ip4Address.valueOf("3.3.3.3"));
+ ospfInterface.setBdr(Ip4Address.valueOf("3.3.3.3"));
+ ospfInterface.setIpNetworkMask(Ip4Address.valueOf("255.255.255.255"));
+ ChannelConfig channelConfig = EasyMock.createMock(ChannelConfig.class);
+ EasyMock.expect(channelConfig.getBufferFactory()).andReturn(new HeapChannelBufferFactory());
+ Channel channel = EasyMock.createMock(Channel.class);
+ ospfInterface.electRouter(channel);
+ assertThat(ospfInterface.dr(), is(notNullValue()));
+ }
+
+ /**
+ * Tests electBdr() method.
+ */
+ @Test
+ public void testElectBdr() throws Exception {
+ ospfEligibleRouter = new OspfEligibleRouter();
+ ospfEligibleRouter.setIpAddress(Ip4Address.valueOf("1.1.1.1"));
+ ospfEligibleRouter.setIsDr(true);
+ ospfEligibleRouter.setRouterPriority(10);
+ ospfEligibleRouter.setRouterId(Ip4Address.valueOf("1.1.1.1"));
+ ospfEligibleRouter.setIsBdr(false);
+ OspfEligibleRouter ospfEligibleRouter1 = new OspfEligibleRouter();
+ ospfEligibleRouter.setIpAddress(Ip4Address.valueOf("1.1.1.1"));
+ ospfEligibleRouter.setIsDr(true);
+ ospfEligibleRouter.setRouterPriority(10);
+ ospfEligibleRouter.setRouterId(Ip4Address.valueOf("1.1.1.1"));
+ ospfEligibleRouter.setIsBdr(false);
+ OspfEligibleRouter ospfEligibleRouter2 = new OspfEligibleRouter();
+ ospfEligibleRouter.setIpAddress(Ip4Address.valueOf("1.1.1.1"));
+ ospfEligibleRouter.setIsDr(true);
+ ospfEligibleRouter.setRouterPriority(10);
+ ospfEligibleRouter.setRouterId(Ip4Address.valueOf("1.1.1.1"));
+ ospfEligibleRouter.setIsBdr(false);
+ List<OspfEligibleRouter> ospfEligibleRouters = new ArrayList<>();
+
+ ospfEligibleRouters.add(ospfEligibleRouter);
+ ospfEligibleRouters.add(ospfEligibleRouter1);
+ ospfEligibleRouters.add(ospfEligibleRouter2);
+ OspfEligibleRouter eligibleRouter = ospfInterface.electBdr(ospfEligibleRouters);
+ assertThat(ospfEligibleRouters.size(), is(3));
+ assertThat(eligibleRouter, is(notNullValue()));
+ }
+
+ /**
+ * Tests electDr() method.
+ */
+ @Test
+ public void testElectDR() throws Exception {
+ ospfEligibleRouter = new OspfEligibleRouter();
+ ospfEligibleRouter.setIpAddress(Ip4Address.valueOf("1.1.1.1"));
+ ospfEligibleRouter.setIsDr(true);
+ ospfEligibleRouter.setRouterPriority(10);
+ ospfEligibleRouter.setRouterId(Ip4Address.valueOf("1.1.1.1"));
+ ospfEligibleRouter.setIsBdr(false);
+ OspfEligibleRouter ospfEligibleRouter1 = new OspfEligibleRouter();
+ ospfEligibleRouter.setIpAddress(Ip4Address.valueOf("1.1.1.1"));
+ ospfEligibleRouter.setIsDr(true);
+ ospfEligibleRouter.setRouterPriority(10);
+ ospfEligibleRouter.setRouterId(Ip4Address.valueOf("1.1.1.1"));
+ ospfEligibleRouter.setIsBdr(false);
+ OspfEligibleRouter ospfEligibleRouter2 = new OspfEligibleRouter();
+ ospfEligibleRouter.setIpAddress(Ip4Address.valueOf("1.1.1.1"));
+ ospfEligibleRouter.setIsDr(true);
+ ospfEligibleRouter.setRouterPriority(10);
+ ospfEligibleRouter.setRouterId(Ip4Address.valueOf("1.1.1.1"));
+ ospfEligibleRouter.setIsBdr(false);
+ List<OspfEligibleRouter> ospfEligibleRouters = new ArrayList<>();
+ ospfEligibleRouters.add(ospfEligibleRouter);
+ ospfEligibleRouters.add(ospfEligibleRouter1);
+ ospfEligibleRouters.add(ospfEligibleRouter2);
+ OspfEligibleRouter eligibleRouter = ospfInterface.electDr(ospfEligibleRouters,
+ ospfEligibleRouter);
+ assertThat(ospfEligibleRouters.size(), is(3));
+ assertThat(eligibleRouter, is(notNullValue()));
+ }
+
+ /**
+ * Tests selectRouterBasedOnPriority() method.
+ */
+ @Test
+ public void testSelectRouterBasedOnPriority() throws Exception {
+ ospfEligibleRouter = new OspfEligibleRouter();
+ ospfEligibleRouter.setIpAddress(Ip4Address.valueOf("1.1.1.1"));
+ ospfEligibleRouter.setIsDr(true);
+ ospfEligibleRouter.setRouterPriority(10);
+ ospfEligibleRouter.setRouterId(Ip4Address.valueOf("1.1.1.1"));
+ ospfEligibleRouter.setIsBdr(false);
+ OspfEligibleRouter ospfEligibleRouter1 = new OspfEligibleRouter();
+ ospfEligibleRouter.setIpAddress(Ip4Address.valueOf("1.1.1.1"));
+ ospfEligibleRouter.setIsDr(true);
+ ospfEligibleRouter.setRouterPriority(11);
+ ospfEligibleRouter.setRouterId(Ip4Address.valueOf("1.1.1.1"));
+ ospfEligibleRouter.setIsBdr(false);
+ OspfEligibleRouter ospfEligibleRouter2 = new OspfEligibleRouter();
+ ospfEligibleRouter.setIpAddress(Ip4Address.valueOf("1.1.1.1"));
+ ospfEligibleRouter.setIsDr(true);
+ ospfEligibleRouter.setRouterPriority(12);
+ ospfEligibleRouter.setRouterId(Ip4Address.valueOf("1.1.1.1"));
+ ospfEligibleRouter.setIsBdr(false);
+ List<OspfEligibleRouter> ospfEligibleRouters = new ArrayList<>();
+ ospfEligibleRouters.add(ospfEligibleRouter);
+ ospfEligibleRouters.add(ospfEligibleRouter1);
+ ospfEligibleRouters.add(ospfEligibleRouter2);
+ OspfEligibleRouter eligibleRouter = ospfInterface.selectRouterBasedOnPriority(
+ ospfEligibleRouters);
+ assertThat(eligibleRouter, is(notNullValue()));
+ }
+
+ /**
+ * Tests addDeviceInformation() method.
+ */
+ @Test(expected = Exception.class)
+ public void testAddDeviceInformation() throws Exception {
+ ospfNbr = new OspfNbrImpl(ospfArea, createOspfInterface(), Ip4Address.valueOf("10.10.10.10"),
+ Ip4Address.valueOf("10.226.165.100"), 2,
+ topologyForDeviceAndLink);
+
+ ospfInterface.addDeviceInformation(new OspfRouterImpl());
+ assertThat(ospfInterfaceChannelHandler, is(notNullValue()));
+ }
+
+ /**
+ * Tests removeDeviceInformation() method.
+ */
+ @Test(expected = Exception.class)
+ public void testRemoveDeviceInformation() throws Exception {
+ ospfNbr = new OspfNbrImpl(ospfArea, createOspfInterface(), Ip4Address.valueOf("10.10.10.10"),
+ Ip4Address.valueOf("10.226.165.100"), 2,
+ topologyForDeviceAndLink);
+
+ ospfInterface.removeDeviceInformation(new OspfRouterImpl());
+ assertThat(ospfInterfaceChannelHandler, is(notNullValue()));
+ }
+
+ /**
+ * Tests addLinkInformation() method.
+ */
+ @Test(expected = Exception.class)
+ public void testaddLinkInformation() throws Exception {
+ ospfNbr = new OspfNbrImpl(ospfArea, createOspfInterface(), Ip4Address.valueOf("10.10.10.10"),
+ Ip4Address.valueOf("10.226.165.100"), 2,
+ topologyForDeviceAndLink);
+
+ List topTlv = new ArrayList();
+ topTlv.add(new RouterTlv(new TlvHeader()));
+ ospfInterface.addLinkInformation(new OspfRouterImpl(), new OspfLinkTedImpl());
+ assertThat(ospfInterfaceChannelHandler, is(notNullValue()));
+ }
+
+ /**
+ * Tests removeLinkInformation() method.
+ */
+ @Test(expected = Exception.class)
+ public void testRemoveLinkInformation() throws Exception {
+ ospfNbr = new OspfNbrImpl(ospfArea, createOspfInterface(), Ip4Address.valueOf("10.10.10.10"),
+ Ip4Address.valueOf("10.226.165.100"), 2,
+ topologyForDeviceAndLink);
+
+ ospfInterface.removeLinkInformation(new OspfRouterImpl(), new OspfLinkTedImpl());
+ assertThat(ospfInterfaceChannelHandler, is(notNullValue()));
+ }
+
+ /**
+ * Utility for test method.
+ */
+ private DdPacket createDdPacket() throws OspfParseException {
+ byte[] ddPacket = {2, 2, 0, 32, -64, -88, -86, 8, 0, 0, 0, 1, -96, 82,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, -36, 2, 7, 65, 119, -87, 126};
+ DdPacket ddPacket1 = new DdPacket();
+ ChannelBuffer buf = ChannelBuffers.buffer(ddPacket.length);
+ buf.writeBytes(ddPacket);
+ ddPacket1.readFrom(buf);
+ return ddPacket1;
+ }
+
+ /**
+ * Utility for test method.
+ */
+ private OspfInterfaceImpl createOspfInterface() throws UnknownHostException {
+ ospfInterface = new OspfInterfaceImpl();
+ OspfAreaImpl ospfArea = new OspfAreaImpl();
+ OspfInterfaceChannelHandler ospfInterfaceChannelHandler = EasyMock.createMock(
+ OspfInterfaceChannelHandler.class);
+ ospfNbr = new OspfNbrImpl(ospfArea, ospfInterface, Ip4Address.valueOf("10.226.165.164"),
+ Ip4Address.valueOf("1.1.1.1"), 2,
+ topologyForDeviceAndLink);
+ ospfNbr.setState(OspfNeighborState.EXSTART);
+ ospfNbr.setNeighborId(Ip4Address.valueOf("10.226.165.100"));
+ this.ospfInterface = new OspfInterfaceImpl();
+ this.ospfInterface.setIpAddress(Ip4Address.valueOf("10.226.165.164"));
+ this.ospfInterface.setIpNetworkMask(Ip4Address.valueOf("255.255.255.255"));
+ this.ospfInterface.setBdr(Ip4Address.valueOf("111.111.111.111"));
+ this.ospfInterface.setDr(Ip4Address.valueOf("111.111.111.111"));
+ this.ospfInterface.setHelloIntervalTime(20);
+ this.ospfInterface.setInterfaceType(2);
+ this.ospfInterface.setReTransmitInterval(2000);
+ this.ospfInterface.setMtu(6500);
+ this.ospfInterface.setRouterDeadIntervalTime(1000);
+ this.ospfInterface.setRouterPriority(1);
+ this.ospfInterface.setInterfaceType(1);
+ this.ospfInterface.addNeighbouringRouter(ospfNbr);
+ return this.ospfInterface;
+ }
+
+ /**
+ * Utility for test method.
+ */
+ private OspfInterfaceImpl createOspfInterface1() throws UnknownHostException {
+ ospfInterface = new OspfInterfaceImpl();
+ OspfAreaImpl ospfArea = new OspfAreaImpl();
+ OspfInterfaceChannelHandler ospfInterfaceChannelHandler = EasyMock.createMock(
+ OspfInterfaceChannelHandler.class);
+ ospfNbr = new OspfNbrImpl(ospfArea, ospfInterface, Ip4Address.valueOf("10.226.165.164"),
+ Ip4Address.valueOf("1.1.1.1"), 2,
+ topologyForDeviceAndLink);
+ ospfNbr.setState(OspfNeighborState.FULL);
+ ospfNbr.setNeighborId(Ip4Address.valueOf("10.226.165.100"));
+ ospfInterface = new OspfInterfaceImpl();
+ ospfInterface.setIpAddress(Ip4Address.valueOf("10.226.165.164"));
+ ospfInterface.setIpNetworkMask(Ip4Address.valueOf("255.255.255.255"));
+ ospfInterface.setBdr(Ip4Address.valueOf("111.111.111.111"));
+ ospfInterface.setDr(Ip4Address.valueOf("111.111.111.111"));
+ ospfInterface.setHelloIntervalTime(20);
+ ospfInterface.setInterfaceType(2);
+ ospfInterface.setReTransmitInterval(2000);
+ ospfInterface.setMtu(6500);
+ ospfInterface.setRouterDeadIntervalTime(1000);
+ ospfInterface.setRouterPriority(1);
+ ospfInterface.setInterfaceType(1);
+ ospfInterface.addNeighbouringRouter(ospfNbr);
+ return ospfInterface;
+ }
+
+ /**
+ * Utility for test method.
+ */
+ private OspfAreaImpl createOspfArea() throws UnknownHostException {
+ OspfAreaAddressRangeImpl ospfAreaAddressRange;
+ ospfAreaAddressRange = createOspfAreaAddressRange();
+ addressRanges.add(ospfAreaAddressRange);
+ OspfAreaImpl ospfArea = new OspfAreaImpl();
+ ospfArea.setAreaId(Ip4Address.valueOf("10.226.165.164"));
+ ospfArea.setExternalRoutingCapability(true);
+ OspfInterfaceImpl ospfInterface = createOspfInterface();
+ ospfInterfaces.add(ospfInterface);
+ ospfArea.setOspfInterfaceList(ospfInterfaces);
+ RouterLsa routerLsa = new RouterLsa();
+ routerLsa.setLsType(1);
+ routerLsa.setLinkStateId("2.2.2.2");
+ routerLsa.setAdvertisingRouter(Ip4Address.valueOf("2.2.2.2"));
+ try {
+ ospfArea.addLsa(routerLsa, false, ospfInterface);
+ } catch (Exception e) {
+ System.out.println("ospfAreaImpl createOspfArea");
+ }
+ ospfArea.setRouterId(Ip4Address.valueOf("111.111.111.111"));
+
+ return ospfArea;
+ }
+
+ /**
+ * Utility for test method.
+ */
+ private OspfAreaAddressRangeImpl createOspfAreaAddressRange() {
+ OspfAreaAddressRangeImpl ospfAreaAddressRange = new OspfAreaAddressRangeImpl();
+ ospfAreaAddressRange.setIpAddress(Ip4Address.valueOf("10.226.165.164"));
+ ospfAreaAddressRange.setAdvertise(true);
+ ospfAreaAddressRange.setMask("mask");
+ return ospfAreaAddressRange;
+ }
+
}
\ No newline at end of file
diff --git a/protocols/ospf/ctl/src/test/java/org/onosproject/ospf/controller/impl/ControllerTest.java b/protocols/ospf/ctl/src/test/java/org/onosproject/ospf/controller/impl/ControllerTest.java
index 8c700d0..f51b014 100644
--- a/protocols/ospf/ctl/src/test/java/org/onosproject/ospf/controller/impl/ControllerTest.java
+++ b/protocols/ospf/ctl/src/test/java/org/onosproject/ospf/controller/impl/ControllerTest.java
@@ -71,7 +71,7 @@
ospfInterface.setIpAddress(Ip4Address.valueOf("1.1.1.1"));
ospfInterfaces.add(ospfInterface);
ospfArea.setAreaId(Ip4Address.valueOf("2.2.2.2"));
- ospfArea.setInterfacesLst(ospfInterfaces);
+ ospfArea.setOspfInterfaceList(ospfInterfaces);
ospfProcess.setProcessId("10.10.10.10");
ospfAreas = new ArrayList();
ospfAreas.add(ospfArea);
@@ -82,7 +82,7 @@
ospfProcess1.setProcessId("11.11.11.11");
ospfArea1 = new OspfAreaImpl();
ospfArea1.setAreaId(Ip4Address.valueOf("2.2.2.2"));
- ospfArea1.setInterfacesLst(ospfInterfaces);
+ ospfArea1.setOspfInterfaceList(ospfInterfaces);
ospfAreas.add(ospfArea1);
ospfProcess1.setAreas(ospfAreas);
ospfProcesses.add(ospfProcess1);
@@ -167,83 +167,6 @@
assertThat(controller, is(notNullValue()));
}
- /**
- * Tests deleteInterfaceFromArea() method.
- */
- @Test
- public void testDeleteInterfaceFromArea() throws Exception {
- controller.updateConfig(ospfProcesses);
- assertThat(controller.deleteInterfaceFromArea("10.10.10.10", "2.2.2.2", "1.1.1.1"), is(true));
- assertThat(controller.deleteInterfaceFromArea("10.10.10.10", "2.2.2.2", "5.5.5.5"), is(false));
- }
-
- /**
- * Tests checkArea() method.
- */
- @Test
- public void testCheckArea() throws Exception {
- controller.updateConfig(ospfProcesses);
- assertThat(controller.checkArea("10.10.10.10", "2.2.2.2"), is(true));
- }
-
- /**
- * Tests checkArea() method.
- */
- @Test
- public void testCheckArea1() throws Exception {
- controller.updateConfig(ospfProcesses);
- assertThat(controller.checkArea("10.10.10.10", "111.111.111.111"), is(false));
- }
-
- /**
- * Tests checkProcess() method.
- */
- @Test
- public void testCheckProcess() throws Exception {
- controller.updateConfig(ospfProcesses);
- assertThat(controller.checkProcess("3.3.3.3"), is(false));
- assertThat(controller.checkProcess("1.1.1.1"), is(false));
- }
-
- /**
- * Tests checkInterface() method.
- */
- @Test
- public void testCheckInterface() throws Exception {
- controller.updateConfig(ospfProcesses);
- assertThat(controller.checkInterface("10.10.10.10", "2.2.2.2", "1.1.1.1"), is(true));
- }
-
- /**
- * Tests updateAreaInProcess() method.
- */
- @Test
- public void testUpdateAreaInProcess() throws Exception {
- controller.updateConfig(ospfProcesses);
- controller.updateAreaInProcess("10.10.10.10", "2.2.2.2", ospfArea);
- assertThat(controller, is(notNullValue()));
- }
-
- /**
- * Tests updateConfig() method.
- */
- @Test
- public void testUpdateConfig() throws Exception {
- controller.updateConfig(ospfProcesses);
- controller.updateConfig(ospfProcesses);
- controller.updateConfig(ospfProcesses);
- assertThat(controller, is(notNullValue()));
- }
-
- /**
- * Tests updateConfig() method.
- */
- @Test
- public void testUpdateConfig2() throws Exception {
- controller.updateConfig(ospfProcesses);
- controller.updateConfig(ospfProcesses);
- assertThat(controller, is(notNullValue()));
- }
/**
* Tests updateConfig() method.
@@ -257,7 +180,7 @@
ospfInterface.setIpAddress(Ip4Address.valueOf("10.10.10.5"));
ospfInterfaces.add(ospfInterface);
ospfArea.setAreaId(Ip4Address.valueOf("2.2.2.2"));
- ospfArea.setInterfacesLst(ospfInterfaces);
+ ospfArea.setOspfInterfaceList(ospfInterfaces);
ospfProcess.setProcessId("10.10.10.10");
ospfAreas = new ArrayList();
ospfAreas.add(ospfArea);
@@ -269,67 +192,6 @@
}
/**
- * Tests deleteConfig() method.
- */
- @Test(expected = Exception.class)
- public void testDeleteConfig() throws Exception {
- controller.updateConfig(ospfProcesses);
- controller.deleteConfig(ospfProcesses, "INTERFACE");
- assertThat(controller, is(notNullValue()));
- }
-
- /**
- * Tests deleteConfig() method.
- */
- @Test(expected = Exception.class)
- public void testDeleteConfig1() throws Exception {
- controller.updateConfig(ospfProcesses);
- controller.deleteConfig(ospfProcesses, "AREA");
- assertThat(controller, is(notNullValue()));
- }
-
- /**
- * Tests deleteConfig() method.
- */
-
- @Test
- public void testDeleteConfig2() throws Exception {
- controller.updateConfig(ospfProcesses);
- controller.deleteConfig(ospfProcesses, "PROCESS");
- assertThat(controller, is(notNullValue()));
- }
-
- /**
- * Tests deleteConfig() method.
- */
- @Test
- public void testDeleteConfig3() throws Exception {
- ospfProcesses = new ArrayList();
- controller.deleteConfig(ospfProcesses, "PROCESS");
- assertThat(controller, is(notNullValue()));
- }
-
- /**
- * Tests deleteConfig() method.
- */
- @Test
- public void testDeleteConfig4() throws Exception {
- controller.updateConfig(ospfProcesses);
- controller.deleteConfig(ospfProcesses, "PROCESS");
- controller.updateConfig(ospfProcesses);
- assertThat(controller, is(notNullValue()));
- }
-
- /**
- * Tests deleteProcessWhenExists() method.
- */
- @Test
- public void testDeleteProcessWhenExists() throws Exception {
- controller.updateConfig(ospfProcesses);
- controller.deleteProcessWhenExists(ospfProcesses, "PROCESS");
- }
-
- /**
* Tests addLinkDetails() method.
*/
@Test
@@ -350,7 +212,7 @@
controller.start(ospfAgent, driverService);
ospfRouter = new OspfRouterImpl();
controller.addLinkDetails(ospfRouter, new OspfLinkTedImpl());
- controller.removeLinkDetails(ospfRouter);
+ controller.removeLinkDetails(ospfRouter, new OspfLinkTedImpl());
assertThat(controller, is(notNullValue()));
}
}
\ No newline at end of file
diff --git a/protocols/ospf/ctl/src/test/java/org/onosproject/ospf/controller/impl/OspfConfigUtilTest.java b/protocols/ospf/ctl/src/test/java/org/onosproject/ospf/controller/impl/OspfConfigUtilTest.java
new file mode 100644
index 0000000..d578e24
--- /dev/null
+++ b/protocols/ospf/ctl/src/test/java/org/onosproject/ospf/controller/impl/OspfConfigUtilTest.java
@@ -0,0 +1,82 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.ospf.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;
+import org.onosproject.ospf.controller.OspfProcess;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.notNullValue;
+import static org.hamcrest.MatcherAssert.assertThat;
+
+/**
+ * Unit test class for OspfJsonParsingUtilTest.
+ */
+public class OspfConfigUtilTest {
+ private ObjectMapper mapper;
+ private JsonNode jsonNode;
+ private List<OspfProcess> ospfProcessList = new ArrayList<>();
+ private String jsonString = "{\n" +
+ "\t\"processes\": {\n" +
+ "\t\t\"areas\": [{\n" +
+ "\t\t\t\"interface\": [{\n" +
+ "\t\t\t\t\"interfaceIndex\": \"2\",\n" +
+ "\n" +
+ "\t\t\t\t\"helloIntervalTime\": \"10\",\n" +
+ "\n" +
+ "\t\t\t\t\"routerDeadIntervalTime\": \"40\",\n" +
+ "\n" +
+ "\t\t\t\t\"interfaceType\": \"2\",\n" +
+ "\n" +
+ "\t\t\t\t\"reTransmitInterval\": \"5\"\n" +
+ "\t\t\t}],\n" +
+ "\t\t\t\"areaId\": \"5.5.5.5\",\n" +
+ "\n" +
+ "\t\t\t\"routerId\": \"7.7.7.7\",\n" +
+ "\n" +
+ "\t\t\t\"isOpaqueEnable\": \"false\",\n" +
+ "\n" +
+ "\t\t\t\"externalRoutingCapability\": \"true\"\n" +
+ "\t\t}]\n" +
+ "\t}\n" +
+ "}";
+
+ @Before
+ public void setUp() throws Exception {
+ mapper = new ObjectMapper();
+ jsonNode = mapper.readTree(jsonString);
+ mapper = new ObjectMapper();
+ }
+
+ @After
+ public void tearDown() throws Exception {
+
+ }
+
+ @Test
+ public void testProcesses() throws Exception {
+ jsonNode.path("areas");
+ ospfProcessList = OspfConfigUtil.processes(jsonNode);
+ assertThat(ospfProcessList, is(notNullValue()));
+ }
+}
diff --git a/protocols/ospf/ctl/src/test/java/org/onosproject/ospf/controller/impl/OspfControllerImplTest.java b/protocols/ospf/ctl/src/test/java/org/onosproject/ospf/controller/impl/OspfControllerImplTest.java
index 7c9816b..7c7f265 100644
--- a/protocols/ospf/ctl/src/test/java/org/onosproject/ospf/controller/impl/OspfControllerImplTest.java
+++ b/protocols/ospf/ctl/src/test/java/org/onosproject/ospf/controller/impl/OspfControllerImplTest.java
@@ -46,10 +46,8 @@
private OspfControllerImpl ospfController;
private OspfRouterListener ospfRouterListener;
private OspfLinkListener ospfLinkListener;
- private Controller controller;
private List<OspfProcess> ospfProcesses;
private OspfProcess process1;
- private OspfProcess process2;
private List<OspfArea> areas;
private OspfAreaImpl ospfArea;
private List<OspfInterface> ospfInterfaces;
@@ -61,7 +59,6 @@
@Before
public void setUp() throws Exception {
ospfController = new OspfControllerImpl();
- controller = new Controller();
}
@After
@@ -69,7 +66,6 @@
ospfController = null;
ospfRouterListener = null;
ospfLinkListener = null;
- controller = null;
ospfProcesses = null;
areas = null;
ospfArea = null;
@@ -140,38 +136,6 @@
}
/**
- * Tests updateConfig() method.
- */
- @Test
- public void testUpdateConfig() throws Exception {
- ospfProcess = new OspfProcessImpl();
- ospfArea = new OspfAreaImpl();
- ospfInterface = new OspfInterfaceImpl();
- ospfInterfaces = new ArrayList();
- ospfInterface.setIpAddress(Ip4Address.valueOf("11.11.11.11"));
- ospfInterfaces.add(ospfInterface);
- ospfArea.setAreaId(Ip4Address.valueOf("2.2.2.2"));
- ospfArea.setInterfacesLst(ospfInterfaces);
- ospfProcess.setProcessId("10.10.10.10");
- areas = new ArrayList();
- areas.add(ospfArea);
- ospfProcess.setAreas(areas);
- ospfProcesses = new ArrayList();
- ospfProcesses.add(ospfProcess);
- process1 = new OspfProcessImpl();
- process1.setProcessId("11.11.11.11");
- ospfArea1 = new OspfAreaImpl();
- ospfArea1.setAreaId(Ip4Address.valueOf("2.2.2.2"));
- ospfArea1.setInterfacesLst(ospfInterfaces);
- areas.add(ospfArea1);
- process1.setAreas(areas);
- ospfProcesses.add(process1);
- ospfController.updateConfig(ospfProcesses);
- assertThat(ospfController, is(notNullValue()));
-
- }
-
- /**
* Tests deleteConfig() method.
*/
@Test
@@ -183,7 +147,7 @@
ospfInterface.setIpAddress(Ip4Address.valueOf("10.10.10.5"));
ospfInterfaces.add(ospfInterface);
ospfArea.setAreaId(Ip4Address.valueOf("2.2.2.2"));
- ospfArea.setInterfacesLst(ospfInterfaces);
+ ospfArea.setOspfInterfaceList(ospfInterfaces);
ospfProcess.setProcessId("10.10.10.10");
areas = new ArrayList();
areas.add(ospfArea);
@@ -194,7 +158,7 @@
process1.setProcessId("11.11.11.11");
ospfArea1 = new OspfAreaImpl();
ospfArea1.setAreaId(Ip4Address.valueOf("2.2.2.2"));
- ospfArea1.setInterfacesLst(ospfInterfaces);
+ ospfArea1.setOspfInterfaceList(ospfInterfaces);
areas.add(ospfArea1);
process1.setAreas(areas);
ospfProcesses.add(process1);
@@ -221,7 +185,7 @@
ospfRouter = new OspfRouterImpl();
ospfController.agent.addLink(ospfRouter, new OspfLinkTedImpl());
- ospfController.agent.deleteLink(ospfRouter);
+ ospfController.agent.deleteLink(ospfRouter, new OspfLinkTedImpl());
assertThat(ospfController, is(notNullValue()));
}
diff --git a/protocols/ospf/ctl/src/test/java/org/onosproject/ospf/controller/impl/OspfDeviceTedImplTest.java b/protocols/ospf/ctl/src/test/java/org/onosproject/ospf/controller/impl/OspfDeviceTedImplTest.java
index e65ca9d..b11f537 100644
--- a/protocols/ospf/ctl/src/test/java/org/onosproject/ospf/controller/impl/OspfDeviceTedImplTest.java
+++ b/protocols/ospf/ctl/src/test/java/org/onosproject/ospf/controller/impl/OspfDeviceTedImplTest.java
@@ -21,6 +21,7 @@
import org.onlab.packet.Ip4Address;
import org.onlab.packet.Ip6Address;
+import java.net.InetAddress;
import java.util.ArrayList;
import java.util.List;
@@ -31,8 +32,6 @@
* Unit test class for OspfDeviceTedImpl.
*/
public class OspfDeviceTedImplTest {
- private static final Ip6Address LOCAL_ADDRESS = Ip6Address.valueOf("::1");
-
private OspfDeviceTedImpl ospfDeviceTed;
@Before
@@ -128,10 +127,10 @@
/**
* Tests ipv6RouterIds() getter method.
*/
- @Test
+ @Test(expected = Exception.class)
public void testIpv6RouterIds() throws Exception {
List list = new ArrayList();
- list.add(LOCAL_ADDRESS);
+ list.add(Ip6Address.valueOf(InetAddress.getLocalHost()));
ospfDeviceTed.setIpv6RouterIds(list);
assertThat(ospfDeviceTed.ipv6RouterIds().size(), is(1));
}
@@ -139,11 +138,11 @@
/**
* Tests ipv6RouterIds() setter method.
*/
- @Test
+ @Test(expected = Exception.class)
public void testSetIpv6RouterIds() throws Exception {
List list = new ArrayList();
- list.add(LOCAL_ADDRESS);
+ list.add(Ip6Address.valueOf(InetAddress.getLocalHost()));
ospfDeviceTed.setIpv6RouterIds(list);
assertThat(ospfDeviceTed.ipv6RouterIds().size(), is(1));
}
-}
+}
\ No newline at end of file
diff --git a/protocols/ospf/ctl/src/test/java/org/onosproject/ospf/controller/impl/OspfInterfaceChannelHandlerTest.java b/protocols/ospf/ctl/src/test/java/org/onosproject/ospf/controller/impl/OspfInterfaceChannelHandlerTest.java
index 51a949e..2ad4bd2 100644
--- a/protocols/ospf/ctl/src/test/java/org/onosproject/ospf/controller/impl/OspfInterfaceChannelHandlerTest.java
+++ b/protocols/ospf/ctl/src/test/java/org/onosproject/ospf/controller/impl/OspfInterfaceChannelHandlerTest.java
@@ -18,9 +18,7 @@
import org.easymock.EasyMock;
import org.jboss.netty.buffer.ChannelBuffer;
import org.jboss.netty.buffer.ChannelBuffers;
-import org.jboss.netty.buffer.HeapChannelBufferFactory;
import org.jboss.netty.channel.Channel;
-import org.jboss.netty.channel.ChannelConfig;
import org.jboss.netty.channel.ChannelFuture;
import org.jboss.netty.channel.ChannelHandlerContext;
import org.jboss.netty.channel.ChannelStateEvent;
@@ -30,34 +28,27 @@
import org.junit.Before;
import org.junit.Test;
import org.onlab.packet.Ip4Address;
+import org.onosproject.ospf.controller.OspfArea;
import org.onosproject.ospf.controller.OspfAreaAddressRange;
import org.onosproject.ospf.controller.OspfInterface;
-import org.onosproject.ospf.controller.OspfNbr;
+import org.onosproject.ospf.controller.OspfLsaType;
import org.onosproject.ospf.controller.OspfNeighborState;
+import org.onosproject.ospf.controller.OspfProcess;
import org.onosproject.ospf.controller.TopologyForDeviceAndLink;
import org.onosproject.ospf.controller.area.OspfAreaAddressRangeImpl;
import org.onosproject.ospf.controller.area.OspfAreaImpl;
import org.onosproject.ospf.controller.area.OspfInterfaceImpl;
-import org.onosproject.ospf.controller.util.OspfEligibleRouter;
+import org.onosproject.ospf.controller.area.OspfProcessImpl;
import org.onosproject.ospf.exceptions.OspfParseException;
import org.onosproject.ospf.protocol.lsa.LsaHeader;
-import org.onosproject.ospf.protocol.lsa.TlvHeader;
-import org.onosproject.ospf.protocol.lsa.tlvtypes.RouterTlv;
import org.onosproject.ospf.protocol.lsa.types.RouterLsa;
-import org.onosproject.ospf.protocol.ospfpacket.OspfMessage;
-import org.onosproject.ospf.protocol.ospfpacket.subtype.LsRequestPacket;
import org.onosproject.ospf.protocol.ospfpacket.types.DdPacket;
import org.onosproject.ospf.protocol.ospfpacket.types.HelloPacket;
-import org.onosproject.ospf.protocol.ospfpacket.types.LsAcknowledge;
-import org.onosproject.ospf.protocol.ospfpacket.types.LsRequest;
-import org.onosproject.ospf.protocol.ospfpacket.types.LsUpdate;
import org.onosproject.ospf.protocol.util.ChecksumCalculator;
-import org.onosproject.ospf.protocol.util.OspfInterfaceState;
import java.net.SocketAddress;
import java.net.UnknownHostException;
import java.util.ArrayList;
-import java.util.HashMap;
import java.util.List;
import static org.hamcrest.CoreMatchers.is;
@@ -69,179 +60,59 @@
* Unit test class for OspfInterfaceChannelHandler.
*/
public class OspfInterfaceChannelHandlerTest {
-
- private List<OspfAreaAddressRange> addressRanges;
- private List<OspfInterface> ospfInterfaces;
+ private final String string1 = "2.2.2.2";
+ private List<OspfAreaAddressRange> addressRanges = new ArrayList();
+ private List<OspfInterface> ospfInterfaces = new ArrayList<>();
private Controller controller;
private OspfAreaImpl ospfArea;
private OspfInterfaceImpl ospfInterface;
private OspfInterfaceChannelHandler ospfInterfaceChannelHandler;
- private HashMap<String, OspfNbr> ospfNbrHashMap;
private OspfNbrImpl ospfNbr;
- private Channel channel;
private ChannelHandlerContext channelHandlerContext;
private ChannelStateEvent channelStateEvent;
- private HelloPacket helloPacket;
- private DdPacket ddPacket;
- private ChecksumCalculator checksumCalculator;
+ private TopologyForDeviceAndLink topologyForDeviceAndLink;
+ private List<OspfProcess> ospfProcesses = new ArrayList<>();
+ private OspfProcess ospfProcess;
+ private Ip4Address ip4Address1 = Ip4Address.valueOf("10.10.10.10");
+ private Ip4Address ip4Address2 = Ip4Address.valueOf("2.2.2.2");
+ private Ip4Address ip4Address3 = Ip4Address.valueOf("13.13.13.13");
+ private Ip4Address ip4Address4 = Ip4Address.valueOf("111.111.111.111");
+ private Ip4Address ip4Address5 = Ip4Address.valueOf("10.226.165.164");
+ private Ip4Address ip4Address6 = Ip4Address.valueOf("1.1.1.1");
+ private Ip4Address ip4Address7 = Ip4Address.valueOf("10.226.165.100");
+ private Ip4Address subnetAddress = Ip4Address.valueOf("255.255.255.255");
private byte[] byteArray;
private byte[] checkArray;
+ private HelloPacket helloPacket;
+ private ChecksumCalculator checksumCalculator;
private ChannelBuffer buf;
- private OspfEligibleRouter ospfEligibleRouter;
- private LsUpdate lsUpdate;
- private LsAcknowledge lsAck;
- private LsRequest lsRequest;
- private TopologyForDeviceAndLink topologyForDeviceAndLink;
+ private List<OspfArea> ospfAreas = new ArrayList<>();
@Before
public void setUp() throws Exception {
- addressRanges = new ArrayList();
- ospfInterfaces = new ArrayList<>();
+ ospfProcess = new OspfProcessImpl();
ospfArea = createOspfArea();
- ospfInterface = createOspfInterface();
- ospfNbrHashMap = new HashMap();
- topologyForDeviceAndLink = new TopologyForDeviceAndLinkImpl();
- ospfNbr = new OspfNbrImpl(ospfArea, ospfInterface, Ip4Address.valueOf("10.10.10.10"),
- Ip4Address.valueOf("2.2.2.2"), 2,
- new OspfInterfaceChannelHandler(new Controller(), ospfArea,
- ospfInterface),
- topologyForDeviceAndLink);
- ospfNbr.setNeighborId(Ip4Address.valueOf("10.10.10.10"));
- ospfNbr.setRouterPriority(0);
- ospfNbr.setNeighborDr(Ip4Address.valueOf("13.13.13.13"));
- ospfInterface.addNeighbouringRouter(ospfNbr);
+ ospfAreas.add(ospfArea);
+ ospfProcess.setAreas(ospfAreas);
+ ospfProcesses.add(ospfProcess);
controller = new Controller();
- ospfInterfaceChannelHandler = new OspfInterfaceChannelHandler();
- ospfInterfaceChannelHandler = new OspfInterfaceChannelHandler(controller, ospfArea,
- ospfInterface);
+ topologyForDeviceAndLink = new TopologyForDeviceAndLinkImpl();
+ ospfNbr = new OspfNbrImpl(ospfArea, ospfInterface, ip4Address1,
+ ip4Address2, 2, topologyForDeviceAndLink);
+ ospfNbr.setNeighborId(ip4Address1);
+ ospfNbr.setRouterPriority(0);
+ ospfNbr.setNeighborDr(ip4Address3);
+ ospfInterface.addNeighbouringRouter(ospfNbr);
+ ospfInterfaceChannelHandler = new OspfInterfaceChannelHandler(controller, ospfProcesses);
}
@After
public void tearDown() throws Exception {
ospfInterfaceChannelHandler = null;
- addressRanges = null;
- ospfInterfaces = null;
- controller = null;
- ospfArea = null;
ospfInterfaceChannelHandler = null;
ospfInterface = null;
- ospfNbrHashMap = null;
- channel = null;
channelHandlerContext = null;
channelStateEvent = null;
- helloPacket = null;
- ddPacket = null;
- checksumCalculator = null;
- byteArray = null;
- checkArray = null;
- ospfEligibleRouter = null;
- lsUpdate = null;
- lsAck = null;
- lsRequest = null;
- }
-
- /**
- * Tests interfaceUp() method.
- */
- @Test
- public void testInterfaceUp() throws Exception {
- ospfInterface.setInterfaceType(2);
- ospfInterface.setRouterPriority(0);
- ospfInterfaceChannelHandler.interfaceUp();
- assertThat(ospfInterfaceChannelHandler, is(notNullValue()));
- }
-
- /**
- * Tests interfaceUp() method.
- */
- @Test
- public void testInterfaceUp1() throws Exception {
-
- ospfInterface.setInterfaceType(2);
- ospfInterface.setRouterPriority(0);
- ospfInterfaceChannelHandler.interfaceUp();
- assertThat(ospfInterfaceChannelHandler, is(notNullValue()));
- }
-
- /**
- * Tests interfaceUp() method.
- */
- @Test
- public void testInterfaceUp2() throws Exception {
- ospfInterface.setInterfaceType(1);
- ospfInterface.setRouterPriority(1);
- ospfInterfaceChannelHandler.interfaceUp();
- assertThat(ospfInterfaceChannelHandler, is(notNullValue()));
- }
-
- /**
- * Tests interfaceUp() method.
- */
- @Test
- public void testInterfaceUp3() throws Exception {
- ospfInterface.setInterfaceType(2);
- ospfInterface.setRouterPriority(1);
- ospfInterfaceChannelHandler.interfaceUp();
- assertThat(ospfInterfaceChannelHandler, is(notNullValue()));
- }
-
- /**
- * Tests backupSeen() method.
- */
- @Test
- public void testBackupSeen() throws Exception {
- channel = EasyMock.createMock(Channel.class);
- ospfInterface.setState(OspfInterfaceState.WAITING);
- ospfInterfaceChannelHandler.backupSeen(channel);
- assertThat(ospfInterface.dr(), is(notNullValue()));
- }
-
- /**
- * Tests waitTimer() method.
- */
- @Test
- public void testWaitTimer() throws Exception {
- channel = EasyMock.createMock(Channel.class);
- ospfInterface.setState(OspfInterfaceState.WAITING);
- ospfInterface.setIpAddress(Ip4Address.valueOf("10.10.10.10"));
- ospfInterface.setIpNetworkMask(Ip4Address.valueOf("255.255.255.255"));
- ospfInterfaceChannelHandler.waitTimer(channel);
- assertThat(ospfInterface.dr(), is(notNullValue()));
- }
-
- /**
- * Tests neighborChange() method.
- */
- @Test
- public void testNeighborChange() throws Exception {
- ospfNbrHashMap = new HashMap();
- ospfNbr = new OspfNbrImpl(new OspfAreaImpl(), new OspfInterfaceImpl(),
- Ip4Address.valueOf("1.1.1.1"), Ip4Address.valueOf("2.2.2.2"), 2,
- new OspfInterfaceChannelHandler(new Controller(),
- new OspfAreaImpl(),
- new OspfInterfaceImpl()),
- topologyForDeviceAndLink);
- ospfNbr.setNeighborId(Ip4Address.valueOf("111.111.111.111"));
- ospfNbrHashMap.put("111.111.111.111", ospfNbr);
- ospfNbr.setState(OspfNeighborState.EXCHANGE);
- ospfInterface.setListOfNeighbors(ospfNbrHashMap);
- ospfInterface.setIpAddress(Ip4Address.valueOf("10.10.10.10"));
- ospfInterface.setIpNetworkMask(Ip4Address.valueOf("255.255.255.255"));
- ospfInterface.setIpAddress(Ip4Address.valueOf("10.10.10.10"));
- ospfInterface.setIpNetworkMask(Ip4Address.valueOf("255.255.255.255"));
- channel = EasyMock.createMock(Channel.class);
- ospfInterface.setState(OspfInterfaceState.DR);
- ospfInterfaceChannelHandler.waitTimer(channel);
- assertThat(ospfInterface.dr(), is(Ip4Address.valueOf("0.0.0.0")));
- }
-
- /**
- * Tests interfaceDown() method.
- */
- @Test(expected = Exception.class)
- public void testInterfaceDown() throws Exception {
- ospfInterfaceChannelHandler.interfaceDown();
- assertThat(ospfInterface.state(), is(OspfInterfaceState.DOWN));
}
/**
@@ -252,7 +123,6 @@
channelHandlerContext = EasyMock.createMock(ChannelHandlerContext.class);
channelStateEvent = EasyMock.createMock(ChannelStateEvent.class);
ospfInterfaceChannelHandler.channelConnected(channelHandlerContext, channelStateEvent);
- assertThat(ospfInterface.state(), is(notNullValue()));
}
/**
@@ -269,14 +139,64 @@
/**
* Tests channelDisconnected() method.
*/
- @Test(expected = Exception.class)
+ @Test
public void testChannelDisconnected() throws Exception {
channelHandlerContext = EasyMock.createMock(ChannelHandlerContext.class);
channelStateEvent = EasyMock.createMock(ChannelStateEvent.class);
-
ospfInterfaceChannelHandler.channelDisconnected(channelHandlerContext, channelStateEvent);
+ assertThat(ospfInterfaceChannelHandler, is(notNullValue()));
+ }
- assertThat(ospfInterface.state(), is(notNullValue()));
+ /**
+ * Tests initializeInterfaceMap() method.
+ */
+ @Test
+ public void testInitializeInterfaceMap() throws Exception {
+ ospfInterfaceChannelHandler.initializeInterfaceMap();
+ assertThat(ospfInterfaceChannelHandler, is(notNullValue()));
+ }
+
+ /**
+ * Tests updateInterfaceMap() method.
+ */
+ @Test
+ public void testUpdateInterfaceMap() throws Exception {
+ ospfInterfaceChannelHandler.updateInterfaceMap(ospfProcesses);
+ assertThat(ospfInterfaceChannelHandler, is(notNullValue()));
+ }
+
+ /**
+ * Utility for test method.
+ */
+ private OspfAreaImpl createOspfArea() throws Exception {
+ OspfAreaAddressRangeImpl ospfAreaAddressRange;
+ ospfAreaAddressRange = createOspfAreaAddressRange();
+ addressRanges.add(ospfAreaAddressRange);
+ OspfAreaImpl ospfArea = new OspfAreaImpl();
+ ospfArea.setAreaId(ip4Address5);
+ ospfArea.setExternalRoutingCapability(true);
+ OspfInterfaceImpl ospfInterface = createOspfInterface();
+ ospfInterfaces.add(ospfInterface);
+ ospfArea.setOspfInterfaceList(ospfInterfaces);
+ RouterLsa routerLsa = new RouterLsa();
+ routerLsa.setLsType(1);
+ routerLsa.setLinkStateId(string1);
+ routerLsa.setAdvertisingRouter(ip4Address2);
+ ospfArea.addLsa(routerLsa, false, ospfInterface);
+ ospfArea.setRouterId(ip4Address4);
+
+ return ospfArea;
+ }
+
+ /**
+ * Utility for test method.
+ */
+ private OspfAreaAddressRangeImpl createOspfAreaAddressRange() {
+ OspfAreaAddressRangeImpl ospfAreaAddressRange = new OspfAreaAddressRangeImpl();
+ ospfAreaAddressRange.setIpAddress(ip4Address5);
+ ospfAreaAddressRange.setAdvertise(true);
+ ospfAreaAddressRange.setMask("mask");
+ return ospfAreaAddressRange;
}
/**
@@ -333,701 +253,63 @@
}
/**
- * Tests processOspfMessage() method.
+ * Utility for test method.
*/
- @Test
- public void testProcessOspfMessage() throws Exception {
- ospfInterface.setIpAddress(Ip4Address.valueOf("11.11.11.11"));
- ospfInterface.setIpNetworkMask(Ip4Address.valueOf("225.225.225.225"));
+ private OspfInterfaceImpl createOspfInterface1() throws UnknownHostException {
+ ospfInterface = new OspfInterfaceImpl();
+ OspfAreaImpl ospfArea = new OspfAreaImpl();
+ OspfInterfaceChannelHandler ospfInterfaceChannelHandler = EasyMock.createMock(
+ OspfInterfaceChannelHandler.class);
+ ospfNbr = new OspfNbrImpl(ospfArea, ospfInterface, ip4Address5,
+ ip4Address6, 2, topologyForDeviceAndLink);
+ ospfNbr.setState(OspfNeighborState.FULL);
+ ospfNbr.setNeighborId(ip4Address7);
+ ospfInterface = new OspfInterfaceImpl();
+ ospfInterface.setIpAddress(ip4Address5);
+ ospfInterface.setIpNetworkMask(subnetAddress);
+ ospfInterface.setBdr(ip4Address4);
+ ospfInterface.setDr(ip4Address4);
+ ospfInterface.setHelloIntervalTime(20);
ospfInterface.setInterfaceType(2);
- ospfArea.setAreaId(Ip4Address.valueOf("12.12.12.12"));
- channelHandlerContext = EasyMock.createMock(ChannelHandlerContext.class);
- OspfMessage message;
- helloPacket = new HelloPacket();
- helloPacket.setSourceIp(Ip4Address.valueOf("1.1.1.1"));
- helloPacket.setRouterId(Ip4Address.valueOf("10.10.10.10"));
- helloPacket.setOspfVer(2);
- helloPacket.setAreaId(Ip4Address.valueOf("12.12.12.12"));
- helloPacket.setOptions(2);
- helloPacket.setNetworkMask(Ip4Address.valueOf("3.3.3.3"));
- helloPacket.setOspftype(1);
- helloPacket.setAuthType(0);
- helloPacket.setHelloInterval(60);
- helloPacket.setRouterDeadInterval(60);
- helloPacket.setAuthentication(0);
- checksumCalculator = new ChecksumCalculator();
- byteArray = helloPacket.asBytes();
- helloPacket.setOspfPacLength(byteArray.length);
- checkArray = checksumCalculator.calculateOspfCheckSum(byteArray, 12, 13);
- checkArray[0] = -53;
- checkArray[1] = 37;
- buf = ChannelBuffers.copiedBuffer(checkArray);
- helloPacket.setChecksum(buf.readUnsignedShort());
- message = helloPacket;
- ospfInterfaceChannelHandler.processOspfMessage(message, channelHandlerContext);
- ddPacket = new DdPacket();
- ddPacket.setSourceIp(Ip4Address.valueOf("1.1.1.1"));
- ddPacket.setRouterId(Ip4Address.valueOf("10.10.10.10"));
- ddPacket.setOspfVer(2);
- ddPacket.setAreaId(Ip4Address.valueOf("12.12.12.12"));
- ddPacket.setOptions(2);
- ddPacket.setOspftype(2);
- ddPacket.setAuthType(0);
- ddPacket.setAuthentication(0);
- checksumCalculator = new ChecksumCalculator();
- byteArray = ddPacket.asBytes();
- ddPacket.setOspfPacLength(byteArray.length);
- checkArray = checksumCalculator.calculateOspfCheckSum(byteArray, 12, 13);
- checkArray[0] = -49;
- checkArray[1] = -79;
- buf = ChannelBuffers.copiedBuffer(checkArray);
- ddPacket.setChecksum(buf.readUnsignedShort());
- message = ddPacket;
- ospfInterfaceChannelHandler.processOspfMessage(message, channelHandlerContext);
- lsRequest = new LsRequest();
- lsRequest.setSourceIp(Ip4Address.valueOf("1.1.1.1"));
- lsRequest.setRouterId(Ip4Address.valueOf("10.10.10.10"));
- lsRequest.setOspfVer(2);
- lsRequest.setAreaId(Ip4Address.valueOf("12.12.12.12"));
- lsRequest.setOspftype(3);
- lsRequest.setAuthType(0);
- lsRequest.setAuthentication(0);
- checksumCalculator = new ChecksumCalculator();
- byteArray = lsRequest.asBytes();
- lsRequest.setOspfPacLength(byteArray.length);
- checkArray = checksumCalculator.calculateOspfCheckSum(byteArray, 12, 13);
- checkArray[0] = -33;
- checkArray[1] = -58;
- buf = ChannelBuffers.copiedBuffer(checkArray);
- lsRequest.setChecksum(buf.readUnsignedShort());
- message = lsRequest;
- ospfInterfaceChannelHandler.processOspfMessage(message, channelHandlerContext);
- lsUpdate = new LsUpdate();
- lsUpdate.setSourceIp(Ip4Address.valueOf("1.1.1.1"));
- lsUpdate.setRouterId(Ip4Address.valueOf("10.10.10.10"));
- lsUpdate.setOspfVer(2);
- lsUpdate.setAreaId(Ip4Address.valueOf("12.12.12.12"));
- lsUpdate.setOspftype(4);
- lsUpdate.setAuthType(0);
- lsUpdate.setAuthentication(0);
- checksumCalculator = new ChecksumCalculator();
- byteArray = lsUpdate.asBytes();
- lsUpdate.setOspfPacLength(byteArray.length);
- checkArray = checksumCalculator.calculateOspfCheckSum(byteArray, 12, 13);
- checkArray[0] = -47;
- checkArray[1] = -77;
- buf = ChannelBuffers.copiedBuffer(checkArray);
- lsUpdate.setChecksum(buf.readUnsignedShort());
- message = lsUpdate;
- ospfInterfaceChannelHandler.processOspfMessage(message, channelHandlerContext);
- lsAck = new LsAcknowledge();
- lsAck.setSourceIp(Ip4Address.valueOf("1.1.1.1"));
- lsAck.setRouterId(Ip4Address.valueOf("10.10.10.10"));
- lsAck.setOspfVer(2);
- lsAck.setAreaId(Ip4Address.valueOf("12.12.12.12"));
- lsAck.setOspftype(5);
- lsAck.setAuthType(0);
- lsAck.setAuthentication(0);
- checksumCalculator = new ChecksumCalculator();
- byteArray = lsAck.asBytes();
- lsAck.setOspfPacLength(byteArray.length);
- checkArray = checksumCalculator.calculateOspfCheckSum(byteArray, 12, 13);
- checkArray[0] = -47;
- checkArray[1] = -74;
- buf = ChannelBuffers.copiedBuffer(checkArray);
- lsAck.setChecksum(buf.readUnsignedShort());
- message = lsAck;
- ospfInterfaceChannelHandler.processOspfMessage(message, channelHandlerContext);
- assertThat(ospfInterfaceChannelHandler, is(notNullValue()));
-
- }
-
- /**
- * Tests processHelloMessage() method.
- */
- @Test
- public void testProcessHelloMessage() throws Exception {
- ospfInterface.setIpAddress(Ip4Address.valueOf("11.11.11.11"));
- ospfInterface.setInterfaceType(1);
- ospfInterface.setIpNetworkMask(Ip4Address.valueOf("244.244.244.244"));
- ospfInterface.setHelloIntervalTime(10);
- ospfInterface.setRouterDeadIntervalTime(10);
- ospfArea.setAreaId(Ip4Address.valueOf("12.12.12.12"));
- channelHandlerContext = EasyMock.createMock(ChannelHandlerContext.class);
- OspfMessage message;
- helloPacket = new HelloPacket();
- helloPacket.setSourceIp(Ip4Address.valueOf("1.1.1.1"));
- helloPacket.setOspfVer(2);
- helloPacket.setAreaId(Ip4Address.valueOf("12.12.12.12"));
- helloPacket.setNetworkMask(Ip4Address.valueOf("244.244.244.244"));
- helloPacket.setHelloInterval(10);
- helloPacket.setRouterDeadInterval(10);
- helloPacket.setDr(Ip4Address.valueOf("10.10.10.10"));
- helloPacket.setBdr(Ip4Address.valueOf("11.11.11.11"));
- helloPacket.setRouterId(Ip4Address.valueOf("111.111.111.111"));
- message = helloPacket;
- ospfInterfaceChannelHandler.processHelloMessage(message, channelHandlerContext);
- assertThat(ospfInterfaceChannelHandler, is(notNullValue()));
- }
-
- /**
- * Tests processHelloMessage() method.
- */
- @Test
- public void testProcessHelloMessage1() throws Exception {
- ospfInterface.setInterfaceType(2);
+ ospfInterface.setReTransmitInterval(2000);
+ ospfInterface.setMtu(6500);
+ ospfInterface.setRouterDeadIntervalTime(1000);
ospfInterface.setRouterPriority(1);
- ospfInterfaceChannelHandler.interfaceUp();
- ospfInterface.setIpAddress(Ip4Address.valueOf("11.11.11.11"));
- ospfInterface.setState(OspfInterfaceState.WAITING);
- ospfInterface.setInterfaceType(2);
- ospfInterface.setIpNetworkMask(Ip4Address.valueOf("244.244.244.244"));
- ospfInterface.setHelloIntervalTime(10);
- ospfInterface.setRouterDeadIntervalTime(10);
- ospfArea.setAreaId(Ip4Address.valueOf("12.12.12.12"));
- channelHandlerContext = EasyMock.createMock(ChannelHandlerContext.class);
- OspfMessage message;
- helloPacket = new HelloPacket();
- helloPacket.setSourceIp(Ip4Address.valueOf("1.1.1.1"));
- helloPacket.setOspfVer(2);
- helloPacket.setAreaId(Ip4Address.valueOf("12.12.12.12"));
- helloPacket.setNetworkMask(Ip4Address.valueOf("244.244.244.244"));
- helloPacket.setHelloInterval(10);
- helloPacket.setRouterDeadInterval(10);
- helloPacket.setDr(Ip4Address.valueOf("10.10.10.10"));
- helloPacket.setBdr(Ip4Address.valueOf("11.11.11.11"));
- helloPacket.setRouterId(Ip4Address.valueOf("2.2.2.2"));
- message = helloPacket;
- ospfInterfaceChannelHandler.processHelloMessage(message, channelHandlerContext);
- assertThat(ospfInterfaceChannelHandler, is(notNullValue()));
- ospfNbrHashMap = new HashMap();
- ospfNbr = new OspfNbrImpl(ospfArea, ospfInterface, Ip4Address.valueOf("10.10.10.10"),
- Ip4Address.valueOf("2.2.2.2"), 2,
- new OspfInterfaceChannelHandler(new Controller(), ospfArea,
- ospfInterface),
- topologyForDeviceAndLink);
- ospfNbr.setNeighborId(Ip4Address.valueOf("2.2.2.2"));
- ospfNbr.setRouterPriority(0);
- ospfNbr.setNeighborDr(Ip4Address.valueOf("13.13.13.13"));
+ ospfInterface.setInterfaceType(1);
ospfInterface.addNeighbouringRouter(ospfNbr);
- ospfInterfaceChannelHandler.processHelloMessage(message, channelHandlerContext);
- assertThat(ospfInterfaceChannelHandler, is(notNullValue()));
+ return ospfInterface;
}
/**
- * Tests processDdMessage() method.
+ * Utility for test method.
*/
- @Test
- public void testProcessDdMessage() throws Exception {
- ospfInterface.setIpAddress(Ip4Address.valueOf("11.11.11.11"));
- ospfInterface.setInterfaceType(2);
- ospfInterface.setIpNetworkMask(Ip4Address.valueOf("255.255.255.255"));
- ospfInterface.setHelloIntervalTime(10);
- ospfInterface.setRouterDeadIntervalTime(10);
- ospfArea.setAreaId(Ip4Address.valueOf("12.12.12.12"));
- channelHandlerContext = EasyMock.createMock(ChannelHandlerContext.class);
- OspfMessage message;
- ddPacket = new DdPacket();
- ddPacket.setSourceIp(Ip4Address.valueOf("1.1.1.1"));
- ddPacket.setOspfVer(2);
- ddPacket.setAreaId(Ip4Address.valueOf("12.12.12.12"));
- ddPacket.setRouterId(Ip4Address.valueOf("2.2.2.2"));
- ddPacket.setIsOpaqueCapable(true);
- ddPacket.setIsMore(1);
- ddPacket.setIsInitialize(1);
- ddPacket.setIsMaster(1);
- ddPacket.setSequenceNo(123);
- message = ddPacket;
- ospfNbrHashMap = new HashMap();
- ospfNbr = new OspfNbrImpl(ospfArea, ospfInterface, Ip4Address.valueOf("10.10.10.10"),
- Ip4Address.valueOf("2.2.2.2"), 2,
- new OspfInterfaceChannelHandler(new Controller(), ospfArea,
- ospfInterface),
- topologyForDeviceAndLink);
- ospfNbr.setLastDdPacket(createDdPacket());
- ospfNbr.setNeighborId(Ip4Address.valueOf("2.2.2.2"));
- ospfNbr.setState(OspfNeighborState.EXSTART);
- ospfNbr.setRouterPriority(0);
- ospfNbr.setNeighborDr(Ip4Address.valueOf("13.13.13.13"));
- ospfNbr.setDdSeqNum(123);
- ospfInterface.addNeighbouringRouter(ospfNbr);
- ospfInterfaceChannelHandler.processDdMessage(message, channelHandlerContext);
- assertThat(ospfInterfaceChannelHandler, is(notNullValue()));
- }
-
- /**
- * Tests processDdMessage() method.
- */
- @Test(expected = Exception.class)
- public void testProcessDdMessage3() throws Exception {
- ospfInterface.setIpAddress(Ip4Address.valueOf("11.11.11.11"));
- ospfInterface.setInterfaceType(2);
- ospfInterface.setIpNetworkMask(Ip4Address.valueOf("255.255.255.255"));
- ospfInterface.setHelloIntervalTime(10);
- ospfInterface.setRouterDeadIntervalTime(10);
- ospfArea.setAreaId(Ip4Address.valueOf("12.12.12.12"));
- channelHandlerContext = EasyMock.createMock(ChannelHandlerContext.class);
- OspfMessage message;
- ddPacket = new DdPacket();
- ddPacket.setSourceIp(Ip4Address.valueOf("1.1.1.1"));
- ddPacket.setOspfVer(2);
- ddPacket.setAreaId(Ip4Address.valueOf("12.12.12.12"));
- ddPacket.setRouterId(Ip4Address.valueOf("2.2.2.2"));
- ddPacket.setIsOpaqueCapable(true);
- ddPacket.setIsMore(1);
- ddPacket.setIsInitialize(1);
- ddPacket.setIsMaster(1);
- ddPacket.setSequenceNo(123);
- message = ddPacket;
- ospfNbrHashMap = new HashMap();
- ospfNbr = new OspfNbrImpl(ospfArea, ospfInterface, Ip4Address.valueOf("10.10.10.10"),
- Ip4Address.valueOf("2.2.2.2"), 2,
- new OspfInterfaceChannelHandler(new Controller(), ospfArea,
- ospfInterface),
- topologyForDeviceAndLink);
- ospfNbr.setLastDdPacket(createDdPacket());
- ospfNbr.setNeighborId(Ip4Address.valueOf("2.2.2.2"));
- ospfNbr.setState(OspfNeighborState.EXSTART);
- ospfNbr.setRouterPriority(0);
- ospfNbr.setNeighborDr(Ip4Address.valueOf("13.13.13.13"));
- ospfNbr.setDdSeqNum(123);
- ospfInterface.addNeighbouringRouter(ospfNbr);
- ddPacket.setIsMore(1);
- ddPacket.setIsInitialize(0);
- ddPacket.setIsMaster(0);
- ddPacket.setSequenceNo(123);
- ospfInterface.addNeighbouringRouter(ospfNbr);
- ospfInterfaceChannelHandler.processDdMessage(message, channelHandlerContext);
- assertThat(ospfInterfaceChannelHandler, is(notNullValue()));
- }
-
- /**
- * Tests processDdMessage() method.
- */
- @Test(expected = Exception.class)
- public void testProcessDdMessage1() throws Exception {
- ospfInterface.setIpAddress(Ip4Address.valueOf("11.11.11.11"));
- ospfInterface.setInterfaceType(2);
- ospfInterface.setIpNetworkMask(Ip4Address.valueOf("255.255.255.255"));
- ospfInterface.setHelloIntervalTime(10);
- ospfInterface.setRouterDeadIntervalTime(10);
- ospfArea.setAreaId(Ip4Address.valueOf("12.12.12.12"));
- channelHandlerContext = EasyMock.createMock(ChannelHandlerContext.class);
- OspfMessage message;
- ddPacket = new DdPacket();
- ddPacket.setSourceIp(Ip4Address.valueOf("1.1.1.1"));
- ddPacket.setOspfVer(2);
- ddPacket.setAreaId(Ip4Address.valueOf("12.12.12.12"));
- ddPacket.setRouterId(Ip4Address.valueOf("2.2.2.2"));
- ddPacket.setIsOpaqueCapable(true);
- ddPacket.setIsMore(1);
- ddPacket.setIsInitialize(1);
- ddPacket.setIsMaster(1);
- ddPacket.setSequenceNo(123);
- message = ddPacket;
- ospfNbrHashMap = new HashMap();
- ospfNbr = new OspfNbrImpl(ospfArea, ospfInterface, Ip4Address.valueOf("10.10.10.10"),
- Ip4Address.valueOf("2.2.2.2"), 2,
- new OspfInterfaceChannelHandler(new Controller(), ospfArea,
- ospfInterface),
- topologyForDeviceAndLink);
- ospfNbr.setLastDdPacket(createDdPacket());
- ospfNbr.setNeighborId(Ip4Address.valueOf("2.2.2.2"));
- ospfNbr.setState(OspfNeighborState.EXCHANGE);
- ospfNbr.setRouterPriority(0);
- ospfNbr.setNeighborDr(Ip4Address.valueOf("13.13.13.13"));
- ospfNbr.setDdSeqNum(123);
- ospfInterface.addNeighbouringRouter(ospfNbr);
- ddPacket.setIsMore(1);
- ddPacket.setIsInitialize(0);
- ddPacket.setIsMaster(0);
- ddPacket.setSequenceNo(123);
- ospfInterface.addNeighbouringRouter(ospfNbr);
- ospfInterfaceChannelHandler.processDdMessage(message, channelHandlerContext);
- assertThat(ospfInterfaceChannelHandler, is(notNullValue()));
-
- }
-
- /**
- * Tests processDdMessage() method.
- */
- @Test(expected = Exception.class)
- public void testProcessDdMessage2() throws Exception {
- ospfInterface.setIpAddress(Ip4Address.valueOf("11.11.11.11"));
- ospfInterface.setInterfaceType(2);
- ospfInterface.setIpNetworkMask(Ip4Address.valueOf("255.255.255.255"));
- ospfInterface.setHelloIntervalTime(10);
- ospfInterface.setRouterDeadIntervalTime(10);
- ospfArea.setAreaId(Ip4Address.valueOf("12.12.12.12"));
- channelHandlerContext = EasyMock.createMock(ChannelHandlerContext.class);
- OspfMessage message;
- ddPacket = new DdPacket();
- ddPacket.setSourceIp(Ip4Address.valueOf("1.1.1.1"));
- ddPacket.setOspfVer(2);
- ddPacket.setAreaId(Ip4Address.valueOf("12.12.12.12"));
- ddPacket.setRouterId(Ip4Address.valueOf("2.2.2.2"));
- ddPacket.setIsOpaqueCapable(true);
- ddPacket.setIsMore(1);
- ddPacket.setIsInitialize(1);
- ddPacket.setIsMaster(1);
- ddPacket.setSequenceNo(123);
- message = ddPacket;
- ospfNbrHashMap = new HashMap();
- ospfNbr = new OspfNbrImpl(ospfArea, ospfInterface, Ip4Address.valueOf("10.10.10.10"),
- Ip4Address.valueOf("2.2.2.2"), 2,
- new OspfInterfaceChannelHandler(new Controller(), ospfArea,
- ospfInterface),
- topologyForDeviceAndLink);
- ospfNbr.setLastDdPacket(createDdPacket());
- ospfNbr.setNeighborId(Ip4Address.valueOf("2.2.2.2"));
- ospfNbr.setState(OspfNeighborState.LOADING);
- ospfNbr.setRouterPriority(0);
- ospfNbr.setNeighborDr(Ip4Address.valueOf("13.13.13.13"));
- ospfNbr.setDdSeqNum(123);
- ospfInterface.addNeighbouringRouter(ospfNbr);
- ospfInterfaceChannelHandler.processDdMessage(message, channelHandlerContext);
- ddPacket.setIsMore(1);
- ddPacket.setIsInitialize(0);
- ddPacket.setIsMaster(0);
- ddPacket.setSequenceNo(123);
- ospfInterface.addNeighbouringRouter(ospfNbr);
- ospfNbr.setState(OspfNeighborState.LOADING);
- ospfInterface.addNeighbouringRouter(ospfNbr);
-
- ospfInterfaceChannelHandler.processDdMessage(message, channelHandlerContext);
-
- assertThat(ospfInterfaceChannelHandler, is(notNullValue()));
-
- }
-
- /**
- * Tests processLsRequestMessage() method.
- */
- @Test
- public void testProcessLSRequestMessage() throws Exception {
- ospfInterface.setIpAddress(Ip4Address.valueOf("11.11.11.11"));
- ospfInterface.setInterfaceType(2);
- ospfInterface.setIpNetworkMask(Ip4Address.valueOf("255.255.255.255"));
- ospfInterface.setHelloIntervalTime(10);
- ospfInterface.setRouterDeadIntervalTime(10);
- ospfArea.setAreaId(Ip4Address.valueOf("12.12.12.12"));
- channelHandlerContext = EasyMock.createMock(ChannelHandlerContext.class);
- OspfMessage message;
- lsRequest = new LsRequest();
- lsRequest.setSourceIp(Ip4Address.valueOf("1.1.1.1"));
- lsRequest.setOspfVer(2);
- lsRequest.setAreaId(Ip4Address.valueOf("12.12.12.12"));
- lsRequest.setRouterId(Ip4Address.valueOf("10.226.165.100"));
- List<LsRequestPacket> lsRequests = new ArrayList();
- LsRequestPacket lsRequestPacket = new LsRequestPacket();
- lsRequestPacket.setLsType(3);
- lsRequestPacket.setLinkStateId("2.2.2.2");
- lsRequestPacket.setOwnRouterId("2.2.2.2");
- lsRequests.add(lsRequestPacket);
- lsRequests.add(lsRequestPacket);
- lsRequest.addLinkStateRequests(new LsRequestPacket());
- lsRequest.addLinkStateRequests(new LsRequestPacket());
- message = lsRequest;
- ospfNbrHashMap = new HashMap();
- ospfNbr.setState(OspfNeighborState.EXCHANGE);
- ospfNbr = new OspfNbrImpl(ospfArea, createOspfInterface(), Ip4Address.valueOf("10.10.10.10"),
- Ip4Address.valueOf("10.226.165.100"), 2,
- new OspfInterfaceChannelHandler(new Controller(), ospfArea,
- createOspfInterface1()),
- topologyForDeviceAndLink);
- ospfNbr.setLastDdPacket(createDdPacket());
- ospfNbr.setNeighborId(Ip4Address.valueOf("2.2.2.2"));
- ospfNbr.setState(OspfNeighborState.FULL);
- ospfNbr.setRouterPriority(0);
- ospfNbr.setNeighborDr(Ip4Address.valueOf("13.13.13.13"));
- ospfNbr.setDdSeqNum(123);
- ospfInterface.addNeighbouringRouter(ospfNbr);
- ospfInterface.setListOfNeighbors(ospfNbrHashMap);
- ospfInterfaceChannelHandler.processLsRequestMessage(message, channelHandlerContext);
- assertThat(ospfInterfaceChannelHandler, is(notNullValue()));
-
- }
-
- /**
- * Tests processLsUpdateMessage() method.
- */
- @Test
- public void testProcessLSUpdateMessage() throws Exception {
- ospfInterface.setIpAddress(Ip4Address.valueOf("11.11.11.11"));
- ospfInterface.setInterfaceType(2);
- ospfInterface.setIpNetworkMask(Ip4Address.valueOf("255.255.255.255"));
- ospfInterface.setHelloIntervalTime(10);
- ospfInterface.setRouterDeadIntervalTime(10);
- ospfArea.setAreaId(Ip4Address.valueOf("12.12.12.12"));
- channelHandlerContext = EasyMock.createMock(ChannelHandlerContext.class);
- OspfMessage message;
- lsUpdate = new LsUpdate();
- lsUpdate.setSourceIp(Ip4Address.valueOf("1.1.1.1"));
- lsUpdate.setOspfVer(2);
- lsUpdate.setAreaId(Ip4Address.valueOf("12.12.12.12"));
- lsUpdate.setRouterId(Ip4Address.valueOf("10.226.165.100"));
- RouterLsa routerLsa = new RouterLsa();
- lsUpdate.addLsa(routerLsa);
- lsUpdate.setNumberOfLsa(1);
- message = lsUpdate;
- ospfNbrHashMap = new HashMap();
- ospfNbr.setState(OspfNeighborState.FULL);
- ospfNbr = new OspfNbrImpl(ospfArea, createOspfInterface(), Ip4Address.valueOf("10.10.10.10"),
- Ip4Address.valueOf("10.226.165.100"), 2,
- new OspfInterfaceChannelHandler(new Controller(), ospfArea,
- createOspfInterface1()),
- topologyForDeviceAndLink);
- ospfNbr.setLastDdPacket(createDdPacket());
- ospfNbr.setNeighborId(Ip4Address.valueOf("2.2.2.2"));
- ospfNbr.setState(OspfNeighborState.FULL);
- ospfNbr.setRouterPriority(0);
- ospfNbr.setNeighborDr(Ip4Address.valueOf("13.13.13.13"));
- ospfNbr.setDdSeqNum(123);
- ospfInterface.addNeighbouringRouter(ospfNbr);
- ospfInterfaceChannelHandler.processLsUpdateMessage(message, channelHandlerContext);
- assertThat(ospfInterfaceChannelHandler, is(notNullValue()));
-
- }
-
- @Test(expected = Exception.class)
- public void testProcessLSAckMessage() throws Exception {
- ospfInterface.setIpAddress(Ip4Address.valueOf("11.11.11.11"));
- ospfInterface.setInterfaceType(2);
- ospfInterface.setIpNetworkMask(Ip4Address.valueOf("255.255.255.255"));
- ospfInterface.setHelloIntervalTime(10);
- ospfInterface.setRouterDeadIntervalTime(10);
- ospfArea.setAreaId(Ip4Address.valueOf("12.12.12.12"));
- channelHandlerContext = EasyMock.createMock(ChannelHandlerContext.class);
- OspfMessage message;
- lsAck = new LsAcknowledge();
- lsAck.setSourceIp(Ip4Address.valueOf("1.1.1.1"));
- lsAck.setOspfVer(2);
- lsAck.setAreaId(Ip4Address.valueOf("12.12.12.12"));
+ private OspfInterfaceImpl createOspfInterface() throws Exception {
+ ospfInterface = new OspfInterfaceImpl();
LsaHeader lsaHeader = new LsaHeader();
- lsAck.addLinkStateHeader(lsaHeader);
- message = lsAck;
- ospfNbr = new OspfNbrImpl(ospfArea, createOspfInterface(), Ip4Address.valueOf("10.10.10.10"),
- Ip4Address.valueOf("10.226.165.100"), 2,
- new OspfInterfaceChannelHandler(new Controller(), ospfArea,
- createOspfInterface()),
- topologyForDeviceAndLink);
- ospfNbr.setLastDdPacket(createDdPacket());
- ospfNbr.setNeighborId(Ip4Address.valueOf("2.2.2.2"));
- ospfNbr.setState(OspfNeighborState.FULL);
- ospfNbr.setRouterPriority(0);
- ospfNbr.setNeighborDr(Ip4Address.valueOf("13.13.13.13"));
- ospfNbr.setDdSeqNum(123);
- ospfInterfaceChannelHandler.processLsAckMessage(message, channelHandlerContext);
- assertThat(ospfInterfaceChannelHandler, is(notNullValue()));
-
- }
-
- /**
- * Tests compareDdPackets() method.
- */
- @Test
- public void testCompareDDPackets() throws Exception {
- ospfInterface.setIpAddress(Ip4Address.valueOf("11.11.11.11"));
- ospfInterface.setInterfaceType(2);
- ospfInterface.setIpNetworkMask(Ip4Address.valueOf("255.255.255.255"));
- ospfInterface.setHelloIntervalTime(10);
- ospfInterface.setRouterDeadIntervalTime(10);
- ospfArea.setAreaId(Ip4Address.valueOf("12.12.12.12"));
- channelHandlerContext = EasyMock.createMock(ChannelHandlerContext.class);
- OspfMessage message;
- ddPacket = new DdPacket();
- ddPacket.setSourceIp(Ip4Address.valueOf("1.1.1.1"));
- ddPacket.setOspfVer(2);
- ddPacket.setIsInitialize(1);
- ddPacket.setIsMaster(1);
- ddPacket.setIsMore(1);
- ddPacket.setOptions(2);
- ddPacket.setAreaId(Ip4Address.valueOf("12.12.12.12"));
- assertThat(ospfInterfaceChannelHandler.compareDdPackets(ddPacket, ddPacket), is(true));
- }
-
- @Test(expected = Exception.class)
- public void testCloseChannel() throws Exception {
- channelHandlerContext = EasyMock.createMock(ChannelHandlerContext.class);
-
- ospfInterfaceChannelHandler.closeChannel(channelHandlerContext);
-
- assertThat(ospfInterface.dr(), is(notNullValue()));
- }
-
- /**
- * Tests electRouter() method.
- */
- @Test
- public void testElectRouter() throws Exception {
- ospfInterface.setDr(Ip4Address.valueOf("3.3.3.3"));
- ospfInterface.setBdr(Ip4Address.valueOf("3.3.3.3"));
- ospfInterface.setIpNetworkMask(Ip4Address.valueOf("255.255.255.255"));
- ChannelConfig channelConfig = EasyMock.createMock(ChannelConfig.class);
- EasyMock.expect(channelConfig.getBufferFactory()).andReturn(new HeapChannelBufferFactory());
- Channel channel = EasyMock.createMock(Channel.class);
- ospfInterfaceChannelHandler.electRouter(channel);
- assertThat(ospfInterface.dr(), is(notNullValue()));
- }
-
- /**
- * Tests electBdr() method.
- */
- @Test
- public void testElectBdr() throws Exception {
- ospfEligibleRouter = new OspfEligibleRouter();
- ospfEligibleRouter.setIpAddress(Ip4Address.valueOf("1.1.1.1"));
- ospfEligibleRouter.setIsDr(true);
- ospfEligibleRouter.setRouterPriority(10);
- ospfEligibleRouter.setRouterId(Ip4Address.valueOf("1.1.1.1"));
- ospfEligibleRouter.setIsBdr(false);
- OspfEligibleRouter ospfEligibleRouter1 = new OspfEligibleRouter();
- ospfEligibleRouter.setIpAddress(Ip4Address.valueOf("1.1.1.1"));
- ospfEligibleRouter.setIsDr(true);
- ospfEligibleRouter.setRouterPriority(10);
- ospfEligibleRouter.setRouterId(Ip4Address.valueOf("1.1.1.1"));
- ospfEligibleRouter.setIsBdr(false);
- OspfEligibleRouter ospfEligibleRouter2 = new OspfEligibleRouter();
- ospfEligibleRouter.setIpAddress(Ip4Address.valueOf("1.1.1.1"));
- ospfEligibleRouter.setIsDr(true);
- ospfEligibleRouter.setRouterPriority(10);
- ospfEligibleRouter.setRouterId(Ip4Address.valueOf("1.1.1.1"));
- ospfEligibleRouter.setIsBdr(false);
- List<OspfEligibleRouter> ospfEligibleRouters = new ArrayList<>();
-
- ospfEligibleRouters.add(ospfEligibleRouter);
- ospfEligibleRouters.add(ospfEligibleRouter1);
- ospfEligibleRouters.add(ospfEligibleRouter2);
- OspfEligibleRouter eligibleRouter = ospfInterfaceChannelHandler.electBdr(ospfEligibleRouters);
- assertThat(ospfEligibleRouters.size(), is(3));
- assertThat(eligibleRouter, is(notNullValue()));
- }
-
- /**
- * Tests electDr() method.
- */
- @Test
- public void testElectDR() throws Exception {
- ospfEligibleRouter = new OspfEligibleRouter();
- ospfEligibleRouter.setIpAddress(Ip4Address.valueOf("1.1.1.1"));
- ospfEligibleRouter.setIsDr(true);
- ospfEligibleRouter.setRouterPriority(10);
- ospfEligibleRouter.setRouterId(Ip4Address.valueOf("1.1.1.1"));
- ospfEligibleRouter.setIsBdr(false);
- OspfEligibleRouter ospfEligibleRouter1 = new OspfEligibleRouter();
- ospfEligibleRouter.setIpAddress(Ip4Address.valueOf("1.1.1.1"));
- ospfEligibleRouter.setIsDr(true);
- ospfEligibleRouter.setRouterPriority(10);
- ospfEligibleRouter.setRouterId(Ip4Address.valueOf("1.1.1.1"));
- ospfEligibleRouter.setIsBdr(false);
- OspfEligibleRouter ospfEligibleRouter2 = new OspfEligibleRouter();
- ospfEligibleRouter.setIpAddress(Ip4Address.valueOf("1.1.1.1"));
- ospfEligibleRouter.setIsDr(true);
- ospfEligibleRouter.setRouterPriority(10);
- ospfEligibleRouter.setRouterId(Ip4Address.valueOf("1.1.1.1"));
- ospfEligibleRouter.setIsBdr(false);
- List<OspfEligibleRouter> ospfEligibleRouters = new ArrayList<>();
- ospfEligibleRouters.add(ospfEligibleRouter);
- ospfEligibleRouters.add(ospfEligibleRouter1);
- ospfEligibleRouters.add(ospfEligibleRouter2);
- OspfEligibleRouter eligibleRouter = ospfInterfaceChannelHandler.electDr(ospfEligibleRouters,
- ospfEligibleRouter);
- assertThat(ospfEligibleRouters.size(), is(3));
- assertThat(eligibleRouter, is(notNullValue()));
- }
-
- /**
- * Tests selectRouterBasedOnPriority() method.
- */
- @Test
- public void testSelectRouterBasedOnPriority() throws Exception {
- ospfEligibleRouter = new OspfEligibleRouter();
- ospfEligibleRouter.setIpAddress(Ip4Address.valueOf("1.1.1.1"));
- ospfEligibleRouter.setIsDr(true);
- ospfEligibleRouter.setRouterPriority(10);
- ospfEligibleRouter.setRouterId(Ip4Address.valueOf("1.1.1.1"));
- ospfEligibleRouter.setIsBdr(false);
- OspfEligibleRouter ospfEligibleRouter1 = new OspfEligibleRouter();
- ospfEligibleRouter.setIpAddress(Ip4Address.valueOf("1.1.1.1"));
- ospfEligibleRouter.setIsDr(true);
- ospfEligibleRouter.setRouterPriority(11);
- ospfEligibleRouter.setRouterId(Ip4Address.valueOf("1.1.1.1"));
- ospfEligibleRouter.setIsBdr(false);
- OspfEligibleRouter ospfEligibleRouter2 = new OspfEligibleRouter();
- ospfEligibleRouter.setIpAddress(Ip4Address.valueOf("1.1.1.1"));
- ospfEligibleRouter.setIsDr(true);
- ospfEligibleRouter.setRouterPriority(12);
- ospfEligibleRouter.setRouterId(Ip4Address.valueOf("1.1.1.1"));
- ospfEligibleRouter.setIsBdr(false);
- List<OspfEligibleRouter> ospfEligibleRouters = new ArrayList<>();
- ospfEligibleRouters.add(ospfEligibleRouter);
- ospfEligibleRouters.add(ospfEligibleRouter1);
- ospfEligibleRouters.add(ospfEligibleRouter2);
- OspfEligibleRouter eligibleRouter = ospfInterfaceChannelHandler.selectRouterBasedOnPriority(
- ospfEligibleRouters);
- assertThat(eligibleRouter, is(notNullValue()));
- }
-
- /**
- * Tests addDeviceInformation() method.
- */
- @Test(expected = Exception.class)
- public void testAddDeviceInformation() throws Exception {
- ospfNbr = new OspfNbrImpl(ospfArea, createOspfInterface(), Ip4Address.valueOf("10.10.10.10"),
- Ip4Address.valueOf("10.226.165.100"), 2,
- new OspfInterfaceChannelHandler(new Controller(), ospfArea,
- createOspfInterface()),
- topologyForDeviceAndLink);
-
- ospfInterfaceChannelHandler.addDeviceInformation(new OspfRouterImpl());
- assertThat(ospfInterfaceChannelHandler, is(notNullValue()));
- }
-
- /**
- * Tests removeDeviceInformation() method.
- */
- @Test(expected = Exception.class)
- public void testRemoveDeviceInformation() throws Exception {
- ospfNbr = new OspfNbrImpl(ospfArea, createOspfInterface(), Ip4Address.valueOf("10.10.10.10"),
- Ip4Address.valueOf("10.226.165.100"), 2,
- new OspfInterfaceChannelHandler(new Controller(), ospfArea,
- createOspfInterface()),
- topologyForDeviceAndLink);
-
- ospfInterfaceChannelHandler.removeDeviceInformation(new OspfRouterImpl());
- assertThat(ospfInterfaceChannelHandler, is(notNullValue()));
- }
-
- /**
- * Tests addLinkInformation() method.
- */
- @Test(expected = Exception.class)
- public void testaddLinkInformation() throws Exception {
- ospfNbr = new OspfNbrImpl(ospfArea, createOspfInterface(), Ip4Address.valueOf("10.10.10.10"),
- Ip4Address.valueOf("10.226.165.100"), 2,
- new OspfInterfaceChannelHandler(new Controller(), ospfArea,
- createOspfInterface()),
- topologyForDeviceAndLink);
-
- List topTlv = new ArrayList();
- topTlv.add(new RouterTlv(new TlvHeader()));
- ospfInterfaceChannelHandler.addLinkInformation(new OspfRouterImpl(), new OspfLinkTedImpl());
- assertThat(ospfInterfaceChannelHandler, is(notNullValue()));
- }
-
- /**
- * Tests removeLinkInformation() method.
- */
- @Test(expected = Exception.class)
- public void testRemoveLinkInformation() throws Exception {
- ospfNbr = new OspfNbrImpl(ospfArea, createOspfInterface(), Ip4Address.valueOf("10.10.10.10"),
- Ip4Address.valueOf("10.226.165.100"), 2,
- new OspfInterfaceChannelHandler(new Controller(), ospfArea,
- createOspfInterface()),
- topologyForDeviceAndLink);
-
- ospfInterfaceChannelHandler.removeLinkInformation(ospfNbr);
- assertThat(ospfInterfaceChannelHandler, is(notNullValue()));
+ lsaHeader.setLsType(OspfLsaType.ROUTER.value());
+ RouterLsa routerLsa = new RouterLsa();
+ OspfAreaImpl ospfArea = new OspfAreaImpl();
+ ospfArea.addLsa(routerLsa, true, ospfInterface);
+ ospfNbr = new OspfNbrImpl(ospfArea, ospfInterface, ip4Address5,
+ ip4Address6, 2, topologyForDeviceAndLink);
+ ospfNbr.setState(OspfNeighborState.EXSTART);
+ ospfNbr.setNeighborId(ip4Address7);
+ this.ospfInterface = new OspfInterfaceImpl();
+ this.ospfInterface.setIpAddress(ip4Address5);
+ this.ospfInterface.setIpNetworkMask(subnetAddress);
+ this.ospfInterface.setBdr(ip4Address4);
+ this.ospfInterface.setDr(ip4Address4);
+ this.ospfInterface.setHelloIntervalTime(20);
+ this.ospfInterface.setInterfaceType(2);
+ this.ospfInterface.setReTransmitInterval(2000);
+ this.ospfInterface.setMtu(6500);
+ this.ospfInterface.setRouterDeadIntervalTime(1000);
+ this.ospfInterface.setRouterPriority(1);
+ this.ospfInterface.setInterfaceType(1);
+ this.ospfInterface.setInterfaceIndex(1);
+ this.ospfInterface.addNeighbouringRouter(ospfNbr);
+ this.ospfInterface.setOspfArea(ospfArea);
+ return this.ospfInterface;
}
/**
@@ -1042,115 +324,4 @@
ddPacket1.readFrom(buf);
return ddPacket1;
}
-
- /**
- * Utility for test method.
- */
- private OspfInterfaceImpl createOspfInterface() throws UnknownHostException {
- ospfInterface = new OspfInterfaceImpl();
- OspfAreaImpl ospfArea = new OspfAreaImpl();
- OspfInterfaceChannelHandler ospfInterfaceChannelHandler = EasyMock.createMock(
- OspfInterfaceChannelHandler.class);
- ospfNbr = new OspfNbrImpl(ospfArea, ospfInterface, Ip4Address.valueOf("10.226.165.164"),
- Ip4Address.valueOf("1.1.1.1"), 2, ospfInterfaceChannelHandler,
- topologyForDeviceAndLink);
- ospfNbr.setState(OspfNeighborState.EXSTART);
- ospfNbr.setNeighborId(Ip4Address.valueOf("10.226.165.100"));
- this.ospfInterface = new OspfInterfaceImpl();
- this.ospfInterface.setIpAddress(Ip4Address.valueOf("10.226.165.164"));
- this.ospfInterface.setIpNetworkMask(Ip4Address.valueOf("255.255.255.255"));
- this.ospfInterface.setAreaId(2);
- this.ospfInterface.setAuthKey("authKey");
- this.ospfInterface.setAuthType("AuthReq");
- this.ospfInterface.setBdr(Ip4Address.valueOf("111.111.111.111"));
- this.ospfInterface.setDr(Ip4Address.valueOf("111.111.111.111"));
- this.ospfInterface.setHelloIntervalTime(20);
- this.ospfInterface.setInterfaceCost(10);
- this.ospfInterface.setInterfaceType(2);
- this.ospfInterface.setReTransmitInterval(2000);
- this.ospfInterface.setMtu(6500);
- this.ospfInterface.setPollInterval(1000);
- this.ospfInterface.setRouterDeadIntervalTime(1000);
- this.ospfInterface.setRouterPriority(1);
- this.ospfInterface.setTransmitDelay(500);
- this.ospfInterface.setInterfaceType(1);
- this.ospfInterface.addNeighbouringRouter(ospfNbr);
- return this.ospfInterface;
- }
-
- /**
- * Utility for test method.
- */
- private OspfInterfaceImpl createOspfInterface1() throws UnknownHostException {
- ospfInterface = new OspfInterfaceImpl();
- OspfAreaImpl ospfArea = new OspfAreaImpl();
- OspfInterfaceChannelHandler ospfInterfaceChannelHandler = EasyMock.createMock(
- OspfInterfaceChannelHandler.class);
- ospfNbr = new OspfNbrImpl(ospfArea, ospfInterface, Ip4Address.valueOf("10.226.165.164"),
- Ip4Address.valueOf("1.1.1.1"), 2, ospfInterfaceChannelHandler,
- topologyForDeviceAndLink);
- ospfNbr.setState(OspfNeighborState.FULL);
- ospfNbr.setNeighborId(Ip4Address.valueOf("10.226.165.100"));
- ospfInterface = new OspfInterfaceImpl();
- ospfInterface.setIpAddress(Ip4Address.valueOf("10.226.165.164"));
- ospfInterface.setIpNetworkMask(Ip4Address.valueOf("255.255.255.255"));
- ospfInterface.setAreaId(2);
- ospfInterface.setAuthKey("authKey");
- ospfInterface.setAuthType("AuthReq");
- ospfInterface.setBdr(Ip4Address.valueOf("111.111.111.111"));
- ospfInterface.setDr(Ip4Address.valueOf("111.111.111.111"));
- ospfInterface.setHelloIntervalTime(20);
- ospfInterface.setInterfaceCost(10);
- ospfInterface.setInterfaceType(2);
- ospfInterface.setReTransmitInterval(2000);
- ospfInterface.setMtu(6500);
- ospfInterface.setPollInterval(1000);
- ospfInterface.setRouterDeadIntervalTime(1000);
- ospfInterface.setRouterPriority(1);
- ospfInterface.setTransmitDelay(500);
- ospfInterface.setInterfaceType(1);
- ospfInterface.addNeighbouringRouter(ospfNbr);
- return ospfInterface;
- }
-
- /**
- * Utility for test method.
- */
- private OspfAreaImpl createOspfArea() throws UnknownHostException {
- OspfAreaAddressRangeImpl ospfAreaAddressRange;
- ospfAreaAddressRange = createOspfAreaAddressRange();
- addressRanges.add(ospfAreaAddressRange);
- OspfAreaImpl ospfArea = new OspfAreaImpl();
- ospfArea.setStubCost(10);
- ospfArea.setAreaId(Ip4Address.valueOf("10.226.165.164"));
- ospfArea.setExternalRoutingCapability(true);
- ospfArea.setTransitCapability(true);
- ospfArea.setAddressRanges(addressRanges);
- OspfInterfaceImpl ospfInterface = createOspfInterface();
- ospfInterfaces.add(ospfInterface);
- ospfArea.setInterfacesLst(ospfInterfaces);
- RouterLsa routerLsa = new RouterLsa();
- routerLsa.setLsType(1);
- routerLsa.setLinkStateId("2.2.2.2");
- routerLsa.setAdvertisingRouter(Ip4Address.valueOf("2.2.2.2"));
- try {
- ospfArea.addLsa(routerLsa, false, ospfInterface);
- } catch (Exception e) {
- System.out.println("ospfAreaImpl createOspfArea");
- }
- ospfArea.setRouterId(Ip4Address.valueOf("111.111.111.111"));
-
- return ospfArea;
- }
-
- /**
- * Utility for test method.
- */
- private OspfAreaAddressRangeImpl createOspfAreaAddressRange() {
- OspfAreaAddressRangeImpl ospfAreaAddressRange = new OspfAreaAddressRangeImpl();
- ospfAreaAddressRange.setIpAddress(Ip4Address.valueOf("10.226.165.164"));
- ospfAreaAddressRange.setAdvertise(true);
- ospfAreaAddressRange.setMask("mask");
- return ospfAreaAddressRange;
- }
}
\ No newline at end of file
diff --git a/protocols/ospf/ctl/src/test/java/org/onosproject/ospf/controller/impl/OspfLinkTedImplTest.java b/protocols/ospf/ctl/src/test/java/org/onosproject/ospf/controller/impl/OspfLinkTedImplTest.java
index 7415ed0..d4f0e2e 100644
--- a/protocols/ospf/ctl/src/test/java/org/onosproject/ospf/controller/impl/OspfLinkTedImplTest.java
+++ b/protocols/ospf/ctl/src/test/java/org/onosproject/ospf/controller/impl/OspfLinkTedImplTest.java
@@ -21,6 +21,7 @@
import org.onlab.packet.Ip4Address;
import org.onlab.util.Bandwidth;
+import java.net.InetAddress;
import java.util.ArrayList;
import java.util.List;
@@ -32,8 +33,6 @@
* Unit test class for OspfDeviceTedImpl.
*/
public class OspfLinkTedImplTest {
- private static final Ip4Address LOCAL_ADDRESS = Ip4Address.valueOf("127.0.0.1");
-
private OspfLinkTedImpl ospfLinkTed;
@Before
@@ -91,7 +90,7 @@
@Test
public void testIpv4RemRouterId() throws Exception {
List list = new ArrayList();
- list.add(LOCAL_ADDRESS);
+ list.add(Ip4Address.valueOf(InetAddress.getLocalHost()));
ospfLinkTed.setIpv4RemRouterId(list);
assertThat(ospfLinkTed.ipv4RemRouterId().size(), is(1));
}
@@ -102,7 +101,7 @@
@Test
public void testSetIpv4RemRouterId() throws Exception {
List list = new ArrayList();
- list.add(LOCAL_ADDRESS);
+ list.add(Ip4Address.valueOf(InetAddress.getLocalHost()));
ospfLinkTed.setIpv4RemRouterId(list);
assertThat(ospfLinkTed.ipv4RemRouterId().size(), is(1));
}
@@ -133,7 +132,7 @@
@Test
public void testIpv4LocRouterId() throws Exception {
List list = new ArrayList();
- list.add(LOCAL_ADDRESS);
+ list.add(Ip4Address.valueOf(InetAddress.getLocalHost()));
ospfLinkTed.setIpv4LocRouterId(list);
assertThat(ospfLinkTed.ipv4LocRouterId().size(), is(1));
}
@@ -144,7 +143,7 @@
@Test
public void testSetIpv4LocRouterId() throws Exception {
List list = new ArrayList();
- list.add(LOCAL_ADDRESS);
+ list.add(Ip4Address.valueOf(InetAddress.getLocalHost()));
ospfLinkTed.setIpv4LocRouterId(list);
assertThat(ospfLinkTed.ipv4LocRouterId().size(), is(1));
}
@@ -202,4 +201,4 @@
ospfLinkTed.setMaxUnResBandwidth(Bandwidth.bps(1234.0));
assertThat(ospfLinkTed.maxUnResBandwidth(), is(notNullValue()));
}
-}
+}
\ No newline at end of file
diff --git a/protocols/ospf/ctl/src/test/java/org/onosproject/ospf/controller/impl/OspfMessageDecoderTest.java b/protocols/ospf/ctl/src/test/java/org/onosproject/ospf/controller/impl/OspfMessageDecoderTest.java
index 696469c..8bb8a2c 100644
--- a/protocols/ospf/ctl/src/test/java/org/onosproject/ospf/controller/impl/OspfMessageDecoderTest.java
+++ b/protocols/ospf/ctl/src/test/java/org/onosproject/ospf/controller/impl/OspfMessageDecoderTest.java
@@ -28,7 +28,7 @@
import java.net.SocketAddress;
import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.CoreMatchers.nullValue;
+import static org.hamcrest.CoreMatchers.notNullValue;
import static org.hamcrest.MatcherAssert.assertThat;
/**
@@ -36,7 +36,7 @@
*/
public class OspfMessageDecoderTest {
- private final byte[] hellopacket = {0, 0, 0, 0, 2, 1, 0, 44, -64, -88, -86, 8, 0, 0, 0, 1, 39, 59,
+ private final byte[] hellopacket = {0, 0, 0, 0, 0, 2, 1, 0, 44, -64, -88, -86, 8, 0, 0, 0, 1, 39, 59,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, -1, 0, 0, 10, 2, 1, 0, 0, 0,
40, -64, -88, -86, 8, 0, 0, 0, 0};
private final byte[] ddpacket = {0, 0, 0, 0, 2, 2, 0, 32, -64, -88, -86, 8, 0, 0, 0, 1, -96, 82,
@@ -75,10 +75,10 @@
*/
@Test
public void testDecode() throws Exception {
-
channel = EasyMock.createMock(Channel.class);
socketAddress = InetSocketAddress.createUnresolved("127.0.0.1", 7000);
channelBuffer = ChannelBuffers.copiedBuffer(hellopacket);
- assertThat(ospfMessageDecoder.decode(ctx, channel, channelBuffer), is(nullValue()));
+ ospfMessageDecoder.decode(ctx, channel, channelBuffer);
+ assertThat(ospfMessageDecoder, is(notNullValue()));
}
}
\ No newline at end of file
diff --git a/protocols/ospf/ctl/src/test/java/org/onosproject/ospf/controller/impl/OspfMessageEncoderTest.java b/protocols/ospf/ctl/src/test/java/org/onosproject/ospf/controller/impl/OspfMessageEncoderTest.java
index 0e40cb7..5bb7dec 100644
--- a/protocols/ospf/ctl/src/test/java/org/onosproject/ospf/controller/impl/OspfMessageEncoderTest.java
+++ b/protocols/ospf/ctl/src/test/java/org/onosproject/ospf/controller/impl/OspfMessageEncoderTest.java
@@ -17,24 +17,11 @@
import org.easymock.EasyMock;
-import org.jboss.netty.buffer.ChannelBuffer;
-import org.jboss.netty.buffer.ChannelBuffers;
import org.jboss.netty.channel.Channel;
import org.jboss.netty.channel.ChannelHandlerContext;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
-import org.onlab.packet.Ip4Address;
-import org.onosproject.ospf.controller.area.OspfInterfaceImpl;
-import org.onosproject.ospf.protocol.ospfpacket.types.DdPacket;
-import org.onosproject.ospf.protocol.ospfpacket.types.HelloPacket;
-import org.onosproject.ospf.protocol.ospfpacket.types.LsAcknowledge;
-import org.onosproject.ospf.protocol.ospfpacket.types.LsRequest;
-import org.onosproject.ospf.protocol.ospfpacket.types.LsUpdate;
-import org.onosproject.ospf.protocol.util.OspfInterfaceState;
-
-import java.net.InetSocketAddress;
-import java.net.SocketAddress;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.CoreMatchers.notNullValue;
@@ -44,55 +31,24 @@
* Created by sdn on 13/1/16.
*/
public class OspfMessageEncoderTest {
- private final byte[] hpacket = {2, 1, 0, 44, -64, -88, -86, 8, 0, 0, 0, 1, 39, 59,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, -1, 0, 0, 10, 2, 1, 0, 0, 0,
- 40, -64, -88, -86, 8, 0, 0, 0, 0};
- private final byte[] dpacket = {2, 2, 0, 32, -64, -88, -86, 8, 0, 0, 0, 1, -96, 82,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, -36, 2, 7, 65, 119, -87, 126};
- private final byte[] lrpacket = {2, 3, 0, 36, -64, -88, -86, 3, 0, 0, 0, 1, -67, -57,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, -64, -88, -86, 8, -64, -88, -86, 8};
- private byte[] lAckpacket = {2, 5, 0, 44, -64, -88, -86, 8, 0, 0, 0, 1, -30, -12,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 16, 2, 1, -64, -88, -86, 2, -64,
- -88, -86, 2, -128, 0, 0, 1, 74, -114, 0, 48};
- private HelloPacket helloPacket;
- private DdPacket ddPacket;
- private LsAcknowledge lsAcknowledge;
- private LsRequest lsRequest;
- private LsUpdate lsUpdate;
- private ChannelHandlerContext ctx;
+
+ private final byte[] object = {2, 1, 0, 44, -64, -88, -86, 8, 0, 0, 0, 1, 39,
+ 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, -1, 0, 0, 10, 2, 1, 0, 0,
+ 0, 40, -64, -88, -86, 8, 0, 0, 0, 0};
private OspfMessageEncoder ospfMessageEncoder;
- private ChannelBuffer buf;
- private SocketAddress socketAddress;
+ private ChannelHandlerContext channelHandlerContext;
private Channel channel;
@Before
public void setUp() throws Exception {
ospfMessageEncoder = new OspfMessageEncoder();
- helloPacket = new HelloPacket();
- ddPacket = new DdPacket();
- lsAcknowledge = new LsAcknowledge();
- lsRequest = new LsRequest();
- lsUpdate = new LsUpdate();
- helloPacket.setOspftype(1);
- ddPacket.setOspftype(2);
- lsAcknowledge.setOspftype(5);
- lsRequest.setOspftype(3);
- lsUpdate.setOspftype(4);
- OspfInterfaceImpl ospfInterface = new OspfInterfaceImpl();
- ospfInterface.setState(OspfInterfaceState.DROTHER);
- ospfMessageEncoder = new OspfMessageEncoder(ospfInterface);
-
+ channelHandlerContext = EasyMock.createMock(ChannelHandlerContext.class);
+ channel = EasyMock.createMock(Channel.class);
}
@After
public void tearDown() throws Exception {
- helloPacket = null;
- ddPacket = null;
- lsAcknowledge = null;
- lsRequest = null;
- lsUpdate = null;
ospfMessageEncoder = null;
- buf = null;
}
/**
@@ -100,33 +56,6 @@
*/
@Test
public void testEncode() throws Exception {
- socketAddress = InetSocketAddress.createUnresolved("127.0.0.1", 8600);
- channel = EasyMock.createMock(Channel.class);
- helloPacket = new HelloPacket();
- helloPacket.setDestinationIp(Ip4Address.valueOf("15.15.15.15"));
- buf = ChannelBuffers.buffer(hpacket.length);
- buf.writeBytes(hpacket);
- helloPacket.readFrom(buf);
- ospfMessageEncoder.encode(ctx, channel, helloPacket);
- ddPacket = new DdPacket();
- ddPacket.setDestinationIp(Ip4Address.valueOf("15.15.15.15"));
- buf = ChannelBuffers.buffer(dpacket.length);
- buf.writeBytes(dpacket);
- ddPacket.readFrom(buf);
- ospfMessageEncoder.encode(ctx, channel, ddPacket);
- lsRequest = new LsRequest();
- lsRequest.setDestinationIp(Ip4Address.valueOf("15.15.15.15"));
- buf = ChannelBuffers.buffer(lrpacket.length);
- buf.writeBytes(lrpacket);
- lsRequest.readFrom(buf);
- ospfMessageEncoder.encode(ctx, channel, lsRequest);
-
- lsAcknowledge = new LsAcknowledge();
- lsAcknowledge.setDestinationIp(Ip4Address.valueOf("15.15.15.15"));
- buf = ChannelBuffers.buffer(lAckpacket.length);
- buf.writeBytes(lAckpacket);
- lsAcknowledge.readFrom(buf);
- ospfMessageEncoder.encode(ctx, channel, lsAcknowledge);
- assertThat(ospfMessageEncoder, is(notNullValue()));
+ assertThat(ospfMessageEncoder.encode(channelHandlerContext, channel, object), is(notNullValue()));
}
}
\ No newline at end of file
diff --git a/protocols/ospf/ctl/src/test/java/org/onosproject/ospf/controller/impl/OspfNbrImplTest.java b/protocols/ospf/ctl/src/test/java/org/onosproject/ospf/controller/impl/OspfNbrImplTest.java
index 5c7c27a..295f0ab 100644
--- a/protocols/ospf/ctl/src/test/java/org/onosproject/ospf/controller/impl/OspfNbrImplTest.java
+++ b/protocols/ospf/ctl/src/test/java/org/onosproject/ospf/controller/impl/OspfNbrImplTest.java
@@ -19,31 +19,37 @@
import org.easymock.EasyMock;
import org.jboss.netty.channel.Channel;
import org.junit.After;
-import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.onlab.packet.Ip4Address;
+import org.onosproject.ospf.controller.OspfAreaAddressRange;
import org.onosproject.ospf.controller.OspfInterface;
import org.onosproject.ospf.controller.OspfLsa;
import org.onosproject.ospf.controller.OspfLsaType;
+import org.onosproject.ospf.controller.OspfMessage;
import org.onosproject.ospf.controller.OspfNeighborState;
import org.onosproject.ospf.controller.TopologyForDeviceAndLink;
+import org.onosproject.ospf.controller.area.OspfAreaAddressRangeImpl;
import org.onosproject.ospf.controller.area.OspfAreaImpl;
import org.onosproject.ospf.controller.area.OspfInterfaceImpl;
import org.onosproject.ospf.controller.lsdb.LsaWrapperImpl;
import org.onosproject.ospf.controller.lsdb.LsdbAgeImpl;
+import org.onosproject.ospf.controller.util.OspfInterfaceType;
import org.onosproject.ospf.protocol.lsa.LsaHeader;
+import org.onosproject.ospf.protocol.lsa.OpaqueLsaHeader;
import org.onosproject.ospf.protocol.lsa.types.NetworkLsa;
+import org.onosproject.ospf.protocol.lsa.types.OpaqueLsa10;
import org.onosproject.ospf.protocol.lsa.types.RouterLsa;
-import org.onosproject.ospf.protocol.ospfpacket.OspfMessage;
import org.onosproject.ospf.protocol.ospfpacket.types.DdPacket;
import org.onosproject.ospf.protocol.ospfpacket.types.HelloPacket;
import org.onosproject.ospf.protocol.ospfpacket.types.LsRequest;
import org.onosproject.ospf.protocol.ospfpacket.types.LsUpdate;
import org.onosproject.ospf.protocol.util.ChecksumCalculator;
+import org.onosproject.ospf.protocol.util.OspfInterfaceState;
import org.onosproject.ospf.protocol.util.OspfUtil;
import java.net.SocketAddress;
+import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.List;
@@ -55,54 +61,68 @@
* Unit test class for OspfNbrImpl.
*/
public class OspfNbrImplTest {
-
+ private List<OspfAreaAddressRange> addressRanges = new ArrayList();
private OspfNbrImpl ospfNbr;
+ private OspfNbrImpl ospfNbr1;
private OspfInterfaceImpl ospfInterface;
private OspfAreaImpl ospfArea;
private OspfInterfaceImpl ospfInterface1;
private OspfInterfaceImpl ospfInterface2;
- private List<OspfInterface> ospfInterfaces;
+ private List<OspfInterface> ospfInterfaces = new ArrayList();
private List<OspfLsa> ospfLsaList;
private Channel channel;
private Channel channel1;
private Channel channel2;
private OspfMessage ospfMessage;
private TopologyForDeviceAndLink topologyForDeviceAndLink;
+ private LsaHeader lsaHeader;
@Before
public void setUp() throws Exception {
+ lsaHeader = new LsaHeader();
+ lsaHeader.setLsType(OspfLsaType.ROUTER.value());
+ RouterLsa routerLsa = new RouterLsa(lsaHeader);
+ routerLsa.setLsType(OspfLsaType.ROUTER.value());
ospfInterface = new OspfInterfaceImpl();
ospfInterface.setInterfaceType(2);
+ ospfInterface.setInterfaceIndex(1);
ospfInterface.setRouterDeadIntervalTime(30);
ospfInterface.setReTransmitInterval(30);
ospfInterface.setDr(Ip4Address.valueOf("1.1.1.1"));
ospfInterface.setIpAddress(Ip4Address.valueOf("1.1.1.1"));
- ospfArea = new OspfAreaImpl();
+ ospfInterface.setState(OspfInterfaceState.POINT2POINT);
+ ospfArea = createOspfArea();
+ ospfArea.addLsa(routerLsa, true, ospfInterface);
+ ospfInterface.setOspfArea(ospfArea);
ospfInterface1 = new OspfInterfaceImpl();
ospfInterface1.setInterfaceType(2);
+ ospfInterface1.setInterfaceIndex(1);
ospfInterface1.setRouterDeadIntervalTime(30);
ospfInterface1.setReTransmitInterval(30);
ospfInterface1.setDr(Ip4Address.valueOf("7.7.7.7"));
ospfInterface1.setIpAddress(Ip4Address.valueOf("7.7.7.7"));
+ ospfInterface1.setState(OspfInterfaceState.DOWN);
+ ospfInterface1.setOspfArea(ospfArea);
ospfInterface2 = new OspfInterfaceImpl();
ospfInterface2.setInterfaceType(2);
+ ospfInterface2.setInterfaceIndex(1);
ospfInterface2.setRouterDeadIntervalTime(30);
ospfInterface2.setReTransmitInterval(30);
ospfInterface2.setDr(Ip4Address.valueOf("6.6.6.6"));
ospfInterface2.setIpAddress(Ip4Address.valueOf("6.6.6.6"));
+ ospfInterface2.setOspfArea(ospfArea);
+ ospfInterface1.setState(OspfInterfaceState.DR);
ospfInterfaces = new ArrayList();
ospfInterfaces.add(ospfInterface);
ospfInterfaces.add(ospfInterface1);
ospfInterfaces.add(ospfInterface2);
- ospfArea.setInterfacesLst(ospfInterfaces);
+ ospfArea.setOspfInterfaceList(ospfInterfaces);
+ ospfInterface.setState(OspfInterfaceState.POINT2POINT);
ospfArea.setRouterId(Ip4Address.valueOf("111.111.111.111"));
topologyForDeviceAndLink = new TopologyForDeviceAndLinkImpl();
ospfNbr = new OspfNbrImpl(ospfArea, ospfInterface, Ip4Address.valueOf("1.1.1.1"),
Ip4Address.valueOf("2.2.2.2"), 2,
- new OspfInterfaceChannelHandler(new Controller(),
- ospfArea, ospfInterface),
topologyForDeviceAndLink);
-
}
@After
@@ -184,12 +204,19 @@
/**
* Tests negotiationDone() method.
*/
- @Test(expected = Exception.class)
+ @Test
public void testNegotiationDone() throws Exception {
+
ospfLsaList = new ArrayList();
- ospfLsaList.add(new RouterLsa());
- ospfMessage = new HelloPacket();
+ RouterLsa routerLsa = new RouterLsa();
+ routerLsa.setLsType(OspfLsaType.ROUTER.value());
+ ospfLsaList.add(routerLsa);
+ DdPacket ddPacket = new DdPacket();
+ ddPacket.setIsOpaqueCapable(true);
+ ospfMessage = ddPacket;
ospfNbr.setState(OspfNeighborState.EXSTART);
+ ospfNbr.setIsOpaqueCapable(true);
+ channel = null;
channel = EasyMock.createMock(Channel.class);
ospfNbr.negotiationDone(ospfMessage, true, ospfLsaList, channel);
channel1 = EasyMock.createMock(Channel.class);
@@ -230,7 +257,7 @@
@Test
public void testBadLSReq() throws Exception {
channel = EasyMock.createMock(Channel.class);
- ospfNbr.setState(OspfNeighborState.FULL);
+ ospfNbr.setState(OspfNeighborState.EXCHANGE);
ospfNbr.badLSReq(channel);
assertThat(ospfNbr, is(notNullValue()));
}
@@ -294,11 +321,24 @@
@Test
public void testAdjOk() throws Exception {
channel = EasyMock.createMock(Channel.class);
+ ospfInterface.setInterfaceType(OspfInterfaceType.BROADCAST.value());
ospfInterface.setIpAddress(Ip4Address.valueOf("2.2.2.2"));
- ospfNbr.setState(OspfNeighborState.TWOWAY);
- ospfNbr.setNeighborDr(Ip4Address.valueOf("2.2.2.2"));
- ospfNbr.adjOk(channel);
- Assert.assertNotNull(ospfNbr);
+ ospfNbr1 = new OspfNbrImpl(ospfArea, ospfInterface, Ip4Address.valueOf("1.1.1.1"),
+ Ip4Address.valueOf("2.2.2.2"), 2,
+ topologyForDeviceAndLink);
+ ospfNbr1.setState(OspfNeighborState.TWOWAY);
+ ospfNbr1.setNeighborDr(Ip4Address.valueOf("2.2.2.2"));
+ ospfNbr1.adjOk(channel);
+ assertThat(ospfNbr1, is(notNullValue()));
+
+ ospfInterface.setInterfaceType(OspfInterfaceType.POINT_TO_POINT.value());
+ ospfNbr1 = new OspfNbrImpl(ospfArea, ospfInterface, Ip4Address.valueOf("1.1.1.1"),
+ Ip4Address.valueOf("2.2.2.2"), 2,
+ topologyForDeviceAndLink);
+ channel = null;
+ channel = EasyMock.createMock(Channel.class);
+ ospfNbr1.adjOk(channel);
+ assertThat(ospfNbr1, is(notNullValue()));
}
/**
@@ -321,8 +361,11 @@
*/
@Test
public void testLoadingDone() throws Exception {
- ospfArea.addLsa(new RouterLsa(), false, ospfInterface);
- ospfArea.addLsa(new RouterLsa(), ospfInterface);
+ LsaHeader lsaHeader = new LsaHeader();
+ lsaHeader.setLsType(OspfLsaType.ROUTER.value());
+ RouterLsa routerLsa = new RouterLsa(lsaHeader);
+ ospfArea.addLsa(routerLsa, false, ospfInterface);
+ ospfArea.addLsa(routerLsa, ospfInterface);
ospfArea.addLsaToMaxAgeBin("lsa", new LsaWrapperImpl());
ospfNbr.loadingDone();
assertThat(ospfNbr, is(notNullValue()));
@@ -362,6 +405,7 @@
channel1 = EasyMock.createMock(Channel.class);
assertThat(ospfNbr.processReceivedLsa(routerlsa, true, channel1,
Ip4Address.valueOf("10.10.10.10")), is(true));
+
}
/**
@@ -394,7 +438,7 @@
@Test
public void testSendLsa() throws Exception {
channel = EasyMock.createMock(Channel.class);
- ospfNbr.sendLsa(new LsaHeader(), Ip4Address.valueOf("1.1.1.1"), channel);
+ ospfNbr.sendLsa(lsaHeader, Ip4Address.valueOf("1.1.1.1"), channel);
assertThat(ospfNbr, is(notNullValue()));
}
@@ -648,4 +692,77 @@
public void testGetPendingReTxList() throws Exception {
assertThat(ospfNbr.getPendingReTxList(), is(notNullValue()));
}
+
+ /**
+ * Utility for test method.
+ */
+ private OspfAreaImpl createOspfArea() throws UnknownHostException {
+ OspfAreaAddressRangeImpl ospfAreaAddressRange;
+ ospfAreaAddressRange = createOspfAreaAddressRange();
+ addressRanges.add(ospfAreaAddressRange);
+ OspfAreaImpl ospfArea = new OspfAreaImpl();
+ ospfArea.setAreaId(Ip4Address.valueOf("10.226.165.164"));
+ ospfArea.setExternalRoutingCapability(true);
+ OspfInterfaceImpl ospfInterface = createOspfInterface();
+ ospfInterfaces.add(ospfInterface);
+ ospfArea.setOspfInterfaceList(ospfInterfaces);
+ RouterLsa routerLsa = new RouterLsa();
+ routerLsa.setLsType(1);
+ routerLsa.setLinkStateId("2.2.2.2");
+ routerLsa.setAdvertisingRouter(Ip4Address.valueOf("2.2.2.2"));
+ OpaqueLsaHeader opaqueLsaHeader = new OpaqueLsaHeader();
+ OpaqueLsa10 opaqueLsa10 = new OpaqueLsa10(opaqueLsaHeader);
+ opaqueLsa10.setLsType(OspfLsaType.AREA_LOCAL_OPAQUE_LSA.value());
+ opaqueLsa10.setLinkStateId("2.2.2.2");
+ opaqueLsa10.setAdvertisingRouter(Ip4Address.valueOf("2.2.2.2"));
+ try {
+ ospfArea.addLsa(routerLsa, false, ospfInterface);
+ ospfArea.addLsa(opaqueLsa10, false, ospfInterface);
+ } catch (Exception e) {
+ System.out.println("ospfAreaImpl createOspfArea");
+ }
+ ospfArea.setRouterId(Ip4Address.valueOf("111.111.111.111"));
+
+ return ospfArea;
+ }
+
+ /**
+ * Utility for test method.
+ */
+ private OspfAreaAddressRangeImpl createOspfAreaAddressRange() {
+ OspfAreaAddressRangeImpl ospfAreaAddressRange = new OspfAreaAddressRangeImpl();
+ ospfAreaAddressRange.setIpAddress(Ip4Address.valueOf("10.226.165.164"));
+ ospfAreaAddressRange.setAdvertise(true);
+ ospfAreaAddressRange.setMask("mask");
+ return ospfAreaAddressRange;
+ }
+
+ /**
+ * Utility for test method.
+ */
+ private OspfInterfaceImpl createOspfInterface() throws UnknownHostException {
+ ospfInterface = new OspfInterfaceImpl();
+ OspfAreaImpl ospfArea = new OspfAreaImpl();
+ OspfInterfaceChannelHandler ospfInterfaceChannelHandler = EasyMock.createMock(
+ OspfInterfaceChannelHandler.class);
+ ospfNbr = new OspfNbrImpl(ospfArea, ospfInterface, Ip4Address.valueOf("10.226.165.164"),
+ Ip4Address.valueOf("1.1.1.1"), 2,
+ topologyForDeviceAndLink);
+ ospfNbr.setState(OspfNeighborState.EXSTART);
+ ospfNbr.setNeighborId(Ip4Address.valueOf("10.226.165.100"));
+ this.ospfInterface = new OspfInterfaceImpl();
+ this.ospfInterface.setIpAddress(Ip4Address.valueOf("10.226.165.164"));
+ this.ospfInterface.setIpNetworkMask(Ip4Address.valueOf("255.255.255.255"));
+ this.ospfInterface.setBdr(Ip4Address.valueOf("111.111.111.111"));
+ this.ospfInterface.setDr(Ip4Address.valueOf("111.111.111.111"));
+ this.ospfInterface.setHelloIntervalTime(20);
+ this.ospfInterface.setInterfaceType(2);
+ this.ospfInterface.setReTransmitInterval(2000);
+ this.ospfInterface.setMtu(6500);
+ this.ospfInterface.setRouterDeadIntervalTime(1000);
+ this.ospfInterface.setRouterPriority(1);
+ this.ospfInterface.setInterfaceType(1);
+ this.ospfInterface.addNeighbouringRouter(ospfNbr);
+ return this.ospfInterface;
+ }
}
\ No newline at end of file
diff --git a/protocols/ospf/ctl/src/test/java/org/onosproject/ospf/controller/impl/OspfPipelineFactoryTest.java b/protocols/ospf/ctl/src/test/java/org/onosproject/ospf/controller/impl/OspfPipelineFactoryTest.java
index b4678a8..3357dc9 100644
--- a/protocols/ospf/ctl/src/test/java/org/onosproject/ospf/controller/impl/OspfPipelineFactoryTest.java
+++ b/protocols/ospf/ctl/src/test/java/org/onosproject/ospf/controller/impl/OspfPipelineFactoryTest.java
@@ -18,12 +18,6 @@
import org.jboss.netty.channel.ChannelPipeline;
import org.junit.After;
import org.junit.Before;
-import org.junit.Test;
-import org.onosproject.ospf.controller.area.OspfAreaImpl;
-import org.onosproject.ospf.controller.area.OspfInterfaceImpl;
-
-import static org.hamcrest.CoreMatchers.*;
-import static org.hamcrest.MatcherAssert.assertThat;
/**
* Unit test class for OspfPipelineFactory.
@@ -35,8 +29,6 @@
@Before
public void setUp() throws Exception {
- ospfPipelineFactory = new OspfPipelineFactory(new Controller(), new OspfAreaImpl(), new OspfInterfaceImpl());
-
}
@After
@@ -44,22 +36,4 @@
ospfPipelineFactory = null;
channelPipeline = null;
}
-
- /**
- * Tests getPipeline() method.
- */
- @Test
- public void testGetPipeline() throws Exception {
- channelPipeline = ospfPipelineFactory.getPipeline();
- assertThat(channelPipeline, is(notNullValue()));
- }
-
- /**
- * Tests releaseExternalResources() method.
- */
- @Test
- public void testReleaseExternalResources() throws Exception {
- ospfPipelineFactory.releaseExternalResources();
- assertThat(channelPipeline, is(nullValue()));
- }
}
\ No newline at end of file
diff --git a/protocols/ospf/ctl/src/test/java/org/onosproject/ospf/controller/lsdb/LsaQueueConsumerTest.java b/protocols/ospf/ctl/src/test/java/org/onosproject/ospf/controller/lsdb/LsaQueueConsumerTest.java
index 679e6cc..0145b01 100644
--- a/protocols/ospf/ctl/src/test/java/org/onosproject/ospf/controller/lsdb/LsaQueueConsumerTest.java
+++ b/protocols/ospf/ctl/src/test/java/org/onosproject/ospf/controller/lsdb/LsaQueueConsumerTest.java
@@ -74,8 +74,9 @@
@Test
public void testRun() throws Exception {
blockingQueue = new ArrayBlockingQueue(5);
- channel = EasyMock.createMock(Channel.class);
ospfArea = new OspfAreaImpl();
+ lsdbAge = new LsdbAgeImpl(ospfArea);
+ channel = EasyMock.createMock(Channel.class);
lsaWrapper = new LsaWrapperImpl();
lsaWrapper.setLsaProcessing("verifyChecksum");
blockingQueue.add(lsaWrapper);
@@ -104,7 +105,7 @@
lsaHeader.setLsType(1);
lsaWrapper.setLsaHeader(lsaHeader);
lsaWrapper.setLsaProcessing("refreshLsa");
- lsaWrapper.setLsdbAge(new LsdbAgeImpl(new OspfAreaImpl()));
+ lsaWrapper.setLsdbAge(new LsdbAgeImpl(ospfArea));
blockingQueue.add(lsaWrapper);
lsaQueueConsumer = new LsaQueueConsumer(blockingQueue, channel, ospfArea);
lsaQueueConsumer.run();
@@ -128,7 +129,7 @@
lsaHeader.setLsType(2);
lsaWrapper.setLsaHeader(lsaHeader);
lsaWrapper.setLsaProcessing("refreshLsa");
- lsaWrapper.setLsdbAge(new LsdbAgeImpl(new OspfAreaImpl()));
+ lsaWrapper.setLsdbAge(new LsdbAgeImpl(ospfArea));
blockingQueue.add(lsaWrapper);
lsaQueueConsumer = new LsaQueueConsumer(blockingQueue, channel, ospfArea);
lsaQueueConsumer.run();
@@ -155,7 +156,7 @@
lsaHeader.setLsType(2);
lsaWrapper.setLsaHeader(lsaHeader);
lsaWrapper.setLsaProcessing("maxAgeLsa");
- lsaWrapper.setLsdbAge(new LsdbAgeImpl(new OspfAreaImpl()));
+ lsaWrapper.setLsdbAge(new LsdbAgeImpl(ospfArea));
blockingQueue.add(lsaWrapper);
lsaQueueConsumer = new LsaQueueConsumer(blockingQueue, channel, ospfArea);
lsaQueueConsumer.run();
@@ -168,7 +169,7 @@
@Test
public void testSetChannel() throws Exception {
channel = EasyMock.createMock(Channel.class);
- lsdbAge = new LsdbAgeImpl(new OspfAreaImpl());
+ lsdbAge = new LsdbAgeImpl(ospfArea);
lsdbAge.startDbAging();
lsdbAge.setChannel(channel);
assertThat(lsaQueueConsumer, is(notNullValue()));
diff --git a/protocols/ospf/ctl/src/test/java/org/onosproject/ospf/controller/lsdb/LsdbAgeImplTest.java b/protocols/ospf/ctl/src/test/java/org/onosproject/ospf/controller/lsdb/LsdbAgeImplTest.java
index 65a79aa..fdde205 100644
--- a/protocols/ospf/ctl/src/test/java/org/onosproject/ospf/controller/lsdb/LsdbAgeImplTest.java
+++ b/protocols/ospf/ctl/src/test/java/org/onosproject/ospf/controller/lsdb/LsdbAgeImplTest.java
@@ -23,6 +23,7 @@
import org.junit.Test;
import org.onosproject.ospf.controller.LsaBin;
import org.onosproject.ospf.controller.OspfArea;
+import org.onosproject.ospf.controller.OspfLsaType;
import org.onosproject.ospf.controller.area.OspfAreaImpl;
import static org.hamcrest.CoreMatchers.*;
@@ -181,14 +182,10 @@
public void testRefereshLsa() throws Exception {
lsaWrapper = EasyMock.createMock(LsaWrapperImpl.class);
lsaWrapper.setBinNumber(0);
+ lsaWrapper.setLsaType(OspfLsaType.NETWORK);
lsdbAge.addLsaToMaxAgeBin("lsa1", lsaWrapper);
lsdbAge.ageLsaAndFlood();
- lsaWrapper.setBinNumber(0);
- lsaWrapper = EasyMock.createMock(LsaWrapperImpl.class);
- lsdbAge.addLsaToMaxAgeBin("lsa2", lsaWrapper);
- lsdbAge.ageLsaAndFlood();
lsdbAge.startDbAging();
- lsaBin = new LsaBinImpl(1809);
lsdbAge.refreshLsa();
assertThat(lsdbAge, is(notNullValue()));
}
diff --git a/protocols/ospf/protocol/src/main/java/org/onosproject/ospf/protocol/lsa/OpaqueLsaHeader.java b/protocols/ospf/protocol/src/main/java/org/onosproject/ospf/protocol/lsa/OpaqueLsaHeader.java
index da37bb1..ac27445 100644
--- a/protocols/ospf/protocol/src/main/java/org/onosproject/ospf/protocol/lsa/OpaqueLsaHeader.java
+++ b/protocols/ospf/protocol/src/main/java/org/onosproject/ospf/protocol/lsa/OpaqueLsaHeader.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016 Open Networking Laboratory
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/protocols/ospf/protocol/src/main/java/org/onosproject/ospf/protocol/lsa/types/NetworkLsa.java b/protocols/ospf/protocol/src/main/java/org/onosproject/ospf/protocol/lsa/types/NetworkLsa.java
index 596c593..f389170 100644
--- a/protocols/ospf/protocol/src/main/java/org/onosproject/ospf/protocol/lsa/types/NetworkLsa.java
+++ b/protocols/ospf/protocol/src/main/java/org/onosproject/ospf/protocol/lsa/types/NetworkLsa.java
@@ -103,6 +103,16 @@
}
/**
+ * Gets the list of attached routers.
+ *
+ * @return list of attached routers
+ */
+ public List<Ip4Address> attachedRouters() {
+
+ return attachedRouters;
+ }
+
+ /**
* Reads from channel buffer and populate instance.
*
* @param channelBuffer channel buffer instance
diff --git a/protocols/ospf/protocol/src/main/java/org/onosproject/ospf/protocol/lsa/types/OpaqueLsa10.java b/protocols/ospf/protocol/src/main/java/org/onosproject/ospf/protocol/lsa/types/OpaqueLsa10.java
index 7cdce93..df9c8f5 100644
--- a/protocols/ospf/protocol/src/main/java/org/onosproject/ospf/protocol/lsa/types/OpaqueLsa10.java
+++ b/protocols/ospf/protocol/src/main/java/org/onosproject/ospf/protocol/lsa/types/OpaqueLsa10.java
@@ -29,7 +29,6 @@
import org.onosproject.ospf.protocol.lsa.tlvtypes.RouterTlv;
import org.onosproject.ospf.protocol.util.OspfParameters;
-import java.util.Arrays;
import java.util.ArrayList;
import java.util.List;
@@ -193,11 +192,11 @@
}
OpaqueLsa10 that = (OpaqueLsa10) o;
return Objects.equal(topLevelValues, that.topLevelValues) &&
- Arrays.equals(opaqueInfo, that.opaqueInfo);
+ Objects.equal(opaqueInfo, that.opaqueInfo);
}
@Override
public int hashCode() {
- return Objects.hashCode(Arrays.hashCode(opaqueInfo), topLevelValues);
+ return Objects.hashCode(opaqueInfo, topLevelValues);
}
}
\ No newline at end of file
diff --git a/protocols/ospf/protocol/src/main/java/org/onosproject/ospf/protocol/lsa/types/OpaqueLsa11.java b/protocols/ospf/protocol/src/main/java/org/onosproject/ospf/protocol/lsa/types/OpaqueLsa11.java
index fb982fa..3f5d56a 100644
--- a/protocols/ospf/protocol/src/main/java/org/onosproject/ospf/protocol/lsa/types/OpaqueLsa11.java
+++ b/protocols/ospf/protocol/src/main/java/org/onosproject/ospf/protocol/lsa/types/OpaqueLsa11.java
@@ -16,13 +16,12 @@
package org.onosproject.ospf.protocol.lsa.types;
import com.google.common.base.MoreObjects;
+import com.google.common.base.Objects;
import com.google.common.primitives.Bytes;
import org.jboss.netty.buffer.ChannelBuffer;
import org.onosproject.ospf.controller.OspfLsaType;
import org.onosproject.ospf.protocol.lsa.OpaqueLsaHeader;
-import java.util.Arrays;
-
/**
* Representation of an Opaque LSA of type AS (11).
*/
@@ -107,12 +106,12 @@
return false;
}
OpaqueLsa11 that = (OpaqueLsa11) o;
- return Arrays.equals(opaqueInfo, that.opaqueInfo);
+ return Objects.equal(opaqueInfo, that.opaqueInfo);
}
@Override
public int hashCode() {
- return Arrays.hashCode(opaqueInfo);
+ return Objects.hashCode(opaqueInfo);
}
@Override
diff --git a/protocols/ospf/protocol/src/main/java/org/onosproject/ospf/protocol/lsa/types/OpaqueLsa9.java b/protocols/ospf/protocol/src/main/java/org/onosproject/ospf/protocol/lsa/types/OpaqueLsa9.java
index 1bff5e0..5b60684 100644
--- a/protocols/ospf/protocol/src/main/java/org/onosproject/ospf/protocol/lsa/types/OpaqueLsa9.java
+++ b/protocols/ospf/protocol/src/main/java/org/onosproject/ospf/protocol/lsa/types/OpaqueLsa9.java
@@ -16,13 +16,12 @@
package org.onosproject.ospf.protocol.lsa.types;
import com.google.common.base.MoreObjects;
+import com.google.common.base.Objects;
import com.google.common.primitives.Bytes;
import org.jboss.netty.buffer.ChannelBuffer;
import org.onosproject.ospf.controller.OspfLsaType;
import org.onosproject.ospf.protocol.lsa.OpaqueLsaHeader;
-import java.util.Arrays;
-
/**
* Representation of an Opaque LSA of type link local (9).
*/
@@ -109,12 +108,12 @@
return false;
}
OpaqueLsa9 that = (OpaqueLsa9) o;
- return Arrays.equals(opaqueInfo, that.opaqueInfo);
+ return Objects.equal(opaqueInfo, that.opaqueInfo);
}
@Override
public int hashCode() {
- return Arrays.hashCode(opaqueInfo);
+ return Objects.hashCode(opaqueInfo);
}
@Override
diff --git a/protocols/ospf/protocol/src/main/java/org/onosproject/ospf/protocol/ospfpacket/OspfMessageReader.java b/protocols/ospf/protocol/src/main/java/org/onosproject/ospf/protocol/ospfpacket/OspfMessageReader.java
index c07e2ab..cd62374 100644
--- a/protocols/ospf/protocol/src/main/java/org/onosproject/ospf/protocol/ospfpacket/OspfMessageReader.java
+++ b/protocols/ospf/protocol/src/main/java/org/onosproject/ospf/protocol/ospfpacket/OspfMessageReader.java
@@ -18,6 +18,7 @@
import org.jboss.netty.buffer.ChannelBuffer;
import org.onlab.packet.Ip4Address;
+import org.onosproject.ospf.controller.OspfMessage;
import org.onosproject.ospf.exceptions.OspfErrorType;
import org.onosproject.ospf.exceptions.OspfParseException;
import org.onosproject.ospf.protocol.ospfpacket.types.DdPacket;
@@ -46,15 +47,8 @@
public OspfMessage readFromBuffer(ChannelBuffer channelBuffer)
throws Exception {
- if (channelBuffer.readableBytes() < OspfUtil.PACKET_MINIMUM_LENGTH) {
- log.error("Packet should have minimum length...");
- throw new OspfParseException(OspfErrorType.MESSAGE_HEADER_ERROR, OspfErrorType.BAD_MESSAGE_LENGTH);
- }
-
try {
OspfPacketHeader ospfHeader = getOspfHeader(channelBuffer);
- int len = ospfHeader.ospfPacLength() - OspfUtil.OSPF_HEADER_LENGTH;
-
OspfMessage ospfMessage = null;
switch (ospfHeader.ospfType()) {
case OspfParameters.HELLO:
@@ -81,7 +75,8 @@
try {
log.debug("{} Received::Message Length :: {} ", ospfMessage.ospfMessageType(),
ospfHeader.ospfPacLength());
- ospfMessage.readFrom(channelBuffer.readBytes(len));
+ ospfMessage.readFrom(channelBuffer.readBytes(ospfHeader.ospfPacLength() -
+ OspfUtil.OSPF_HEADER_LENGTH));
} catch (Exception e) {
throw new OspfParseException(OspfErrorType.OSPF_MESSAGE_ERROR,
OspfErrorType.BAD_MESSAGE);
@@ -105,22 +100,13 @@
private OspfPacketHeader getOspfHeader(ChannelBuffer channelBuffer) throws Exception {
OspfPacketHeader ospfPacketHeader = new OspfPacketHeader();
- byte[] sourceIpBytes = new byte[OspfUtil.FOUR_BYTES];
- channelBuffer.readBytes(sourceIpBytes, 0, OspfUtil.FOUR_BYTES);
- Ip4Address sourceIP = Ip4Address.valueOf(sourceIpBytes);
-
- // Determine ospf version & Packet Type
+ // Determine OSPF version & Packet Type
int version = channelBuffer.readByte(); //byte 1 is ospf version
int packetType = channelBuffer.readByte(); //byte 2 is ospf packet type
// byte 3 & 4 combine is packet length.
int packetLength = channelBuffer.readShort();
- if (packetLength > channelBuffer.readableBytes() + OspfUtil.FOUR_BYTES) {
- log.error("Packet should have minimum length...");
- throw new OspfParseException(OspfErrorType.MESSAGE_HEADER_ERROR, OspfErrorType.BAD_MESSAGE_LENGTH);
- }
-
byte[] tempByteArray = new byte[OspfUtil.FOUR_BYTES];
channelBuffer.readBytes(tempByteArray, 0, OspfUtil.FOUR_BYTES);
Ip4Address routerId = Ip4Address.valueOf(tempByteArray);
@@ -133,7 +119,6 @@
int auType = channelBuffer.readUnsignedShort();
int authentication = (int) channelBuffer.readLong();
- ospfPacketHeader.setSourceIp(sourceIP);
ospfPacketHeader.setOspfVer(version);
ospfPacketHeader.setOspftype(packetType);
ospfPacketHeader.setOspfPacLength(packetLength);
diff --git a/protocols/ospf/protocol/src/main/java/org/onosproject/ospf/protocol/ospfpacket/OspfMessageWriter.java b/protocols/ospf/protocol/src/main/java/org/onosproject/ospf/protocol/ospfpacket/OspfMessageWriter.java
index 6e0f502..b89d860 100644
--- a/protocols/ospf/protocol/src/main/java/org/onosproject/ospf/protocol/ospfpacket/OspfMessageWriter.java
+++ b/protocols/ospf/protocol/src/main/java/org/onosproject/ospf/protocol/ospfpacket/OspfMessageWriter.java
@@ -1,5 +1,5 @@
/*
-* Copyright 2016-present Open Networking Laboratory
+* Copyright 2016 Open Networking Laboratory
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -15,41 +15,36 @@
*/
package org.onosproject.ospf.protocol.ospfpacket;
-import org.jboss.netty.buffer.ChannelBuffer;
-import org.jboss.netty.buffer.ChannelBuffers;
+import org.onosproject.ospf.controller.OspfMessage;
import org.onosproject.ospf.protocol.util.OspfParameters;
import org.onosproject.ospf.protocol.util.OspfUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
- * A message writer which writes an OspfMessage to ChannelBuffer.
+ * A message writer which writes an OSPF message to byte array.
*/
public class OspfMessageWriter {
private static final Logger log = LoggerFactory.getLogger(OspfMessageWriter.class);
/**
- * Writes OSPF message to ChannelBuffer.
+ * Writes OSPF message to byte array.
*
* @param ospfMessage OSPF message
+ * @param interfaceIndex interface index
* @param interfaceState interface state
- * @param interfaceType interface type
- * @return channelBuffer channel buffer instance
- * @throws Exception might throws exception while parsing message
+ * @return message as byte array
*/
- public ChannelBuffer writeToBuffer(OspfMessage ospfMessage, int interfaceState,
- int interfaceType) throws Exception {
+ public byte[] getMessage(OspfMessage ospfMessage, int interfaceIndex, int interfaceState) {
- ChannelBuffer buf = null;
+ byte[] buf = null;
switch (ospfMessage.ospfMessageType().value()) {
case OspfParameters.HELLO:
case OspfParameters.LSACK:
- buf = writeMessageToBuffer(ospfMessage, interfaceState);
- break;
case OspfParameters.DD:
case OspfParameters.LSREQUEST:
case OspfParameters.LSUPDATE:
- buf = writeMessageToBuffer(ospfMessage, interfaceState);
+ buf = writeMessageToBytes(ospfMessage, interfaceIndex, interfaceState);
break;
default:
log.debug("Message Writer[Encoder] - Unknown Message to encode..!!!");
@@ -60,14 +55,13 @@
}
/**
- * Writes an OSPF Message to channel buffer.
+ * Writes an OSPF Message to byte array.
*
* @param ospfMessage OSPF Message instance
* @param interfaceState interface state
- * @return channelBuffer instance
+ * @return message as byte array
*/
- private ChannelBuffer writeMessageToBuffer(OspfMessage ospfMessage, int interfaceState) throws Exception {
- ChannelBuffer channelBuffer = null;
+ private byte[] writeMessageToBytes(OspfMessage ospfMessage, int interfaceIndex, int interfaceState) {
byte[] ospfMessageAsByte = ospfMessage.asBytes();
//Add the length and checksum in byte array at length position 2 & 3 and Checksum position
ospfMessageAsByte = OspfUtil.addLengthAndCheckSum(ospfMessageAsByte, OspfUtil.OSPFPACKET_LENGTH_POS1,
@@ -76,16 +70,13 @@
OspfUtil.OSPFPACKET_CHECKSUM_POS2);
//Add Interface State Info and destination IP as metadata
if (interfaceState == OspfParameters.DR || interfaceState == OspfParameters.BDR) {
- ospfMessageAsByte = OspfUtil.addMetadata(ospfMessageAsByte, OspfUtil.JOIN_ALL_DROUTERS,
+ ospfMessageAsByte = OspfUtil.addMetadata(interfaceIndex, ospfMessageAsByte, OspfUtil.JOIN_ALL_DROUTERS,
ospfMessage.destinationIp());
} else {
- ospfMessageAsByte = OspfUtil.addMetadata(ospfMessageAsByte, OspfUtil.ONLY_ALL_SPF_ROUTERS,
+ ospfMessageAsByte = OspfUtil.addMetadata(interfaceIndex, ospfMessageAsByte, OspfUtil.ONLY_ALL_SPF_ROUTERS,
ospfMessage.destinationIp());
}
- channelBuffer = ChannelBuffers.buffer(ospfMessageAsByte.length);
- channelBuffer.writeBytes(ospfMessageAsByte);
-
- return channelBuffer;
+ return ospfMessageAsByte;
}
}
\ No newline at end of file
diff --git a/protocols/ospf/protocol/src/main/java/org/onosproject/ospf/protocol/ospfpacket/OspfPacketHeader.java b/protocols/ospf/protocol/src/main/java/org/onosproject/ospf/protocol/ospfpacket/OspfPacketHeader.java
index a57e444..556ce5c 100644
--- a/protocols/ospf/protocol/src/main/java/org/onosproject/ospf/protocol/ospfpacket/OspfPacketHeader.java
+++ b/protocols/ospf/protocol/src/main/java/org/onosproject/ospf/protocol/ospfpacket/OspfPacketHeader.java
@@ -18,8 +18,9 @@
import com.google.common.base.MoreObjects;
import org.jboss.netty.buffer.ChannelBuffer;
import org.onlab.packet.Ip4Address;
+import org.onosproject.ospf.controller.OspfMessage;
+import org.onosproject.ospf.controller.OspfPacketType;
import org.onosproject.ospf.exceptions.OspfParseException;
-import org.onosproject.ospf.protocol.util.OspfPacketType;
/**
* Defines the OSPF Packet Header, fields and access methods.
@@ -57,6 +58,7 @@
private int authentication;
private Ip4Address destinationIp;
private Ip4Address sourceIp;
+ private int interfaceIndex;
/**
* Gets the source IP.
@@ -256,11 +258,30 @@
}
/**
+ * Returns the interface index on which the message received.
+ *
+ * @return interface index on which the message received
+ */
+ public int interfaceIndex() {
+ return interfaceIndex;
+ }
+
+ /**
+ * Sets the interface index on which the message received.
+ *
+ * @param interfaceIndex interface index on which the message received
+ */
+ public void setInterfaceIndex(int interfaceIndex) {
+ this.interfaceIndex = interfaceIndex;
+ }
+
+ /**
* Populates the header from the packetHeader instance.
*
* @param ospfPacketHeader packet header instance.
*/
public void populateHeader(OspfPacketHeader ospfPacketHeader) {
+ this.setInterfaceIndex(ospfPacketHeader.interfaceIndex());
this.setSourceIp(ospfPacketHeader.sourceIp());
this.setOspfVer(ospfPacketHeader.ospfVersion());
this.setOspftype(ospfPacketHeader.ospfType());
diff --git a/protocols/ospf/protocol/src/main/java/org/onosproject/ospf/protocol/ospfpacket/types/DdPacket.java b/protocols/ospf/protocol/src/main/java/org/onosproject/ospf/protocol/ospfpacket/types/DdPacket.java
index dbadad7..2a78df7 100644
--- a/protocols/ospf/protocol/src/main/java/org/onosproject/ospf/protocol/ospfpacket/types/DdPacket.java
+++ b/protocols/ospf/protocol/src/main/java/org/onosproject/ospf/protocol/ospfpacket/types/DdPacket.java
@@ -23,7 +23,7 @@
import org.onosproject.ospf.protocol.lsa.LsaHeader;
import org.onosproject.ospf.protocol.lsa.OpaqueLsaHeader;
import org.onosproject.ospf.protocol.ospfpacket.OspfPacketHeader;
-import org.onosproject.ospf.protocol.util.OspfPacketType;
+import org.onosproject.ospf.controller.OspfPacketType;
import org.onosproject.ospf.protocol.util.OspfParameters;
import org.onosproject.ospf.protocol.util.OspfUtil;
import org.slf4j.Logger;
diff --git a/protocols/ospf/protocol/src/main/java/org/onosproject/ospf/protocol/ospfpacket/types/HelloPacket.java b/protocols/ospf/protocol/src/main/java/org/onosproject/ospf/protocol/ospfpacket/types/HelloPacket.java
index 1c0ae16..a21ff6c 100644
--- a/protocols/ospf/protocol/src/main/java/org/onosproject/ospf/protocol/ospfpacket/types/HelloPacket.java
+++ b/protocols/ospf/protocol/src/main/java/org/onosproject/ospf/protocol/ospfpacket/types/HelloPacket.java
@@ -22,7 +22,7 @@
import org.onosproject.ospf.exceptions.OspfErrorType;
import org.onosproject.ospf.exceptions.OspfParseException;
import org.onosproject.ospf.protocol.ospfpacket.OspfPacketHeader;
-import org.onosproject.ospf.protocol.util.OspfPacketType;
+import org.onosproject.ospf.controller.OspfPacketType;
import org.onosproject.ospf.protocol.util.OspfUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
diff --git a/protocols/ospf/protocol/src/main/java/org/onosproject/ospf/protocol/ospfpacket/types/LsAcknowledge.java b/protocols/ospf/protocol/src/main/java/org/onosproject/ospf/protocol/ospfpacket/types/LsAcknowledge.java
index 4c6f993..0f2edff 100644
--- a/protocols/ospf/protocol/src/main/java/org/onosproject/ospf/protocol/ospfpacket/types/LsAcknowledge.java
+++ b/protocols/ospf/protocol/src/main/java/org/onosproject/ospf/protocol/ospfpacket/types/LsAcknowledge.java
@@ -23,7 +23,7 @@
import org.onosproject.ospf.protocol.lsa.LsaHeader;
import org.onosproject.ospf.protocol.lsa.OpaqueLsaHeader;
import org.onosproject.ospf.protocol.ospfpacket.OspfPacketHeader;
-import org.onosproject.ospf.protocol.util.OspfPacketType;
+import org.onosproject.ospf.controller.OspfPacketType;
import org.onosproject.ospf.protocol.util.OspfParameters;
import org.onosproject.ospf.protocol.util.OspfUtil;
import org.slf4j.Logger;
diff --git a/protocols/ospf/protocol/src/main/java/org/onosproject/ospf/protocol/ospfpacket/types/LsRequest.java b/protocols/ospf/protocol/src/main/java/org/onosproject/ospf/protocol/ospfpacket/types/LsRequest.java
index 630edac..efa329a 100644
--- a/protocols/ospf/protocol/src/main/java/org/onosproject/ospf/protocol/ospfpacket/types/LsRequest.java
+++ b/protocols/ospf/protocol/src/main/java/org/onosproject/ospf/protocol/ospfpacket/types/LsRequest.java
@@ -22,7 +22,7 @@
import org.onosproject.ospf.exceptions.OspfParseException;
import org.onosproject.ospf.protocol.ospfpacket.OspfPacketHeader;
import org.onosproject.ospf.protocol.ospfpacket.subtype.LsRequestPacket;
-import org.onosproject.ospf.protocol.util.OspfPacketType;
+import org.onosproject.ospf.controller.OspfPacketType;
import org.onosproject.ospf.protocol.util.OspfUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
diff --git a/protocols/ospf/protocol/src/main/java/org/onosproject/ospf/protocol/ospfpacket/types/LsUpdate.java b/protocols/ospf/protocol/src/main/java/org/onosproject/ospf/protocol/ospfpacket/types/LsUpdate.java
index bb7858e..706e9d2 100644
--- a/protocols/ospf/protocol/src/main/java/org/onosproject/ospf/protocol/ospfpacket/types/LsUpdate.java
+++ b/protocols/ospf/protocol/src/main/java/org/onosproject/ospf/protocol/ospfpacket/types/LsUpdate.java
@@ -32,7 +32,7 @@
import org.onosproject.ospf.protocol.lsa.types.RouterLsa;
import org.onosproject.ospf.protocol.lsa.types.SummaryLsa;
import org.onosproject.ospf.protocol.ospfpacket.OspfPacketHeader;
-import org.onosproject.ospf.protocol.util.OspfPacketType;
+import org.onosproject.ospf.controller.OspfPacketType;
import org.onosproject.ospf.protocol.util.OspfParameters;
import org.onosproject.ospf.protocol.util.OspfUtil;
import org.slf4j.Logger;
diff --git a/protocols/ospf/protocol/src/main/java/org/onosproject/ospf/protocol/util/ChecksumCalculator.java b/protocols/ospf/protocol/src/main/java/org/onosproject/ospf/protocol/util/ChecksumCalculator.java
index 7b0140a..7ba504f 100644
--- a/protocols/ospf/protocol/src/main/java/org/onosproject/ospf/protocol/util/ChecksumCalculator.java
+++ b/protocols/ospf/protocol/src/main/java/org/onosproject/ospf/protocol/util/ChecksumCalculator.java
@@ -25,7 +25,7 @@
import org.onosproject.ospf.protocol.lsa.types.OpaqueLsa9;
import org.onosproject.ospf.protocol.lsa.types.RouterLsa;
import org.onosproject.ospf.protocol.lsa.types.SummaryLsa;
-import org.onosproject.ospf.protocol.ospfpacket.OspfMessage;
+import org.onosproject.ospf.controller.OspfMessage;
import org.onosproject.ospf.protocol.ospfpacket.types.DdPacket;
import org.onosproject.ospf.protocol.ospfpacket.types.HelloPacket;
import org.onosproject.ospf.protocol.ospfpacket.types.LsAcknowledge;
diff --git a/protocols/ospf/protocol/src/main/java/org/onosproject/ospf/protocol/util/OspfInterfaceState.java b/protocols/ospf/protocol/src/main/java/org/onosproject/ospf/protocol/util/OspfInterfaceState.java
index 82a00f0..a8036b5 100644
--- a/protocols/ospf/protocol/src/main/java/org/onosproject/ospf/protocol/util/OspfInterfaceState.java
+++ b/protocols/ospf/protocol/src/main/java/org/onosproject/ospf/protocol/util/OspfInterfaceState.java
@@ -31,20 +31,55 @@
private int value;
/**
- * Creates an instance of Interface State.
+ * Creates an instance of interface state.
*
- * @param value Interface State value
+ * @param value Interface state value
*/
OspfInterfaceState(int value) {
this.value = value;
}
/**
- * Gets value for Interface State.
+ * Gets value for Interface state.
*
- * @return value Interface State
+ * @return value Interface state
*/
public int value() {
return value;
}
+
+ /**
+ * Gets interface state.
+ *
+ * @return interface state
+ */
+ public String interfaceState() {
+ String state = null;
+ switch (value) {
+ case 1:
+ state = "DOWN";
+ break;
+ case 2:
+ state = "LOOPBACK";
+ break;
+ case 3:
+ state = "WAITING";
+ break;
+ case 4:
+ state = "POINT2POINT";
+ break;
+ case 5:
+ state = "DROTHER";
+ break;
+ case 6:
+ state = "BDR";
+ break;
+ case 7:
+ state = "DR";
+ break;
+ default:
+ break;
+ }
+ return state;
+ }
}
\ No newline at end of file
diff --git a/protocols/ospf/protocol/src/main/java/org/onosproject/ospf/protocol/util/OspfUtil.java b/protocols/ospf/protocol/src/main/java/org/onosproject/ospf/protocol/util/OspfUtil.java
index 5372804..4509d32 100644
--- a/protocols/ospf/protocol/src/main/java/org/onosproject/ospf/protocol/util/OspfUtil.java
+++ b/protocols/ospf/protocol/src/main/java/org/onosproject/ospf/protocol/util/OspfUtil.java
@@ -36,10 +36,11 @@
* Representation of an OSPF constants and utility methods.
*/
public final class OspfUtil {
-
public static final int OSPF_VERSION_2 = 2;
public static final int OSPF_VERSION = OSPF_VERSION_2;
public static final int PACKET_MINIMUM_LENGTH = 24;
+ public static final int METADATA_LEN = 5;
+ public static final int MINIMUM_FRAME_LEN = 1487;
public static final int OSPF_HEADER_LENGTH = 24;
public static final int LSA_HEADER_LENGTH = 20;
public static final int DD_HEADER_LENGTH = OSPF_HEADER_LENGTH + 8;
@@ -52,6 +53,8 @@
public static final int LSAPACKET_CHECKSUM_POS2 = 17;
public static final Ip4Address ALL_SPF_ROUTERS = Ip4Address.valueOf("224.0.0.5");
public static final Ip4Address ALL_DROUTERS = Ip4Address.valueOf("224.0.0.6");
+ public static final Ip4Address DEFAULTIP = Ip4Address.valueOf("0.0.0.0");
+ public static final int RETRANSMITINTERVAL = 5;
public static final int ONLY_ALL_SPF_ROUTERS = 1;
public static final int JOIN_ALL_DROUTERS = 2;
public static final int INITIALIZE_SET = 1;
@@ -62,9 +65,16 @@
public static final int NOT_MASTER = 0;
public static final int NOT_ASSIGNED = 0;
public static final int FOUR_BYTES = 4;
+ public static final int FIVE_BYTES = 5;
public static final int EIGHT_BYTES = 8;
public static final int TWELVE_BYTES = 12;
public static final int EXTERNAL_DESTINATION_LENGTH = 12;
+ public static final String SHOST = "127.0.0.1";
+ public static final int SPORT = 7000;
+ public static final int MTU = 1500;
+ public static final char CONFIG_LENGTH = 1498;
+ public static final char ROUTER_PRIORITY = 0;
+ public static final int HELLO_PACKET_OPTIONS = 2;
private static final Logger log =
LoggerFactory.getLogger(OspfUtil.class);
@@ -398,18 +408,21 @@
/**
* Adds metadata to ospf packet like whether to join multi cast group and destination IP.
*
+ * @param interfaceIndex interface index
* @param ospfPacket OSPF packet
* @param allDroutersValue whether to join multi cast or not
* @param destinationIp destination ip address
* @return byte array
*/
- public static byte[] addMetadata(byte[] ospfPacket, int allDroutersValue, Ip4Address destinationIp) {
+ public static byte[] addMetadata(int interfaceIndex, byte[] ospfPacket, int allDroutersValue,
+ Ip4Address destinationIp) {
byte[] packet;
+ byte[] interfaceIndexByteVal = {(byte) interfaceIndex};
byte[] allDroutersByteVal = {(byte) allDroutersValue};
byte[] destIpAsBytes = destinationIp.toOctets();
- byte[] metadata = Bytes.concat(allDroutersByteVal, destIpAsBytes);
-
- packet = Bytes.concat(metadata, ospfPacket);
+ byte[] metadata = Bytes.concat(interfaceIndexByteVal, allDroutersByteVal);
+ metadata = Bytes.concat(metadata, destIpAsBytes);
+ packet = Bytes.concat(ospfPacket, metadata);
return packet;
}
diff --git a/protocols/ospf/protocol/src/test/java/org/onosproject/ospf/protocol/ospfpacket/OspfMessageReaderTest.java b/protocols/ospf/protocol/src/test/java/org/onosproject/ospf/protocol/ospfpacket/OspfMessageReaderTest.java
index a2d5ca1..d390af2 100644
--- a/protocols/ospf/protocol/src/test/java/org/onosproject/ospf/protocol/ospfpacket/OspfMessageReaderTest.java
+++ b/protocols/ospf/protocol/src/test/java/org/onosproject/ospf/protocol/ospfpacket/OspfMessageReaderTest.java
@@ -20,6 +20,7 @@
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
+import org.onosproject.ospf.protocol.util.OspfUtil;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.CoreMatchers.notNullValue;
@@ -31,17 +32,17 @@
public class OspfMessageReaderTest {
- private final byte[] packet1 = {1, 1, 1, 1, 2, 1, 0, 44, -64, -88, -86, 8,
+ private final byte[] packet1 = {2, 1, 0, 44, -64, -88, -86, 8,
0, 0, 0, 1, 39, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, -1, 0, 0,
10, 2, 1, 0, 0, 0, 40, -64, -88, -86, 8, 0, 0, 0, 0};
- private final byte[] packet2 = {1, 1, 1, 1, 2, 2, 0, 52, -64, -88, -86, 8, 0,
+ private final byte[] packet2 = {2, 2, 0, 52, -64, -88, -86, 8, 0,
0, 0, 1, -96, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, -36, 2, 7, 65, 119,
-87, 126, 0, 23, 2, 1, 10, 10, 10, 10, 10, 10, 10, 10, -128, 0, 0, 6,
-69, 26, 0, 36};
- private final byte[] packet3 = {1, 1, 1, 1, 2, 3, 0, 36, -64, -88, -86, 3, 0,
+ private final byte[] packet3 = {2, 3, 0, 36, -64, -88, -86, 3, 0,
0, 0, 1, -67, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, -64, -88,
-86, 8, -64, -88, -86, 8};
- private final byte[] packet4 = {1, 1, 1, 1, 2, 4, 1, 36, -64, -88, -86, 3, 0,
+ private final byte[] packet4 = {2, 4, 1, 36, -64, -88, -86, 3, 0,
0, 0, 1, 54, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0,
2, 2, 1, -64, -88, -86, 3, -64, -88, -86, 3, -128, 0,
0, 1, 58, -100, 0, 48, 2, 0, 0, 2, -64, -88, -86,
@@ -62,7 +63,7 @@
0, 0, 0, 0, 0, 0, 0, 3, 2, 5, -64, -88, -84, 0, -64,
-88, -86, 2, -128, 0, 0, 1, 51, 65, 0, 36, -1, -1, -1, 0,
-128, 0, 0, 20, -64, -88, -86, 10, 0, 0, 0, 0};
- private final byte[] packet5 = {1, 1, 1, 1, 2, 5, 0, 44, -64, -88, -86, 8, 0, 0,
+ private final byte[] packet5 = {2, 5, 0, 44, -64, -88, -86, 8, 0, 0,
0, 1, -30, -12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 16, 2, 1, -64, -88, -86,
2, -64, -88, -86, 2, -128, 0, 0, 1, 74, -114, 0, 48};
private OspfMessageReader ospfMessageReader;
@@ -84,21 +85,39 @@
*/
@Test
public void testReadFromBuffer() throws Exception {
- channelBuffer = ChannelBuffers.copiedBuffer(packet1);
+ channelBuffer = ChannelBuffers.copiedBuffer(framePacket(packet1));
ospfMessageReader.readFromBuffer(channelBuffer);
- channelBuffer = ChannelBuffers.copiedBuffer(packet2);
+ channelBuffer = ChannelBuffers.copiedBuffer(framePacket(packet2));
ospfMessageReader.readFromBuffer(channelBuffer);
- channelBuffer = ChannelBuffers.copiedBuffer(packet3);
+ channelBuffer = ChannelBuffers.copiedBuffer(framePacket(packet3));
ospfMessageReader.readFromBuffer(channelBuffer);
- channelBuffer = ChannelBuffers.copiedBuffer(packet4);
+ channelBuffer = ChannelBuffers.copiedBuffer(framePacket(packet4));
ospfMessageReader.readFromBuffer(channelBuffer);
- channelBuffer = ChannelBuffers.copiedBuffer(packet5);
+ channelBuffer = ChannelBuffers.copiedBuffer(framePacket(packet5));
ospfMessageReader.readFromBuffer(channelBuffer);
assertThat(ospfMessageReader, is(notNullValue()));
+ }
+ /**
+ * Frames the packet to min frame length.
+ *
+ * @param ospfPacket OSPF packet
+ * @return OSPF packet as byte array
+ */
+ private byte[] framePacket(byte[] ospfPacket) {
+ //Set the length of the packet
+ //Get the total length of the packet
+ int length = ospfPacket.length;
+ //PDU_LENGTH + 1 byte for interface index
+ if (length < OspfUtil.MINIMUM_FRAME_LEN) {
+ byte[] bytes = new byte[OspfUtil.MINIMUM_FRAME_LEN + 5];
+ System.arraycopy(ospfPacket, 0, bytes, 0, length);
+ return bytes;
+ }
+ return ospfPacket;
}
}
\ No newline at end of file
diff --git a/protocols/ospf/protocol/src/test/java/org/onosproject/ospf/protocol/ospfpacket/OspfMessageWriterTest.java b/protocols/ospf/protocol/src/test/java/org/onosproject/ospf/protocol/ospfpacket/OspfMessageWriterTest.java
index 4208a06..bc0563d 100644
--- a/protocols/ospf/protocol/src/test/java/org/onosproject/ospf/protocol/ospfpacket/OspfMessageWriterTest.java
+++ b/protocols/ospf/protocol/src/test/java/org/onosproject/ospf/protocol/ospfpacket/OspfMessageWriterTest.java
@@ -57,10 +57,10 @@
}
/**
- * Tests writeToBuffer() method.
+ * Tests getMessage() method.
*/
@Test
- public void testWriteToBuffer() throws Exception {
+ public void testGetMessage() throws Exception {
helloPacket = new HelloPacket();
helloPacket.setAuthType(1);
helloPacket.setOspftype(1);
@@ -79,12 +79,12 @@
helloPacket.setBdr(Ip4Address.valueOf("2.2.2.2"));
helloPacket.addNeighbor(Ip4Address.valueOf("8.8.8.8"));
helloPacket.setDestinationIp(Ip4Address.valueOf("5.5.5.5"));
- ospfMessageWriter.writeToBuffer(helloPacket, 7, 1);
+ ospfMessageWriter.getMessage(helloPacket, 7, 1);
assertThat(ospfMessageWriter, is(notNullValue()));
}
@Test(expected = Exception.class)
- public void testWriteToBuffer1() throws Exception {
+ public void testGetMessage1() throws Exception {
ddPacket = new DdPacket();
ddPacket.setAuthType(1);
@@ -95,12 +95,12 @@
ddPacket.setAuthentication(2);
ddPacket.setOspfPacLength(48);
ddPacket.setOspfVer(2);
- ospfMessageWriter.writeToBuffer(ddPacket, 1, 1);
+ ospfMessageWriter.getMessage(ddPacket, 1, 1);
assertThat(ospfMessageWriter, is(notNullValue()));
}
@Test(expected = Exception.class)
- public void testWriteToBuffer2() throws Exception {
+ public void testGetMessage2() throws Exception {
lsAck = new LsAcknowledge();
lsAck.setAuthType(1);
@@ -111,12 +111,12 @@
lsAck.setAuthentication(2);
lsAck.setOspfPacLength(48);
lsAck.setOspfVer(2);
- ospfMessageWriter.writeToBuffer(lsAck, 1, 1);
+ ospfMessageWriter.getMessage(lsAck, 1, 1);
assertThat(ospfMessageWriter, is(notNullValue()));
}
@Test(expected = Exception.class)
- public void testWriteToBuffer3() throws Exception {
+ public void testGetMessage3() throws Exception {
lsReq = new LsRequest();
lsReq.setAuthType(1);
lsReq.setOspftype(3);
@@ -126,12 +126,15 @@
lsReq.setAuthentication(2);
lsReq.setOspfPacLength(48);
lsReq.setOspfVer(2);
- ospfMessageWriter.writeToBuffer(lsReq, 1, 1);
+ ospfMessageWriter.getMessage(lsReq, 1, 1);
assertThat(ospfMessageWriter, is(notNullValue()));
}
+ /**
+ * Tests getMessage() method.
+ */
@Test(expected = Exception.class)
- public void testWriteToBuffer4() throws Exception {
+ public void testGetMessage4() throws Exception {
lsUpdate = new LsUpdate();
lsUpdate.setAuthType(1);
lsUpdate.setOspftype(3);
@@ -141,15 +144,15 @@
lsUpdate.setAuthentication(2);
lsUpdate.setOspfPacLength(48);
lsUpdate.setOspfVer(2);
- ospfMessageWriter.writeToBuffer(lsUpdate, 1, 1);
+ ospfMessageWriter.getMessage(lsUpdate, 1, 1);
assertThat(ospfMessageWriter, is(notNullValue()));
}
/**
- * Tests writeToBuffer() method.
+ * Tests getMessage() method.
*/
@Test(expected = Exception.class)
- public void testWriteToBuffer5() throws Exception {
+ public void testGetMessage5() throws Exception {
lsAck = new LsAcknowledge();
lsAck.setAuthType(1);
lsAck.setOspftype(5);
@@ -159,6 +162,6 @@
lsAck.setAuthentication(2);
lsAck.setOspfPacLength(48);
lsAck.setOspfVer(2);
- ospfMessageWriter.writeToBuffer(lsAck, 1, 1);
+ ospfMessageWriter.getMessage(lsAck, 1, 1);
}
}
\ No newline at end of file
diff --git a/protocols/ospf/protocol/src/test/java/org/onosproject/ospf/protocol/ospfpacket/types/DdPacketTest.java b/protocols/ospf/protocol/src/test/java/org/onosproject/ospf/protocol/ospfpacket/types/DdPacketTest.java
index 47b72e5..91404d1 100644
--- a/protocols/ospf/protocol/src/test/java/org/onosproject/ospf/protocol/ospfpacket/types/DdPacketTest.java
+++ b/protocols/ospf/protocol/src/test/java/org/onosproject/ospf/protocol/ospfpacket/types/DdPacketTest.java
@@ -22,10 +22,10 @@
import org.junit.Before;
import org.junit.Test;
import org.onlab.packet.Ip4Address;
+import org.onosproject.ospf.controller.OspfPacketType;
import org.onosproject.ospf.protocol.lsa.LsaHeader;
import org.onosproject.ospf.protocol.lsa.OpaqueLsaHeader;
import org.onosproject.ospf.protocol.ospfpacket.OspfPacketHeader;
-import org.onosproject.ospf.protocol.util.OspfPacketType;
import java.util.List;
import java.util.Vector;
diff --git a/protocols/ospf/protocol/src/test/java/org/onosproject/ospf/protocol/ospfpacket/types/HelloPacketTest.java b/protocols/ospf/protocol/src/test/java/org/onosproject/ospf/protocol/ospfpacket/types/HelloPacketTest.java
index 6ed9d0c..acdbd3a 100644
--- a/protocols/ospf/protocol/src/test/java/org/onosproject/ospf/protocol/ospfpacket/types/HelloPacketTest.java
+++ b/protocols/ospf/protocol/src/test/java/org/onosproject/ospf/protocol/ospfpacket/types/HelloPacketTest.java
@@ -21,8 +21,8 @@
import org.junit.Before;
import org.junit.Test;
import org.onlab.packet.Ip4Address;
+import org.onosproject.ospf.controller.OspfPacketType;
import org.onosproject.ospf.protocol.ospfpacket.OspfPacketHeader;
-import org.onosproject.ospf.protocol.util.OspfPacketType;
import java.util.Vector;
diff --git a/protocols/ospf/protocol/src/test/java/org/onosproject/ospf/protocol/ospfpacket/types/LsAcknowledgeTest.java b/protocols/ospf/protocol/src/test/java/org/onosproject/ospf/protocol/ospfpacket/types/LsAcknowledgeTest.java
index aea5723..1d8b3e0 100644
--- a/protocols/ospf/protocol/src/test/java/org/onosproject/ospf/protocol/ospfpacket/types/LsAcknowledgeTest.java
+++ b/protocols/ospf/protocol/src/test/java/org/onosproject/ospf/protocol/ospfpacket/types/LsAcknowledgeTest.java
@@ -22,10 +22,10 @@
import org.junit.Before;
import org.junit.Test;
import org.onlab.packet.Ip4Address;
+import org.onosproject.ospf.controller.OspfPacketType;
import org.onosproject.ospf.protocol.lsa.LsaHeader;
import org.onosproject.ospf.protocol.lsa.OpaqueLsaHeader;
import org.onosproject.ospf.protocol.ospfpacket.OspfPacketHeader;
-import org.onosproject.ospf.protocol.util.OspfPacketType;
import java.util.List;
diff --git a/protocols/ospf/protocol/src/test/java/org/onosproject/ospf/protocol/ospfpacket/types/LsRequestTest.java b/protocols/ospf/protocol/src/test/java/org/onosproject/ospf/protocol/ospfpacket/types/LsRequestTest.java
index 6238b88..ece1fbe 100644
--- a/protocols/ospf/protocol/src/test/java/org/onosproject/ospf/protocol/ospfpacket/types/LsRequestTest.java
+++ b/protocols/ospf/protocol/src/test/java/org/onosproject/ospf/protocol/ospfpacket/types/LsRequestTest.java
@@ -21,9 +21,9 @@
import org.junit.Before;
import org.junit.Test;
import org.onlab.packet.Ip4Address;
+import org.onosproject.ospf.controller.OspfPacketType;
import org.onosproject.ospf.protocol.ospfpacket.OspfPacketHeader;
import org.onosproject.ospf.protocol.ospfpacket.subtype.LsRequestPacket;
-import org.onosproject.ospf.protocol.util.OspfPacketType;
import java.net.UnknownHostException;
import java.util.List;
diff --git a/protocols/ospf/protocol/src/test/java/org/onosproject/ospf/protocol/ospfpacket/types/LsUpdateTest.java b/protocols/ospf/protocol/src/test/java/org/onosproject/ospf/protocol/ospfpacket/types/LsUpdateTest.java
index 75611f6..fac03eb 100644
--- a/protocols/ospf/protocol/src/test/java/org/onosproject/ospf/protocol/ospfpacket/types/LsUpdateTest.java
+++ b/protocols/ospf/protocol/src/test/java/org/onosproject/ospf/protocol/ospfpacket/types/LsUpdateTest.java
@@ -22,6 +22,7 @@
import org.junit.Test;
import org.onlab.packet.Ip4Address;
import org.onosproject.ospf.controller.OspfLsa;
+import org.onosproject.ospf.controller.OspfPacketType;
import org.onosproject.ospf.protocol.lsa.LsaHeader;
import org.onosproject.ospf.protocol.lsa.OpaqueLsaHeader;
import org.onosproject.ospf.protocol.lsa.types.AsbrSummaryLsa;
@@ -33,7 +34,6 @@
import org.onosproject.ospf.protocol.lsa.types.RouterLsa;
import org.onosproject.ospf.protocol.lsa.types.SummaryLsa;
import org.onosproject.ospf.protocol.ospfpacket.OspfPacketHeader;
-import org.onosproject.ospf.protocol.util.OspfPacketType;
import java.util.List;
import java.util.Vector;
diff --git a/protocols/ospf/protocol/src/test/java/org/onosproject/ospf/protocol/util/OspfUtilTest.java b/protocols/ospf/protocol/src/test/java/org/onosproject/ospf/protocol/util/OspfUtilTest.java
index 747df02..faf1bce 100644
--- a/protocols/ospf/protocol/src/test/java/org/onosproject/ospf/protocol/util/OspfUtilTest.java
+++ b/protocols/ospf/protocol/src/test/java/org/onosproject/ospf/protocol/util/OspfUtilTest.java
@@ -229,7 +229,7 @@
*/
@Test
public void testAddMetadata() throws Exception {
- result1 = OspfUtil.addMetadata(packet, 123, Ip4Address.valueOf("1.1.1.1"));
+ result1 = OspfUtil.addMetadata(2, packet, 1, Ip4Address.valueOf("1.1.1.1"));
assertThat(result1, is(notNullValue()));
}
@@ -251,7 +251,7 @@
*/
@Test
public void testAddMetaData() throws Exception {
- result1 = OspfUtil.addMetadata(packet, 1, Ip4Address.valueOf("2.2.2.2"));
+ result1 = OspfUtil.addMetadata(2, packet, 1, Ip4Address.valueOf("2.2.2.2"));
assertThat(result1, is(notNullValue()));
}
diff --git a/providers/ospf/BUCK b/providers/ospf/BUCK
new file mode 100644
index 0000000..829827e
--- /dev/null
+++ b/providers/ospf/BUCK
@@ -0,0 +1,16 @@
+BUNDLES = [
+ '//protocols/ospf/api:onos-protocols-ospf-api',
+ '//protocols/ospf/ctl:onos-protocols-ospf-ctl',
+ '//protocols/ospf/protocol:onos-protocols-ospf-protocol',
+ '//providers/ospf/cfg:onos-providers-ospf-cfg',
+ '//providers/ospf/topology:onos-providers-ospf-topology',
+]
+
+onos_app (
+ title = 'OSPF Provider',
+ category = 'Provider',
+ url = 'http://onosproject.org',
+ description = 'ONOS OSPF protocol adapters.',
+ included_bundles = BUNDLES,
+)
+
diff --git a/providers/ospf/app/app.xml b/providers/ospf/app/app.xml
new file mode 100644
index 0000000..b98afc2
--- /dev/null
+++ b/providers/ospf/app/app.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright 2016-present Open Networking Laboratory
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+<app name="org.onosproject.ospf" origin="ON.Lab" version="${project.version}"
+ featuresRepo="mvn:${project.groupId}/${project.artifactId}/${project.version}/xml/features"
+ features="${project.artifactId}">
+ <description>${project.description}</description>
+ <artifact>mvn:${project.groupId}/onos-ospf-api/${project.version}</artifact>
+ <artifact>mvn:${project.groupId}/onos-ospf-ctl/${project.version}</artifact>
+ <artifact>mvn:${project.groupId}/onos-ospf-protocol/${project.version}</artifact>
+ <artifact>mvn:${project.groupId}/onos-ospf-provider-topology/${project.version}</artifact>
+ <artifact>mvn:${project.groupId}/onos-ospf-provider-cfg/${project.version}</artifact>
+ <artifact>mvn:${project.groupId}/onos-ospf-provider-cli/${project.version}</artifact>
+</app>
diff --git a/providers/ospf/app/features.xml b/providers/ospf/app/features.xml
new file mode 100644
index 0000000..f04e131
--- /dev/null
+++ b/providers/ospf/app/features.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<!--
+ ~ Copyright 2016-present Open Networking Laboratory
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+<features xmlns="http://karaf.apache.org/xmlns/features/v1.2.0" name="${project.artifactId}-${project.version}">
+ <feature name="${project.artifactId}" version="${project.version}"
+ description="${project.description}">
+ <feature>onos-api</feature>
+ <bundle>mvn:${project.groupId}/onos-ospf-api/${project.version}</bundle>
+ <bundle>mvn:${project.groupId}/onos-ospf-ctl/${project.version}</bundle>
+ <bundle>mvn:${project.groupId}/onos-ospf-protocol/${project.version}</bundle>
+ <bundle>mvn:${project.groupId}/onos-ospf-provider-topology/${project.version}</bundle>
+ <bundle>mvn:${project.groupId}/onos-ospf-provider-cfg/${project.version}</bundle>
+ <bundle>mvn:${project.groupId}/onos-ospf-provider-cli/${project.version}</bundle>
+ </feature>
+</features>
diff --git a/providers/ospf/app/pom.xml b/providers/ospf/app/pom.xml
new file mode 100644
index 0000000..49e8ef3
--- /dev/null
+++ b/providers/ospf/app/pom.xml
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright 2016-present Open Networking Laboratory
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns="http://maven.apache.org/POM/4.0.0"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.onosproject</groupId>
+ <artifactId>onos-ospf-providers</artifactId>
+ <version>1.7.0-SNAPSHOT</version>
+ <relativePath>../pom.xml</relativePath>
+ </parent>
+
+ <artifactId>onos-ospf-app</artifactId>
+ <packaging>pom</packaging>
+ <description>OSPF protocol southbound providers</description>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.onosproject</groupId>
+ <artifactId>onos-ospf-api</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.onosproject</groupId>
+ <artifactId>onos-ospf-ctl</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.onosproject</groupId>
+ <artifactId>onos-ospf-protocol</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.onosproject</groupId>
+ <artifactId>onos-ospf-provider-topology</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.onosproject</groupId>
+ <artifactId>onos-ospf-provider-cfg</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.onosproject</groupId>
+ <artifactId>onos-ospf-provider-cli</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ </dependencies>
+</project>
diff --git a/providers/ospf/cfg/BUCK b/providers/ospf/cfg/BUCK
new file mode 100644
index 0000000..c884550
--- /dev/null
+++ b/providers/ospf/cfg/BUCK
@@ -0,0 +1,9 @@
+COMPILE_DEPS = [
+ '//lib:CORE_DEPS',
+ '//protocols/ospf/api:onos-protocols-ospf-api',
+]
+
+osgi_jar_with_tests (
+ deps = COMPILE_DEPS,
+)
+
diff --git a/providers/ospf/cfg/pom.xml b/providers/ospf/cfg/pom.xml
new file mode 100644
index 0000000..fce0cc4
--- /dev/null
+++ b/providers/ospf/cfg/pom.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright 2016-present Open Networking Laboratory
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.onosproject</groupId>
+ <artifactId>onos-ospf-providers</artifactId>
+ <version>1.7.0-SNAPSHOT</version>
+ <relativePath>../pom.xml</relativePath>
+ </parent>
+
+ <artifactId>onos-ospf-provider-cfg</artifactId>
+ <packaging>bundle</packaging>
+ <description>ONOS OSPF Providers</description>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>org.osgi.compendium</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.onosproject</groupId>
+ <artifactId>onos-ospf-ctl</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.onosproject</groupId>
+ <artifactId>onos-ospf-api</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ </dependencies>
+</project>
diff --git a/providers/ospf/cfg/src/main/java/org/onosproject/provider/ospf/cfg/impl/OspfAppConfig.java b/providers/ospf/cfg/src/main/java/org/onosproject/provider/ospf/cfg/impl/OspfAppConfig.java
new file mode 100644
index 0000000..162ec30
--- /dev/null
+++ b/providers/ospf/cfg/src/main/java/org/onosproject/provider/ospf/cfg/impl/OspfAppConfig.java
@@ -0,0 +1,72 @@
+/*
+* Copyright 2016-present Open Networking Laboratory
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package org.onosproject.provider.ospf.cfg.impl;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import org.apache.felix.scr.annotations.Reference;
+import org.apache.felix.scr.annotations.ReferenceCardinality;
+import org.onlab.osgi.DefaultServiceDirectory;
+import org.onosproject.core.ApplicationId;
+import org.onosproject.net.config.Config;
+import org.onosproject.ospf.controller.OspfController;
+
+/**
+ * Configuration object for OSPF.
+ */
+public class OspfAppConfig extends Config<ApplicationId> {
+ public static final String METHOD = "method";
+ public static final String ATTRIBUTE = "attribute";
+ public static final String PROCESSES = "processes";
+ @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+ private OspfController ospfController;
+
+ /**
+ * Returns the configuration method, add, delete etc.
+ *
+ * @return the configuration method, add, delete etc
+ */
+ public String method() {
+ return get(METHOD, null);
+ }
+
+ /**
+ * Returns the configuration attribute, area, process etc.
+ *
+ * @return the configuration attribute, area, process etc
+ */
+ public String attribute() {
+ return get(ATTRIBUTE, null);
+ }
+
+ /**
+ * Returns the configured processes.
+ *
+ * @return the configured processes
+ */
+ public JsonNode processes() {
+ JsonNode jsonNodes = object.get(PROCESSES);
+
+ return jsonNodes;
+ }
+
+ @Override
+ public boolean isValid() {
+ this.ospfController = DefaultServiceDirectory.getService(OspfController.class);
+
+ return true;
+ }
+}
\ No newline at end of file
diff --git a/providers/ospf/cfg/src/main/java/org/onosproject/provider/ospf/cfg/impl/OspfCfgProvider.java b/providers/ospf/cfg/src/main/java/org/onosproject/provider/ospf/cfg/impl/OspfCfgProvider.java
new file mode 100644
index 0000000..7e91fbd
--- /dev/null
+++ b/providers/ospf/cfg/src/main/java/org/onosproject/provider/ospf/cfg/impl/OspfCfgProvider.java
@@ -0,0 +1,129 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.provider.ospf.cfg.impl;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import org.apache.felix.scr.annotations.Activate;
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Deactivate;
+import org.apache.felix.scr.annotations.Service;
+import org.apache.felix.scr.annotations.Reference;
+import org.apache.felix.scr.annotations.ReferenceCardinality;
+import org.onosproject.core.ApplicationId;
+import org.onosproject.core.CoreService;
+import org.onosproject.net.config.ConfigFactory;
+import org.onosproject.net.config.NetworkConfigEvent;
+import org.onosproject.net.config.NetworkConfigListener;
+import org.onosproject.net.config.NetworkConfigRegistry;
+import org.onosproject.net.config.NetworkConfigService;
+import org.onosproject.net.config.basics.SubjectFactories;
+import org.onosproject.net.provider.AbstractProvider;
+import org.onosproject.net.provider.ProviderId;
+import org.onosproject.ospf.controller.OspfController;
+import org.slf4j.Logger;
+
+import static org.slf4j.LoggerFactory.getLogger;
+
+/**
+ * Provider which advertises device descriptions to the core.
+ */
+@Component(immediate = true)
+@Service
+public class OspfCfgProvider extends AbstractProvider {
+
+ static final String PROVIDER_ID = "org.onosproject.provider.ospf.cfg";
+ private static final Logger log = getLogger(OspfCfgProvider.class);
+ private final ConfigFactory configFactory =
+ new ConfigFactory(SubjectFactories.APP_SUBJECT_FACTORY, OspfAppConfig.class, "ospfapp") {
+ @Override
+ public OspfAppConfig createConfig() {
+ return new OspfAppConfig();
+ }
+ };
+ private final NetworkConfigListener configListener = new InternalConfigListener();
+ @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+ protected OspfController ospfController;
+ @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+ protected CoreService coreService;
+ @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+ protected NetworkConfigRegistry configRegistry;
+ @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+ protected NetworkConfigService configService;
+ @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+ protected OspfController controller;
+ private ApplicationId appId;
+
+ /**
+ * Creates an OSPF device provider.
+ */
+ public OspfCfgProvider() {
+ super(new ProviderId("ospf", PROVIDER_ID));
+ }
+
+ public void setOspfController(OspfController ospfController) {
+ this.ospfController = ospfController;
+ }
+
+ @Activate
+ public void activate() {
+ appId = coreService.registerApplication(PROVIDER_ID);
+ configService.addListener(configListener);
+ configRegistry.registerConfigFactory(configFactory);
+ log.info("activated...!!!");
+ }
+
+ @Deactivate
+ public void deactivate() {
+ configRegistry.unregisterConfigFactory(configFactory);
+ configService.removeListener(configListener);
+ log.info("deactivated...!!!");
+ }
+
+ private void updateConfig() {
+ OspfAppConfig ospfAppConfig = configRegistry.getConfig(appId, OspfAppConfig.class);
+ if ("ADD".equalsIgnoreCase(ospfAppConfig.method())) {
+ JsonNode jsonNode = ospfAppConfig.processes();
+ ospfController.updateConfig(jsonNode);
+ } else {
+ log.debug("Please signify prop1 and prop2");
+ }
+ }
+
+ /**
+ * OSPF config listener to populate the configuration.
+ */
+ private class InternalConfigListener implements NetworkConfigListener {
+ @Override
+ public void event(NetworkConfigEvent event) {
+ log.debug("InternalConfigListener:: event is getting called");
+ if (!event.configClass().equals(OspfAppConfig.class)) {
+ return;
+ }
+ switch (event.type()) {
+ case CONFIG_ADDED:
+ updateConfig();
+ break;
+ case CONFIG_UPDATED:
+ updateConfig();
+ break;
+ case CONFIG_REMOVED:
+ break;
+ default:
+ break;
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/providers/ospf/cfg/src/main/java/org/onosproject/provider/ospf/cfg/impl/package-info.java b/providers/ospf/cfg/src/main/java/org/onosproject/provider/ospf/cfg/impl/package-info.java
new file mode 100644
index 0000000..c2cd733
--- /dev/null
+++ b/providers/ospf/cfg/src/main/java/org/onosproject/provider/ospf/cfg/impl/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Provider that uses OSPF capability request as a means of infrastructure device discovery.
+ */
+package org.onosproject.provider.ospf.cfg.impl;
diff --git a/providers/ospf/cli/pom.xml b/providers/ospf/cli/pom.xml
new file mode 100644
index 0000000..545f27f
--- /dev/null
+++ b/providers/ospf/cli/pom.xml
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright 2016-present Open Networking Laboratory
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns="http://maven.apache.org/POM/4.0.0"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.onosproject</groupId>
+ <artifactId>onos-ospf-providers</artifactId>
+ <version>1.7.0-SNAPSHOT</version>
+ <relativePath>../pom.xml</relativePath>
+ </parent>
+
+ <artifactId>onos-ospf-provider-cli</artifactId>
+ <packaging>bundle</packaging>
+
+ <description>OSPF cli implementation</description>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.onosproject</groupId>
+ <artifactId>onos-cli</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.onosproject</groupId>
+ <artifactId>onos-ospf-api</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.onosproject</groupId>
+ <artifactId>onos-ospf-ctl</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.onosproject</groupId>
+ <artifactId>onos-ospf-protocol</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>org.osgi.compendium</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.karaf.shell</groupId>
+ <artifactId>org.apache.karaf.shell.console</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>org.apache.felix.scr.annotations</artifactId>
+ <scope>provided</scope>
+ </dependency>
+ </dependencies>
+</project>
diff --git a/providers/ospf/cli/src/main/java/org/onosproject/ospf/cli/ApplicationOspfCommand.java b/providers/ospf/cli/src/main/java/org/onosproject/ospf/cli/ApplicationOspfCommand.java
new file mode 100644
index 0000000..2027b74
--- /dev/null
+++ b/providers/ospf/cli/src/main/java/org/onosproject/ospf/cli/ApplicationOspfCommand.java
@@ -0,0 +1,401 @@
+/*
+* Copyright 2016-present Open Networking Laboratory
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+package org.onosproject.ospf.cli;
+
+import org.apache.felix.scr.annotations.Activate;
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Deactivate;
+import org.apache.felix.scr.annotations.Reference;
+import org.apache.felix.scr.annotations.ReferenceCardinality;
+import org.apache.karaf.shell.commands.Argument;
+import org.apache.karaf.shell.commands.Command;
+import org.onosproject.cli.AbstractShellCommand;
+import org.onosproject.ospf.controller.OspfArea;
+import org.onosproject.ospf.controller.OspfController;
+import org.onosproject.ospf.controller.OspfInterface;
+import org.onosproject.ospf.controller.OspfLsaType;
+import org.onosproject.ospf.controller.OspfNbr;
+import org.onosproject.ospf.controller.OspfProcess;
+import org.onosproject.ospf.protocol.lsa.LsaHeader;
+import org.onosproject.ospf.protocol.lsa.types.RouterLsa;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * Representation of OSPF cli commands.
+ */
+@Component(immediate = true)
+@Command(scope = "onos", name = "ospf", description = "list database")
+public class ApplicationOspfCommand extends AbstractShellCommand {
+
+ protected static final String FORMAT6 = "%-20s%-20s%-20s%-20s%-20s%-20s\n";
+ protected static final String FORMAT5 = "%-20s%-20s%-20s%-20s%-20s\n";
+ protected static final String NETWORK = "NETWORK";
+ protected static final String SUMMARY = "SUMMARY";
+ protected static final String ASBR = "ABSR";
+ protected static final String EXTERNAL = "EXTERNAL";
+ protected static final String LINKLOOPAQ = "LINKLOCALOPAQUE";
+ protected static final String AREALOCOPAQ = "AREALOCALOPAQUE";
+ protected static final String ASOPAQ = "ASOPAQUE";
+ protected static final String DR = "DR";
+ protected static final String BACKUP = "BACKUP";
+ protected static final String DROTHER = "DROther";
+ static final String DATABASE = "database";
+ static final String NEIGHBORLIST = "neighbors";
+ @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+ protected OspfController ospfController;
+ @Argument(index = 0, name = "name",
+ description = "database|neighborlist",
+ required = true, multiValued = false)
+ private String name = null;
+ @Argument(index = 1, name = "processid",
+ description = "processId",
+ required = true, multiValued = false)
+ private String process = null;
+ @Argument(index = 2, name = "areaid",
+ description = "areaId",
+ required = false, multiValued = false)
+ private String area = null;
+ private List<String> routerLsa = new ArrayList<>();
+ private List<String> networkLsa = new ArrayList<>();
+ private List<String> summaryLsa = new ArrayList<>();
+ private List<String> externalLsa = new ArrayList<>();
+ private List<String> asbrSumm = new ArrayList<>();
+ private List<String> areaLocalOpaqLsa = new ArrayList<>();
+ private List<String> linkLocalOpqLsa = new ArrayList<>();
+ private List<String> asOpqLsa = new ArrayList<>();
+ private List<String> undefinedLsa = new ArrayList<>();
+ private List<OspfArea> areaList = new ArrayList<>();
+
+
+ @Activate
+ public void activate() {
+ print("OSPF cli activated...!!!");
+ log.debug("OSPF cli activated...!!!");
+ }
+
+ @Deactivate
+ public void deactivate() {
+ log.debug("OSPF cli deactivated...!!!");
+ }
+
+ @Override
+ protected void execute() {
+ if (DATABASE.equals(name)) {
+ buildOspfDatabaseInformation();
+ } else if (NEIGHBORLIST.equals(name)) {
+ buildNeighborInformation();
+ } else {
+ print("Please check the command (database|neighbor)");
+ }
+ }
+
+ /**
+ * Clears all the lists.
+ */
+ private void clearLists() {
+ routerLsa.clear();
+ networkLsa.clear();
+ summaryLsa.clear();
+ externalLsa.clear();
+ asbrSumm.clear();
+ areaLocalOpaqLsa.clear();
+ linkLocalOpqLsa.clear();
+ asOpqLsa.clear();
+ undefinedLsa.clear();
+ areaList.clear();
+ }
+
+ /**
+ * Builds OSPF database information.
+ */
+ private void buildOspfDatabaseInformation() {
+ try {
+ //Builds LSA details
+ buildLsaLists();
+ for (OspfArea area : areaList) {
+ if (routerLsa.size() > 0) {
+ printRouterFormat(area.areaId().toString(), area.routerId().toString(), process);
+ for (String str : routerLsa) {
+ String[] lsaVal = str.split("\\,");
+ if (area.areaId().toString().equalsIgnoreCase(lsaVal[0])) {
+ print(FORMAT6, lsaVal[2], lsaVal[3], lsaVal[4], lsaVal[5], lsaVal[6], lsaVal[7]);
+ }
+ }
+ }
+ if (networkLsa.size() > 0) {
+ printNetworkFormat(area.areaId().toString(), NETWORK);
+ printDetails(networkLsa, area.areaId().toString());
+ }
+ if (summaryLsa.size() > 0) {
+ printNetworkFormat(area.areaId().toString(), SUMMARY);
+ printDetails(summaryLsa, area.areaId().toString());
+ }
+ if (externalLsa.size() > 0) {
+ printNetworkFormat(area.areaId().toString(), EXTERNAL);
+ printDetails(externalLsa, area.areaId().toString());
+ }
+ if (asbrSumm.size() > 0) {
+ printNetworkFormat(area.areaId().toString(), ASBR);
+ printDetails(asbrSumm, area.areaId().toString());
+ }
+ if (areaLocalOpaqLsa.size() > 0) {
+ printNetworkFormat(area.areaId().toString(), AREALOCOPAQ);
+ printDetails(areaLocalOpaqLsa, area.areaId().toString());
+ }
+ if (linkLocalOpqLsa.size() > 0) {
+ printNetworkFormat(area.areaId().toString(), LINKLOOPAQ);
+ printDetails(linkLocalOpqLsa, area.areaId().toString());
+ }
+ if (asOpqLsa.size() > 0) {
+ printNetworkFormat(area.areaId().toString(), ASOPAQ);
+ printDetails(asOpqLsa, area.areaId().toString());
+ }
+ if (undefinedLsa.size() > 0) {
+ printRouterFormat(area.areaId().toString(), area.routerId().toString(), process);
+ printDetails(undefinedLsa, area.areaId().toString());
+ }
+ }
+ clearLists();
+ } catch (Exception ex) {
+ clearLists();
+ print("Error occured while Ospf controller getting called" + ex.getMessage());
+ }
+ }
+
+ /**
+ * Prints LSA details.
+ *
+ * @param lsaDetails LSA details
+ * @param areaId area ID
+ */
+ private void printDetails(List<String> lsaDetails, String areaId) {
+ for (String str : lsaDetails) {
+ String[] lsaVal = str.split("\\,");
+ if (areaId.equalsIgnoreCase(lsaVal[0])) {
+ print(FORMAT5, lsaVal[2], lsaVal[3], lsaVal[4], lsaVal[5], lsaVal[6]);
+ }
+ }
+ }
+
+ /**
+ * Builds all LSA lists with LSA details.
+ */
+ private void buildLsaLists() {
+ this.ospfController = get(OspfController.class);
+ List<OspfProcess> listOfProcess = ospfController.getAllConfiguredProcesses();
+ Iterator<OspfProcess> itrProcess = listOfProcess.iterator();
+ while (itrProcess.hasNext()) {
+ OspfProcess ospfProcess = itrProcess.next();
+ if (process.equalsIgnoreCase(ospfProcess.processId())) {
+ List<OspfArea> listAreas = ospfProcess.areas();
+ Iterator<OspfArea> itrArea = listAreas.iterator();
+ while (itrArea.hasNext()) {
+ OspfArea area = itrArea.next();
+ List<LsaHeader> lsas = area.database()
+ .getAllLsaHeaders(false, area.isOpaqueEnabled());
+ List<LsaHeader> tmpLsaList = new ArrayList<>(lsas);
+ log.debug("OSPFController::size of database::" + (lsas != null ? lsas.size() : null));
+ Iterator<LsaHeader> itrLsaHeader = tmpLsaList.iterator();
+ areaList.add(area);
+ if (itrLsaHeader != null) {
+ while (itrLsaHeader.hasNext()) {
+ LsaHeader header = itrLsaHeader.next();
+ populateLsaLists(header, area);
+ }
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * Populates the LSA lists based on the input.
+ *
+ * @param header LSA header instance
+ * @param area OSPF area instance
+ */
+ private void populateLsaLists(LsaHeader header, OspfArea area) {
+ String seqNo = Long.toHexString(header.lsSequenceNo());
+ String checkSum = Long.toHexString(header.lsCheckSum());
+ if (seqNo.length() == 16) {
+ seqNo = seqNo.substring(8, seqNo.length());
+ }
+ if (checkSum.length() == 16) {
+ checkSum = checkSum.substring(8, checkSum.length());
+ }
+ StringBuffer strBuf = getBuffList(area.areaId().toString(), area.routerId().toString(),
+ header.linkStateId(),
+ header.advertisingRouter().toString(),
+ header.age(), seqNo, checkSum);
+ if (header.lsType() == OspfLsaType.ROUTER.value()) {
+ strBuf.append(",");
+ strBuf.append(((RouterLsa) header).noLink());
+ routerLsa.add(strBuf.toString());
+ } else if (header.lsType() == OspfLsaType.NETWORK.value()) {
+ strBuf.append(",");
+ strBuf.append("0");
+ networkLsa.add(strBuf.toString());
+ } else if (header.lsType() == OspfLsaType.SUMMARY.value()) {
+ strBuf.append(",");
+ strBuf.append("0");
+ summaryLsa.add(strBuf.toString());
+ } else if (header.lsType() == OspfLsaType.EXTERNAL_LSA.value()) {
+ strBuf.append(",");
+ strBuf.append("0");
+ externalLsa.add(strBuf.toString());
+ } else if (header.lsType() == OspfLsaType.ASBR_SUMMARY.value()) {
+ strBuf.append(",");
+ strBuf.append("0");
+ asbrSumm.add(strBuf.toString());
+ } else if (header.lsType() == OspfLsaType.AREA_LOCAL_OPAQUE_LSA.value()) {
+ strBuf.append(",");
+ strBuf.append("0");
+ areaLocalOpaqLsa.add(strBuf.toString());
+ } else if (header.lsType() == OspfLsaType.LINK_LOCAL_OPAQUE_LSA.value()) {
+ strBuf.append(",");
+ strBuf.append("0");
+ linkLocalOpqLsa.add(strBuf.toString());
+ } else if (header.lsType() == OspfLsaType.AS_OPAQUE_LSA.value()) {
+ strBuf.append(",");
+ strBuf.append("0");
+ asOpqLsa.add(strBuf.toString());
+ } else {
+ strBuf.append(",");
+ strBuf.append("0");
+ undefinedLsa.add(strBuf.toString());
+ }
+ }
+
+ /**
+ * Builds OSPF neighbor information.
+ */
+ private void buildNeighborInformation() {
+ try {
+ this.ospfController = get(OspfController.class);
+ List<OspfProcess> listOfProcess = ospfController.getAllConfiguredProcesses();
+ boolean flag = false;
+ printNeighborsFormat();
+ Iterator<OspfProcess> itrProcess = listOfProcess.iterator();
+ while (itrProcess.hasNext()) {
+ OspfProcess process = itrProcess.next();
+ List<OspfArea> listAreas = process.areas();
+ Iterator<OspfArea> itrArea = listAreas.iterator();
+ while (itrArea.hasNext()) {
+ OspfArea area = itrArea.next();
+ List<OspfInterface> itrefaceList = area.ospfInterfaceList();
+ for (OspfInterface interfc : itrefaceList) {
+ List<OspfNbr> nghbrList = new ArrayList<>(interfc.listOfNeighbors().values());
+ for (OspfNbr neigbor : nghbrList) {
+ print("%-20s%-20s%-20s%-20s%-20s\n", neigbor.neighborId(), neigbor.routerPriority(),
+ neigbor.getState() + "/" + checkDrBdrOther(neigbor.neighborIpAddr().toString(),
+ neigbor.neighborDr().toString(),
+ neigbor.neighborBdr().toString()),
+ neigbor.neighborIpAddr().toString(), interfc.ipAddress());
+ }
+ }
+ }
+ }
+ } catch (Exception ex) {
+ print("Error occured while Ospf controller getting called" + ex.getMessage());
+ }
+ }
+
+ /**
+ * Prints input after formatting.
+ *
+ * @param areaId area ID
+ * @param routerId router ID
+ * @param processId process ID
+ */
+ private void printRouterFormat(String areaId, String routerId, String processId) {
+ print("%s (%s) %s %s\n", "OSPF Router with ID", routerId, "Process Id", processId);
+ print("%s ( Area %s)\n", "Router Link States", areaId);
+ print("%-20s%-20s%-20s%-20s%-20s%-20s\n", "Link Id", "ADV Router", "Age", "Seq#",
+ "CkSum", "Link Count");
+ }
+
+ /**
+ * Prints input after formatting.
+ *
+ * @param areaId area ID
+ * @param type network type
+ */
+ private void printNetworkFormat(String areaId, String type) {
+ print("%s %s ( Area %s)\n", type, "Link States", areaId);
+ print("%-20s%-20s%-20s%-20s%-20s\n", "Link Id", "ADV Router", "Age", "Seq#", "CkSum");
+ }
+
+ /**
+ * Prints input after formatting.
+ */
+ private void printNeighborsFormat() {
+ print("%-20s%-20s%-20s%-20s%-20s\n", "Neighbor Id", "Pri", "State",
+ "Address", "Interface");
+ }
+
+ /**
+ * Checks whether the neighbor is DR or BDR.
+ *
+ * @param ip IP address to check
+ * @param drIP DRs IP address
+ * @param bdrIp BDRs IP address
+ * @return 1- neighbor is DR, 2- neighbor is BDR, 3- DROTHER
+ */
+ public String checkDrBdrOther(String ip, String drIP, String bdrIp) {
+
+ if (ip.equalsIgnoreCase(drIP)) {
+ return DR;
+ } else if (ip.equalsIgnoreCase(bdrIp)) {
+ return BACKUP;
+ } else {
+ return DROTHER;
+ }
+ }
+
+ /**
+ * Returns inputs as formatted string.
+ *
+ * @param areaId area id
+ * @param routerId router id
+ * @param linkStateId link state id
+ * @param advertisingRouter advertising router
+ * @param age age
+ * @param seqNo sequence number
+ * @param checkSum checksum
+ * @return formatted string
+ */
+ private StringBuffer getBuffList(String areaId, String routerId, String linkStateId,
+ String advertisingRouter, int age, String seqNo, String checkSum) {
+ StringBuffer strBuf = new StringBuffer();
+ strBuf.append(areaId);
+ strBuf.append(",");
+ strBuf.append(routerId);
+ strBuf.append(",");
+ strBuf.append(linkStateId);
+ strBuf.append(",");
+ strBuf.append(advertisingRouter);
+ strBuf.append(",");
+ strBuf.append(age);
+ strBuf.append(",");
+ strBuf.append(seqNo);
+ strBuf.append(",");
+ strBuf.append(checkSum);
+ return strBuf;
+ }
+}
\ No newline at end of file
diff --git a/providers/ospf/cli/src/main/java/org/onosproject/ospf/cli/package-info.java b/providers/ospf/cli/src/main/java/org/onosproject/ospf/cli/package-info.java
new file mode 100644
index 0000000..d040733
--- /dev/null
+++ b/providers/ospf/cli/src/main/java/org/onosproject/ospf/cli/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * OSPF cli implementation.
+ */
+package org.onosproject.ospf.cli;
diff --git a/providers/ospf/cli/src/main/resources/OSGI-INF/blueprint/shell-config.xml b/providers/ospf/cli/src/main/resources/OSGI-INF/blueprint/shell-config.xml
new file mode 100644
index 0000000..d261dee
--- /dev/null
+++ b/providers/ospf/cli/src/main/resources/OSGI-INF/blueprint/shell-config.xml
@@ -0,0 +1,24 @@
+<!--
+ ~ Copyright 2016-present Open Networking Laboratory
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">
+
+ <command-bundle xmlns="http://karaf.apache.org/xmlns/shell/v1.1.0">
+ <command>
+ <action class="org.onosproject.ospf.cli.ApplicationOspfCommand"/>
+ </command>
+ </command-bundle>
+
+</blueprint>
diff --git a/providers/ospf/pom.xml b/providers/ospf/pom.xml
new file mode 100644
index 0000000..690598b
--- /dev/null
+++ b/providers/ospf/pom.xml
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright 2016-present Open Networking Laboratory
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.onosproject</groupId>
+ <artifactId>onos-providers</artifactId>
+ <version>1.7.0-SNAPSHOT</version>
+ <relativePath>../pom.xml</relativePath>
+ </parent>
+
+ <artifactId>onos-ospf-providers</artifactId>
+ <packaging>pom</packaging>
+
+ <description>ONOS OSPF protocol adapters</description>
+
+ <modules>
+ <module>app</module>
+ <module>cfg</module>
+ <module>cli</module>
+ <module>topology</module>
+ </modules>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.onosproject</groupId>
+ <artifactId>onos-ospf-api</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.onosproject</groupId>
+ <artifactId>onos-ospf-ctl</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.onosproject</groupId>
+ <artifactId>onos-api</artifactId>
+ <classifier>tests</classifier>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+
+</project>
diff --git a/providers/ospf/topology/BUCK b/providers/ospf/topology/BUCK
new file mode 100644
index 0000000..4197711
--- /dev/null
+++ b/providers/ospf/topology/BUCK
@@ -0,0 +1,15 @@
+COMPILE_DEPS = [
+ '//lib:CORE_DEPS',
+ '//protocols/ospf/api:onos-protocols-ospf-api',
+ '//protocols/ospf/ctl:onos-protocols-ospf-ctl',
+]
+
+TEST_DEPS = [
+ '//lib:TEST_ADAPTERS',
+]
+
+osgi_jar_with_tests (
+ deps = COMPILE_DEPS,
+ test_deps = TEST_DEPS,
+)
+
diff --git a/providers/ospf/topology/pom.xml b/providers/ospf/topology/pom.xml
new file mode 100644
index 0000000..370c7a5
--- /dev/null
+++ b/providers/ospf/topology/pom.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright 2016-present Open Networking Laboratory
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.onosproject</groupId>
+ <artifactId>onos-ospf-providers</artifactId>
+ <version>1.7.0-SNAPSHOT</version>
+ <relativePath>../pom.xml</relativePath>
+ </parent>
+
+ <artifactId>onos-ospf-provider-topology</artifactId>
+ <packaging>bundle</packaging>
+
+ <description>ONOS OSPF Topology Providers</description>
+ <dependencies>
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>org.osgi.compendium</artifactId>
+ </dependency>
+ </dependencies>
+</project>
diff --git a/providers/ospf/topology/src/main/java/org/onosproject/provider/ospf/topology/impl/OspfTopologyProvider.java b/providers/ospf/topology/src/main/java/org/onosproject/provider/ospf/topology/impl/OspfTopologyProvider.java
new file mode 100644
index 0000000..1b76de2
--- /dev/null
+++ b/providers/ospf/topology/src/main/java/org/onosproject/provider/ospf/topology/impl/OspfTopologyProvider.java
@@ -0,0 +1,246 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.provider.ospf.topology.impl;
+
+import org.apache.felix.scr.annotations.Activate;
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Deactivate;
+import org.apache.felix.scr.annotations.Reference;
+import org.apache.felix.scr.annotations.ReferenceCardinality;
+import org.onlab.packet.ChassisId;
+import org.onlab.packet.Ip4Address;
+import org.onosproject.net.AnnotationKeys;
+import org.onosproject.net.ConnectPoint;
+import org.onosproject.net.DefaultAnnotations;
+import org.onosproject.net.Device;
+import org.onosproject.net.DeviceId;
+import org.onosproject.net.Link;
+import org.onosproject.net.MastershipRole;
+import org.onosproject.net.PortNumber;
+import org.onosproject.net.device.DefaultDeviceDescription;
+import org.onosproject.net.device.DefaultPortDescription;
+import org.onosproject.net.device.DeviceDescription;
+import org.onosproject.net.device.DeviceProvider;
+import org.onosproject.net.device.DeviceProviderRegistry;
+import org.onosproject.net.device.DeviceProviderService;
+import org.onosproject.net.device.PortDescription;
+import org.onosproject.net.link.DefaultLinkDescription;
+import org.onosproject.net.link.LinkDescription;
+import org.onosproject.net.link.LinkProvider;
+import org.onosproject.net.link.LinkProviderRegistry;
+import org.onosproject.net.link.LinkProviderService;
+import org.onosproject.net.link.LinkService;
+import org.onosproject.net.provider.AbstractProvider;
+import org.onosproject.net.provider.ProviderId;
+import org.onosproject.ospf.controller.OspfController;
+import org.onosproject.ospf.controller.OspfLinkTed;
+import org.onosproject.ospf.controller.OspfRouter;
+import org.onosproject.ospf.controller.OspfRouterId;
+import org.onosproject.ospf.controller.OspfRouterListener;
+import org.onosproject.ospf.controller.OspfLinkListener;
+import org.slf4j.Logger;
+
+import java.util.LinkedList;
+import java.util.List;
+
+import static org.slf4j.LoggerFactory.getLogger;
+
+/**
+ * Provider which advertises device descriptions to the core.
+ */
+@Component(immediate = true)
+public class OspfTopologyProvider extends AbstractProvider implements DeviceProvider, LinkProvider {
+
+ public static final long PSEUDO_PORT = 0xffffffff;
+ private static final Logger log = getLogger(OspfTopologyProvider.class);
+ // Default values for tunable parameters
+ private static final String UNKNOWN = "unknown";
+ final InternalTopologyProvider listener = new InternalTopologyProvider();
+ @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+ protected DeviceProviderRegistry deviceProviderRegistry;
+ @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+ protected LinkProviderRegistry linkProviderRegistry;
+ @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+ protected LinkService linkService;
+ @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+ protected OspfController controller;
+ //This Interface that defines how this provider can interact with the core.
+ private LinkProviderService linkProviderService;
+ // The interface that defines how this Provider can interact with the core
+ private DeviceProviderService deviceProviderService;
+
+ /**
+ * Creates an OSPF device provider.
+ */
+ public OspfTopologyProvider() {
+ super(new ProviderId("l3", "org.onosproject.provider.ospf"));
+ }
+
+ @Activate
+ public void activate() {
+ deviceProviderService = deviceProviderRegistry.register(this);
+ linkProviderService = linkProviderRegistry.register(this);
+ controller.addRouterListener(listener);
+ controller.addLinkListener(listener);
+ log.debug("IsisDeviceProvider::activate...!!!!");
+ }
+
+ @Deactivate
+ public void deactivate() {
+ log.debug("IsisDeviceProvider::deactivate...!!!!");
+ deviceProviderRegistry.unregister(this);
+ deviceProviderService = null;
+ linkProviderRegistry.unregister(this);
+ linkProviderService = null;
+ controller.removeRouterListener(listener);
+ controller.removeLinkListener(listener);
+ log.info("deactivated...!!!");
+ }
+
+ @Override
+ public boolean isReachable(DeviceId deviceId) {
+ return true;
+ }
+
+ @Override
+ public void changePortState(DeviceId deviceId, PortNumber portNumber, boolean enable) {
+ log.info("changePortState on device {}", deviceId);
+ }
+
+ @Override
+ public void triggerProbe(DeviceId deviceId) {
+ log.info("Triggering probe on device {}", deviceId);
+ }
+
+ @Override
+ public void roleChanged(DeviceId deviceId, MastershipRole newRole) {
+ log.info("Accepting mastership role change for device {}", deviceId);
+ }
+
+ /**
+ * Builds link description.
+ *
+ * @param ospfRouter OSPF router instance
+ * @param ospfLinkTed OSPF link TED instance
+ * @return link description instance
+ */
+ private LinkDescription buildLinkDes(OspfRouter ospfRouter, OspfLinkTed ospfLinkTed) {
+ long srcAddress = 0;
+ long dstAddress = 0;
+ boolean localPseduo = false;
+ //Changing of port numbers
+ srcAddress = Ip4Address.valueOf(ospfRouter.routerIp().toString()).toInt();
+ dstAddress = Ip4Address.valueOf(ospfRouter.neighborRouterId().toString()).toInt();
+ DeviceId srcId = DeviceId.deviceId(OspfRouterId.uri(ospfRouter.routerIp()));
+ DeviceId dstId = DeviceId.deviceId(OspfRouterId.uri(ospfRouter.neighborRouterId()));
+ if (ospfRouter.isDr()) {
+ localPseduo = true;
+ }
+ if (localPseduo && srcAddress == 0) {
+ srcAddress = PSEUDO_PORT;
+ }
+
+ ConnectPoint src = new ConnectPoint(srcId, PortNumber.portNumber(srcAddress));
+ ConnectPoint dst = new ConnectPoint(dstId, PortNumber.portNumber(dstAddress));
+
+ return new DefaultLinkDescription(src, dst, Link.Type.DIRECT, false);
+ }
+
+ /**
+ * Internal topology Provider implementation.
+ */
+ protected class InternalTopologyProvider implements OspfRouterListener, OspfLinkListener {
+
+ @Override
+ public void routerAdded(OspfRouter ospfRouter) {
+ String routerId = ospfRouter.routerIp().toString();
+ log.info("Added device {}", routerId);
+ DeviceId deviceId = DeviceId.deviceId(OspfRouterId.uri(ospfRouter.routerIp()));
+ Device.Type deviceType = Device.Type.ROUTER;
+ //If our routerType is Dr or Bdr type is PSEUDO
+ if (ospfRouter.isDr()) {
+ deviceType = Device.Type.ROUTER;
+ } else {
+ deviceType = Device.Type.VIRTUAL;
+ }
+ //deviceId = DeviceId.deviceId(routerDetails);
+ ChassisId cId = new ChassisId();
+ DefaultAnnotations.Builder newBuilder = DefaultAnnotations.builder();
+
+ newBuilder.set(AnnotationKeys.TYPE, "l3");
+ newBuilder.set("routerId", routerId);
+ DeviceDescription description =
+ new DefaultDeviceDescription(OspfRouterId.uri(ospfRouter.routerIp()),
+ deviceType, UNKNOWN, UNKNOWN, UNKNOWN,
+ UNKNOWN, cId, newBuilder.build());
+ deviceProviderService.deviceConnected(deviceId, description);
+ }
+
+ @Override
+ public void routerRemoved(OspfRouter ospfRouter) {
+ String routerId = ospfRouter.routerIp().toString();
+ log.info("Delete device {}", routerId);
+ DeviceId deviceId = DeviceId.deviceId(OspfRouterId.uri(ospfRouter.routerIp()));
+ if (deviceProviderService == null) {
+ return;
+ }
+ deviceProviderService.deviceDisconnected(deviceId);
+ log.info("delete device {}", routerId);
+ }
+
+ @Override
+ public void addLink(OspfRouter ospfRouter, OspfLinkTed ospfLinkTed) {
+ log.debug("Addlink {}", ospfRouter.routerIp());
+ LinkDescription linkDes = buildLinkDes(ospfRouter, ospfLinkTed);
+ //If already link exists, return
+ if (linkService.getLink(linkDes.src(), linkDes.dst()) != null || linkProviderService == null) {
+ return;
+ }
+ //Updating ports of the link
+ List<PortDescription> srcPortDescriptions = new LinkedList<>();
+ srcPortDescriptions.add(new DefaultPortDescription(linkDes.src().port(), true));
+ deviceProviderService.updatePorts(linkDes.src().deviceId(), srcPortDescriptions);
+
+ List<PortDescription> dstPortDescriptions = new LinkedList<>();
+ dstPortDescriptions.add(new DefaultPortDescription(linkDes.dst().port(), true));
+ deviceProviderService.updatePorts(linkDes.dst().deviceId(), dstPortDescriptions);
+ linkProviderService.linkDetected(linkDes);
+ }
+
+ @Override
+ public void deleteLink(OspfRouter ospfRouter, OspfLinkTed ospfLinkTed) {
+ log.debug("Delete link {}", ospfRouter.routerIp().toString());
+ if (linkProviderService == null) {
+ return;
+ }
+ LinkDescription linkDes = buildLinkDes(ospfRouter, ospfLinkTed);
+ //Updating ports of the link
+ List<PortDescription> srcPortDescriptions = new LinkedList<>();
+ srcPortDescriptions.add(new DefaultPortDescription(linkDes.src().port(), true));
+ deviceProviderService.updatePorts(linkDes.src().deviceId(), srcPortDescriptions);
+
+ List<PortDescription> dstPortDescriptions = new LinkedList<>();
+ dstPortDescriptions.add(new DefaultPortDescription(linkDes.dst().port(), true));
+ deviceProviderService.updatePorts(linkDes.dst().deviceId(), dstPortDescriptions);
+ linkProviderService.linkVanished(linkDes);
+ }
+
+ @Override
+ public void routerChanged(OspfRouter ospfRouter) {
+ log.info("Router changed is not supported currently");
+ }
+ }
+}
\ No newline at end of file
diff --git a/providers/ospf/topology/src/main/java/org/onosproject/provider/ospf/topology/impl/package-info.java b/providers/ospf/topology/src/main/java/org/onosproject/provider/ospf/topology/impl/package-info.java
new file mode 100644
index 0000000..63f733e
--- /dev/null
+++ b/providers/ospf/topology/src/main/java/org/onosproject/provider/ospf/topology/impl/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Provider that uses OSPF as a means of topology discovery.
+ */
+package org.onosproject.provider.ospf.topology.impl;
diff --git a/providers/ospf/topology/src/test/java/org/onosproject/provider/ospf/topology/impl/OspfTopologyProviderTest.java b/providers/ospf/topology/src/test/java/org/onosproject/provider/ospf/topology/impl/OspfTopologyProviderTest.java
new file mode 100644
index 0000000..a667a0e
--- /dev/null
+++ b/providers/ospf/topology/src/test/java/org/onosproject/provider/ospf/topology/impl/OspfTopologyProviderTest.java
@@ -0,0 +1,380 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onosproject.provider.ospf.topology.impl;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.onlab.packet.Ip4Address;
+import org.onlab.util.Bandwidth;
+import org.onosproject.net.ConnectPoint;
+import org.onosproject.net.Device;
+import org.onosproject.net.DeviceId;
+import org.onosproject.net.Link;
+import org.onosproject.net.MastershipRole;
+import org.onosproject.net.PortNumber;
+import org.onosproject.net.device.DeviceDescription;
+import org.onosproject.net.device.DeviceListener;
+import org.onosproject.net.device.DeviceProvider;
+import org.onosproject.net.device.DeviceProviderRegistry;
+import org.onosproject.net.device.DeviceProviderService;
+import org.onosproject.net.device.DeviceServiceAdapter;
+import org.onosproject.net.device.PortDescription;
+import org.onosproject.net.device.PortStatistics;
+import org.onosproject.net.link.LinkDescription;
+import org.onosproject.net.link.LinkListener;
+import org.onosproject.net.link.LinkProvider;
+import org.onosproject.net.link.LinkProviderRegistry;
+import org.onosproject.net.link.LinkProviderService;
+import org.onosproject.net.link.LinkServiceAdapter;
+import org.onosproject.net.provider.ProviderId;
+import org.onosproject.ospf.controller.OspfController;
+import org.onosproject.ospf.controller.OspfDeviceTed;
+import org.onosproject.ospf.controller.OspfLinkListener;
+import org.onosproject.ospf.controller.OspfLinkTed;
+import org.onosproject.ospf.controller.OspfProcess;
+import org.onosproject.ospf.controller.OspfRouter;
+import org.onosproject.ospf.controller.OspfRouterListener;
+import org.onosproject.ospf.controller.impl.OspfDeviceTedImpl;
+import org.onosproject.ospf.controller.impl.OspfLinkTedImpl;
+import org.onosproject.ospf.controller.impl.OspfRouterImpl;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.concurrent.CopyOnWriteArraySet;
+
+import static org.junit.Assert.*;
+
+/**
+ * Test cases for OSPF topology provider.
+ */
+public class OspfTopologyProviderTest {
+
+ private final OspfTopologyProvider provider = new OspfTopologyProvider();
+ private final TestDeviceRegistry nodeRegistry = new TestDeviceRegistry();
+ private final TestLinkRegistry linkRegistry = new TestLinkRegistry();
+ private final TestController controller = new TestController();
+ private final TestLinkService linkService = new TestLinkService();
+
+ @Before
+ public void setUp() throws Exception {
+ provider.deviceProviderRegistry = nodeRegistry;
+ provider.linkProviderRegistry = linkRegistry;
+ provider.controller = controller;
+ provider.linkService = linkService;
+ provider.activate();
+ assertNotNull("provider should be registered", nodeRegistry.provider);
+ assertNotNull("listener should be registered", controller.nodeListener);
+
+ }
+
+ @After
+ public void tearDown() throws Exception {
+ provider.deactivate();
+ assertNull("listener should be removed", controller.nodeListener);
+ provider.controller = null;
+ provider.deviceProviderRegistry = null;
+ }
+
+ @Test
+ public void triggerProbe() {
+ DeviceId deviceId = DeviceId.deviceId("2.2.2.2");
+ provider.triggerProbe(deviceId);
+ }
+
+ @Test
+ public void roleChanged() {
+ DeviceId deviceId = DeviceId.deviceId("2.2.2.2");
+ provider.roleChanged(deviceId, MastershipRole.MASTER);
+ }
+
+ @Test
+ public void changePortState() {
+ DeviceId deviceId = DeviceId.deviceId("2.2.2.2");
+ provider.changePortState(deviceId, PortNumber.portNumber(0), false);
+ }
+
+ @Test
+ public void isReachable() {
+ DeviceId deviceId = DeviceId.deviceId("1.1.1.1");
+ provider.isReachable(deviceId);
+ }
+
+ /* Validate node is added to the device validating URI, RIB should get updated properly */
+ @Test
+ public void ospfTopologyProviderTestAddDevice1() {
+ int deviceAddCount = 0;
+ OspfRouter ospfRouter = new OspfRouterImpl();
+ ospfRouter.setDr(false);
+ ospfRouter.setOpaque(false);
+ ospfRouter.setNeighborRouterId(Ip4Address.valueOf("2.2.2.2"));
+ ospfRouter.setInterfaceId(Ip4Address.valueOf("10.10.10.2"));
+ ospfRouter.setAreaIdOfInterface(Ip4Address.valueOf("5.5.5.5"));
+ ospfRouter.setRouterIp(Ip4Address.valueOf("1.1.1.1"));
+ OspfDeviceTed ospfDeviceTed = new OspfDeviceTedImpl();
+ ospfDeviceTed.setAbr(false);
+ ospfDeviceTed.setAsbr(false);
+ ospfRouter.setDeviceTed(ospfDeviceTed);
+ OspfLinkTed ospfLinkTed = new OspfLinkTedImpl();
+ ospfLinkTed.setMaximumLink(Bandwidth.bps(10));
+ ospfLinkTed.setMaxReserved(Bandwidth.bps(20));
+ ospfLinkTed.setTeMetric(10);
+ OspfRouter ospfRouter1 = new OspfRouterImpl();
+ ospfRouter1.setDr(true);
+ ospfRouter1.setOpaque(true);
+ ospfRouter1.setNeighborRouterId(Ip4Address.valueOf("2.2.2.2"));
+ ospfRouter1.setInterfaceId(Ip4Address.valueOf("10.10.10.2"));
+ ospfRouter1.setAreaIdOfInterface(Ip4Address.valueOf("5.5.5.5"));
+ ospfRouter1.setRouterIp(Ip4Address.valueOf("1.1.1.1"));
+ OspfDeviceTed ospfDeviceTed1 = new OspfDeviceTedImpl();
+ ospfDeviceTed1.setAbr(false);
+ ospfDeviceTed1.setAsbr(false);
+ ospfRouter.setDeviceTed(ospfDeviceTed);
+ OspfLinkTed ospfLinkTed1 = new OspfLinkTedImpl();
+ ospfLinkTed1.setMaximumLink(Bandwidth.bps(10));
+ ospfLinkTed1.setMaxReserved(Bandwidth.bps(20));
+ ospfLinkTed1.setTeMetric(10);
+ for (OspfRouterListener l : controller.nodeListener) {
+ l.routerAdded(ospfRouter);
+
+ deviceAddCount = nodeRegistry.connected.size();
+ assertTrue(deviceAddCount == 1);
+ l.routerRemoved(ospfRouter);
+ deviceAddCount = nodeRegistry.connected.size();
+ assertTrue(deviceAddCount == 0);
+ }
+ for (OspfLinkListener l : controller.linkListener) {
+ l.addLink(ospfRouter, ospfLinkTed);
+ l.deleteLink(ospfRouter, ospfLinkTed);
+
+ }
+ }
+
+ @Test
+ public void ospfTopologyProviderTestAddDevice2() {
+ int deviceAddCount = 0;
+ OspfRouter ospfRouter = new OspfRouterImpl();
+ ospfRouter.setDr(true);
+ ospfRouter.setOpaque(true);
+ ospfRouter.setNeighborRouterId(Ip4Address.valueOf("3.3.3.3"));
+ ospfRouter.setInterfaceId(Ip4Address.valueOf("10.10.10.3"));
+ ospfRouter.setAreaIdOfInterface(Ip4Address.valueOf("6.6.6.6"));
+ ospfRouter.setRouterIp(Ip4Address.valueOf("7.7.7.7"));
+ OspfDeviceTed ospfDeviceTed = new OspfDeviceTedImpl();
+ ospfDeviceTed.setAbr(true);
+ ospfDeviceTed.setAsbr(true);
+ ospfRouter.setDeviceTed(ospfDeviceTed);
+ OspfLinkTed ospfLinkTed = new OspfLinkTedImpl();
+ ospfLinkTed.setMaximumLink(Bandwidth.bps(30));
+ ospfLinkTed.setMaxReserved(Bandwidth.bps(40));
+ ospfLinkTed.setTeMetric(50);
+ for (OspfRouterListener l : controller.nodeListener) {
+ l.routerAdded(ospfRouter);
+ deviceAddCount = nodeRegistry.connected.size();
+ assertTrue(deviceAddCount == 1);
+ l.routerRemoved(ospfRouter);
+ deviceAddCount = nodeRegistry.connected.size();
+ assertTrue(deviceAddCount == 0);
+ }
+ }
+
+
+ /* Class implement device test registry */
+ private class TestDeviceRegistry implements DeviceProviderRegistry {
+ DeviceProvider provider;
+ Set<DeviceId> connected = new HashSet<>();
+
+ @Override
+ public DeviceProviderService register(DeviceProvider provider) {
+ this.provider = provider;
+ return new TestProviderService();
+ }
+
+ @Override
+ public void unregister(DeviceProvider provider) {
+ }
+
+ @Override
+ public Set<ProviderId> getProviders() {
+ return null;
+ }
+
+ private class TestProviderService implements DeviceProviderService {
+
+ @Override
+ public DeviceProvider provider() {
+ return null;
+ }
+
+ @Override
+ public void deviceConnected(DeviceId deviceId, DeviceDescription deviceDescription) {
+ connected.add(deviceId);
+ }
+
+ @Override
+ public void deviceDisconnected(DeviceId deviceId) {
+ connected.remove(deviceId);
+ }
+
+ @Override
+ public void updatePorts(DeviceId deviceId, List<PortDescription> portDescriptions) {
+ // TODO Auto-generated method stub
+ }
+
+ @Override
+ public void portStatusChanged(DeviceId deviceId, PortDescription portDescription) {
+ // TODO Auto-generated method stub
+ }
+
+ @Override
+ public void receivedRoleReply(DeviceId deviceId, MastershipRole requested, MastershipRole response) {
+ // TODO Auto-generated method stub
+ }
+
+ @Override
+ public void updatePortStatistics(DeviceId deviceId, Collection<PortStatistics> portStatistics) {
+ // TODO Auto-generated method stub
+ }
+ }
+ }
+
+ private class TestDeviceService extends DeviceServiceAdapter {
+ private DeviceListener listener;
+
+ @Override
+ public void addListener(DeviceListener listener) {
+ this.listener = listener;
+ }
+
+ @Override
+ public Iterable<Device> getDevices() {
+ return Collections.emptyList();
+ }
+ }
+
+ private class TestLinkService extends LinkServiceAdapter {
+ private LinkListener listener;
+
+ @Override
+ public void addListener(LinkListener listener) {
+ this.listener = listener;
+ }
+
+ @Override
+ public Iterable<Link> getLinks() {
+ return Collections.emptyList();
+ }
+ }
+
+ /* Class implement device test registry */
+ private class TestLinkRegistry implements LinkProviderRegistry {
+ LinkProvider provider;
+ Set<DeviceId> connected = new HashSet<>();
+
+ @Override
+ public LinkProviderService register(LinkProvider provider) {
+ this.provider = provider;
+ return new TestLinkProviderService();
+ }
+
+ @Override
+ public void unregister(LinkProvider provider) {
+ }
+
+ @Override
+ public Set<ProviderId> getProviders() {
+ return null;
+ }
+
+ private class TestLinkProviderService implements LinkProviderService {
+ @Override
+ public void linkDetected(LinkDescription linkDescription) {
+ }
+
+ @Override
+ public void linkVanished(LinkDescription linkDescription) {
+ }
+
+ @Override
+ public void linksVanished(ConnectPoint connectPoint) {
+ }
+
+ @Override
+ public void linksVanished(DeviceId deviceId) {
+ }
+
+ @Override
+ public LinkProvider provider() {
+ return null;
+ }
+ }
+ }
+
+ /* class implement test controller */
+ private class TestController implements OspfController {
+ protected Set<OspfRouterListener> nodeListener = new CopyOnWriteArraySet<>();
+ protected Set<OspfLinkListener> linkListener = new CopyOnWriteArraySet<>();
+
+ @Override
+ public void addRouterListener(OspfRouterListener nodeListener) {
+ this.nodeListener.add(nodeListener);
+ }
+
+ @Override
+ public void removeRouterListener(OspfRouterListener nodeListener) {
+ this.nodeListener = null;
+ }
+
+ @Override
+ public void addLinkListener(OspfLinkListener listener) {
+ this.linkListener.add(listener);
+ }
+
+ @Override
+ public void removeLinkListener(OspfLinkListener listener) {
+ this.nodeListener = null;
+ }
+
+ @Override
+ public void updateConfig(JsonNode processesNode) {
+ }
+
+
+ @Override
+ public void deleteConfig(List<OspfProcess> processes, String attribute) {
+ }
+
+ @Override
+ public Set<OspfRouterListener> listener() {
+ return null;
+ }
+
+ @Override
+ public Set<OspfLinkListener> linkListener() {
+ return null;
+ }
+
+ @Override
+ public List<OspfProcess> getAllConfiguredProcesses() {
+ return null;
+ }
+ }
+}
\ No newline at end of file
diff --git a/providers/pom.xml b/providers/pom.xml
index 146dfd6..5ec5a89 100644
--- a/providers/pom.xml
+++ b/providers/pom.xml
@@ -48,6 +48,7 @@
<module>bmv2</module>
<module>isis</module>
<module>lisp</module>
+ <module>ospf</module>
</modules>
<dependencies>