package es.tid.topologyModuleBase.plugins.reader;
import java.net.Inet4Address;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.locks.Lock;
import es.tid.ospf.ospfv2.OSPFv2LinkStateUpdatePacket;
import es.tid.tedb.DomainTEDB;
import es.tid.tedb.FileTEDBUpdater;
import es.tid.tedb.ReachabilityEntry;
import es.tid.tedb.SimpleTEDB;
import es.tid.tedb.ospfv2.OSPFSessionServer;
import es.tid.tedb.ospfv2.OSPFTCPSessionServer;
import es.tid.topologyModuleBase.TopologyModuleParams;
import es.tid.topologyModuleBase.database.TopologiesDataBase;
import es.tid.topologyModuleBase.plugins.updaters.RedisTEDUpdaterThread;
import es.tid.topologyModuleBase.plugins.updaters.TopologyUpdaterThread;
import es.tid.topologyModuleBase.util.UtilsFunctions;
/**
*
* @author jaume
*
*/
public class TopologyReaderOSPF extends TopologyReader
{
private boolean isRunning=false;
public TopologyReaderOSPF(TopologiesDataBase ted, TopologyModuleParams params, Lock lock)
{
super(ted,params,lock);
}
@Override
public void readTopology()
{
LinkedBlockingQueue<OSPFv2LinkStateUpdatePacket> ospfv2PacketQueue = new LinkedBlockingQueue<OSPFv2LinkStateUpdatePacket>();
TopologyUpdaterThread tut = null;
ReachabilityEntry reachabilityEntry = new ReachabilityEntry();
FileTEDBUpdater.getDomainReachabilityFromFile(params.getReachabilityFile(),reachabilityEntry);
//((SimpleTEDB)ted.getDB()).createGraph();
((SimpleTEDB)ted.getDB()).setReachabilityEntry(reachabilityEntry);
if (params.isMultilayer()==true)
{
tut = new TopologyUpdaterThread(ospfv2PacketQueue, (DomainTEDB)ted.getDB(),params.getLambdaIni(),params.getLambdaEnd(), params.isCompletedAuxGraph(), params.isMultilayer());
}
else
{
tut = new TopologyUpdaterThread(ospfv2PacketQueue, (DomainTEDB)ted.getDB(),params.getLambdaIni(),params.getLambdaEnd());
}
isRunning=true;
tut.start();
/*
* Code added to handle the redis topology update
*
*/
boolean redisDatabase = true;
LinkedBlockingQueue<OSPFv2LinkStateUpdatePacket> redisOspfv2PacketQueue = new LinkedBlockingQueue<OSPFv2LinkStateUpdatePacket>();
if(redisDatabase)
{
RedisTEDUpdaterThread rtut = new RedisTEDUpdaterThread(redisOspfv2PacketQueue);
rtut.start();
}
if (params.isOSPFTCPSession())
{
OSPFTCPSessionServer OSPFsessionserver= new OSPFTCPSessionServer(ospfv2PacketQueue,redisOspfv2PacketQueue);
OSPFsessionserver.setOSPFTCPPort(params.getOSPFTCPPort());
OSPFsessionserver.start();
}
else if (params.isOSPFSession())
{
System.out.println("Es OSPF Session");
OSPFSessionServer OSPFsessionserver = null;
try {
/*
* Redis database
*/
if(redisDatabase){
OSPFsessionserver = new OSPFSessionServer(ospfv2PacketQueue, redisOspfv2PacketQueue, ((Inet4Address) InetAddress.getByName(params.getOSPFListenerIP())));
OSPFsessionserver.setMulticast(params.isOSPFSession());
OSPFsessionserver.start();
}
else{
OSPFsessionserver = new OSPFSessionServer(ospfv2PacketQueue, ((Inet4Address) InetAddress.getByName(params.getOSPFListenerIP())));
OSPFsessionserver.setMulticast(params.isOSPFSession());
OSPFsessionserver.start();
}
}
catch (UnknownHostException e)
{
log.info(UtilsFunctions.exceptionToString(e));
}
}
}
@Override
public boolean isRunning() {
// TODO Auto-generated method stub
return isRunning;
}
@Override
public String getPluginName() {
// TODO Auto-generated method stub
return "OSPFimporter";
}
@Override
public String displayInfo() {
// TODO Auto-generated method stub
return getPluginName();
}
@Override
public void run() {
readTopology();
}
}