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