Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
es.tid.netManager.NetworkLSPManager Maven / Gradle / Ivy
package es.tid.netManager;
import java.net.Inet4Address;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.Set;
import java.util.concurrent.LinkedBlockingQueue;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.jgrapht.graph.SimpleDirectedWeightedGraph;
import es.tid.netManager.emulated.LayerTypes;
import es.tid.ospf.ospfv2.OSPFv2LinkStateUpdatePacket;
import es.tid.ospf.ospfv2.lsa.LSA;
import es.tid.ospf.ospfv2.lsa.OSPFTEv2LSA;
import es.tid.ospf.ospfv2.lsa.tlv.LinkTLV;
import es.tid.ospf.ospfv2.lsa.tlv.subtlv.LinkID;
import es.tid.ospf.ospfv2.lsa.tlv.subtlv.LocalInterfaceIPAddress;
import es.tid.ospf.ospfv2.lsa.tlv.subtlv.RemoteInterfaceIPAddress;
import es.tid.ospf.ospfv2.lsa.tlv.subtlv.complexFields.BitmapLabelSet;
import es.tid.pce.pcep.objects.BandwidthRequestedGeneralizedBandwidth;
import es.tid.rsvp.constructs.gmpls.DWDMWavelengthLabel;
import es.tid.rsvp.objects.subobjects.EROSubobject;
import es.tid.tedb.DomainTEDB;
import es.tid.tedb.IntraDomainEdge;
import es.tid.tedb.MultiLayerTEDB;
import es.tid.tedb.SimpleTEDB;
public abstract class NetworkLSPManager {
Logger log= LoggerFactory.getLogger("PCCClient");
private DomainTEDB domainTEDB;
private LinkedBlockingQueue sendingQueue;
// DataOutputStream out;
private String file;
private int emulatorType;
private boolean multilayer=false;
public DomainTEDB getDomainTEDB() {
return domainTEDB;
}
public void setDomainTEDB(DomainTEDB domainTEDB) {
this.domainTEDB = domainTEDB;
}
/**
* Recorrer toda la red y enviar todos los OSPF
* @return
*/
public void sendAllTopology(){
int layer;
if (multilayer){
//UPPER_LAYER
SimpleDirectedWeightedGraph graphIP = ((MultiLayerTEDB)domainTEDB).getUpperLayerGraph();
Set edgeSet= graphIP.edgeSet();
Iterator edgeIterator=edgeSet.iterator();
layer = LayerTypes.UPPER_LAYER;
while (edgeIterator.hasNext()){
IntraDomainEdge edge= edgeIterator.next();
sendMessageOSPF((Inet4Address)edge.getSource(),(Inet4Address)edge.getTarget(), multilayer, layer, null);
}
//LOWER LAYER
SimpleDirectedWeightedGraph graphOP = ((MultiLayerTEDB)domainTEDB).getLowerLayerGraph();
Set edgeSet1= graphOP.edgeSet();
Iterator edgeIterator1=edgeSet1.iterator();
layer = LayerTypes.LOWER_LAYER;
while (edgeIterator1.hasNext()){
IntraDomainEdge edge= edgeIterator1.next();
sendMessageOSPF((Inet4Address)edge.getSource(),(Inet4Address)edge.getTarget(), multilayer, layer, null);
}
}
else {
SimpleDirectedWeightedGraph networkGraph = ((SimpleTEDB)domainTEDB).getNetworkGraph();
Set edgeSet= networkGraph.edgeSet();
Iterator edgeIterator=edgeSet.iterator();
layer = LayerTypes.SIMPLE_NETWORK;
while (edgeIterator.hasNext()){
IntraDomainEdge edge= edgeIterator.next();
sendMessageOSPF((Inet4Address)edge.getSource(),(Inet4Address)edge.getTarget(), multilayer, layer, null);
}
}
}
/**
* Send a OSPF message
* @param TE_info Information of the link to send
* @param src Source address of the link
* @param dst Destiny address of the link
* @param dwdmWavelengthLabel lambda used in the link (where to send), it can be null.
*/
public void sendMessageOSPF(Inet4Address src,Inet4Address dst){
sendMessageOSPF(src, dst, multilayer, LayerTypes.SIMPLE_NETWORK, null);
}
/**
* Send a OSPF message
* @param TE_info Information of the link to send
* @param src Source address of the link
* @param dst Destiny address of the link
* @param dwdmWavelengthLabel lambda used in the link (where to send), it can be null.
*/
public void sendMessageOSPF(Inet4Address src,Inet4Address dst, boolean isMultilayer, int layer, DWDMWavelengthLabel dwdmWavelengthLabel){
log.info("SEND OSPF");
//changes for multilayer OSPF (UpperLayer and LowerLayer)
IntraDomainEdge edge = null;
if (isMultilayer){
if (layer == LayerTypes.UPPER_LAYER){
edge=((MultiLayerTEDB)domainTEDB).getUpperLayerGraph().getEdge(src, dst);
}
else if (layer == LayerTypes.LOWER_LAYER){
edge=((MultiLayerTEDB)domainTEDB).getLowerLayerGraph().getEdge(src, dst);
}
}
else
edge=((SimpleTEDB)domainTEDB).getNetworkGraph().getEdge(src, dst);
OSPFv2LinkStateUpdatePacket ospfv2Packet = new OSPFv2LinkStateUpdatePacket();
ospfv2Packet.setRouterID(src);
LinkedList lsaList = new LinkedList();
OSPFTEv2LSA lsa = new OSPFTEv2LSA();
LinkTLV linkTLV=new LinkTLV();
lsa.setLinkTLV(linkTLV);
if (layer == LayerTypes.UPPER_LAYER){
if (edge.getTE_info().getMaximumBandwidth()!=null)
linkTLV.setMaximumBandwidth(edge.getTE_info().getMaximumBandwidth());
if (edge.getTE_info().getUnreservedBandwidth() != null)
linkTLV.setUnreservedBandwidth(edge.getTE_info().getUnreservedBandwidth());
if (edge.getTE_info().getMaximumReservableBandwidth()!=null){
linkTLV.setMaximumReservableBandwidth(edge.getTE_info().getMaximumReservableBandwidth());
}
}
LocalInterfaceIPAddress localInterfaceIPAddress= new LocalInterfaceIPAddress();
LinkedList lista =localInterfaceIPAddress.getLocalInterfaceIPAddressList();
lista.add(src);
linkTLV.setLocalInterfaceIPAddress(localInterfaceIPAddress);
RemoteInterfaceIPAddress remoteInterfaceIPAddress= new RemoteInterfaceIPAddress();
LinkedList listar = remoteInterfaceIPAddress.getRemoteInterfaceIPAddressList();
listar.add(dst);
linkTLV.setRemoteInterfaceIPAddress(remoteInterfaceIPAddress);
LinkID linkID = new LinkID();
linkID.setLinkID(dst);
linkTLV.setLinkID(linkID);
if (edge.getTE_info().getAvailableLabels() != null){
linkTLV.setAvailableLabels(edge.getTE_info().getAvailableLabels());
((BitmapLabelSet)linkTLV.getAvailableLabels().getLabelSet()).setDwdmWavelengthLabel(dwdmWavelengthLabel);
}
lsaList.add(lsa);
ospfv2Packet.setLSAlist(lsaList);
sendingQueue.add(ospfv2Packet);
}
public abstract boolean setLSP(LinkedList erolist,boolean bidirect, BandwidthRequestedGeneralizedBandwidth GB);
public abstract boolean setMLLSP(LinkedList erolist,boolean bidirect, BandwidthRequestedGeneralizedBandwidth GB);
public abstract boolean setLSP_UpperLayer(LinkedList eROSubobjectList_IP, float bw, boolean bidirect);
public abstract void removeLSP(LinkedList erolist, boolean bidirect, BandwidthRequestedGeneralizedBandwidth GB);
public abstract void removeLSP(LinkedList erolist, boolean bidirect, BandwidthRequestedGeneralizedBandwidth GB, float bw);
public abstract void removeMLLSP(LinkedList erolist, boolean bidirect, BandwidthRequestedGeneralizedBandwidth GB);
public LinkedBlockingQueue getSendingQueue() {
return sendingQueue;
}
public void setSendingQueue(
LinkedBlockingQueue sendingQueue) {
this.sendingQueue = sendingQueue;
}
public String getFile() {
return file;
}
public void setFile(String file) {
this.file = file;
}
public void setEmulatorType(int emulatorType) {
this.emulatorType = emulatorType;
}
public int getEmulatorType() {
return emulatorType;
}
public boolean isMultilayer() {
return multilayer;
}
public void setMultilayer(boolean multilayer) {
this.multilayer = multilayer;
}
}