/* * 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; import org.jboss.netty.channel.ChannelHandlerContext; import org.onlab.packet.Ip4Address; import java.util.Map; /** * Represents an OSPF Interface. */ 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 */ Ip4Address ipNetworkMask(); /** * Sets the value of BDR. * The BDR is calculated during adjacency formation. * * @param bdr backup designated router's IP address */ void setBdr(Ip4Address bdr); /** * Sets the value of DR. * The DR is calculated during adjacency formation. * * @param dr designated router's IP address */ void setDr(Ip4Address dr); /** * Sets the hello interval time. * It is the interval at which a hello packet is sent out via this interface. * * @param helloIntervalTime an integer interval time */ void setHelloIntervalTime(int helloIntervalTime); /** * Sets router dead interval time. * This is the interval after which this interface will trigger a process to kill neighbor. * * @param routerDeadIntervalTime an integer interval time */ void setRouterDeadIntervalTime(int routerDeadIntervalTime); /** * Sets interface type. * This indicates whether the interface is on point to point mode or broadcast mode. * * @param interfaceType an integer represents interface type */ void setInterfaceType(int interfaceType); /** * Sets IP Address of this interface. * * @param ipAddress IP address */ void setIpAddress(Ip4Address ipAddress); /** * Sets IP network mask. * * @param ipNetworkMask network mask */ void setIpNetworkMask(Ip4Address ipNetworkMask); /** * Sets retransmit interval which indicates the number of seconds between LSA retransmissions. * * @param reTransmitInterval an integer represents interval */ void setReTransmitInterval(int reTransmitInterval); /** * Sets MTU. * * @param mtu an integer represents max transfer unit */ void setMtu(int mtu); /** * Sets router priority. * * @param routerPriority value */ void setRouterPriority(int routerPriority); /** * Gets the IP address. * * @return an string represents IP address */ Ip4Address ipAddress(); /** * Gets the interface type. * * @return an integer represents interface type */ int interfaceType(); /** * Gets the MTU. * * @return an integer representing max transfer unit */ int mtu(); /** * Gets the list of neighbors associated with the interface. * * @return listOfNeighbors as key value pair */ Map<String, OspfNbr> listOfNeighbors(); /** * Gets the IP address of the BDR. * * @return bdr BDR's IP address */ Ip4Address bdr(); /** * Gets the ip address of the DR.. * * @return dr DR's IP address */ Ip4Address dr(); /** * Gets hello interval time in seconds, this defines how often we send the hello packet. * * @return hello interval time in seconds */ int helloIntervalTime(); /** * Gets retransmit interval. * * @return reTransmitInterval an integer represents interval */ int reTransmitInterval(); /** * Gets router dead interval time. * This defines how long we should wait for hello packets before we declare the neighbor is dead. * * @return routerDeadIntervalTime an integer interval time */ int routerDeadIntervalTime(); /** * Gets router priority. * * @return routerPriority value */ int routerPriority(); /** * Adds the given neighboring router to the neighbor map. * * @param ospfNbr neighbor instance */ void addNeighbouringRouter(OspfNbr ospfNbr); /** * Gets the neighbor instance from listOfNeighbors map for the given neighbor ID. * * @param neighborId neighbors id * @return ospfNbr neighbor instance */ OspfNbr neighbouringRouter(String neighborId); /** * Checks the given neighbor is in the neighbor list. * * @param neighborId neighbors id * @return true if neighbor in list else false */ boolean isNeighborInList(String neighborId); /** * Removes LSA headers from the map in which LSA headers are stored. * * @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(); }