package es.tid.pce.computingEngine.algorithms.multidomain; import java.net.Inet4Address; import java.util.Iterator; import java.util.Set; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.jgrapht.graph.DirectedWeightedMultigraph; import es.tid.pce.pcep.objects.ExcludeRouteObject; import es.tid.pce.pcep.objects.subobjects.UnnumberIfIDXROSubobject; import es.tid.pce.pcep.objects.subobjects.XROSubObjectValues; import es.tid.pce.pcep.objects.subobjects.XROSubobject; import es.tid.tedb.InterDomainEdge; import es.tid.tedb.ReachabilityManager; public class MDFunctions { public static void processXRO(ExcludeRouteObject xro,ReachabilityManager reachabilityManager, DirectedWeightedMultigraph<Object,InterDomainEdge> networkGraph){ Logger log=LoggerFactory.getLogger("PCEServer"); try{ if (xro!=null){ log.info("XRO: Thre are "+xro.getXROSubobjectList().size()+" exclusions"); for (int i=0;i<xro.getXROSubobjectList().size();++i){ XROSubobject eroso=xro.getXROSubobjectList().get(i); if (eroso.getType()==XROSubObjectValues.XRO_SUBOBJECT_UNNUMBERED_IF_ID){ UnnumberIfIDXROSubobject eros=(UnnumberIfIDXROSubobject)eroso; log.info("XRO: UNNUMBERED_IF_ID TO EXCLUDE: "+eros.getRouterID()+":"+eros.getInterfaceID()); Inet4Address source_domain_id=reachabilityManager.getDomain(eros.getRouterID()); log.info("XRO: IT BELONGS TO DOMAIN "+source_domain_id); boolean hasVertex=networkGraph.containsVertex(source_domain_id); log.info("XRO: EL GRAPH TIENE VERTEX "+hasVertex); if (hasVertex){ Set<InterDomainEdge> setEdges=networkGraph.edgesOf(source_domain_id); Iterator<InterDomainEdge> iter=setEdges.iterator(); while (iter.hasNext()){ InterDomainEdge edge=iter.next(); log.info("XRO: LOOKING AT EDGE "+edge.getSrc_router_id()); if (edge.getSrc_router_id().equals(eros.getRouterID())){ if (edge.getSrc_if_id()==eros.getInterfaceID()){ networkGraph.removeEdge(edge); log.info("XRO: REMOVE EDGE "+eros.getRouterID()+":"+edge.getSrc_if_id()); } } } } } } } }catch (Exception e){ e.printStackTrace(); } } }