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

es.tid.vntm.LSPManager Maven / Gradle / Ivy

The newest version!
package es.tid.vntm;

import java.net.Inet4Address;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.Map;
import java.util.Set;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import es.tid.netManager.NetworkLSPManager;
import es.tid.netManager.NetworkLSPManagerTypes;
import es.tid.netManager.uni.UniNetworkLSPManager;
import es.tid.rsvp.objects.subobjects.EROSubobject;
import es.tid.rsvp.objects.subobjects.IPv4prefixEROSubobject;

public class LSPManager {
	private  Hashtable lspList;
	private static int id = 0;
	
	private boolean bidirect=true;
	
	private  Hashtable lspListIP;
	
	public Hashtable getLspListIP() {
		return lspListIP;
	}
	public void setLspListIP(Hashtable lspListIP) {
		this.lspListIP = lspListIP;
	}
	private static int id_IP = 0;
	
	public static int getId_IP() {
		return id_IP;
	}
	public static void setId_IP(int idIP) {
		id_IP = idIP;
	}
	
	private NetworkLSPManager netLSPManager;
	private Logger log;
	
	LSPManager(){
		lspList = new Hashtable ();
		lspListIP = new Hashtable ();
		
		log=LoggerFactory.getLogger("VNTMServer");
		
	}
	/**
	 * Aniade un LSP a la lista de LSP activas y llama al network manager para que la gestione
	 * @param eROSubobjectList
	 * @return
	 */
	public int addLSP(LinkedList eROSubobjectList){
		log.info("Adding New TE Link");
		//FIXME: hay que poner si es bidireccional  o no
		boolean bidirect=true;
		LSP lsp = new LSP();
		lsp.setId(getIdNewLSP());
		lsp.setEROSubobjectList(eROSubobjectList);
		lspList.put(id, lsp);
		log.info("Establish the TE Link");
		
		if (netLSPManager.getEmulatorType() == NetworkLSPManagerTypes.UNI_NETWORK){
			((UniNetworkLSPManager)netLSPManager).setId(id);
		}
					///////////////// CAMBIOS SERGIO ////////////////////////
					/////////////// ESTABLECER LSP IP ////////////////////////
			
		boolean SetMLL = netLSPManager.setMLLSP(eROSubobjectList,bidirect, null); 
		
		if (SetMLL==false){
			// Stolen Lambda
			return -1;
		}
		else
			return id;
		
		/***********************************************************************/
		//mirar si meto aquí lo del RealiseMLCapacityTask 
		/***********************************************************************/
	}
	
    /**
     * 
     * @param idLSP
     * @return
     */
	public synchronized int getIdNewLSP() {
		LSPManager.id=LSPManager.id+1;
		int newLSP=LSPManager.id;
		if (LSPManager.id>=Integer.MAX_VALUE){
			LSPManager.id=0;
		}
		return newLSP;
	}
	
	public void removeLSP( Inet4Address source, Inet4Address destination){
		log.info("Removing updated BW in TE Link from "+source+" to "+destination);
		//FIXME: Mirar de donde saco si es bidirect o no
		//Collection lsps=lspList.values();
		Set> lspSet=lspList.entrySet();
		//Iterator  itlsps =lsps.iterator();
		Iterator>  itlsps =lspSet.iterator();
		while (itlsps.hasNext()){
			Map.Entry lspMap=itlsps.next(); 
			LSP lsp= lspMap.getValue();				
			if (((IPv4prefixEROSubobject)(lsp.getEROSubobjectList().getFirst())).ipv4address.equals(source)){
				if (((IPv4prefixEROSubobject)(lsp.getEROSubobjectList().getLast())).ipv4address.equals(destination)){
					LinkedList eROSubobjectList = lsp.getEROSubobjectList();
					if (netLSPManager.getEmulatorType() == NetworkLSPManagerTypes.UNI_NETWORK){
						((UniNetworkLSPManager)netLSPManager).setId(lspMap.getKey());
					}
					netLSPManager.removeMLLSP(eROSubobjectList,bidirect, null); //CAMPO BANDWIDTH
					//lspList.remove(lspMap.getKey());
					log.info("TELINK Removed");
					return;
				}
			}
		}
	}
	public void removeAllLSPs(){
		//Collection lsps=lspList.values();
		Set> lspSet=lspList.entrySet();
	
		Iterator>  itlsps =lspSet.iterator();
		while (itlsps.hasNext()){
			Map.Entry lspMap=itlsps.next(); 
			LSP lsp= lspMap.getValue();			
			LinkedList eROSubobjectList = lsp.getEROSubobjectList();
			netLSPManager.removeMLLSP(eROSubobjectList,false, null); //CAMPO BANDWIDTH !!!
			lspList.remove(lspMap.getKey());
		}
	}
	
	public long countCapacity(){
		long numberLSPs=0;
		Enumeration enumerationLSP = lspList.elements();
		if ( lspList.size()==0 ){
			return 0;
		}
		LSP lsp;
		while (enumerationLSP.hasMoreElements()){
			lsp = enumerationLSP.nextElement();
			numberLSPs =numberLSPs + (lsp.getEROSubobjectList().size() - 3);
		}
		return numberLSPs;
	}
	void removeLSP(int id){
		lspList.remove(id);
		return;
	}

	
	public String printLSPs() {
		// TODO Auto-generated method stub
		Enumeration enumerationLSP = lspList.elements();
		if ( lspList.size()==0 ){
			return "TE Link table empty";
		}
		String string="";
		LSP lsp;
		while (enumerationLSP.hasMoreElements()){
			lsp = enumerationLSP.nextElement();
			string =string +"LSP id: "+ String.valueOf(lsp.getId())+"->\t"+lsp.getEROSubobjectList().toString()+"\n\t";
		}
		return string;
	}
	public long countTELinks(){
		return lspList.size();
	}
	public NetworkLSPManager getNetLSPManager() {
		return netLSPManager;
	}
	public void setNetLSPManager(NetworkLSPManager net) {
		this.netLSPManager = net;
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy