ONOS-2740,ONOS-2741,from ONOS-3032 - to ONOS 3071 , OSPF Protocol Implementation
Change-Id: Ie8cccca4aaf2641ab1e332ed367ddfc9b725a35c
diff --git a/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/area/Configuration.java b/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/area/Configuration.java
new file mode 100755
index 0000000..ae75a95
--- /dev/null
+++ b/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/area/Configuration.java
@@ -0,0 +1,75 @@
+/*
+ * 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.
+ * 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.area;
+
+import com.google.common.base.MoreObjects;
+import org.onosproject.ospf.controller.OspfProcess;
+
+import java.util.List;
+
+/**
+ * Representation of an OSPF configuration data.
+ */
+public class Configuration {
+ private List<OspfProcess> processes;
+ private String method;
+
+ /**
+ * Gets the configured processes.
+ *
+ * @return list of configured processes.
+ */
+ public List<OspfProcess> getProcesses() {
+ return processes;
+ }
+
+ /**
+ * Sets the configured processes.
+ *
+ * @param processes configured processes
+ */
+ public void setProcesses(List<OspfProcess> processes) {
+ this.processes = processes;
+ }
+
+ /**
+ * Gets whether to update, add or delete configuration.
+ *
+ * @return update, add or delete configuration
+ */
+ public String getMethod() {
+ return method;
+ }
+
+ /**
+ * Sets whether to update, add or delete configuration.
+ *
+ * @param method configuration method.
+ */
+ public void setMethod(String method) {
+ this.method = method;
+ }
+
+
+ @Override
+ public String toString() {
+ return MoreObjects.toStringHelper(getClass())
+ .omitNullValues()
+ .add("method", method)
+ .add("processes", processes)
+ .toString();
+ }
+}
\ No newline at end of file
diff --git a/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/area/OspfAreaAddressRangeImpl.java b/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/area/OspfAreaAddressRangeImpl.java
new file mode 100755
index 0000000..a5c99b2
--- /dev/null
+++ b/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/area/OspfAreaAddressRangeImpl.java
@@ -0,0 +1,114 @@
+/*
+ * 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.
+ * 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.area;
+
+import com.google.common.base.MoreObjects;
+import com.google.common.base.Objects;
+import org.onlab.packet.Ip4Address;
+import org.onosproject.ospf.controller.OspfAreaAddressRange;
+
+/**
+ * Representation of an area address ranges.
+ * Address ranges are used 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 do not advertise
+ */
+public class OspfAreaAddressRangeImpl implements OspfAreaAddressRange {
+
+ public Ip4Address ipAddress;
+ public String mask;
+ public boolean advertise;
+
+ /**
+ * Gets the IP address.
+ *
+ * @return IP address
+ */
+ public Ip4Address ipAddress() {
+ return ipAddress;
+ }
+
+ /**
+ * Sets the IP address.
+ *
+ * @param ipAddress IP address
+ */
+ public void setIpAddress(Ip4Address ipAddress) {
+ this.ipAddress = ipAddress;
+ }
+
+ /**
+ * Gets the network mask.
+ *
+ * @return network mask
+ */
+ public String mask() {
+ return mask;
+ }
+
+ /**
+ * Sets the network mask.
+ *
+ * @param mask network mask value
+ */
+ public void setMask(String mask) {
+ this.mask = mask;
+ }
+
+ /**
+ * Gets the advertise value.
+ *
+ * @return advertise value
+ */
+ public boolean isAdvertise() {
+ return advertise;
+ }
+
+ /**
+ * Sets the advertise value.
+ *
+ * @param advertise advertise value
+ */
+ public void setAdvertise(boolean advertise) {
+ this.advertise = advertise;
+ }
+
+ @Override
+ public boolean equals(Object other) {
+ if (!(other instanceof OspfAreaAddressRangeImpl)) {
+ return false;
+ }
+ OspfAreaAddressRangeImpl otherAreaAddressRange = (OspfAreaAddressRangeImpl) other;
+ return Objects.equal(ipAddress, otherAreaAddressRange.ipAddress) &&
+ Objects.equal(mask, otherAreaAddressRange.mask) &&
+ Objects.equal(advertise, otherAreaAddressRange.advertise);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hashCode(ipAddress, mask, advertise);
+ }
+
+ @Override
+ public String toString() {
+ return MoreObjects.toStringHelper(getClass())
+ .omitNullValues()
+ .add("ipAddress", ipAddress)
+ .add("mask", mask)
+ .add("advertise", advertise)
+ .toString();
+ }
+}
\ No newline at end of file
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
new file mode 100755
index 0000000..4c19161
--- /dev/null
+++ b/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/area/OspfInterfaceImpl.java
@@ -0,0 +1,520 @@
+/*
+ * 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.
+ * 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.area;
+
+import com.google.common.base.MoreObjects;
+import com.google.common.base.Objects;
+import org.onlab.packet.Ip4Address;
+import org.onosproject.ospf.controller.OspfInterface;
+import org.onosproject.ospf.controller.OspfNbr;
+import org.onosproject.ospf.protocol.lsa.LsaHeader;
+import org.onosproject.ospf.protocol.lsa.OpaqueLsaHeader;
+import org.onosproject.ospf.protocol.util.OspfInterfaceState;
+import org.onosproject.ospf.protocol.util.OspfParameters;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * Representation of an OSPF interface.
+ */
+public class OspfInterfaceImpl implements OspfInterface {
+ private static final Logger log = LoggerFactory.getLogger(OspfInterfaceImpl.class);
+ private Ip4Address ipAddress;
+ private Ip4Address ipNetworkMask;
+ private int areaId;
+ 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<>();
+
+ /**
+ * Gets the interface state.
+ *
+ * @return interfaceState state of the interface
+ */
+ public OspfInterfaceState state() {
+ return state;
+ }
+
+ /**
+ * Sets the interface state.
+ *
+ * @param ospfInterfaceState interface state enum instance
+ */
+ public void setState(OspfInterfaceState ospfInterfaceState) {
+ this.state = ospfInterfaceState;
+ }
+
+ /**
+ * Gets link state headers.
+ *
+ * @return get the list of lsa headers
+ */
+ public List<LsaHeader> linkStateHeaders() {
+ Set<String> key = listOfNeighborMap.keySet();
+ for (String keys : key) {
+ LsaHeader lsaHeader = listOfNeighborMap.get(keys);
+ linkStateHeaders.add(lsaHeader);
+ }
+ return linkStateHeaders;
+ }
+
+ /**
+ * Gets IP network mask.
+ *
+ * @return network mask
+ */
+ public Ip4Address ipNetworkMask() {
+ return ipNetworkMask;
+ }
+
+ /**
+ * Sets IP network mask.
+ *
+ * @param ipNetworkMask network mask
+ */
+ @Override
+ public void setIpNetworkMask(Ip4Address ipNetworkMask) {
+ this.ipNetworkMask = ipNetworkMask;
+ }
+
+ /**
+ * Adds neighboring router to list.
+ *
+ * @param ospfNbr ospfNbr instance
+ */
+ public void addNeighbouringRouter(OspfNbr ospfNbr) {
+ listOfNeighbors.put(ospfNbr.neighborId().toString(), ospfNbr);
+ }
+
+ /**
+ * Gets the neighbour details from listOfNeighbors map.
+ *
+ * @param neighborId neighbors id
+ * @return ospfNbr neighbor instance
+ */
+ public OspfNbr neighbouringRouter(String neighborId) {
+ return listOfNeighbors.get(neighborId);
+ }
+
+
+ /**
+ * Adds LSAHeader to map.
+ *
+ * @param lsaHeader LSA header instance
+ */
+ public void addLsaHeaderForDelayAck(LsaHeader lsaHeader) {
+ String key = lsaHeader.lsType() + "-" + lsaHeader.linkStateId() + "-" +
+ lsaHeader.advertisingRouter();
+ if (lsaHeader.lsType() == OspfParameters.LINK_LOCAL_OPAQUE_LSA ||
+ lsaHeader.lsType() == OspfParameters.AREA_LOCAL_OPAQUE_LSA ||
+ lsaHeader.lsType() == OspfParameters.AS_OPAQUE_LSA) {
+ OpaqueLsaHeader header = (OpaqueLsaHeader) lsaHeader;
+ key = lsaHeader.lsType() + "-" + header.opaqueType() + header.opaqueId()
+ + "-" + lsaHeader.advertisingRouter();
+ }
+
+ log.debug("Adding LSA key {} for delayed Ack", key);
+ listOfNeighborMap.put(key, lsaHeader);
+ }
+
+ /**
+ * Removes LSA header from map.
+ *
+ * @param lsaKey key used to store LSA in map
+ */
+ public void removeLsaFromNeighborMap(String lsaKey) {
+ listOfNeighborMap.remove(lsaKey);
+ }
+
+ /**
+ * Checks neighbor is in the list or not.
+ *
+ * @param neighborId neighbors id
+ * @return true if neighbor in list else false
+ */
+ public boolean isNeighborInList(String neighborId) {
+ return listOfNeighbors.containsKey(neighborId);
+ }
+
+ /**
+ * Gets the list of neighbors.
+ *
+ * @return listOfNeighbors as key value pair
+ */
+ public HashMap<String, OspfNbr> listOfNeighbors() {
+ return listOfNeighbors;
+ }
+
+ /**
+ * Sets the list of neighbors.
+ *
+ * @param listOfNeighbors as key value pair
+ */
+ public void setListOfNeighbors(HashMap<String, OspfNbr> listOfNeighbors) {
+ this.listOfNeighbors = listOfNeighbors;
+ }
+
+ /**
+ * Gets the IP address.
+ *
+ * @return IP address
+ */
+ public Ip4Address ipAddress() {
+ return ipAddress;
+ }
+
+ /**
+ * Sets the interface IP address.
+ *
+ * @param ipAddress interface IP address
+ */
+ public void setIpAddress(Ip4Address ipAddress) {
+ this.ipAddress = ipAddress;
+ }
+
+ /**
+ * Gets router priority.
+ *
+ * @return routerPriority value
+ */
+ public int routerPriority() {
+ return routerPriority;
+ }
+
+ /**
+ * Sets router priority.
+ *
+ * @param routerPriority value
+ */
+ public void setRouterPriority(int routerPriority) {
+ this.routerPriority = routerPriority;
+ }
+
+ /**
+ * 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
+ */
+ public int helloIntervalTime() {
+ return helloIntervalTime;
+ }
+
+ /**
+ * Sets hello interval time.
+ *
+ * @param helloIntervalTime an integer interval time
+ */
+ public void setHelloIntervalTime(int helloIntervalTime) {
+ this.helloIntervalTime = helloIntervalTime;
+ }
+
+ /**
+ * Gets router dead interval time.
+ *
+ * @return router dead interval time
+ */
+ public int routerDeadIntervalTime() {
+ return routerDeadIntervalTime;
+ }
+
+ /**
+ * Sets router dead interval time.
+ *
+ * @param routerDeadIntervalTime router dead interval time
+ */
+ public void setRouterDeadIntervalTime(int routerDeadIntervalTime) {
+ this.routerDeadIntervalTime = routerDeadIntervalTime;
+ }
+
+ /**
+ * Gets interface type.
+ *
+ * @return interfaceType an integer represents interface type
+ */
+ public int interfaceType() {
+ return interfaceType;
+ }
+
+ /**
+ * Sets interface type.
+ *
+ * @param interfaceType interface type
+ */
+ public void setInterfaceType(int interfaceType) {
+ this.interfaceType = interfaceType;
+ }
+
+ /**
+ * 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
+ */
+ public int mtu() {
+ return mtu;
+ }
+
+ /**
+ * Sets max transfer unit.
+ *
+ * @param mtu max transfer unit
+ */
+ public void setMtu(int mtu) {
+ this.mtu = mtu;
+ }
+
+ /**
+ * Gets retransmit interval.
+ *
+ * @return retransmit interval
+ */
+ public int reTransmitInterval() {
+ return reTransmitInterval;
+ }
+
+ /**
+ * Sets retransmit interval.
+ *
+ * @param reTransmitInterval retransmit interval
+ */
+ public void setReTransmitInterval(int reTransmitInterval) {
+ this.reTransmitInterval = reTransmitInterval;
+ }
+
+ /**
+ * Gets designated routers IP address.
+ *
+ * @return dr designated routers IP address
+ */
+ public Ip4Address dr() {
+ return dr;
+ }
+
+ /**
+ * Sets designated routers IP address.
+ *
+ * @param dr designated routers IP address
+ */
+ public void setDr(Ip4Address dr) {
+ this.dr = dr;
+ }
+
+ /**
+ * Gets backup designated routers IP address.
+ *
+ * @return bdr backup designated routers IP address
+ */
+ public Ip4Address bdr() {
+ return bdr;
+ }
+
+ /**
+ * Sets backup designated routers IP address.
+ *
+ * @param bdr backup designated routers IP address
+ */
+ public void setBdr(Ip4Address bdr) {
+ this.bdr = bdr;
+ }
+
+ /**
+ * Get transmission delay.
+ *
+ * @return transmission delay
+ */
+ public int transmitDelay() {
+ return transmitDelay;
+ }
+
+ /**
+ * Sets transmission delay.
+ *
+ * @param transmitDelay transmission delay
+ */
+ public void setTransmitDelay(int transmitDelay) {
+ this.transmitDelay = transmitDelay;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+ OspfInterfaceImpl that = (OspfInterfaceImpl) o;
+ return Objects.equal(areaId, that.areaId) &&
+ 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);
+ }
+
+ @Override
+ public String toString() {
+ return MoreObjects.toStringHelper(getClass())
+ .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();
+ }
+}
\ No newline at end of file
diff --git a/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/area/OspfProcessImpl.java b/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/area/OspfProcessImpl.java
new file mode 100755
index 0000000..facbdb3
--- /dev/null
+++ b/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/area/OspfProcessImpl.java
@@ -0,0 +1,78 @@
+/*
+ * 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.
+ * 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.area;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.google.common.base.MoreObjects;
+import org.onosproject.ospf.controller.OspfArea;
+import org.onosproject.ospf.controller.OspfProcess;
+
+import java.util.List;
+
+/**
+ * Representation of the configuration data for OSPF Process, which will be configured using rest URI.
+ */
+public class OspfProcessImpl implements OspfProcess {
+
+ private String processId;
+ private List<OspfArea> areas;
+
+ /**
+ * Gets the list of areas belonging to this process.
+ *
+ * @return list of areas belonging to this process
+ */
+ public List<OspfArea> areas() {
+ return areas;
+ }
+
+ /**
+ * Sets the list of areas belonging to this process.
+ *
+ * @param areas list of areas belonging to this process
+ */
+ @JsonProperty("areas")
+ public void setAreas(List<OspfArea> areas) {
+ this.areas = areas;
+ }
+
+ /**
+ * Gets the process id.
+ *
+ * @return process id
+ */
+ public String processId() {
+ return processId;
+ }
+
+ /**
+ * Sets the process id.
+ *
+ * @param processId the process id
+ */
+ @JsonProperty("processId")
+ public void setProcessId(String processId) {
+ this.processId = processId;
+ }
+
+ @Override
+ public String toString() {
+ return MoreObjects.toStringHelper(getClass())
+ .omitNullValues()
+ .add("areas", areas)
+ .toString();
+ }
+}
\ No newline at end of file
diff --git a/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/area/package-info.java b/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/area/package-info.java
new file mode 100755
index 0000000..a06d2f8
--- /dev/null
+++ b/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/area/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * 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.
+ * 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.
+ */
+
+/**
+ * Implementation of the OSPF controller.
+ */
+package org.onosproject.ospf.controller.area;
\ No newline at end of file