
es.tid.netManager.emulated.AdvancedEmulatedNetworkLSPManager Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of network-emulator Show documentation
Show all versions of network-emulator Show documentation
Emulator of GMPLS-controlled transport Network
The newest version!
package es.tid.netManager.emulated;
import java.net.Inet4Address;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.locks.ReentrantLock;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import es.tid.netManager.NetworkLSPManager;
import es.tid.netManager.NetworkLSPManagerTypes;
import es.tid.ospf.ospfv2.OSPFv2LinkStateUpdatePacket;
import es.tid.pce.pcep.objects.BandwidthRequestedGeneralizedBandwidth;
import es.tid.rsvp.constructs.gmpls.DWDMWavelengthLabel;
import es.tid.rsvp.objects.subobjects.EROSubobject;
import es.tid.rsvp.objects.subobjects.GeneralizedLabelEROSubobject;
import es.tid.rsvp.objects.subobjects.IPv4prefixEROSubobject;
import es.tid.rsvp.objects.subobjects.SubObjectValues;
import es.tid.rsvp.objects.subobjects.UnnumberIfIDEROSubobject;
import es.tid.tedb.IntraDomainEdge;
import es.tid.tedb.SimpleTEDB;
/**
* - Comprueba que hay recursos: si no hay fallo. DONE
* - Introducir un ancho de banda a reservar. DONE
* - Introducir bidireccional o no bidireccional. DONE
* - Sincronizar el acceso a la base de datos, sincronizar los metodos para que no se pisen (al comprobar recursos y actualizarlos)DONE
*
* @author mcs
*
*/
public class AdvancedEmulatedNetworkLSPManager extends NetworkLSPManager{
private ReentrantLock lock = new ReentrantLock();
Logger log= LoggerFactory.getLogger("PCCClient");
public AdvancedEmulatedNetworkLSPManager(LinkedBlockingQueue sendingQueue, String file ){
this.setEmulatorType(NetworkLSPManagerTypes.ADVANCED_EMULATED_NETWORK);
this.setDomainTEDB(new SimpleTEDB());
this.setFile(file);
if (file !=null){
log.info("Initializing TEDB de "+file);
this.getDomainTEDB().initializeFromFile(file);
}
else {
log.error("Network file NOT included!!!");
}
this.setSendingQueue(sendingQueue);
}
/**
* Recorre el ERO y actualiza las propiedades de TE
* setLSP send the LSP for multiDomain Networks.
* En la Erolist me viene:
* - interfaces no numeradas
* - IPv4Address
* - lambdas: (Objeto DWDMWavelengthLabel)
* 0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Grid | C.S. | Identifier | n |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Idea: Compruebas que puedas reservar todo y si es as�, lo reservas y mandas OSPF
* @param erolist
*/
@Override
public synchronized boolean setLSP(LinkedList erolist,boolean bidirect, BandwidthRequestedGeneralizedBandwidth GB) {
log.info("Setting LSP with ERO: "+erolist.toString());
ArrayList src=new ArrayList();
ArrayList dst=new ArrayList();
ArrayList dwdmWavelengthLabel=new ArrayList< DWDMWavelengthLabel>();
ArrayList edge = new ArrayList();
ArrayList edge_op = new ArrayList();
ArrayList lambda = new ArrayList(); //Considero que la lambda NO es la misma para todos los enlaces
int number_lambdas=0;
//Check if the path is possible from the src to the dst.
lock.lock();
try{
for (int i=0;i erolist,boolean bidirect, BandwidthRequestedGeneralizedBandwidth GB) {
log.info("Setting ML LSP with ERO: "+erolist.toString());
ArrayList src=new ArrayList();
ArrayList dst=new ArrayList();
ArrayList dwdmWavelengthLabel=new ArrayList< DWDMWavelengthLabel>();
ArrayList edge = new ArrayList();
ArrayList edge_op = new ArrayList();
ArrayList lambda = new ArrayList(); //Considero que la lambda NO es la misma para todos los enlaces
int number_lambdas=0;
lock.lock();
try{
for (int i=0;i erolist, boolean bidirect, BandwidthRequestedGeneralizedBandwidth GB) {
log.info("Removing ML LSP with ERO: "+erolist.toString());
for (int i=0;i erolist,boolean bidirect, BandwidthRequestedGeneralizedBandwidth GB) {
log.info("Removing ML LSP with ERO: "+erolist.toString());
for (int i=0;i erolist,int i,ArrayList src,ArrayList dst,ArrayList dwdmWavelengthLabel, int number_lambdas){
if (erolist.get(i).getType()==SubObjectValues.ERO_SUBOBJECT_LABEL){
return false;
}
if (erolist.get(i).getType()==SubObjectValues.ERO_SUBOBJECT_IPV4PREFIX){
src.add(i-number_lambdas,((IPv4prefixEROSubobject)erolist.get(i)).getIpv4address());
}else if (erolist.get(i).getType()==SubObjectValues.ERO_SUBOBJECT_UNNUMBERED_IF_ID){
src.add(i-number_lambdas,((UnnumberIfIDEROSubobject)erolist.get(i)).getRouterID());
}
if (erolist.get(i+1).getType()==SubObjectValues.ERO_SUBOBJECT_IPV4PREFIX){
dst.add(i-number_lambdas,((IPv4prefixEROSubobject)erolist.get(i+1)).getIpv4address());
}else if (erolist.get(i+1).getType()==SubObjectValues.ERO_SUBOBJECT_UNNUMBERED_IF_ID){
dst.add(i-number_lambdas,((UnnumberIfIDEROSubobject)erolist.get(i+1)).getRouterID());
}else if (erolist.get(i+1).getType()==SubObjectValues.ERO_SUBOBJECT_LABEL){
if (dwdmWavelengthLabel==null){
dwdmWavelengthLabel=new ArrayList();
dwdmWavelengthLabel.add(i,((GeneralizedLabelEROSubobject) erolist.get(i+1)).getDwdmWavelengthLabel());
}else{
dwdmWavelengthLabel.add(i-number_lambdas,((GeneralizedLabelEROSubobject) erolist.get(i+1)).getDwdmWavelengthLabel());
}
if (erolist.get(i+2).getType()==SubObjectValues.ERO_SUBOBJECT_IPV4PREFIX){
dst.add(i-number_lambdas,((IPv4prefixEROSubobject)erolist.get(i+2)).getIpv4address());
}else if (erolist.get(i+2).getType()==SubObjectValues.ERO_SUBOBJECT_UNNUMBERED_IF_ID){
dst.add(i-number_lambdas,((UnnumberIfIDEROSubobject)erolist.get(i+2)).getRouterID());
}
}
return true;
}
private boolean checkLambdaFree(ArrayList edge,ArrayList dwdmWavelengthLabel,ArrayList src,ArrayList dst,ArrayList lambda, int i){
IntraDomainEdge edge1 =((SimpleTEDB)this.getDomainTEDB()).getNetworkGraph().getEdge(src.get(i), dst.get(i));
log.info("Check lambda Free in edge :"+ src.get(i).toString()+"-"+dst.get(i).toString());
if (edge1 != null){
edge.add(i,edge1);
if (dwdmWavelengthLabel!= null){
if (dwdmWavelengthLabel.size()!=0){
lambda.add(i,dwdmWavelengthLabel.get(i).getN() - ((SimpleTEDB)this.getDomainTEDB()).getWSONinfo().getnMin());
log.info("There is lambda ("+lambda.get(i)+").");
/*Hay un ancho de banda a reservar*/
if (!(edge.get(i).getTE_info().isWavelengthFree(lambda.get(i)))){
log.info("La lambda ya esta ocupada!!!");
//FIXME: C�mo acabar
return false;
}
}
}
}
else {
log.error("Error en setMLLSP. Edge null");
return false;
}
return true;
}
@Override
public void removeLSP(LinkedList erolist, boolean bidirect,
BandwidthRequestedGeneralizedBandwidth GB, float bw) {
// TODO Auto-generated method stub
}
@Override
public boolean setLSP_UpperLayer(
LinkedList eROSubobjectListIP, float bw,
boolean bidirect) {
// TODO Auto-generated method stub
return false;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy