All Downloads are FREE. Search and download functionalities are using the official Maven repository.

es.tid.netManager.emulated.AdvancedEmulatedNetworkLSPManager Maven / Gradle / Ivy

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