package es.tid.tedb; import es.tid.bgp.bgp4.update.tlv.linkstate_attribute_tlvs.DefaultTEMetricLinkAttribTLV; import es.tid.bgp.bgp4.update.tlv.node_link_prefix_descriptor_subTLVs.*; import es.tid.of.DataPathID; import es.tid.ospf.ospfv2.lsa.tlv.subtlv.AvailableLabels; import es.tid.ospf.ospfv2.lsa.tlv.subtlv.MaximumBandwidth; import es.tid.ospf.ospfv2.lsa.tlv.subtlv.UnreservedBandwidth; import es.tid.ospf.ospfv2.lsa.tlv.subtlv.complexFields.BitmapLabelSet; import es.tid.pce.pcep.objects.tlvs.StorageTLV; import es.tid.pce.pcep.objects.tlvs.subtlvs.CostSubTLV; import es.tid.pce.pcep.objects.tlvs.subtlvs.ResourceIDSubTLV; import es.tid.pce.pcep.objects.tlvs.subtlvs.StorageSizeSubTLV; import es.tid.rsvp.constructs.gmpls.DWDMWavelengthLabel; import es.tid.rsvp.objects.subobjects.IPv4prefixEROSubobject; import org.jgrapht.graph.DirectedWeightedMultigraph; import org.jgrapht.graph.SimpleDirectedWeightedGraph; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.w3c.dom.*; import org.w3c.dom.CharacterData; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import java.io.File; import java.net.Inet4Address; import java.util.HashMap; import java.util.Hashtable; import java.util.LinkedList; /** * Convenience class to read Traffic Engineering Databases from XML files. * * @author ogondio * */ public class FileTEDBUpdater { /** * Read a full network (no specific layer) * @param fileName Name of the XML file * @return Graph of the Network */ public static SimpleDirectedWeightedGraph<Object, IntraDomainEdge> readNetwork(String fileName){ return FileTEDBUpdater.readNetwork(fileName,null,false,0,Integer.MAX_VALUE); } /** * Reads a specific layer from a Network XML file * @param fileName Name of the XML file * @param layer Layer * @return Graph of the network */ public static SimpleDirectedWeightedGraph<Object, IntraDomainEdge> readNetwork(String fileName,String layer){ return FileTEDBUpdater.readNetwork(fileName,layer,false,0,Integer.MAX_VALUE, false); } /** * Reads a specific layer from a Network XML file * It can treat all domains as a single domain * @param fileName Name of the XML file * @param layer Layer * @param allDomains if all domains are read or not * @return Graph of the network */ public static SimpleDirectedWeightedGraph<Object, IntraDomainEdge> readNetwork(String fileName,String layer,boolean allDomains){ return FileTEDBUpdater.readNetwork(fileName,layer,allDomains,0,Integer.MAX_VALUE, false); } /** * Reads a specific layer from a Network XML file * It can treat all domains as a single domain * @param fileName Name of the XML file * @param layer Layer * @param allDomains if all domains are read or not * @param lambdaIni first lambda (n) * @param lambdaEnd last lamnda (n) * @return Graph of the network */ public static SimpleDirectedWeightedGraph<Object, IntraDomainEdge> readNetwork(String fileName, String layer,boolean allDomains,int lambdaIni, int lambdaEnd) { return FileTEDBUpdater.readNetwork(fileName,layer,allDomains,0,Integer.MAX_VALUE, false); } /** * Reads a specific layer from a Network XML file. * It can treat all domains as a single domain. * * @param fileName Name of the XML file * @param layer Layer * @param allDomains if all domains are read or not * @param lambdaIni first lambda (n) * @param lambdaEnd last lamnda (n) * @param isSSONnetwork If the network supports Flexi Grid * @return Graph of the network. */ public static SimpleDirectedWeightedGraph<Object, IntraDomainEdge> readNetwork(String fileName, String layer,boolean allDomains,int lambdaIni, int lambdaEnd, boolean isSSONnetwork) { Logger log = LoggerFactory.getLogger("BGP4Peer"); Object router_id_addr = null; Object s_router_id_addr = null; Object d_router_id_addr = null; Object src_Numif_id = null; Object dst_Numif_id = null; //First, create the graph SimpleDirectedWeightedGraph<Object, IntraDomainEdge> graph = new SimpleDirectedWeightedGraph<Object, IntraDomainEdge>(IntraDomainEdge.class); log.debug("1. SimpleDirectedWeightedGraph"); File file = new File(fileName); try { String domain_id = ""; DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); Document doc = builder.parse(file); HashMap<Inet4Address, Integer >SIDS = new HashMap<Inet4Address,Integer>(); HashMap<DataPathID, Integer >SIDSDP = new HashMap<DataPathID,Integer>(); NodeList nodes_domains = doc.getElementsByTagName("domain"); if (layer!=null){ log.debug("Reading topology, looking for layer "+ layer); } //First pass to get all the nodes //If we need to read all the domains for (int j = 0; j < nodes_domains.getLength(); j++) { boolean readNetwork=false; Element element1 = (Element) nodes_domains.item(j); if (layer!=null){ NodeList domain_layer = element1.getElementsByTagName("layer"); if (domain_layer.getLength()==1){ Element layer_type = (Element) domain_layer.item(0); log.debug("Layer: " + layer_type.getAttributeNode("type").getValue()); log.debug("Reading network topology"); if (layer_type.getAttributeNode("type").getValue().equals(layer)){ readNetwork = true; } if (layer.equals("interlayer")){ readNetwork = true; } } }else { readNetwork=true; } if (readNetwork){ Element element_domain = (Element) nodes_domains.item(j); NodeList nodes_domain_id = element_domain.getElementsByTagName("domain_id"); for (int k = 0; k < nodes_domain_id.getLength(); k++) { Element domain_id_e = (Element) nodes_domain_id.item(0); domain_id = getCharacterDataFromElement(domain_id_e); log.debug("Loading nodes for domain: " + domain_id); log.info("Loading topology from domain " + domain_id); } NodeList nodes = element1.getElementsByTagName("node"); for (int i = 0; i < nodes.getLength(); i++) { Element element = (Element) nodes.item(i); NodeList router_id_node = element.getElementsByTagName("router_id"); Element router_id_e = (Element) router_id_node.item(0); String router_id = getCharacterDataFromElement(router_id_e); log.info("Adding node " + router_id); router_id_addr = EdgeUtils.getEdge(router_id); graph.addVertex(router_id_addr); log.debug("About to look for SID"); NodeList SID_aux = element.getElementsByTagName("sid"); Element SID_e = (Element) SID_aux.item(0); if (SID_e!=null) { log.debug("SID exist"); int SID = Integer.parseInt(getCharacterDataFromElement(SID_e)); try { //Router_type: DatapathID SIDS.put((Inet4Address) router_id_addr,SID); log.debug("SID of node Inet4Address: "+SID); } catch (Exception e) { //Router_type: DatapathID SIDSDP.put((DataPathID)router_id_addr, SID); log.debug("SID of node DataPathID: "+SID); } } else { log.debug("SID not found"); } } } } //Next pass to get all the links for (int j = 0; j < nodes_domains.getLength(); j++) { boolean readNetwork=false; Element element1 = (Element) nodes_domains.item(j); if (layer!=null){ NodeList domain_layer = element1.getElementsByTagName("layer"); if (domain_layer.getLength()==1){ Element layer_type = (Element) domain_layer.item(0); log.debug("Layer: " + layer_type.getAttributeNode("type").getValue()); log.debug("Reading Topology"); if (layer_type.getAttributeNode("type").getValue().equals(layer)){ readNetwork = true; } } }else { readNetwork=true; } log.debug("Read network = "+readNetwork); if (readNetwork){ Element element_domain = (Element) nodes_domains.item(j); NodeList nodes_domain_id = element_domain.getElementsByTagName("domain_id"); for (int k = 0; k < nodes_domain_id.getLength(); k++) { Element domain_id_e = (Element) nodes_domain_id.item(0); domain_id = getCharacterDataFromElement(domain_id_e); log.debug("Looking for links in domain: " + domain_id); } int numLabels=0; Boolean commonBitmapLabelSet = false; NodeList edgeCommon = doc.getElementsByTagName("edgeCommon"); int grid=0; int cs=0; int n=0; for (int i = 0; i < edgeCommon.getLength(); i++) { Element edgeCommonElement = (Element) edgeCommon.item(i); NodeList availableLabels_node = edgeCommonElement.getElementsByTagName("AvailableLabels"); for (int k = 0; k < availableLabels_node.getLength(); k++) { Element availableLabels_e = (Element) availableLabels_node.item(k); NodeList labelSetField_node = availableLabels_e.getElementsByTagName("LabelSetField"); Element labelSetField_el = (Element) labelSetField_node.item(0); if (labelSetField_el.getAttributeNode("type").getValue().equals("4")){//Tengo BitMapSet //Crear un BitMapSet NodeList numbLabels_node = labelSetField_el.getElementsByTagName("numLabels"); Element numbLabels_e = (Element) numbLabels_node.item(0); String numbLabels_s = getCharacterDataFromElement(numbLabels_e); numLabels=Integer.parseInt(numbLabels_s); NodeList baseLabel_node = labelSetField_el.getElementsByTagName("baseLabel"); Element baseLabel_e = (Element) baseLabel_node.item(0); float min_frequency; grid= Integer.parseInt(baseLabel_e.getAttributeNode("grid").getValue()); cs = Integer.parseInt(baseLabel_e.getAttributeNode("cs").getValue()); boolean n_frequency_included=false; if (baseLabel_e.getAttributeNode("n") != null ){ n = Integer.parseInt(baseLabel_e.getAttributeNode("n").getValue()); n_frequency_included = true; } else if (baseLabel_e.getAttributeNode("min_frequency") != null){ String s_min_frequency = labelSetField_el.getAttributeNode("min_frequency").getValue(); min_frequency=Float.parseFloat(s_min_frequency); n = ((int)min_frequency - 1471)/20; n_frequency_included=true; } if (n_frequency_included){ commonBitmapLabelSet = true; }else{ log.error("ERROR reading the xml file of the topology, you should enter <baseLabel grid=\"1\" cs=\"2\" n=\"-11\"></baseLabel> "); } } } } /*if(isSSONnetwork ==true){ if(cs==4){ numLabels=numLabels*4; } else if (cs==5){ numLabels=numLabels*8; } }*/ NodeList edges = element_domain.getElementsByTagName("edge"); for (int i = 0; i < edges.getLength(); i++) { log.info("New Edge"); Element element = (Element) edges.item(i); //By default, all nodes are intradomain String type; Attr attr_type=element.getAttributeNode("type"); if (attr_type==null){ type="intradomain"; }else { type=attr_type.getValue(); if (allDomains){ if (type.equals("interdomain")){ type="intradomain"; } } else if (type.equals("interlayer")){ if (layer.equals("interlayer")){ type="intradomain"; } } } log.debug("type::"+type); if (type.equals("intradomain")) { IntraDomainEdge edge = new IntraDomainEdge(); log.info("New Intradomain Edge"); NodeList source = element.getElementsByTagName("source"); Element source_router_el = (Element) source.item(0); NodeList source_router_id = source_router_el.getElementsByTagName("router_id"); Element source_router_id_el = (Element) source_router_id.item(0); String s_r_id = getCharacterDataFromElement(source_router_id_el); s_router_id_addr= EdgeUtils.getEdge(s_r_id); NodeList source_if_id_nl = source_router_el.getElementsByTagName("if_id"); Element source_if_id_el = (Element) source_if_id_nl.item(0); String s_source_if_id; int src_if_id = -1; if (source_if_id_el!=null){ s_source_if_id = getCharacterDataFromElement(source_if_id_el); src_if_id = Integer.parseInt(s_source_if_id); } log.debug("SRC if id: "+src_if_id); NodeList source_Numif_id_nl = source_router_el.getElementsByTagName("NumIf_id"); Element source_Numif_id_el = (Element) source_Numif_id_nl.item(0); String s_source_Numif_id; if (source_Numif_id_el!=null){ s_source_Numif_id = getCharacterDataFromElement(source_Numif_id_el); try { // src_Numif_id type : Inet4Address src_Numif_id = (Inet4Address) Inet4Address.getByName(s_source_Numif_id); } catch (Exception e) { // src_Numif_id type : DataPathID src_Numif_id = DataPathID.getByName(s_source_Numif_id); } } NodeList dest_nl = element.getElementsByTagName("destination"); Element dest_el = (Element) dest_nl.item(0); NodeList dest_router_id_nl = dest_el.getElementsByTagName("router_id"); Element dest_router_id_el = (Element) dest_router_id_nl.item(0); String d_r_id = getCharacterDataFromElement(dest_router_id_el); d_router_id_addr= EdgeUtils.getEdge(d_r_id); //Anyadimos los SID if (SIDS.get(s_router_id_addr)!=null && SIDS.get(d_router_id_addr)!=null) { log.debug("setting SIDS src: "+SIDS.get(s_router_id_addr)+" dst: "+SIDS.get(d_router_id_addr)); edge.setSrc_sid(SIDS.get(s_router_id_addr)); edge.setDst_sid(SIDS.get(d_router_id_addr)); log.debug("edge.getSrc_sid(): "+edge.getSrc_sid()); log.debug("edge.getDst_sid(): "+edge.getDst_sid()); } else if (SIDSDP.get(s_router_id_addr)!=null && SIDSDP.get(d_router_id_addr)!=null) { log.debug("setting SIDSDP src: "+SIDSDP.get(s_router_id_addr)+" dst: "+SIDSDP.get(d_router_id_addr)); edge.setSrc_sid(SIDSDP.get(s_router_id_addr)); edge.setDst_sid(SIDSDP.get(d_router_id_addr)); log.debug("edge.getSrc_sid(): "+edge.getSrc_sid()); log.debug("edge.getDst_sid(): "+edge.getDst_sid()); } NodeList dest_if_id_nl = dest_el.getElementsByTagName("if_id"); Element dest_if_id_el= (Element) dest_if_id_nl.item(0); String s_dest_if_id; int dst_if_id = -1; if (dest_if_id_el!=null){ s_dest_if_id = getCharacterDataFromElement(dest_if_id_el); dst_if_id = Integer.parseInt(s_dest_if_id); } log.debug("DST if id: "+dst_if_id); NodeList dest_Numif_id_nl = dest_el.getElementsByTagName("NumIf_id"); Element dest_Numif_id_el = (Element) dest_Numif_id_nl.item(0); String s_dest_Numif_id; if (source_Numif_id_el!=null){ s_dest_Numif_id = getCharacterDataFromElement(dest_Numif_id_el); try { // s_dest_Numif_id type : Inet4Address dst_Numif_id = (Inet4Address) Inet4Address.getByName(s_dest_Numif_id); } catch (Exception e) { // s_dest_Numif_id type : DataPathID dst_Numif_id = DataPathID.getByName(s_dest_Numif_id); } } // AƱadimos interfaces Numeradas if (src_Numif_id!=null){ edge.setSrc_Numif_id(src_Numif_id); }if (dst_Numif_id!=null){ edge.setDst_Numif_id(dst_Numif_id); }else{ if (src_if_id != -1){ edge.setSrc_if_id(src_if_id); } if (dst_if_id != -1){ edge.setDst_if_id(dst_if_id); } } //DELAY, IF IT COMES.. NodeList delay_ms_nl = element.getElementsByTagName("delay"); if (delay_ms_nl.getLength()>0){ Element delay_ms_el = (Element)delay_ms_nl.item(0); String s_delay_ms=getCharacterDataFromElement(delay_ms_el); double delay_ms=Double.parseDouble(s_delay_ms); edge.setDelay_ms(delay_ms); } //TE Link information NodeList maximum_bandwidth_nl = element.getElementsByTagName("maximum_bandwidth"); if (maximum_bandwidth_nl!=null){ if (maximum_bandwidth_nl.getLength()>0){ if(edge.getTE_info()==null){ TE_Information tE_info= new TE_Information(); if (commonBitmapLabelSet){ if(lambdaEnd!=Integer.MAX_VALUE){ tE_info.createBitmapLabelSet(numLabels, grid, cs, n,lambdaIni,lambdaEnd); } else tE_info.createBitmapLabelSet(numLabels, grid, cs, n); } //tid.util.FuncionesUtiles.printByte(((BitmapLabelSet)tE_info.getAvailableLabels().getLabelSet()).getBytesBitmapReserved(),"getBytesBitmapReserved1:"); edge.setTE_info(tE_info); } else { TE_Information te_info = edge.getTE_info(); if (commonBitmapLabelSet){ // if(lambdaEnd!=Integer.MAX_VALUE){ // te_info.createBitmapLabelSet(numLabels, grid, cs, n,lambdaIni,lambdaEnd); // } // else te_info.createBitmapLabelSet(numLabels, grid, cs, n); } //tid.util.FuncionesUtiles.printByte(((BitmapLabelSet)tE_info.getAvailableLabels().getLabelSet()).getBytesBitmapReserved(),"getBytesBitmapReserved1:"); edge.setTE_info(te_info); } Element maximum_bandwidth_el = (Element) maximum_bandwidth_nl.item(0); String s_maximum_bandwidth = getCharacterDataFromElement(maximum_bandwidth_el); float maximum_bandwidth=Float.parseFloat(s_maximum_bandwidth); MaximumBandwidth maximumBandwidth =new MaximumBandwidth(); maximumBandwidth.setMaximumBandwidth(maximum_bandwidth); (edge.getTE_info()).setMaximumBandwidth(maximumBandwidth); } } /** * NodeList SID_aux = element.getElementsByTagName("sid"); Element SID_e = (Element) SID_aux.item(0); if (SID_e!=null) { log.info("SID existe"); int SID = Integer.parseInt(getCharacterDataFromElement(SID_e)); SIDS.put(router_id_addr,SID); log.info("SID of node: "+SID); } else { log.info("SID not found"); } */ NodeList defaultmetric = element.getElementsByTagName("default_te_metric"); Element metric_aux = (Element) defaultmetric.item(0); if (metric_aux != null){ String s_metric_aux = getCharacterDataFromElement(metric_aux); TE_Information tE_info; int metric = Integer.parseInt(s_metric_aux); DefaultTEMetricLinkAttribTLV defaultTeMetric= new DefaultTEMetricLinkAttribTLV(); if(edge.getTE_info()==null){ tE_info= new TE_Information(); } else{ tE_info = edge.getTE_info(); } defaultTeMetric.setLinkMetric((long)metric); tE_info.setDefaultTEMetric(defaultTeMetric); edge.setTE_info(tE_info); } NodeList unreserved_bandwidth_nl = element.getElementsByTagName("unreserved_bandwidth"); if (unreserved_bandwidth_nl!=null){ int num_u_b=unreserved_bandwidth_nl.getLength(); UnreservedBandwidth unreservedBandwidth; if (num_u_b>0){ if(edge.getTE_info()==null){ TE_Information tE_info= new TE_Information(); if (commonBitmapLabelSet){ if(lambdaEnd!=Integer.MAX_VALUE) tE_info.createBitmapLabelSet(numLabels, grid, cs, n,lambdaIni,lambdaEnd); else tE_info.createBitmapLabelSet(numLabels, grid, cs, n); } edge.setTE_info(tE_info); } unreservedBandwidth =new UnreservedBandwidth(); (edge.getTE_info()).setUnreservedBandwidth(unreservedBandwidth); for(int k=0;k<num_u_b;++k){ Element unreserved_bandwidth_el = (Element) unreserved_bandwidth_nl.item(k); String s_unreserved_bandwidth = getCharacterDataFromElement(unreserved_bandwidth_el); String s_priority=unreserved_bandwidth_el.getAttributeNode("priority").getValue(); Integer priority = Integer.valueOf(s_priority); float unreserved_bandwidth=Float.parseFloat(s_unreserved_bandwidth); (unreservedBandwidth.getUnreservedBandwidth())[priority]=unreserved_bandwidth; } } } NodeList maximum_wlans_nl = element.getElementsByTagName("number_wlans"); if (maximum_wlans_nl!=null){ if (maximum_wlans_nl.getLength()>0){ if(edge.getTE_info()==null){ TE_Information tE_info= new TE_Information(); if (commonBitmapLabelSet){ if(lambdaEnd!=Integer.MAX_VALUE){ tE_info.createBitmapLabelSet(numLabels, grid, cs, n,lambdaIni,lambdaEnd); } else tE_info.createBitmapLabelSet(numLabels, grid, cs, n); } //tid.util.FuncionesUtiles.printByte(((BitmapLabelSet)tE_info.getAvailableLabels().getLabelSet()).getBytesBitmapReserved(),"getBytesBitmapReserved1:"); edge.setTE_info(tE_info); } Element number_wlan_el = (Element) maximum_wlans_nl.item(0); String s_number_wlans = getCharacterDataFromElement(number_wlan_el); int number_wlans=Integer.parseInt(s_number_wlans.replace("\n", "").replaceAll("\\s","")); (edge.getTE_info()).setNumberWLANs(number_wlans); (edge.getTE_info()).initWLANs(); } } if(edge.getTE_info()==null){ TE_Information tE_info= new TE_Information(); edge.setTE_info(tE_info); } if (commonBitmapLabelSet){ if(lambdaEnd!=Integer.MAX_VALUE) edge.getTE_info().createBitmapLabelSet(numLabels, grid, cs, n,lambdaIni,lambdaEnd); else edge.getTE_info().createBitmapLabelSet(numLabels, grid, cs, n); } NodeList availableLabels_node = element.getElementsByTagName("AvailableLabels"); if ( availableLabels_node != null){ for (int k = 0; k < availableLabels_node.getLength(); k++) { Element availableLabels_e = (Element) availableLabels_node.item(k); NodeList labelSetField_node = availableLabels_e.getElementsByTagName("LabelSetField"); Element labelSetField_el = (Element) labelSetField_node.item(0); if (labelSetField_el.getAttributeNode("type").getValue().equals("4")){//Tengo BitMapSet NodeList numbLabels_node = labelSetField_el.getElementsByTagName("numLabels"); Element numbLabels_e = (Element) numbLabels_node.item(0); String numbLabels_s = getCharacterDataFromElement(numbLabels_e); numLabels=Integer.parseInt(numbLabels_s); NodeList baseLabel_node = labelSetField_el.getElementsByTagName("baseLabel"); Element baseLabel_e = (Element) baseLabel_node.item(0); byte[] bitmap=new byte[1]; NodeList bitmap_node = labelSetField_el.getElementsByTagName("bitmap"); int result=0; Element bitmap_e = (Element) bitmap_node.item(0); if (bitmap_e!=null){ String bitmap_string=getCharacterDataFromElement(bitmap_e); log.debug("Bitmap read: "+bitmap_string); for (int p =0; p<bitmap_string.length(); p++) result= (int) (result+Math.pow(2, bitmap_string.length()-p-1)*(bitmap_string.charAt(p)-48)); bitmap[0]=(byte) result; ((BitmapLabelSet)edge.getTE_info().getAvailableLabels().getLabelSet()).setBytesBitmap(bitmap); } float min_frequency; grid= Integer.parseInt(baseLabel_e.getAttributeNode("grid").getValue()); cs = Integer.parseInt(baseLabel_e.getAttributeNode("cs").getValue()); boolean n_frequency_included=false; if (baseLabel_e.getAttributeNode("n") != null ){ n = Integer.parseInt(baseLabel_e.getAttributeNode("n").getValue()); n_frequency_included = true; } else if (baseLabel_e.getAttributeNode("min_frequency") != null){ String s_min_frequency = labelSetField_el.getAttributeNode("min_frequency").getValue(); min_frequency=Float.parseFloat(s_min_frequency); n = ((int)min_frequency - 1471)/20; n_frequency_included=true; } if (n_frequency_included){/*Modify availableLabels*/ ((BitmapLabelSet)edge.getTE_info().getAvailableLabels().getLabelSet()).setNumLabels(numLabels); ((BitmapLabelSet)edge.getTE_info().getAvailableLabels().getLabelSet()).getDwdmWavelengthLabel().setGrid(grid); ((BitmapLabelSet)edge.getTE_info().getAvailableLabels().getLabelSet()).getDwdmWavelengthLabel().setChannelSpacing(cs); ((BitmapLabelSet)edge.getTE_info().getAvailableLabels().getLabelSet()).getDwdmWavelengthLabel().setN(n); } else{ log.error("ERROR reading the xml file of the topology, you should enter <baseLabel grid=\"1\" cs=\"2\" n=\"-11\"></baseLabel> "); } } } } log.debug("Preparing to add edge"); try{ if(graph.containsEdge(s_router_id_addr, d_router_id_addr)){ graph.getEdge(s_router_id_addr, d_router_id_addr).setNumberFibers(graph.getEdge(s_router_id_addr, d_router_id_addr).getNumberFibers()+1); }else{ log.debug("s_router_id_addr: "+s_router_id_addr.toString()+"; d_router_id_addr: "+d_router_id_addr.toString()+"; edge: "+edge); graph.addEdge(s_router_id_addr, d_router_id_addr, edge); graph.getEdge(s_router_id_addr, d_router_id_addr).setNumberFibers(1); } log.info("Adding edge from "+s_router_id_addr.toString()+" to "+d_router_id_addr.toString()+"; \n "+edge); }catch(Exception e){ log.error("Problem with source "+s_router_id_addr+" destination "+d_router_id_addr); e.printStackTrace(); System.exit(-1); } } } } } } catch (Exception e) { e.printStackTrace(); } log.debug("Info graph edge :: "+graph.edgeSet()); return graph; } /*private static SimpleDirectedWeightedGraph<Object, IntraDomainEdge> readGraphIntraDomain(Element element1, String layer, Logger log){ Object router_id_addr = null; HashMap<Inet4Address, Integer >SIDS = new HashMap<Inet4Address,Integer>(); HashMap<DataPathID, Integer >SIDSDP = new HashMap<DataPathID,Integer>(); SimpleDirectedWeightedGraph<Object, IntraDomainEdge> graph = new SimpleDirectedWeightedGraph<Object, IntraDomainEdge>(IntraDomainEdge.class); //NodeList nodes_domains = doc.getElementsByTagName("domain"); boolean readNetwork=false; //Element element1 = (Element) nodes_domains.item(j); String domain_id = ""; if (layer!=null){ NodeList domain_layer = element1.getElementsByTagName("layer"); if (domain_layer.getLength()==1){ Element layer_type = (Element) domain_layer.item(0); log.info("Layer: " + layer_type.getAttributeNode("type").getValue()); log.info("Reading network topology"); if (layer_type.getAttributeNode("type").getValue().equals(layer)){ readNetwork = true; } if (layer.equals("interlayer")){ readNetwork = true; } } }else { readNetwork=true; } if (readNetwork){ Element element_domain = element1; NodeList nodes_domain_id = element_domain.getElementsByTagName("domain_id"); for (int k = 0; k < nodes_domain_id.getLength(); k++) { Element domain_id_e = (Element) nodes_domain_id.item(0); domain_id = getCharacterDataFromElement(domain_id_e); //log.info("Looking for nodes in domain: " + domain_id); } NodeList nodes = element1.getElementsByTagName("node"); for (int i = 0; i < nodes.getLength(); i++) { Element element = (Element) nodes.item(i); NodeList router_id_node = element.getElementsByTagName("router_id"); Element router_id_e = (Element) router_id_node.item(0); String router_id = getCharacterDataFromElement(router_id_e); //log.info("Adding router_id " + router_id); router_id_addr = EdgeUtils.getEdge(router_id); graph.addVertex(router_id_addr); //log.info("About to look for SID"); NodeList SID_aux = element.getElementsByTagName("sid"); Element SID_e = (Element) SID_aux.item(0); if (SID_e!=null) { //log.info("SID existe"); int SID = Integer.parseInt(getCharacterDataFromElement(SID_e)); try { //Router_type: DatapathID SIDS.put((Inet4Address) router_id_addr,SID); //log.info("SID of node Inet4Address: "+SID); } catch (Exception e) { //Router_type: DatapathID SIDSDP.put((DataPathID)router_id_addr, SID); //log.info("SID of node DataPathID: "+SID); } } else { //log.info("SID not found"); } } } return graph; }*/ public static Hashtable<String,TEDB> readMultipleDomainSimpleNetworks(String fileName, String layer,boolean allDomains,int lambdaIni, int lambdaEnd, boolean isSSONnetwork) { Logger log = LoggerFactory.getLogger("BGP4Peer"); Object router_id_addr = null; Object s_router_id_addr = null; Object d_router_id_addr = null; Object src_Numif_id = null; Object dst_Numif_id = null; Hashtable<String,TEDB> TEDBs = new Hashtable<String,TEDB>(); //First, create the graph log.debug("1. SimpleDirectedWeightedGraph"); File file = new File(fileName); try { String domain_id = ""; DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); Document doc = builder.parse(file); HashMap<Inet4Address, Integer >SIDS = new HashMap<Inet4Address,Integer>(); HashMap<DataPathID, Integer >SIDSDP = new HashMap<DataPathID,Integer>(); NodeList nodes_domains = doc.getElementsByTagName("domain"); if (layer!=null){ log.debug("Reading topology, looking for layer "+ layer); } //First pass to get all the nodes //If we need to read all the domains for (int j = 0; j < nodes_domains.getLength(); j++) { boolean readNetwork=false; Element element1 = (Element) nodes_domains.item(j); SimpleTEDB tedb = new SimpleTEDB(); SimpleDirectedWeightedGraph<Object, IntraDomainEdge> graph = new SimpleDirectedWeightedGraph<Object, IntraDomainEdge>(IntraDomainEdge.class); if (layer!=null){ NodeList domain_layer = element1.getElementsByTagName("layer"); if (domain_layer.getLength()==1){ Element layer_type = (Element) domain_layer.item(0); log.debug("Layer: " + layer_type.getAttributeNode("type").getValue()); log.debug("Reading network topology"); if (layer_type.getAttributeNode("type").getValue().equals(layer)){ readNetwork = true; } if (layer.equals("interlayer")){ readNetwork = true; } } }else { readNetwork=true; } if (readNetwork){ Element element_domain = (Element) nodes_domains.item(j); NodeList nodes_domain_id = element_domain.getElementsByTagName("domain_id"); for (int k = 0; k < nodes_domain_id.getLength(); k++) { Element domain_id_e = (Element) nodes_domain_id.item(0); domain_id = getCharacterDataFromElement(domain_id_e); log.debug("Looking for nodes in domain: " + domain_id); log.info("Loading topology from domain " + domain_id); } NodeList itResourcesElement = element1.getElementsByTagName("it_resources"); for (int i = 0; i < itResourcesElement.getLength(); i++) { Element element = (Element) itResourcesElement.item(i); NodeList itResourcesControllerITList = element.getElementsByTagName("controller_it"); Element itResourcesControllerITElement = (Element) itResourcesControllerITList.item(0); String itResourcesControllerIT = getCharacterDataFromElement(itResourcesControllerITElement); NodeList itResourcesCpuList = element.getElementsByTagName("cpu"); Element itResourcesCpuElement = (Element) itResourcesCpuList.item(0); String itResourcesCpu = getCharacterDataFromElement(itResourcesCpuElement); NodeList itResourcesMemList = element.getElementsByTagName("mem"); Element itResourcesMemElement = (Element) itResourcesMemList.item(0); String itResourcesMem = getCharacterDataFromElement(itResourcesMemElement); NodeList itResourcesStorageList = element.getElementsByTagName("storage"); Element itResourcesStorageElement = (Element) itResourcesStorageList.item(0); String itResourcesStorage = getCharacterDataFromElement(itResourcesStorageElement); IT_Resources itResources = new IT_Resources(); if (itResourcesControllerIT!=null) itResources.setControllerIT(itResourcesControllerIT); if (itResourcesCpu!=null) itResources.setCpu(itResourcesCpu); if (itResourcesMem!=null) itResources.setMem(itResourcesMem); if (itResourcesStorage!=null) itResources.setStorage(itResourcesStorage); tedb.setItResources(itResources); } NodeList nodes = element1.getElementsByTagName("node"); for (int i = 0; i < nodes.getLength(); i++) { Element element = (Element) nodes.item(i); NodeList router_id_node = element.getElementsByTagName("router_id"); Element router_id_e = (Element) router_id_node.item(0); String router_id = getCharacterDataFromElement(router_id_e); log.info("Adding node " + router_id); router_id_addr = EdgeUtils.getEdge(router_id); graph.addVertex(router_id_addr); log.debug("About to look for SID"); NodeList SID_aux = element.getElementsByTagName("sid"); Element SID_e = (Element) SID_aux.item(0); if (SID_e!=null) { log.debug("SID exist"); int SID = Integer.parseInt(getCharacterDataFromElement(SID_e)); try { //Router_type: DatapathID SIDS.put((Inet4Address) router_id_addr,SID); log.debug("SID of node Inet4Address: "+SID); } catch (Exception e) { //Router_type: DatapathID SIDSDP.put((DataPathID)router_id_addr, SID); log.debug("SID of node DataPathID: "+SID); } } else { log.debug("SID not found"); } } } tedb.setNetworkGraph(graph); tedb.setDomainID((Inet4Address) Inet4Address.getByName(domain_id)); TEDBs.put(domain_id,tedb); } //Next pass to get all the links for (int j = 0; j < nodes_domains.getLength(); j++) { SimpleDirectedWeightedGraph<Object, IntraDomainEdge> graph=null; boolean readNetwork=false; Element element1 = (Element) nodes_domains.item(j); if (layer!=null){ NodeList domain_layer = element1.getElementsByTagName("layer"); if (domain_layer.getLength()==1){ Element layer_type = (Element) domain_layer.item(0); log.debug("Layer: " + layer_type.getAttributeNode("type").getValue()); log.debug("Reading Topology"); if (layer_type.getAttributeNode("type").getValue().equals(layer)){ readNetwork = true; } } }else { readNetwork=true; } log.debug("Read network = "+readNetwork); if (readNetwork){ Element element_domain = (Element) nodes_domains.item(j); NodeList nodes_domain_id = element_domain.getElementsByTagName("domain_id"); for (int k = 0; k < nodes_domain_id.getLength(); k++) { Element domain_id_e = (Element) nodes_domain_id.item(0); domain_id = getCharacterDataFromElement(domain_id_e); log.debug("Looking for links in domain: " + domain_id); } //System.out.println("VVV debug domain id:"+domain_id); SimpleTEDB domainTEDB = (SimpleTEDB)TEDBs.get( domain_id); graph = domainTEDB.getNetworkGraph(); int numLabels=0; TE_Information tE_info_common=null; Boolean commonBitmapLabelSet = false; NodeList edgeCommon = element1.getElementsByTagName("edgeCommon"); int grid=0; int cs=0; int n=0; for (int i = 0; i < edgeCommon.getLength(); i++) { Element edgeCommonElement = (Element) edgeCommon.item(i); tE_info_common =readTE_INFOfromXml(tE_info_common,edgeCommonElement, false,numLabels, grid, cs, n, 0, Integer.MAX_VALUE); NodeList availableLabels_node = edgeCommonElement.getElementsByTagName("AvailableLabels"); for (int k = 0; k < availableLabels_node.getLength(); k++) { Element availableLabels_e = (Element) availableLabels_node.item(k); NodeList labelSetField_node = availableLabels_e.getElementsByTagName("LabelSetField"); Element labelSetField_el = (Element) labelSetField_node.item(0); if (labelSetField_el.getAttributeNode("type").getValue().equals("4")){//Tengo BitMapSet //Crear un BitMapSet NodeList numbLabels_node = labelSetField_el.getElementsByTagName("numLabels"); Element numbLabels_e = (Element) numbLabels_node.item(0); String numbLabels_s = getCharacterDataFromElement(numbLabels_e); numLabels=Integer.parseInt(numbLabels_s); NodeList baseLabel_node = labelSetField_el.getElementsByTagName("baseLabel"); Element baseLabel_e = (Element) baseLabel_node.item(0); float min_frequency; grid= Integer.parseInt(baseLabel_e.getAttributeNode("grid").getValue()); cs = Integer.parseInt(baseLabel_e.getAttributeNode("cs").getValue()); boolean n_frequency_included=false; if (baseLabel_e.getAttributeNode("n") != null ){ n = Integer.parseInt(baseLabel_e.getAttributeNode("n").getValue()); n_frequency_included = true; } else if (baseLabel_e.getAttributeNode("min_frequency") != null){ String s_min_frequency = labelSetField_el.getAttributeNode("min_frequency").getValue(); min_frequency=Float.parseFloat(s_min_frequency); n = ((int)min_frequency - 1471)/20; n_frequency_included=true; } if (n_frequency_included){ commonBitmapLabelSet = true; }else{ log.error("ERROR reading the xml file of the topology, you should enter <baseLabel grid=\"1\" cs=\"2\" n=\"-11\"></baseLabel> "); } } } } /*if(isSSONnetwork ==true){ if(cs==4){ numLabels=numLabels*4; } else if (cs==5){ numLabels=numLabels*8; } }*/ NodeList edges = element_domain.getElementsByTagName("edge"); for (int i = 0; i < edges.getLength(); i++) { log.debug("New Link"); Element element = (Element) edges.item(i); //By default, all nodes are intradomain String type; Attr attr_type=element.getAttributeNode("type"); if (attr_type==null){ type="intradomain"; }else { type=attr_type.getValue(); /*if (allDomains){ if (type.equals("interdomain")){ type="intradomain"; } }*/ //else if (type.equals("interlayer")){ if (layer!=null && layer.equals("interlayer")){ type="intradomain"; } //} } log.debug("type::"+type); if (type.equals("intradomain")) { IntraDomainEdge edge = new IntraDomainEdge(); NodeList source = element.getElementsByTagName("source"); Element source_router_el = (Element) source.item(0); NodeList source_router_id = source_router_el.getElementsByTagName("router_id"); Element source_router_id_el = (Element) source_router_id.item(0); String s_r_id = getCharacterDataFromElement(source_router_id_el); s_router_id_addr= EdgeUtils.getEdge(s_r_id); NodeList source_if_id_nl = source_router_el.getElementsByTagName("if_id"); Element source_if_id_el = (Element) source_if_id_nl.item(0); String s_source_if_id; int src_if_id = -1; if (source_if_id_el!=null){ s_source_if_id = getCharacterDataFromElement(source_if_id_el); src_if_id = Integer.parseInt(s_source_if_id); } log.debug("SRC if id: "+src_if_id); NodeList source_Numif_id_nl = source_router_el.getElementsByTagName("NumIf_id"); Element source_Numif_id_el = (Element) source_Numif_id_nl.item(0); String s_source_Numif_id; if (source_Numif_id_el!=null){ s_source_Numif_id = getCharacterDataFromElement(source_Numif_id_el); try { // src_Numif_id type : Inet4Address src_Numif_id = (Inet4Address) Inet4Address.getByName(s_source_Numif_id); } catch (Exception e) { // src_Numif_id type : DataPathID src_Numif_id = DataPathID.getByName(s_source_Numif_id); } } NodeList dest_nl = element.getElementsByTagName("destination"); Element dest_el = (Element) dest_nl.item(0); NodeList dest_router_id_nl = dest_el.getElementsByTagName("router_id"); Element dest_router_id_el = (Element) dest_router_id_nl.item(0); String d_r_id = getCharacterDataFromElement(dest_router_id_el); d_router_id_addr= EdgeUtils.getEdge(d_r_id); //Anyadimos los SID if (SIDS.get(s_router_id_addr)!=null && SIDS.get(d_router_id_addr)!=null) { log.debug("setting SIDS src: "+SIDS.get(s_router_id_addr)+" dst: "+SIDS.get(d_router_id_addr)); edge.setSrc_sid(SIDS.get(s_router_id_addr)); edge.setDst_sid(SIDS.get(d_router_id_addr)); log.debug("edge.getSrc_sid(): "+edge.getSrc_sid()); log.debug("edge.getDst_sid(): "+edge.getDst_sid()); } else if (SIDSDP.get(s_router_id_addr)!=null && SIDSDP.get(d_router_id_addr)!=null) { log.debug("setting SIDSDP src: "+SIDSDP.get(s_router_id_addr)+" dst: "+SIDSDP.get(d_router_id_addr)); edge.setSrc_sid(SIDSDP.get(s_router_id_addr)); edge.setDst_sid(SIDSDP.get(d_router_id_addr)); log.debug("edge.getSrc_sid(): "+edge.getSrc_sid()); log.debug("edge.getDst_sid(): "+edge.getDst_sid()); } NodeList dest_if_id_nl = dest_el.getElementsByTagName("if_id"); Element dest_if_id_el= (Element) dest_if_id_nl.item(0); String s_dest_if_id; int dst_if_id = -1; if (dest_if_id_el!=null){ s_dest_if_id = getCharacterDataFromElement(dest_if_id_el); dst_if_id = Integer.parseInt(s_dest_if_id); } log.debug("DST if id: "+dst_if_id); NodeList dest_Numif_id_nl = dest_el.getElementsByTagName("NumIf_id"); Element dest_Numif_id_el = (Element) dest_Numif_id_nl.item(0); String s_dest_Numif_id; if (source_Numif_id_el!=null){ s_dest_Numif_id = getCharacterDataFromElement(dest_Numif_id_el); try { // s_dest_Numif_id type : Inet4Address dst_Numif_id = (Inet4Address) Inet4Address.getByName(s_dest_Numif_id); } catch (Exception e) { // s_dest_Numif_id type : DataPathID dst_Numif_id = DataPathID.getByName(s_dest_Numif_id); } } // AƱadimos interfaces Numeradas if (src_Numif_id!=null){ edge.setSrc_Numif_id(src_Numif_id); }if (dst_Numif_id!=null){ edge.setDst_Numif_id(dst_Numif_id); }else{ if (src_if_id != -1){ edge.setSrc_if_id(src_if_id); } if (dst_if_id != -1){ edge.setDst_if_id(dst_if_id); } } //DELAY, IF IT COMES.. NodeList delay_ms_nl = element.getElementsByTagName("delay"); if (delay_ms_nl.getLength()>0){ Element delay_ms_el = (Element)delay_ms_nl.item(0); String s_delay_ms=getCharacterDataFromElement(delay_ms_el); double delay_ms=Double.parseDouble(s_delay_ms); edge.setDelay_ms(delay_ms); } //TE Link information edge.setTE_info(readTE_INFOfromXml(tE_info_common, element, commonBitmapLabelSet,numLabels, grid, cs, n,lambdaIni,lambdaEnd)); NodeList availableLabels_node = element.getElementsByTagName("AvailableLabels"); if ( availableLabels_node != null){ for (int k = 0; k < availableLabels_node.getLength(); k++) { Element availableLabels_e = (Element) availableLabels_node.item(k); NodeList labelSetField_node = availableLabels_e.getElementsByTagName("LabelSetField"); Element labelSetField_el = (Element) labelSetField_node.item(0); if (labelSetField_el.getAttributeNode("type").getValue().equals("4")){//Tengo BitMapSet NodeList numbLabels_node = labelSetField_el.getElementsByTagName("numLabels"); Element numbLabels_e = (Element) numbLabels_node.item(0); String numbLabels_s = getCharacterDataFromElement(numbLabels_e); numLabels=Integer.parseInt(numbLabels_s); NodeList baseLabel_node = labelSetField_el.getElementsByTagName("baseLabel"); Element baseLabel_e = (Element) baseLabel_node.item(0); byte[] bitmap=new byte[1]; NodeList bitmap_node = labelSetField_el.getElementsByTagName("bitmap"); int result=0; Element bitmap_e = (Element) bitmap_node.item(0); if (bitmap_e!=null){ String bitmap_string=getCharacterDataFromElement(bitmap_e); System.out.println("Bitmap read: "+bitmap_string); for (int p =0; p<bitmap_string.length(); p++) result= (int) (result+Math.pow(2, bitmap_string.length()-p-1)*(bitmap_string.charAt(p)-48)); bitmap[0]=(byte) result; ((BitmapLabelSet)edge.getTE_info().getAvailableLabels().getLabelSet()).setBytesBitmap(bitmap); } float min_frequency; grid= Integer.parseInt(baseLabel_e.getAttributeNode("grid").getValue()); cs = Integer.parseInt(baseLabel_e.getAttributeNode("cs").getValue()); boolean n_frequency_included=false; if (baseLabel_e.getAttributeNode("n") != null ){ n = Integer.parseInt(baseLabel_e.getAttributeNode("n").getValue()); n_frequency_included = true; } else if (baseLabel_e.getAttributeNode("min_frequency") != null){ String s_min_frequency = labelSetField_el.getAttributeNode("min_frequency").getValue(); min_frequency=Float.parseFloat(s_min_frequency); n = ((int)min_frequency - 1471)/20; n_frequency_included=true; } if (n_frequency_included){/*Modify availableLabels*/ ((BitmapLabelSet)edge.getTE_info().getAvailableLabels().getLabelSet()).setNumLabels(numLabels); ((BitmapLabelSet)edge.getTE_info().getAvailableLabels().getLabelSet()).getDwdmWavelengthLabel().setGrid(grid); ((BitmapLabelSet)edge.getTE_info().getAvailableLabels().getLabelSet()).getDwdmWavelengthLabel().setChannelSpacing(cs); ((BitmapLabelSet)edge.getTE_info().getAvailableLabels().getLabelSet()).getDwdmWavelengthLabel().setN(n); } else{ log.error("ERROR reading the xml file of the topology, you should enter <baseLabel grid=\"1\" cs=\"2\" n=\"-11\"></baseLabel> "); } } } } log.debug("Preparing to add edge"); log.debug("NODES IN GRAPH:: "+graph.vertexSet()); try{ if(graph.containsEdge(s_router_id_addr, d_router_id_addr)){ log.debug("New Intradomain Edge"); graph.getEdge(s_router_id_addr, d_router_id_addr).setNumberFibers(graph.getEdge(s_router_id_addr, d_router_id_addr).getNumberFibers()+1); log.debug("s_router_id_addr: "+s_router_id_addr.toString()+"; d_router_id_addr: "+d_router_id_addr.toString()+"; edge: "+edge); log.info("New intradomain link: "+s_router_id_addr.toString()+" --> "+d_router_id_addr.toString());//+" \n "+edge); }else{ log.debug("s_router_id_addr: "+s_router_id_addr.toString()+"; d_router_id_addr: "+d_router_id_addr.toString()+"; edge: "+edge); if(graph.containsVertex(d_router_id_addr)==false){ //interDomain edge //TODO type="interdomain"; }else{ graph.addEdge(s_router_id_addr, d_router_id_addr, edge); graph.getEdge(s_router_id_addr, d_router_id_addr).setNumberFibers(1); log.debug("New Intradomain Edge"); log.info("New intradomain link: "+s_router_id_addr.toString()+" --> "+d_router_id_addr.toString());//+" \n "+edge); } } }catch(Exception e){ log.error("Problem with source "+s_router_id_addr+" destination "+d_router_id_addr); e.printStackTrace(); System.exit(-1); } } if(type.equals("interdomain")){ log.debug("New Interdomain Edge"); InterDomainEdge edge = new InterDomainEdge(); TE_Information tE_info=readTE_INFOfromXml(tE_info_common,element, false,numLabels, grid, cs, n, 0, Integer.MAX_VALUE); edge.setTE_info(tE_info); NodeList source = element.getElementsByTagName("source"); Element source_router_el = (Element) source.item(0); NodeList source_router_id = source_router_el .getElementsByTagName("router_id"); Element source_router_id_el = (Element) source_router_id .item(0); String s_r_id = getCharacterDataFromElement(source_router_id_el); log.debug("Edge Source router_id: " + s_r_id); try { // s_router_id_addr type: Inet4Address s_router_id_addr = (Inet4Address) Inet4Address.getByName(s_r_id); } catch (Exception e) {// s_router_id_addr type: DataPathID s_router_id_addr = DataPathID.getByName(s_r_id); } Inet4Address source_domain_id = (Inet4Address) Inet4Address.getByName(domain_id); log.debug("Edge Source domain_id: " + source_domain_id); NodeList source_if_id_nl = source_router_el .getElementsByTagName("if_id"); Element source_if_id_el = (Element) source_if_id_nl.item(0); String s_source_if_id = getCharacterDataFromElement(source_if_id_el); log.debug("Edge Source if_id: " + s_source_if_id); int src_if_id = Integer.parseInt(s_source_if_id); NodeList dest_nl = element.getElementsByTagName("destination"); Element dest_el = (Element) dest_nl.item(0); NodeList dest_router_id_nl = dest_el .getElementsByTagName("router_id"); Element dest_router_id_el = (Element) dest_router_id_nl.item(0); String d_r_id = getCharacterDataFromElement(dest_router_id_el); log.debug("Edge Destination router_id: " + d_r_id); try { // d_router_id_addr type: Inet4Address d_router_id_addr = (Inet4Address) Inet4Address.getByName(d_r_id); } catch (Exception e) { // d_router_id_addr type: DataPathID d_router_id_addr = DataPathID.getByName(d_r_id); } //Inet4Address dest_domain_id = router_id_domain_ed.get(d_router_id_addr); log.debug("Destination domain_id: <Unknown>"); NodeList dest_if_id_nl = dest_el.getElementsByTagName("if_id"); Element dest_if_id_el = (Element) dest_if_id_nl.item(0); String s_dest_if_id = getCharacterDataFromElement(dest_if_id_el); log.debug("Edge Dest if_id: " + s_dest_if_id); int dst_if_id = Integer.parseInt(s_dest_if_id); //router_id_domain_ed //edge.setDomain_src_router(source_domain_id); edge.setSrc_if_id(src_if_id); edge.setDst_if_id(dst_if_id); edge.setDomain_src_router(source_domain_id); //edge.setDomain_dst_router(dest_domain_id); edge.setSrc_router_id(s_router_id_addr); edge.setDst_router_id(d_router_id_addr); if(domainTEDB.getInterDomainLinks()==null){ LinkedList<InterDomainEdge> interDomainLinks= new LinkedList<InterDomainEdge>(); interDomainLinks.add(edge); domainTEDB.setInterDomainLinks(interDomainLinks); log.info("New interdomain link: "+s_router_id_addr.toString()+" --> "+d_router_id_addr.toString());//+"; \n "+edge); }else{ domainTEDB.getInterDomainLinks().add(edge); log.info("New interdomain link: "+s_router_id_addr.toString()+" --> "+d_router_id_addr.toString());//+"; \n "+edge); } } } } log.debug("Info graph edge :: "+graph.edgeSet()); } } catch (Exception e) { e.printStackTrace(); } return TEDBs; } public static Hashtable<String,TEDB> readMultipleDomainSimpleNetworks(String fileName, String layer,boolean allDomains,int lambdaIni, int lambdaEnd, boolean isSSONnetwork, String learntFrom) { Logger log = LoggerFactory.getLogger("BGP4Peer"); Object router_id_addr = null; Object s_router_id_addr = null; Object d_router_id_addr = null; Object src_Numif_id = null; Object dst_Numif_id = null; Hashtable<String,TEDB> TEDBs = new Hashtable<String,TEDB>(); //First, create the graph log.debug("1. SimpleDirectedWeightedGraph"); File file = new File(fileName); try { String domain_id = ""; DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); Document doc = builder.parse(file); HashMap<Inet4Address, Integer >SIDS = new HashMap<Inet4Address,Integer>(); HashMap<DataPathID, Integer >SIDSDP = new HashMap<DataPathID,Integer>(); NodeList nodes_domains = doc.getElementsByTagName("domain"); if (layer!=null){ log.debug("Reading topology, looking for layer "+ layer); } //First pass to get all the nodes //If we need to read all the domains for (int j = 0; j < nodes_domains.getLength(); j++) { boolean readNetwork=false; Element element1 = (Element) nodes_domains.item(j); SimpleTEDB tedb = new SimpleTEDB(); SimpleDirectedWeightedGraph<Object, IntraDomainEdge> graph = new SimpleDirectedWeightedGraph<Object, IntraDomainEdge>(IntraDomainEdge.class); if (layer!=null){ NodeList domain_layer = element1.getElementsByTagName("layer"); if (domain_layer.getLength()==1){ Element layer_type = (Element) domain_layer.item(0); log.debug("Layer: " + layer_type.getAttributeNode("type").getValue()); log.debug("Reading network topology"); if (layer_type.getAttributeNode("type").getValue().equals(layer)){ readNetwork = true; } if (layer.equals("interlayer")){ readNetwork = true; } } }else { readNetwork=true; } if (readNetwork){ Element element_domain = (Element) nodes_domains.item(j); NodeList nodes_domain_id = element_domain.getElementsByTagName("domain_id"); for (int k = 0; k < nodes_domain_id.getLength(); k++) { Element domain_id_e = (Element) nodes_domain_id.item(0); domain_id = getCharacterDataFromElement(domain_id_e); log.debug("Looking for nodes in domain: " + domain_id); log.info("Loading topology from domain " + domain_id); } NodeList itResourcesElement = element1.getElementsByTagName("it_resources"); for (int i = 0; i < itResourcesElement.getLength(); i++) { Element element = (Element) itResourcesElement.item(i); NodeList itResourcesControllerITList = element.getElementsByTagName("controller_it"); Element itResourcesControllerITElement = (Element) itResourcesControllerITList.item(0); String itResourcesControllerIT = getCharacterDataFromElement(itResourcesControllerITElement); NodeList itResourcesCpuList = element.getElementsByTagName("cpu"); Element itResourcesCpuElement = (Element) itResourcesCpuList.item(0); String itResourcesCpu = getCharacterDataFromElement(itResourcesCpuElement); NodeList itResourcesMemList = element.getElementsByTagName("mem"); Element itResourcesMemElement = (Element) itResourcesMemList.item(0); String itResourcesMem = getCharacterDataFromElement(itResourcesMemElement); NodeList itResourcesStorageList = element.getElementsByTagName("storage"); Element itResourcesStorageElement = (Element) itResourcesStorageList.item(0); String itResourcesStorage = getCharacterDataFromElement(itResourcesStorageElement); IT_Resources itResources = new IT_Resources(); if (itResourcesControllerIT!=null){ itResources.setControllerIT(itResourcesControllerIT); itResources.setLearntFrom(learntFrom); } if (itResourcesCpu!=null) itResources.setCpu(itResourcesCpu); if (itResourcesMem!=null) itResources.setMem(itResourcesMem); if (itResourcesStorage!=null) { itResources.setStorage(itResourcesStorage); log.info("set learn from for it resources "+ itResources.toString()); } tedb.setItResources(itResources); } NodeList nodes = element1.getElementsByTagName("node"); for (int i = 0; i < nodes.getLength(); i++) { Element element = (Element) nodes.item(i); NodeList router_id_node = element.getElementsByTagName("router_id"); Element router_id_e = (Element) router_id_node.item(0); String router_id = getCharacterDataFromElement(router_id_e); log.info("Adding node " + router_id); router_id_addr = EdgeUtils.getEdge(router_id); graph.addVertex(router_id_addr); log.debug("About to look for SID"); NodeList SID_aux = element.getElementsByTagName("sid"); Element SID_e = (Element) SID_aux.item(0); if (SID_e!=null) { log.debug("SID exist"); int SID = Integer.parseInt(getCharacterDataFromElement(SID_e)); try { //Router_type: DatapathID SIDS.put((Inet4Address) router_id_addr,SID); log.debug("SID of node Inet4Address: "+SID); } catch (Exception e) { //Router_type: DatapathID SIDSDP.put((DataPathID)router_id_addr, SID); log.debug("SID of node DataPathID: "+SID); } } else { log.debug("SID not found"); } } } tedb.setNetworkGraph(graph); tedb.setDomainID((Inet4Address) Inet4Address.getByName(domain_id)); TEDBs.put(domain_id,tedb); } //Next pass to get all the links for (int j = 0; j < nodes_domains.getLength(); j++) { SimpleDirectedWeightedGraph<Object, IntraDomainEdge> graph=null; boolean readNetwork=false; Element element1 = (Element) nodes_domains.item(j); if (layer!=null){ NodeList domain_layer = element1.getElementsByTagName("layer"); if (domain_layer.getLength()==1){ Element layer_type = (Element) domain_layer.item(0); log.debug("Layer: " + layer_type.getAttributeNode("type").getValue()); log.debug("Reading Topology"); if (layer_type.getAttributeNode("type").getValue().equals(layer)){ readNetwork = true; } } }else { readNetwork=true; } log.debug("Read network = "+readNetwork); if (readNetwork){ Element element_domain = (Element) nodes_domains.item(j); NodeList nodes_domain_id = element_domain.getElementsByTagName("domain_id"); for (int k = 0; k < nodes_domain_id.getLength(); k++) { Element domain_id_e = (Element) nodes_domain_id.item(0); domain_id = getCharacterDataFromElement(domain_id_e); log.debug("Looking for links in domain: " + domain_id); } //System.out.println("VVV debug domain id:"+domain_id); SimpleTEDB domainTEDB = (SimpleTEDB)TEDBs.get( domain_id); graph = domainTEDB.getNetworkGraph(); int numLabels=0; TE_Information tE_info_common=null; Boolean commonBitmapLabelSet = false; NodeList edgeCommon = element1.getElementsByTagName("edgeCommon"); int grid=0; int cs=0; int n=0; for (int i = 0; i < edgeCommon.getLength(); i++) { Element edgeCommonElement = (Element) edgeCommon.item(i); tE_info_common =readTE_INFOfromXml(tE_info_common,edgeCommonElement, false,numLabels, grid, cs, n, 0, Integer.MAX_VALUE); NodeList availableLabels_node = edgeCommonElement.getElementsByTagName("AvailableLabels"); for (int k = 0; k < availableLabels_node.getLength(); k++) { Element availableLabels_e = (Element) availableLabels_node.item(k); NodeList labelSetField_node = availableLabels_e.getElementsByTagName("LabelSetField"); Element labelSetField_el = (Element) labelSetField_node.item(0); if (labelSetField_el.getAttributeNode("type").getValue().equals("4")){//Tengo BitMapSet //Crear un BitMapSet NodeList numbLabels_node = labelSetField_el.getElementsByTagName("numLabels"); Element numbLabels_e = (Element) numbLabels_node.item(0); String numbLabels_s = getCharacterDataFromElement(numbLabels_e); numLabels=Integer.parseInt(numbLabels_s); NodeList baseLabel_node = labelSetField_el.getElementsByTagName("baseLabel"); Element baseLabel_e = (Element) baseLabel_node.item(0); float min_frequency; grid= Integer.parseInt(baseLabel_e.getAttributeNode("grid").getValue()); cs = Integer.parseInt(baseLabel_e.getAttributeNode("cs").getValue()); boolean n_frequency_included=false; if (baseLabel_e.getAttributeNode("n") != null ){ n = Integer.parseInt(baseLabel_e.getAttributeNode("n").getValue()); n_frequency_included = true; } else if (baseLabel_e.getAttributeNode("min_frequency") != null){ String s_min_frequency = labelSetField_el.getAttributeNode("min_frequency").getValue(); min_frequency=Float.parseFloat(s_min_frequency); n = ((int)min_frequency - 1471)/20; n_frequency_included=true; } if (n_frequency_included){ commonBitmapLabelSet = true; }else{ log.error("ERROR reading the xml file of the topology, you should enter <baseLabel grid=\"1\" cs=\"2\" n=\"-11\"></baseLabel> "); } } } } /*if(isSSONnetwork ==true){ if(cs==4){ numLabels=numLabels*4; } else if (cs==5){ numLabels=numLabels*8; } }*/ NodeList edges = element_domain.getElementsByTagName("edge"); for (int i = 0; i < edges.getLength(); i++) { log.debug("New Link"); Element element = (Element) edges.item(i); //By default, all nodes are intradomain String type; Attr attr_type=element.getAttributeNode("type"); if (attr_type==null){ type="intradomain"; }else { type=attr_type.getValue(); /*if (allDomains){ if (type.equals("interdomain")){ type="intradomain"; } }*/ //else if (type.equals("interlayer")){ if (layer!=null && layer.equals("interlayer")){ type="intradomain"; } //} } log.debug("type::"+type); if (type.equals("intradomain")) { IntraDomainEdge edge = new IntraDomainEdge(); NodeList source = element.getElementsByTagName("source"); Element source_router_el = (Element) source.item(0); edge.setLearntFrom(learntFrom); NodeList source_router_id = source_router_el.getElementsByTagName("router_id"); Element source_router_id_el = (Element) source_router_id.item(0); String s_r_id = getCharacterDataFromElement(source_router_id_el); s_router_id_addr= EdgeUtils.getEdge(s_r_id); NodeList source_if_id_nl = source_router_el.getElementsByTagName("if_id"); Element source_if_id_el = (Element) source_if_id_nl.item(0); String s_source_if_id; int src_if_id = -1; if (source_if_id_el!=null){ s_source_if_id = getCharacterDataFromElement(source_if_id_el); src_if_id = Integer.parseInt(s_source_if_id); } log.debug("SRC if id: "+src_if_id); NodeList source_Numif_id_nl = source_router_el.getElementsByTagName("NumIf_id"); Element source_Numif_id_el = (Element) source_Numif_id_nl.item(0); String s_source_Numif_id; if (source_Numif_id_el!=null){ s_source_Numif_id = getCharacterDataFromElement(source_Numif_id_el); try { // src_Numif_id type : Inet4Address src_Numif_id = (Inet4Address) Inet4Address.getByName(s_source_Numif_id); } catch (Exception e) { // src_Numif_id type : DataPathID src_Numif_id = DataPathID.getByName(s_source_Numif_id); } } NodeList dest_nl = element.getElementsByTagName("destination"); Element dest_el = (Element) dest_nl.item(0); NodeList dest_router_id_nl = dest_el.getElementsByTagName("router_id"); Element dest_router_id_el = (Element) dest_router_id_nl.item(0); String d_r_id = getCharacterDataFromElement(dest_router_id_el); d_router_id_addr= EdgeUtils.getEdge(d_r_id); //Anyadimos los SID if (SIDS.get(s_router_id_addr)!=null && SIDS.get(d_router_id_addr)!=null) { log.debug("setting SIDS src: "+SIDS.get(s_router_id_addr)+" dst: "+SIDS.get(d_router_id_addr)); edge.setSrc_sid(SIDS.get(s_router_id_addr)); edge.setDst_sid(SIDS.get(d_router_id_addr)); log.debug("edge.getSrc_sid(): "+edge.getSrc_sid()); log.debug("edge.getDst_sid(): "+edge.getDst_sid()); } else if (SIDSDP.get(s_router_id_addr)!=null && SIDSDP.get(d_router_id_addr)!=null) { log.debug("setting SIDSDP src: "+SIDSDP.get(s_router_id_addr)+" dst: "+SIDSDP.get(d_router_id_addr)); edge.setSrc_sid(SIDSDP.get(s_router_id_addr)); edge.setDst_sid(SIDSDP.get(d_router_id_addr)); log.debug("edge.getSrc_sid(): "+edge.getSrc_sid()); log.debug("edge.getDst_sid(): "+edge.getDst_sid()); } NodeList dest_if_id_nl = dest_el.getElementsByTagName("if_id"); Element dest_if_id_el= (Element) dest_if_id_nl.item(0); String s_dest_if_id; int dst_if_id = -1; if (dest_if_id_el!=null){ s_dest_if_id = getCharacterDataFromElement(dest_if_id_el); dst_if_id = Integer.parseInt(s_dest_if_id); } log.debug("DST if id: "+dst_if_id); NodeList dest_Numif_id_nl = dest_el.getElementsByTagName("NumIf_id"); Element dest_Numif_id_el = (Element) dest_Numif_id_nl.item(0); String s_dest_Numif_id; if (source_Numif_id_el!=null){ s_dest_Numif_id = getCharacterDataFromElement(dest_Numif_id_el); try { // s_dest_Numif_id type : Inet4Address dst_Numif_id = (Inet4Address) Inet4Address.getByName(s_dest_Numif_id); } catch (Exception e) { // s_dest_Numif_id type : DataPathID dst_Numif_id = DataPathID.getByName(s_dest_Numif_id); } } // AƱadimos interfaces Numeradas if (src_Numif_id!=null){ edge.setSrc_Numif_id(src_Numif_id); }if (dst_Numif_id!=null){ edge.setDst_Numif_id(dst_Numif_id); }else{ if (src_if_id != -1){ edge.setSrc_if_id(src_if_id); } if (dst_if_id != -1){ edge.setDst_if_id(dst_if_id); } } //DELAY, IF IT COMES.. NodeList delay_ms_nl = element.getElementsByTagName("delay"); if (delay_ms_nl.getLength()>0){ Element delay_ms_el = (Element)delay_ms_nl.item(0); String s_delay_ms=getCharacterDataFromElement(delay_ms_el); double delay_ms=Double.parseDouble(s_delay_ms); edge.setDelay_ms(delay_ms); } //TE Link information edge.setTE_info(readTE_INFOfromXml(tE_info_common, element, commonBitmapLabelSet,numLabels, grid, cs, n,lambdaIni,lambdaEnd)); NodeList availableLabels_node = element.getElementsByTagName("AvailableLabels"); if ( availableLabels_node != null){ for (int k = 0; k < availableLabels_node.getLength(); k++) { Element availableLabels_e = (Element) availableLabels_node.item(k); NodeList labelSetField_node = availableLabels_e.getElementsByTagName("LabelSetField"); Element labelSetField_el = (Element) labelSetField_node.item(0); if (labelSetField_el.getAttributeNode("type").getValue().equals("4")){//Tengo BitMapSet NodeList numbLabels_node = labelSetField_el.getElementsByTagName("numLabels"); Element numbLabels_e = (Element) numbLabels_node.item(0); String numbLabels_s = getCharacterDataFromElement(numbLabels_e); numLabels=Integer.parseInt(numbLabels_s); NodeList baseLabel_node = labelSetField_el.getElementsByTagName("baseLabel"); Element baseLabel_e = (Element) baseLabel_node.item(0); byte[] bitmap=new byte[1]; NodeList bitmap_node = labelSetField_el.getElementsByTagName("bitmap"); int result=0; Element bitmap_e = (Element) bitmap_node.item(0); if (bitmap_e!=null){ String bitmap_string=getCharacterDataFromElement(bitmap_e); System.out.println("Bitmap read: "+bitmap_string); for (int p =0; p<bitmap_string.length(); p++) result= (int) (result+Math.pow(2, bitmap_string.length()-p-1)*(bitmap_string.charAt(p)-48)); bitmap[0]=(byte) result; ((BitmapLabelSet)edge.getTE_info().getAvailableLabels().getLabelSet()).setBytesBitmap(bitmap); } float min_frequency; grid= Integer.parseInt(baseLabel_e.getAttributeNode("grid").getValue()); cs = Integer.parseInt(baseLabel_e.getAttributeNode("cs").getValue()); boolean n_frequency_included=false; if (baseLabel_e.getAttributeNode("n") != null ){ n = Integer.parseInt(baseLabel_e.getAttributeNode("n").getValue()); n_frequency_included = true; } else if (baseLabel_e.getAttributeNode("min_frequency") != null){ String s_min_frequency = labelSetField_el.getAttributeNode("min_frequency").getValue(); min_frequency=Float.parseFloat(s_min_frequency); n = ((int)min_frequency - 1471)/20; n_frequency_included=true; } if (n_frequency_included){/*Modify availableLabels*/ ((BitmapLabelSet)edge.getTE_info().getAvailableLabels().getLabelSet()).setNumLabels(numLabels); ((BitmapLabelSet)edge.getTE_info().getAvailableLabels().getLabelSet()).getDwdmWavelengthLabel().setGrid(grid); ((BitmapLabelSet)edge.getTE_info().getAvailableLabels().getLabelSet()).getDwdmWavelengthLabel().setChannelSpacing(cs); ((BitmapLabelSet)edge.getTE_info().getAvailableLabels().getLabelSet()).getDwdmWavelengthLabel().setN(n); } else{ log.error("ERROR reading the xml file of the topology, you should enter <baseLabel grid=\"1\" cs=\"2\" n=\"-11\"></baseLabel> "); } } } } log.debug("Preparing to add edge"); log.debug("NODES IN GRAPH:: "+graph.vertexSet()); try{ if(graph.containsEdge(s_router_id_addr, d_router_id_addr)){ log.debug("New Intradomain Edge"); graph.getEdge(s_router_id_addr, d_router_id_addr).setNumberFibers(graph.getEdge(s_router_id_addr, d_router_id_addr).getNumberFibers()+1); log.debug("s_router_id_addr: "+s_router_id_addr.toString()+"; d_router_id_addr: "+d_router_id_addr.toString()+"; edge: "+edge); log.info("New intradomain link: "+s_router_id_addr.toString()+" --> "+d_router_id_addr.toString());//+" \n "+edge); }else{ log.debug("s_router_id_addr: "+s_router_id_addr.toString()+"; d_router_id_addr: "+d_router_id_addr.toString()+"; edge: "+edge); if(graph.containsVertex(d_router_id_addr)==false){ //interDomain edge //TODO type="interdomain"; }else{ graph.addEdge(s_router_id_addr, d_router_id_addr, edge); graph.getEdge(s_router_id_addr, d_router_id_addr).setNumberFibers(1); log.debug("New Intradomain Edge"); log.info("New intradomain link: "+s_router_id_addr.toString()+" --> "+d_router_id_addr.toString()+" learnt "+edge.getLearntFrom());//+" \n "+edge); } } }catch(Exception e){ log.error("Problem with source "+s_router_id_addr+" destination "+d_router_id_addr); e.printStackTrace(); System.exit(-1); } } if(type.equals("interdomain")){ log.debug("New Interdomain Edge"); InterDomainEdge edge = new InterDomainEdge(); TE_Information tE_info=readTE_INFOfromXml(tE_info_common,element, false,numLabels, grid, cs, n, 0, Integer.MAX_VALUE); edge.setTE_info(tE_info); edge.setLearntFrom(learntFrom); NodeList source = element.getElementsByTagName("source"); Element source_router_el = (Element) source.item(0); NodeList source_router_id = source_router_el .getElementsByTagName("router_id"); Element source_router_id_el = (Element) source_router_id .item(0); String s_r_id = getCharacterDataFromElement(source_router_id_el); log.debug("Edge Source router_id: " + s_r_id); try { // s_router_id_addr type: Inet4Address s_router_id_addr = (Inet4Address) Inet4Address.getByName(s_r_id); } catch (Exception e) {// s_router_id_addr type: DataPathID s_router_id_addr = DataPathID.getByName(s_r_id); } Inet4Address source_domain_id = (Inet4Address) Inet4Address.getByName(domain_id); log.debug("Edge Source domain_id: " + source_domain_id); NodeList source_if_id_nl = source_router_el .getElementsByTagName("if_id"); Element source_if_id_el = (Element) source_if_id_nl.item(0); String s_source_if_id = getCharacterDataFromElement(source_if_id_el); log.debug("Edge Source if_id: " + s_source_if_id); int src_if_id = Integer.parseInt(s_source_if_id); NodeList dest_nl = element.getElementsByTagName("destination"); Element dest_el = (Element) dest_nl.item(0); NodeList dest_router_id_nl = dest_el .getElementsByTagName("router_id"); Element dest_router_id_el = (Element) dest_router_id_nl.item(0); String d_r_id = getCharacterDataFromElement(dest_router_id_el); log.debug("Edge Destination router_id: " + d_r_id); try { // d_router_id_addr type: Inet4Address d_router_id_addr = (Inet4Address) Inet4Address.getByName(d_r_id); } catch (Exception e) { // d_router_id_addr type: DataPathID d_router_id_addr = DataPathID.getByName(d_r_id); } //Inet4Address dest_domain_id = router_id_domain_ed.get(d_router_id_addr); log.debug("Destination domain_id: <Unknown>"); NodeList dest_if_id_nl = dest_el.getElementsByTagName("if_id"); Element dest_if_id_el = (Element) dest_if_id_nl.item(0); String s_dest_if_id = getCharacterDataFromElement(dest_if_id_el); log.debug("Edge Dest if_id: " + s_dest_if_id); int dst_if_id = Integer.parseInt(s_dest_if_id); //router_id_domain_ed //edge.setDomain_src_router(source_domain_id); edge.setSrc_if_id(src_if_id); edge.setDst_if_id(dst_if_id); edge.setDomain_src_router(source_domain_id); //edge.setDomain_dst_router(dest_domain_id); edge.setSrc_router_id(s_router_id_addr); edge.setDst_router_id(d_router_id_addr); if(domainTEDB.getInterDomainLinks()==null){ LinkedList<InterDomainEdge> interDomainLinks= new LinkedList<InterDomainEdge>(); interDomainLinks.add(edge); domainTEDB.setInterDomainLinks(interDomainLinks); log.info("New interdomain link: "+s_router_id_addr.toString()+" --> "+d_router_id_addr.toString()+" learnt "+edge.getLearntFrom());//+"; \n "+edge); }else{ domainTEDB.getInterDomainLinks().add(edge); log.info("New interdomain link: "+s_router_id_addr.toString()+" --> "+d_router_id_addr.toString()+" learnt "+edge.getLearntFrom());//+"; \n "+edge); } } } } log.debug("Info graph edge :: "+graph.edgeSet()); } } catch (Exception e) { e.printStackTrace(); } return TEDBs; } private static TE_Information readTE_INFOfromXml(TE_Information tE_info_common,Element element, Boolean commonBitmapLabelSet, int numLabels, int grid, int cs, int n, int lambdaIni, int lambdaEnd) { TE_Information tE_info= new TE_Information(); if (commonBitmapLabelSet){ if(lambdaEnd!=Integer.MAX_VALUE) tE_info.createBitmapLabelSet(numLabels, grid, cs, n,lambdaIni,lambdaEnd); else tE_info.createBitmapLabelSet(numLabels, grid, cs, n); } NodeList maximum_bandwidth_nl = element.getElementsByTagName("maximum_bandwidth"); if (maximum_bandwidth_nl!=null){ if (maximum_bandwidth_nl.getLength()>0){ Element maximum_bandwidth_el = (Element) maximum_bandwidth_nl.item(0); String s_maximum_bandwidth = getCharacterDataFromElement(maximum_bandwidth_el); float maximum_bandwidth=Float.parseFloat(s_maximum_bandwidth); MaximumBandwidth maximumBandwidth =new MaximumBandwidth(); maximumBandwidth.setMaximumBandwidth(maximum_bandwidth); tE_info.setMaximumBandwidth(maximumBandwidth); } }else if(tE_info_common!=null && tE_info_common.getMaximumBandwidth()!=null){ MaximumBandwidth maximumBandwidth =new MaximumBandwidth(); maximumBandwidth.setMaximumBandwidth(tE_info_common.getMaximumBandwidth().getMaximumBandwidth()); tE_info.setMaximumBandwidth(maximumBandwidth); } /** * NodeList SID_aux = element.getElementsByTagName("sid"); Element SID_e = (Element) SID_aux.item(0); if (SID_e!=null) { log.info("SID existe"); int SID = Integer.parseInt(getCharacterDataFromElement(SID_e)); SIDS.put(router_id_addr,SID); log.info("SID of node: "+SID); } else { log.info("SID not found"); } */ NodeList defaultmetric = element.getElementsByTagName("default_te_metric"); Element metric_aux = (Element) defaultmetric.item(0); if (metric_aux != null){ String s_metric_aux = getCharacterDataFromElement(metric_aux); int metric = Integer.parseInt(s_metric_aux); DefaultTEMetricLinkAttribTLV defaultTeMetric= new DefaultTEMetricLinkAttribTLV(); defaultTeMetric.setLinkMetric((long)metric); tE_info.setDefaultTEMetric(defaultTeMetric); }else if(tE_info_common!=null && tE_info_common.getDefaultTEMetric()!=null){ DefaultTEMetricLinkAttribTLV defaultTeMetric= new DefaultTEMetricLinkAttribTLV(); defaultTeMetric.setLinkMetric(tE_info_common.getDefaultTEMetric().getLinkMetric()); tE_info.setDefaultTEMetric(defaultTeMetric); } NodeList unreserved_bandwidth_nl = element.getElementsByTagName("unreserved_bandwidth"); if (unreserved_bandwidth_nl!=null){ int num_u_b=unreserved_bandwidth_nl.getLength(); UnreservedBandwidth unreservedBandwidth; if (num_u_b>0){ unreservedBandwidth =new UnreservedBandwidth(); tE_info.setUnreservedBandwidth(unreservedBandwidth); for(int k=0;k<num_u_b;++k){ Element unreserved_bandwidth_el = (Element) unreserved_bandwidth_nl.item(k); String s_unreserved_bandwidth = getCharacterDataFromElement(unreserved_bandwidth_el); String s_priority=unreserved_bandwidth_el.getAttributeNode("priority").getValue(); Integer priority = Integer.valueOf(s_priority); float unreserved_bandwidth=Float.parseFloat(s_unreserved_bandwidth); (unreservedBandwidth.getUnreservedBandwidth())[priority]=unreserved_bandwidth; } } } NodeList maximum_wlans_nl = element.getElementsByTagName("number_wlans"); if (maximum_wlans_nl!=null){ if (maximum_wlans_nl.getLength()>0){ Element number_wlan_el = (Element) maximum_wlans_nl.item(0); String s_number_wlans = getCharacterDataFromElement(number_wlan_el); int number_wlans=Integer.parseInt(s_number_wlans.replace("\n", "").replaceAll("\\s","")); tE_info.setNumberWLANs(number_wlans); tE_info.initWLANs(); } } NodeList undirDelayLinks = element.getElementsByTagName("undir_delay_link"); Element undirDelayLink = (Element) undirDelayLinks.item(0); if (undirDelayLink != null){ String s_undirDelayLink = getCharacterDataFromElement(undirDelayLink); int undirDelayLinkValue = Integer.parseInt(s_undirDelayLink); UndirectionalLinkDelayDescriptorSubTLV uldSTLV = new UndirectionalLinkDelayDescriptorSubTLV(); uldSTLV.setDelay(undirDelayLinkValue); tE_info.setUndirLinkDelay(uldSTLV); }else if(tE_info_common!=null && tE_info_common.getUndirLinkDelay()!=null){ UndirectionalLinkDelayDescriptorSubTLV uldSTLV = new UndirectionalLinkDelayDescriptorSubTLV(); uldSTLV.setDelay(tE_info_common.getUndirLinkDelay().getDelay()); tE_info.setUndirLinkDelay(uldSTLV); } NodeList undirDelayVars = element.getElementsByTagName("undir_delay_variation"); Element undirDelayVar = (Element) undirDelayVars.item(0); if (undirDelayVar != null){ String s_undirDelayVar = getCharacterDataFromElement(undirDelayVar); int undirDelayVarValue = Integer.parseInt(s_undirDelayVar); UndirectionalDelayVariationDescriptorSubTLV udvSTLV = new UndirectionalDelayVariationDescriptorSubTLV(); udvSTLV.setDelayVar(undirDelayVarValue); tE_info.setUndirDelayVar(udvSTLV); }else if(tE_info_common!=null && tE_info_common.getUndirDelayVar()!=null){ UndirectionalDelayVariationDescriptorSubTLV uldSTLV = new UndirectionalDelayVariationDescriptorSubTLV(); uldSTLV.setDelayVar(tE_info_common.getUndirDelayVar().getDelayVar()); tE_info.setUndirDelayVar(uldSTLV); } NodeList undirLinkLosss = element.getElementsByTagName("undir_link_loss"); Element undirLinkLoss = (Element) undirLinkLosss.item(0); if (undirLinkLoss != null){ String s_undirLinkLoss = getCharacterDataFromElement(undirLinkLoss); int undirLinkLossValue = Integer.parseInt(s_undirLinkLoss); UndirectionalLinkLossDescriptorSubTLV uSTLV = new UndirectionalLinkLossDescriptorSubTLV(); uSTLV.setLinkLoss(undirLinkLossValue); tE_info.setUndirLinkLoss(uSTLV); }else if(tE_info_common!=null && tE_info_common.getUndirLinkLoss()!=null){ UndirectionalLinkLossDescriptorSubTLV uldSTLV = new UndirectionalLinkLossDescriptorSubTLV(); uldSTLV.setLinkLoss(tE_info_common.getUndirLinkLoss().getLinkLoss()); tE_info.setUndirLinkLoss(uldSTLV); } NodeList undirReBws = element.getElementsByTagName("undir_residual_bandwidth"); Element undirReBw = (Element) undirReBws.item(0); if (undirReBw != null){ String s_undirReBw = getCharacterDataFromElement(undirReBw); int undirReBwValue = Integer.parseInt(s_undirReBw); UndirectionalResidualBandwidthDescriptorSubTLV uSTLV = new UndirectionalResidualBandwidthDescriptorSubTLV(); uSTLV.setResidualBw(undirReBwValue); tE_info.setUndirResidualBw(uSTLV); }else if(tE_info_common!=null && tE_info_common.getUndirResidualBw()!=null){ UndirectionalResidualBandwidthDescriptorSubTLV uldSTLV = new UndirectionalResidualBandwidthDescriptorSubTLV(); uldSTLV.setResidualBw( tE_info_common.getUndirResidualBw().getResidualBw()); tE_info.setUndirResidualBw(uldSTLV); } NodeList undirAvalBws = element.getElementsByTagName("undir_available_bandwidth"); Element undirAvalBw = (Element) undirAvalBws.item(0); if (undirAvalBw != null){ String s_undirAvalBw = getCharacterDataFromElement(undirAvalBw); int undirAvalBwValue = Integer.parseInt(s_undirAvalBw); UndirectionalAvailableBandwidthDescriptorSubTLV uSTLV = new UndirectionalAvailableBandwidthDescriptorSubTLV(); uSTLV.setAvailableBw(undirAvalBwValue); tE_info.setUndirAvailableBw(uSTLV); }else if(tE_info_common!=null && tE_info_common.getUndirAvailableBw()!=null){ UndirectionalAvailableBandwidthDescriptorSubTLV uldSTLV = new UndirectionalAvailableBandwidthDescriptorSubTLV(); uldSTLV.setAvailableBw( tE_info_common.getUndirAvailableBw().getAvailableBw()); tE_info.setUndirAvailableBw(uldSTLV); } NodeList undirUtilBws = element.getElementsByTagName("undir_utilized_bandwidth"); Element undirUtilBw = (Element) undirUtilBws.item(0); if (undirUtilBw != null){ String s_undirUtilBw = getCharacterDataFromElement(undirUtilBw); int undirUtilBwValue = Integer.parseInt(s_undirUtilBw); UndirectionalUtilizedBandwidthDescriptorSubTLV uSTLV = new UndirectionalUtilizedBandwidthDescriptorSubTLV(); uSTLV.setUtilizedBw(undirUtilBwValue); tE_info.setUndirUtilizedBw(uSTLV); }else if(tE_info_common!=null && tE_info_common.getUndirUtilizedBw()!=null){ UndirectionalUtilizedBandwidthDescriptorSubTLV uldSTLV = new UndirectionalUtilizedBandwidthDescriptorSubTLV(); uldSTLV.setUtilizedBw( tE_info_common.getUndirUtilizedBw().getUtilizedBw()); tE_info.setUndirUtilizedBw(uldSTLV); } NodeList minMaxDelays = element.getElementsByTagName("undir_min_max_delay"); Element minMaxDelay = (Element) minMaxDelays.item(0); if (minMaxDelay != null){ NodeList minDelays = minMaxDelay.getElementsByTagName("min"); Element minDelay = (Element) minDelays.item(0); NodeList maxDelays = minMaxDelay.getElementsByTagName("max"); Element maxDelay = (Element) maxDelays.item(0); if(minDelay !=null && maxDelay!=null){ String s_minDelay = getCharacterDataFromElement(minDelay); String s_maxDelay = getCharacterDataFromElement(maxDelay); int minDelayValue = Integer.parseInt(s_minDelay); int maxDelayValue = Integer.parseInt(s_maxDelay); MinMaxUndirectionalLinkDelayDescriptorSubTLV ummSTLV = new MinMaxUndirectionalLinkDelayDescriptorSubTLV(); ummSTLV.setHighDelay(maxDelayValue); ummSTLV.setLowDelay(minDelayValue); tE_info.setMinMaxUndirLinkDelay(ummSTLV); } }else if(tE_info_common!=null && tE_info_common.getMinMaxUndirLinkDelay()!=null){ MinMaxUndirectionalLinkDelayDescriptorSubTLV uldSTLV = new MinMaxUndirectionalLinkDelayDescriptorSubTLV(); uldSTLV.setHighDelay( tE_info_common.getMinMaxUndirLinkDelay().getHighDelay()); uldSTLV.setLowDelay( tE_info_common.getMinMaxUndirLinkDelay().getLowDelay()); tE_info.setMinMaxUndirLinkDelay(uldSTLV); } return tE_info; } public static SimpleDirectedWeightedGraph<Object,IntraDomainEdge> readITNetwork(String fileName){ Logger log=LoggerFactory.getLogger("BGP4Peer"); SimpleDirectedWeightedGraph<Object,IntraDomainEdge> graph =new SimpleDirectedWeightedGraph<Object,IntraDomainEdge>(IntraDomainEdge.class); Object router_id_addr = null; Object it_site_id_addr = null; Object resource_addr = null; Object s_id_addr = null; Object d_id_addr = null; Object s_router_id_addr = null; Object d_router_id_addr = null; Object s_it_site_id_addr = null; Object d_it_site_id_addr = null; Object s_resource_id_addr = null; Object d_resource_id_addr = null; log.debug("2. SimpleDirectedWeightedGraph"); File file = new File(fileName); try { DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); Document doc = builder.parse(file); NodeList nodes_domains = doc.getElementsByTagName("domain"); HashMap<Inet4Address, Integer >SIDS = new HashMap<Inet4Address,Integer>(); HashMap<DataPathID, Integer >SIDSDP = new HashMap<DataPathID,Integer>(); for (int j = 0; j < nodes_domains.getLength(); j++) { Element element_domain = (Element) nodes_domains.item(j); NodeList nodes_domain_id = element_domain.getElementsByTagName("domain_id"); for (int k = 0; k < nodes_domain_id.getLength(); k++) { Element domain_id_e = (Element) nodes_domain_id.item(0); String domain_id=getCharacterDataFromElement(domain_id_e); log.debug("Network domain: "+domain_id); } NodeList nodes = doc.getElementsByTagName("node"); for (int i = 0; i < nodes.getLength(); i++) { Element element = (Element) nodes.item(i); NodeList router_id_node = element.getElementsByTagName("router_id"); Element router_id_e = (Element) router_id_node.item(0); String router_id=getCharacterDataFromElement(router_id_e); log.debug("El router_id es "+router_id); try { // router_id_addr type: Inet4Address router_id_addr = (Inet4Address) Inet4Address.getByName(router_id); } catch (Exception e) { // router_id_addr type: DataPathID router_id_addr = DataPathID.getByName(router_id); } graph.addVertex(router_id_addr); Element SID_e = (Element) element.getElementsByTagName("sid"); if (SID_e!=null) { int SID = Integer.parseInt(getCharacterDataFromElement(SID_e)); try { // router_id_addr type: Inet4Address SIDS.put((Inet4Address)router_id_addr,SID); } catch (Exception e) { // router_id_addr type: DataPathID SIDSDP.put((DataPathID)router_id_addr,SID); } } } NodeList it_sites = doc.getElementsByTagName("it_site"); for (int i = 0; i < it_sites.getLength(); i++) { Element element = (Element) it_sites.item(i); NodeList it_site_id_node = element.getElementsByTagName("it_site_id"); Element it_site_id_e = (Element) it_site_id_node.item(0); String it_site_id=getCharacterDataFromElement(it_site_id_e); log.debug("El IT_site_id es "+it_site_id); try { // it_site_id_addr type: Inet4Address it_site_id_addr = (Inet4Address) Inet4Address.getByName(it_site_id); } catch (Exception e) { // it_site_id_addr type: DataPathID it_site_id_addr = DataPathID.getByName(it_site_id); } graph.addVertex(it_site_id_addr); } NodeList storages = doc.getElementsByTagName("storage"); for (int i = 0; i < storages.getLength(); i++) { Element element = (Element) storages.item(i); NodeList resource_id_node = element.getElementsByTagName("resource_id"); Element resource_id_e = (Element) resource_id_node.item(0); String resource_id=getCharacterDataFromElement(resource_id_e); log.debug("El resource_id es "+resource_id); try { resource_addr = (Inet4Address) Inet4Address.getByName(resource_id); } catch (Exception e) { resource_addr = DataPathID.getByName(resource_id); } graph.addVertex(resource_addr); } NodeList edges = doc.getElementsByTagName("edge"); for (int i = 0; i < edges.getLength(); i++) { Element element = (Element) edges.item(i); // We only want those routers which have type="intradomain" //MARTA if (element.getAttributeNode("type").getValue().equals("intradomain")) {//MARTA //IntraDomainEdge edge = new IntraDomainEdge(); IntraDomainEdge edge = new IntraDomainEdge(); NodeList source = element.getElementsByTagName("source"); Element source_router_el = (Element)source.item(0); NodeList source_router_id= source_router_el.getElementsByTagName("router_id"); if (source_router_id.getLength()>0){ Element source_router_id_el=(Element)source_router_id.item(0); String s_r_id=getCharacterDataFromElement(source_router_id_el); try { // s_router_id_addr type: Inet4Address s_router_id_addr = (Inet4Address) Inet4Address.getByName(s_r_id); } catch (Exception e) { // s_router_id_addr type: DataPathID s_router_id_addr = DataPathID.getByName(s_r_id); } s_id_addr=s_router_id_addr; } NodeList source_it_site_id= source_router_el.getElementsByTagName("it_site_id"); if (source_it_site_id.getLength()>0){ Element source_it_site_id_el=(Element)source_it_site_id.item(0); String s_itsite_id=getCharacterDataFromElement(source_it_site_id_el); log.debug("Edge Source IT_site_id: "+s_itsite_id); try { // s_it_site_id_addr type: Inet4Address s_it_site_id_addr = (Inet4Address) Inet4Address.getByName(s_itsite_id); } catch (Exception e) { // s_it_site_id_addr type: DataPathID s_it_site_id_addr = DataPathID.getByName(s_itsite_id); } s_id_addr=s_it_site_id_addr; } NodeList source_resource_id= source_router_el.getElementsByTagName("resource_id"); if (source_resource_id.getLength()>0){ Element source_resource_id_el=(Element)source_resource_id.item(0); String s_resource_id=getCharacterDataFromElement(source_resource_id_el); log.debug("Edge Source resource_id: "+s_resource_id); try {// s_resource_id_addr type: Inet4Address s_resource_id_addr = (Inet4Address) Inet4Address.getByName(s_resource_id); } catch (Exception e) { // s_resource_id_addr type: DataPathID s_resource_id_addr = DataPathID.getByName(s_resource_id); } s_id_addr=s_resource_id_addr; } NodeList source_if_id_nl= source_router_el.getElementsByTagName("if_id"); Element source_if_id_el=(Element)source_if_id_nl.item(0); String s_source_if_id=getCharacterDataFromElement(source_if_id_el); log.debug("Edge Source if_id: "+s_source_if_id); int src_if_id=Integer.parseInt(s_source_if_id); NodeList dest_nl = element.getElementsByTagName("destination"); Element dest_el = (Element)dest_nl.item(0); NodeList dest_router_id_nl= dest_el.getElementsByTagName("router_id"); if (dest_router_id_nl.getLength()>0){ Element dest_router_id_el=(Element)dest_router_id_nl.item(0); String d_r_id=getCharacterDataFromElement(dest_router_id_el); log.debug("Edge Destination router_id: "+d_r_id); try { // d_router_id_addr type: Inet4Address d_router_id_addr = (Inet4Address) Inet4Address.getByName(d_r_id); } catch (Exception e) { // d_router_id_addr type: DataPathID d_router_id_addr = DataPathID.getByName(d_r_id); } d_id_addr=d_router_id_addr; } NodeList dest_it_site_id_nl= dest_el.getElementsByTagName("it_site_id"); if (dest_it_site_id_nl.getLength()>0){ Element dest_it_site_id_el=(Element)dest_it_site_id_nl.item(0); String d_it_site_id=getCharacterDataFromElement(dest_it_site_id_el); log.debug("Edge Destination IT_site_id: "+d_it_site_id); try { // d_it_site_id_addr type: Inet4Address d_it_site_id_addr = (Inet4Address) Inet4Address.getByName(d_it_site_id); } catch (Exception e) { // d_it_site_id_addr type: DataPathID d_it_site_id_addr = DataPathID.getByName(d_it_site_id); } d_id_addr=d_it_site_id_addr; } NodeList dest_resource_id_nl= dest_el.getElementsByTagName("resource_id"); if (dest_resource_id_nl.getLength()>0){ Element dest_resource_id_el=(Element)dest_resource_id_nl.item(0); String d_resource_id=getCharacterDataFromElement(dest_resource_id_el); log.debug("Edge Destination resource_id: "+d_resource_id); try { // d_resource_id_addr type: Inet4Address d_resource_id_addr = (Inet4Address) Inet4Address.getByName(d_resource_id); } catch (Exception e) { // d_resource_id_addr type: DataPathID d_resource_id_addr = DataPathID.getByName(d_resource_id); } d_id_addr=d_resource_id_addr; } NodeList dest_if_id_nl= dest_el.getElementsByTagName("if_id"); Element dest_if_id_el=(Element)dest_if_id_nl.item(0); String s_dest_if_id=getCharacterDataFromElement(dest_if_id_el); log.debug("Edge Dest if_id: "+s_dest_if_id); int dst_if_id=Integer.parseInt(s_dest_if_id); edge.setSrc_if_id(src_if_id); edge.setDst_if_id(dst_if_id); //TODO: Tal vez pete aqui //Anyadimos los SID if (SIDS.get(s_id_addr)!=null && SIDS.get(d_id_addr)!=null) { edge.setSrc_sid(SIDS.get(s_id_addr)); edge.setSrc_sid(SIDS.get(d_id_addr)); } graph.addEdge(s_id_addr, d_id_addr,edge); }//MARTA } } } catch (Exception e) { e.printStackTrace(); } return graph; } public static Inet4Address readNetworkDomain(String fileName) { Logger log = LoggerFactory.getLogger("BGP4Peer"); File file = new File(fileName); try { DocumentBuilder builder = DocumentBuilderFactory.newInstance() .newDocumentBuilder(); Document doc = builder.parse(file); NodeList nodes_domains = doc.getElementsByTagName("domain"); Element element_domain = (Element) nodes_domains.item(0); NodeList nodes_domain_id = element_domain.getElementsByTagName("domain_id"); Element domain_id_e = (Element) nodes_domain_id.item(0); String domain_id = getCharacterDataFromElement(domain_id_e); log.info("Network domain: " + domain_id); Inet4Address domId = (Inet4Address) Inet4Address .getByName(domain_id); return domId; } catch (Exception e) { e.printStackTrace(); return null; } } public static String getCharacterDataFromElement(Element e) { Node child = e.getFirstChild(); if (child instanceof CharacterData) { CharacterData cd = (CharacterData) child; return cd.getData(); } else { return "?"; } } /** * Reads the inter-domain Topology from a topology XML file. * Needs update to work with datapath IDs. * @param fileName Name of the XML * @return Graph of the network. */ public static DirectedWeightedMultigraph<Object, InterDomainEdge> readMDNetwork( String fileName) { Logger log = LoggerFactory.getLogger("BGP4Peer"); DirectedWeightedMultigraph<Object, InterDomainEdge> graph = new DirectedWeightedMultigraph<Object, InterDomainEdge>( InterDomainEdge.class); Hashtable<Object, Inet4Address> router_id_domain_ed = new Hashtable<Object, Inet4Address>(); Hashtable<Object, DataPathID> router_id_domain_ed_dp = new Hashtable<Object, DataPathID>(); HashMap<Inet4Address, Integer >SIDS = new HashMap<Inet4Address,Integer>(); HashMap<DataPathID, Integer >SIDSDP = new HashMap<DataPathID,Integer>(); Object router_id_addr = null; Object s_router_id_addr = null; Object d_router_id_addr = null; File file = new File(fileName); try { DocumentBuilder builder = DocumentBuilderFactory.newInstance() .newDocumentBuilder(); Document doc = builder.parse(file); NodeList nodes_domains = doc.getElementsByTagName("domain"); // First pass to read all the nodes and domains log.info("Multidomain Graph"); for (int j = 0; j < nodes_domains.getLength(); j++) { Element element_domain = (Element) nodes_domains.item(j); NodeList nodes_domain_id = element_domain .getElementsByTagName("domain_id"); Element domain_id_e = (Element) nodes_domain_id.item(0); String domain_id_str = getCharacterDataFromElement(domain_id_e); Inet4Address domain_id = (Inet4Address) Inet4Address .getByName(domain_id_str); log.info("Adding Domain: " + domain_id); graph.addVertex(domain_id); NodeList nodes = element_domain.getElementsByTagName("node"); for (int i = 0; i < nodes.getLength(); i++) { Element element = (Element) nodes.item(i); NodeList router_id_node = element .getElementsByTagName("router_id"); Element router_id_e = (Element) router_id_node.item(0); String router_id = getCharacterDataFromElement(router_id_e); log.debug("Router_id: " + router_id); try { // router_id_addr type: Inet4Address router_id_addr = (Inet4Address) Inet4Address.getByName(router_id); } catch (Exception e) { // router_id_addr type: DataPathID router_id_addr = DataPathID.getByName(router_id); } router_id_domain_ed.put(router_id_addr, domain_id); NodeList nl_sid=element.getElementsByTagName("sid"); Element SID_e = (Element) nl_sid.item(0); if (SID_e!=null) { int SID = Integer.parseInt(getCharacterDataFromElement(SID_e)); try { SIDS.put((Inet4Address)router_id_addr,SID); } catch (Exception e) { SIDSDP.put((DataPathID)router_id_addr,SID); } } } } log.debug("Domain_ids read"); int numLabels=0; Boolean commonBitmapLabelSet = false; NodeList edgeCommon = doc.getElementsByTagName("edgeCommon"); int grid=0; int cs=0; int n=0; for (int i = 0; i < edgeCommon.getLength(); i++) { Element edgeCommonElement = (Element) edgeCommon.item(i); NodeList availableLabels_node = edgeCommonElement.getElementsByTagName("AvailableLabels"); for (int k = 0; k < availableLabels_node.getLength(); k++) { Element availableLabels_e = (Element) availableLabels_node.item(k); NodeList labelSetField_node = availableLabels_e.getElementsByTagName("LabelSetField"); Element labelSetField_el = (Element) labelSetField_node.item(0); if (labelSetField_el.getAttributeNode("type").getValue().equals("4")){//Tengo BitMapSet //Crear un BitMapSet NodeList numbLabels_node = labelSetField_el.getElementsByTagName("numLabels"); Element numbLabels_e = (Element) numbLabels_node.item(0); String numbLabels_s = getCharacterDataFromElement(numbLabels_e); numLabels=Integer.parseInt(numbLabels_s); NodeList baseLabel_node = labelSetField_el.getElementsByTagName("baseLabel"); Element baseLabel_e = (Element) baseLabel_node.item(0); float min_frequency; grid= Integer.parseInt(baseLabel_e.getAttributeNode("grid").getValue()); cs = Integer.parseInt(baseLabel_e.getAttributeNode("cs").getValue()); boolean n_frequency_included=false; if (baseLabel_e.getAttributeNode("n") != null ){ n = Integer.parseInt(baseLabel_e.getAttributeNode("n").getValue()); n_frequency_included = true; } else if (baseLabel_e.getAttributeNode("min_frequency") != null){ String s_min_frequency = labelSetField_el.getAttributeNode("min_frequency").getValue(); min_frequency=Float.parseFloat(s_min_frequency); n = ((int)min_frequency - 1471)/20; n_frequency_included=true; } if (n_frequency_included){ commonBitmapLabelSet = true; }else{ log.error("ERROR reading the xml file of the topology, you should enter <baseLabel grid=\"1\" cs=\"2\" n=\"-11\"></baseLabel> "); } } } } NodeList edges = doc.getElementsByTagName("edge"); boolean a =true; for (int i = 0; i < edges.getLength(); i++) { log.debug("Looking at edge"); Element element = (Element) edges.item(i); InterDomainEdge edge = new InterDomainEdge(); TE_Information tE_info=readTE_INFOfromXml(null, element, false,numLabels, grid, cs, n, 0, Integer.MAX_VALUE); edge.setTE_info(tE_info); NodeList source = element.getElementsByTagName("source"); Element source_router_el = (Element) source.item(0); NodeList source_router_id = source_router_el .getElementsByTagName("router_id"); Element source_router_id_el = (Element) source_router_id .item(0); String s_r_id = getCharacterDataFromElement(source_router_id_el); log.debug("Edge Source router_id: " + s_r_id); try { // s_router_id_addr type: Inet4Address s_router_id_addr = (Inet4Address) Inet4Address.getByName(s_r_id); } catch (Exception e) {// s_router_id_addr type: DataPathID s_router_id_addr = DataPathID.getByName(s_r_id); } Inet4Address source_domain_id = router_id_domain_ed.get(s_router_id_addr); log.debug("Edge Source domain_id: " + source_domain_id); NodeList source_if_id_nl = source_router_el .getElementsByTagName("if_id"); Element source_if_id_el = (Element) source_if_id_nl.item(0); String s_source_if_id = getCharacterDataFromElement(source_if_id_el); log.debug("Edge Source if_id: " + s_source_if_id); int src_if_id = Integer.parseInt(s_source_if_id); NodeList dest_nl = element.getElementsByTagName("destination"); Element dest_el = (Element) dest_nl.item(0); NodeList dest_router_id_nl = dest_el .getElementsByTagName("router_id"); Element dest_router_id_el = (Element) dest_router_id_nl.item(0); String d_r_id = getCharacterDataFromElement(dest_router_id_el); log.debug("Edge Destination router_id: " + d_r_id); try { // d_router_id_addr type: Inet4Address d_router_id_addr = (Inet4Address) Inet4Address.getByName(d_r_id); } catch (Exception e) { // d_router_id_addr type: DataPathID d_router_id_addr = DataPathID.getByName(d_r_id); } Inet4Address dest_domain_id = router_id_domain_ed.get(d_router_id_addr); log.debug("Destination domain_id: " + dest_domain_id); NodeList dest_if_id_nl = dest_el.getElementsByTagName("if_id"); Element dest_if_id_el = (Element) dest_if_id_nl.item(0); String s_dest_if_id = getCharacterDataFromElement(dest_if_id_el); log.debug("Edge Dest if_id: " + s_dest_if_id); int dst_if_id = Integer.parseInt(s_dest_if_id); //router_id_domain_ed //edge.setDomain_src_router(source_domain_id); edge.setSrc_if_id(src_if_id); edge.setDst_if_id(dst_if_id); edge.setDomain_src_router(source_domain_id); edge.setDomain_dst_router(dest_domain_id); edge.setSrc_router_id(s_router_id_addr); edge.setDst_router_id(d_router_id_addr); if (!source_domain_id.equals(dest_domain_id)) { log.info("Adding interdomain link "+source_domain_id.toString()+"-->"+dest_domain_id.toString());//edge.toString()); //Only add if the source and destination domains are different graph.addEdge(source_domain_id, dest_domain_id, edge); } } } catch (Exception e) { e.printStackTrace(); } return graph; } public static DirectedWeightedMultigraph<Object, InterDomainEdge> readMDNetwork( String fileName, String LearntFrom) { Logger log = LoggerFactory.getLogger("BGP4Peer"); DirectedWeightedMultigraph<Object, InterDomainEdge> graph = new DirectedWeightedMultigraph<Object, InterDomainEdge>( InterDomainEdge.class); Hashtable<Object, Inet4Address> router_id_domain_ed = new Hashtable<Object, Inet4Address>(); Hashtable<Object, DataPathID> router_id_domain_ed_dp = new Hashtable<Object, DataPathID>(); HashMap<Inet4Address, Integer >SIDS = new HashMap<Inet4Address,Integer>(); HashMap<DataPathID, Integer >SIDSDP = new HashMap<DataPathID,Integer>(); Object router_id_addr = null; Object s_router_id_addr = null; Object d_router_id_addr = null; File file = new File(fileName); try { DocumentBuilder builder = DocumentBuilderFactory.newInstance() .newDocumentBuilder(); Document doc = builder.parse(file); NodeList nodes_domains = doc.getElementsByTagName("domain"); // First pass to read all the nodes and domains log.info("Multidomain Graph"); for (int j = 0; j < nodes_domains.getLength(); j++) { Element element_domain = (Element) nodes_domains.item(j); NodeList nodes_domain_id = element_domain .getElementsByTagName("domain_id"); Element domain_id_e = (Element) nodes_domain_id.item(0); String domain_id_str = getCharacterDataFromElement(domain_id_e); Inet4Address domain_id = (Inet4Address) Inet4Address .getByName(domain_id_str); log.info("Adding Domain: " + domain_id); graph.addVertex(domain_id); NodeList nodes = element_domain.getElementsByTagName("node"); for (int i = 0; i < nodes.getLength(); i++) { Element element = (Element) nodes.item(i); NodeList router_id_node = element .getElementsByTagName("router_id"); Element router_id_e = (Element) router_id_node.item(0); String router_id = getCharacterDataFromElement(router_id_e); log.debug("Router_id: " + router_id); try { // router_id_addr type: Inet4Address router_id_addr = (Inet4Address) Inet4Address.getByName(router_id); } catch (Exception e) { // router_id_addr type: DataPathID router_id_addr = DataPathID.getByName(router_id); } router_id_domain_ed.put(router_id_addr, domain_id); NodeList nl_sid=element.getElementsByTagName("sid"); Element SID_e = (Element) nl_sid.item(0); if (SID_e!=null) { int SID = Integer.parseInt(getCharacterDataFromElement(SID_e)); try { SIDS.put((Inet4Address)router_id_addr,SID); } catch (Exception e) { SIDSDP.put((DataPathID)router_id_addr,SID); } } } } log.debug("Domain_ids read"); int numLabels=0; Boolean commonBitmapLabelSet = false; NodeList edgeCommon = doc.getElementsByTagName("edgeCommon"); int grid=0; int cs=0; int n=0; for (int i = 0; i < edgeCommon.getLength(); i++) { Element edgeCommonElement = (Element) edgeCommon.item(i); NodeList availableLabels_node = edgeCommonElement.getElementsByTagName("AvailableLabels"); for (int k = 0; k < availableLabels_node.getLength(); k++) { Element availableLabels_e = (Element) availableLabels_node.item(k); NodeList labelSetField_node = availableLabels_e.getElementsByTagName("LabelSetField"); Element labelSetField_el = (Element) labelSetField_node.item(0); if (labelSetField_el.getAttributeNode("type").getValue().equals("4")){//Tengo BitMapSet //Crear un BitMapSet NodeList numbLabels_node = labelSetField_el.getElementsByTagName("numLabels"); Element numbLabels_e = (Element) numbLabels_node.item(0); String numbLabels_s = getCharacterDataFromElement(numbLabels_e); numLabels=Integer.parseInt(numbLabels_s); NodeList baseLabel_node = labelSetField_el.getElementsByTagName("baseLabel"); Element baseLabel_e = (Element) baseLabel_node.item(0); float min_frequency; grid= Integer.parseInt(baseLabel_e.getAttributeNode("grid").getValue()); cs = Integer.parseInt(baseLabel_e.getAttributeNode("cs").getValue()); boolean n_frequency_included=false; if (baseLabel_e.getAttributeNode("n") != null ){ n = Integer.parseInt(baseLabel_e.getAttributeNode("n").getValue()); n_frequency_included = true; } else if (baseLabel_e.getAttributeNode("min_frequency") != null){ String s_min_frequency = labelSetField_el.getAttributeNode("min_frequency").getValue(); min_frequency=Float.parseFloat(s_min_frequency); n = ((int)min_frequency - 1471)/20; n_frequency_included=true; } if (n_frequency_included){ commonBitmapLabelSet = true; }else{ log.error("ERROR reading the xml file of the topology, you should enter <baseLabel grid=\"1\" cs=\"2\" n=\"-11\"></baseLabel> "); } } } } NodeList edges = doc.getElementsByTagName("edge"); boolean a =true; for (int i = 0; i < edges.getLength(); i++) { log.debug("Looking at edge"); Element element = (Element) edges.item(i); InterDomainEdge edge = new InterDomainEdge(); TE_Information tE_info=readTE_INFOfromXml(null, element, false,numLabels, grid, cs, n, 0, Integer.MAX_VALUE); edge.setTE_info(tE_info); edge.setLearntFrom(LearntFrom); NodeList source = element.getElementsByTagName("source"); Element source_router_el = (Element) source.item(0); NodeList source_router_id = source_router_el .getElementsByTagName("router_id"); Element source_router_id_el = (Element) source_router_id .item(0); String s_r_id = getCharacterDataFromElement(source_router_id_el); log.debug("Edge Source router_id: " + s_r_id); try { // s_router_id_addr type: Inet4Address s_router_id_addr = (Inet4Address) Inet4Address.getByName(s_r_id); } catch (Exception e) {// s_router_id_addr type: DataPathID s_router_id_addr = DataPathID.getByName(s_r_id); } Inet4Address source_domain_id = router_id_domain_ed.get(s_router_id_addr); log.debug("Edge Source domain_id: " + source_domain_id); NodeList source_if_id_nl = source_router_el .getElementsByTagName("if_id"); Element source_if_id_el = (Element) source_if_id_nl.item(0); String s_source_if_id = getCharacterDataFromElement(source_if_id_el); log.debug("Edge Source if_id: " + s_source_if_id); int src_if_id = Integer.parseInt(s_source_if_id); NodeList dest_nl = element.getElementsByTagName("destination"); Element dest_el = (Element) dest_nl.item(0); NodeList dest_router_id_nl = dest_el .getElementsByTagName("router_id"); Element dest_router_id_el = (Element) dest_router_id_nl.item(0); String d_r_id = getCharacterDataFromElement(dest_router_id_el); log.debug("Edge Destination router_id: " + d_r_id); try { // d_router_id_addr type: Inet4Address d_router_id_addr = (Inet4Address) Inet4Address.getByName(d_r_id); } catch (Exception e) { // d_router_id_addr type: DataPathID d_router_id_addr = DataPathID.getByName(d_r_id); } Inet4Address dest_domain_id = router_id_domain_ed.get(d_router_id_addr); log.debug("Destination domain_id: " + dest_domain_id); NodeList dest_if_id_nl = dest_el.getElementsByTagName("if_id"); Element dest_if_id_el = (Element) dest_if_id_nl.item(0); String s_dest_if_id = getCharacterDataFromElement(dest_if_id_el); log.debug("Edge Dest if_id: " + s_dest_if_id); int dst_if_id = Integer.parseInt(s_dest_if_id); //router_id_domain_ed //edge.setDomain_src_router(source_domain_id); edge.setSrc_if_id(src_if_id); edge.setDst_if_id(dst_if_id); edge.setDomain_src_router(source_domain_id); edge.setDomain_dst_router(dest_domain_id); edge.setSrc_router_id(s_router_id_addr); edge.setDst_router_id(d_router_id_addr); if (!source_domain_id.equals(dest_domain_id)) { log.info("Adding interdomain link "+source_domain_id.toString()+"-->"+dest_domain_id.toString()+" learnt "+edge.getLearntFrom());//edge.toString()); //Only add if the source and destination domains are different graph.addEdge(source_domain_id, dest_domain_id, edge); } } } catch (Exception e) { e.printStackTrace(); } return graph; } public static void initializeReachabilityFromFile(String fileName, ReachabilityManager rm) { Logger log = LoggerFactory.getLogger("BGP4Peer"); log.debug("Initializng reachability from " + fileName); File file = new File(fileName); try { DocumentBuilder builder = DocumentBuilderFactory.newInstance() .newDocumentBuilder(); Document doc = builder.parse(file); NodeList nodes_domains = doc.getElementsByTagName("domain"); for (int j = 0; j < nodes_domains.getLength(); j++) { Element element_domain = (Element) nodes_domains.item(j); NodeList nodes_domain_id = element_domain .getElementsByTagName("domain_id"); Element domain_id_e = (Element) nodes_domain_id.item(0); String domain_id_str = getCharacterDataFromElement(domain_id_e); Inet4Address domain_id = (Inet4Address) Inet4Address .getByName(domain_id_str); log.debug("Network domain es: " + domain_id); NodeList nodes = element_domain .getElementsByTagName("reachability_entry"); log.debug("HAY : " + nodes.getLength()); for (int i = 0; i < nodes.getLength(); i++) { Element element = (Element) nodes.item(i); NodeList ipv4_address_node = element .getElementsByTagName("ipv4_address"); Element ipv4_address_el = (Element) ipv4_address_node .item(0); String ipv4_address_str = getCharacterDataFromElement(ipv4_address_el); log.debug("ipv4_address: " + ipv4_address_str); Inet4Address ipv4_address = (Inet4Address) Inet4Address .getByName(ipv4_address_str); IPv4prefixEROSubobject eroso = new IPv4prefixEROSubobject(); eroso.setIpv4address(ipv4_address); NodeList prefix_node = element .getElementsByTagName("prefix"); Element prefix_el = (Element) prefix_node.item(0); String prefix_str = getCharacterDataFromElement(prefix_el); int prefix = Integer.parseInt(prefix_str); eroso.setPrefix(prefix); rm.addEROSubobject(domain_id, eroso); } } } catch (Exception e) { e.printStackTrace(); } } // IT update del GEYSERS public static DirectedWeightedMultigraph<Object,InterDomainEdge> readITMDNetwork(String fileName){ Logger log=LoggerFactory.getLogger("BGP4Peer"); DirectedWeightedMultigraph<Object,InterDomainEdge>graph =new DirectedWeightedMultigraph<Object,InterDomainEdge>(InterDomainEdge.class); Hashtable <Object,Object> router_id_domain_ed=new Hashtable <Object,Object>(); Hashtable <Object,Object> it_site_id_domain_ed2=new Hashtable <Object,Object>(); Hashtable <Object,Object> resource_id_domain_ed=new Hashtable <Object,Object>(); File file = new File(fileName); try { DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); Document doc = builder.parse(file); NodeList nodes_domains = doc.getElementsByTagName("domain"); for (int j = 0; j < nodes_domains.getLength(); j++) { Element element_domain = (Element) nodes_domains.item(j); NodeList nodes_domain_id = element_domain.getElementsByTagName("domain_id"); Element domain_id_e = (Element) nodes_domain_id.item(0); String domain_id_str=getCharacterDataFromElement(domain_id_e); Inet4Address domain_id= (Inet4Address) Inet4Address.getByName(domain_id_str); log.info("Network domain: "+domain_id); graph.addVertex(domain_id); NodeList nodes = element_domain.getElementsByTagName("node"); for (int i = 0; i < nodes.getLength(); i++) { Element element = (Element) nodes.item(i); NodeList router_id_node = element.getElementsByTagName("router_id"); Element router_id_e = (Element) router_id_node.item(0); String router_id=getCharacterDataFromElement(router_id_e); log.debug("El router_id es "+router_id); Inet4Address router_id_addr= (Inet4Address) Inet4Address.getByName(router_id); NodeList domain_id_node = element.getElementsByTagName("domain_id"); router_id_domain_ed.put(router_id_addr, domain_id); //graph.addVertex(router_id_addr); } NodeList ITsites = element_domain.getElementsByTagName("it_site"); for (int i = 0; i < ITsites.getLength(); i++) { Element element = (Element) ITsites.item(i); NodeList it_site_id_node = element.getElementsByTagName("it_site_id"); Element it_site_id_e = (Element) it_site_id_node.item(0); String it_site_id=getCharacterDataFromElement(it_site_id_e); log.info("El it_site_id es "+it_site_id); Inet4Address it_site_id_addr= (Inet4Address) Inet4Address.getByName(it_site_id); NodeList domain_id_node = element.getElementsByTagName("domain_id"); it_site_id_domain_ed2.put(it_site_id_addr, domain_id); //graph.addVertex(router_id_addr); } NodeList storages = element_domain.getElementsByTagName("storage"); for (int i = 0; i < storages.getLength(); i++) { Element element = (Element) storages.item(i); NodeList resource_id_node = element.getElementsByTagName("resource_id"); Element resource_id_e = (Element) resource_id_node.item(0); String resource_id=getCharacterDataFromElement(resource_id_e); log.info("El resource_id es "+resource_id); Inet4Address resource_id_addr= (Inet4Address) Inet4Address.getByName(resource_id); NodeList domain_id_node = element.getElementsByTagName("domain_id"); resource_id_domain_ed.put(resource_id_addr, domain_id); //graph.addVertex(router_id_addr); } } NodeList edges = doc.getElementsByTagName("edge"); for (int i = 0; i < edges.getLength(); i++) { log.info("New interdomain edge"); Inet4Address s_router_id_addr= null; Inet4Address d_router_id_addr= null; Inet4Address s_itsite_id_addr= null; Inet4Address d_itsite_id_addr= null; Inet4Address s_resource_id_addr= null; Inet4Address d_resource_id_addr= null; Inet4Address source_domain_id=null; Inet4Address dest_domain_id=null; Element element = (Element) edges.item(i); InterDomainEdge edge =new InterDomainEdge(); NodeList source = element.getElementsByTagName("source"); Element source_router_el = (Element)source.item(0); NodeList source_router_id= source_router_el.getElementsByTagName("router_id"); if (source_router_id.getLength()>0){ Element source_router_id_el=(Element)source_router_id.item(0); String s_r_id=getCharacterDataFromElement(source_router_id_el); log.info("Edge Source router_id: "+s_r_id); s_router_id_addr= (Inet4Address) Inet4Address.getByName(s_r_id); source_domain_id= (Inet4Address)router_id_domain_ed.get(s_router_id_addr); log.info("Edge Source domain_id: "+source_domain_id); } NodeList source_it_site_id= source_router_el.getElementsByTagName("it_site_id"); if (source_it_site_id.getLength()>0){ Element source_it_site_id_el=(Element)source_it_site_id.item(0); String s_itsite_id=getCharacterDataFromElement(source_it_site_id_el); log.info("Edge Source it_site_id: "+s_itsite_id); s_itsite_id_addr= (Inet4Address) Inet4Address.getByName(s_itsite_id); source_domain_id= (Inet4Address)it_site_id_domain_ed2.get(s_itsite_id_addr); log.info("Edge Source ITsite domain_id: "+source_domain_id); } NodeList source_resource_id= source_router_el.getElementsByTagName("resource_id"); if (source_resource_id.getLength()>0){ Element source_resource_id_el=(Element)source_resource_id.item(0); String s_resource_id=getCharacterDataFromElement(source_resource_id_el); log.info("Edge Source resource_id: "+s_resource_id); s_resource_id_addr= (Inet4Address) Inet4Address.getByName(s_resource_id); source_domain_id= (Inet4Address)resource_id_domain_ed.get(s_resource_id_addr); log.info("Edge Source ITsite domain_id: "+source_domain_id); } NodeList source_if_id_nl= source_router_el.getElementsByTagName("if_id"); Element source_if_id_el=(Element)source_if_id_nl.item(0); String s_source_if_id=getCharacterDataFromElement(source_if_id_el); log.info("Edge Source if_id: "+s_source_if_id); int src_if_id=Integer.parseInt(s_source_if_id); NodeList dest_nl = element.getElementsByTagName("destination"); Element dest_el = (Element)dest_nl.item(0); NodeList dest_router_id_nl= dest_el.getElementsByTagName("router_id"); if (dest_router_id_nl.getLength()>0){ Element dest_router_id_el=(Element)dest_router_id_nl.item(0); String d_r_id=getCharacterDataFromElement(dest_router_id_el); log.info("Edge Destination router_id: "+d_r_id); d_router_id_addr= (Inet4Address) Inet4Address.getByName(d_r_id); dest_domain_id= (Inet4Address)router_id_domain_ed.get(d_router_id_addr); log.info("Destination domain_id: "+dest_domain_id); } NodeList dest_it_site_id_nl= dest_el.getElementsByTagName("it_site_id"); if (dest_it_site_id_nl.getLength()>0){ Element dest_it_site_id_el=(Element)dest_it_site_id_nl.item(0); String d_itsite_id=getCharacterDataFromElement(dest_it_site_id_el); log.info("Edge Destination it_site_id: "+d_itsite_id); d_itsite_id_addr= (Inet4Address) Inet4Address.getByName(d_itsite_id); dest_domain_id= (Inet4Address)it_site_id_domain_ed2.get(d_itsite_id_addr); log.info("Destination ITsite domain_id: "+dest_domain_id); } NodeList dest_resource_id_nl= dest_el.getElementsByTagName("resource_id"); if (dest_resource_id_nl.getLength()>0){ Element dest_resource_id_el=(Element)dest_resource_id_nl.item(0); String d_resource_id=getCharacterDataFromElement(dest_resource_id_el); log.info("Edge Destination resource_id: "+d_resource_id); d_resource_id_addr= (Inet4Address) Inet4Address.getByName(d_resource_id); dest_domain_id= (Inet4Address)resource_id_domain_ed.get(d_resource_id_addr); log.info("Destination ITsite domain_id: "+dest_domain_id); } NodeList dest_if_id_nl= dest_el.getElementsByTagName("if_id"); Element dest_if_id_el=(Element)dest_if_id_nl.item(0); String s_dest_if_id=getCharacterDataFromElement(dest_if_id_el); log.info("Edge Dest if_id: "+s_dest_if_id); int dst_if_id=Integer.parseInt(s_dest_if_id); edge.setSrc_if_id(src_if_id); edge.setDst_if_id(dst_if_id); if (source_router_id.getLength()>0){ edge.setSrc_router_id(s_router_id_addr); }else if(source_it_site_id.getLength()>0){ edge.setSrc_router_id(s_itsite_id_addr); }else if(source_resource_id.getLength()>0){ edge.setSrc_router_id(s_resource_id_addr); } if (dest_router_id_nl.getLength()>0){ edge.setDst_router_id(d_router_id_addr); }else if(dest_it_site_id_nl.getLength()>0){ edge.setDst_router_id(d_itsite_id_addr); }else if(dest_resource_id_nl.getLength()>0){ edge.setDst_router_id(d_resource_id_addr); } graph.addEdge(source_domain_id, dest_domain_id,edge); } } catch (Exception e) { e.printStackTrace(); } return graph; } public static WSONInformation getWSONInformation(String fileName){ return FileTEDBUpdater.getWSONInformation(fileName,null); } public static WSONInformation getWSONInformation(String fileName, String layer){ Logger log = LoggerFactory.getLogger("BGP4Peer"); File file = new File(fileName); AvailableLabels commonAvailableLabels = null; WSONInformation WSONinfo = null; int numLabels = 0; int grid=0; int cs=0; int n=0; log.debug("FileName:::"+fileName); try { DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); Document doc = builder.parse(file); // NodeList nodes_domains = doc.getElementsByTagName("domain"); // for (int j = 0; j < nodes_domains.getLength(); j++) { // Element element_domain = (Element) nodes_domains.item(j); NodeList edgeCommon = doc.getElementsByTagName("edgeCommon"); for (int i = 0; i < edgeCommon.getLength(); i++) { Element edgeCommonElement = (Element) edgeCommon.item(i); NodeList availableLabels_node = edgeCommonElement.getElementsByTagName("AvailableLabels"); for (int k = 0; k < availableLabels_node.getLength(); k++) { commonAvailableLabels = new AvailableLabels(); Element availableLabels_e = (Element) availableLabels_node.item(k); NodeList labelSetField_node = availableLabels_e.getElementsByTagName("LabelSetField"); Element labelSetField_el = (Element) labelSetField_node.item(0); if (labelSetField_el.getAttributeNode("type").getValue().equals("4")){//Tengo BitMapSet //Crear un BitMapSet NodeList numbLabels_node = labelSetField_el.getElementsByTagName("numLabels"); Element numbLabels_e = (Element) numbLabels_node.item(0); String numbLabels_s = getCharacterDataFromElement(numbLabels_e); numLabels=Integer.parseInt(numbLabels_s); NodeList baseLabel_node = labelSetField_el.getElementsByTagName("baseLabel"); Element baseLabel_e = (Element) baseLabel_node.item(0); float min_frequency; grid= Integer.parseInt(baseLabel_e.getAttributeNode("grid").getValue()); cs = Integer.parseInt(baseLabel_e.getAttributeNode("cs").getValue()); boolean n_frequency_included=false; if (baseLabel_e.getAttributeNode("n") != null ){ n = Integer.parseInt(baseLabel_e.getAttributeNode("n").getValue()); n_frequency_included = true; } else if (baseLabel_e.getAttributeNode("min_frequency") != null){ String s_min_frequency = labelSetField_el.getAttributeNode("min_frequency").getValue(); min_frequency=Float.parseFloat(s_min_frequency); n = ((int)min_frequency - 1471)/20; n_frequency_included=true; } if (n_frequency_included){ createBitmapLabelSet(commonAvailableLabels,numLabels,grid,cs,n); }else{ log.error("ERROR reading the xml file of the topology, you should enter <baseLabel grid=\"1\" cs=\"2\" n=\"-11\"></baseLabel> "); } } } } //} } catch (Exception e) { log.error(e.toString()); e.printStackTrace(); } if (commonAvailableLabels !=null){ WSONinfo = new WSONInformation(); WSONinfo.setCommonAvailableLabels(commonAvailableLabels); WSONinfo.setNumLambdas(numLabels); WSONinfo.setCs(cs); WSONinfo.setGrid(grid); WSONinfo.setnMin(n); } return WSONinfo; } public static SSONInformation getSSONInformation(String fileName){ return FileTEDBUpdater.getSSONInformation(fileName,null); } public static SSONInformation getSSONInformation(String fileName, String layer){ Logger log = LoggerFactory.getLogger("BGP4Peer"); File file = new File(fileName); AvailableLabels commonAvailableLabels = null; SSONInformation SSONinfo = null; int numLabels = 0; int grid=0; int cs=0; int n=0; try { DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); Document doc = builder.parse(file); // NodeList nodes_domains = doc.getElementsByTagName("domain"); // for (int j = 0; j < nodes_domains.getLength(); j++) { // Element element_domain = (Element) nodes_domains.item(j); NodeList edgeCommon = doc.getElementsByTagName("edgeCommon"); for (int i = 0; i < edgeCommon.getLength(); i++) { Element edgeCommonElement = (Element) edgeCommon.item(i); NodeList availableLabels_node = edgeCommonElement.getElementsByTagName("AvailableLabels"); for (int k = 0; k < availableLabels_node.getLength(); k++) { commonAvailableLabels = new AvailableLabels(); Element availableLabels_e = (Element) availableLabels_node.item(k); NodeList labelSetField_node = availableLabels_e.getElementsByTagName("LabelSetField"); Element labelSetField_el = (Element) labelSetField_node.item(0); if (labelSetField_el.getAttributeNode("type").getValue().equals("4")){//Tengo BitMapSet //Crear un BitMapSet NodeList numbLabels_node = labelSetField_el.getElementsByTagName("numLabels"); Element numbLabels_e = (Element) numbLabels_node.item(0); String numbLabels_s = getCharacterDataFromElement(numbLabels_e); numLabels=Integer.parseInt(numbLabels_s); NodeList baseLabel_node = labelSetField_el.getElementsByTagName("baseLabel"); Element baseLabel_e = (Element) baseLabel_node.item(0); float min_frequency; grid= Integer.parseInt(baseLabel_e.getAttributeNode("grid").getValue()); cs = Integer.parseInt(baseLabel_e.getAttributeNode("cs").getValue()); boolean n_frequency_included=false; if (baseLabel_e.getAttributeNode("n") != null ){ n = Integer.parseInt(baseLabel_e.getAttributeNode("n").getValue()); n_frequency_included = true; } else if (baseLabel_e.getAttributeNode("min_frequency") != null){ String s_min_frequency = labelSetField_el.getAttributeNode("min_frequency").getValue(); min_frequency=Float.parseFloat(s_min_frequency); n = ((int)min_frequency - 1471)/20; n_frequency_included=true; } if (n_frequency_included){ createBitmapLabelSet(commonAvailableLabels,numLabels,grid,cs,n); }else{ log.error("ERROR reading the xml file of the topology, you should enter <baseLabel grid=\"1\" cs=\"2\" n=\"-11\"></baseLabel> "); } } } } //} } catch (Exception e) { e.printStackTrace(); } if (commonAvailableLabels !=null){ SSONinfo = new SSONInformation(); SSONinfo.setCommonAvailableLabels(commonAvailableLabels); // if(cs==5){ // SSONinfo.setNumLambdas(numLabels*8); // } SSONinfo.setNumLambdas(numLabels); SSONinfo.setCs(cs); SSONinfo.setGrid(grid); SSONinfo.setnMin(n); } return SSONinfo; } public static void createBitmapLabelSet(AvailableLabels availableLabels,int numLabels,int grid, int cs,int n){ //FIXME: no hay problema de que se salga el ancho de banda BitmapLabelSet bitmapLabelSet = new BitmapLabelSet(); DWDMWavelengthLabel dwdmWavelengthLabel = new DWDMWavelengthLabel(); dwdmWavelengthLabel.setGrid(grid); dwdmWavelengthLabel.setChannelSpacing(cs); dwdmWavelengthLabel.setN(n); bitmapLabelSet.setDwdmWavelengthLabel(dwdmWavelengthLabel); int numberBytes = numLabels/8; if ((numberBytes*8)<numLabels){ numberBytes++; } byte[] bytesBitMap = new byte[numberBytes]; for (int i=0;i<numberBytes;i++) bytesBitMap[i]=0x00; bitmapLabelSet.setBytesBitmap(bytesBitMap); bitmapLabelSet.setNumLabels(numLabels); availableLabels.setLabelSet(bitmapLabelSet); } public static void getDomainReachabilityFromFile(String fileName, ReachabilityEntry reachabilityEntry) { FileTEDBUpdater.getDomainReachabilityFromFile(fileName, reachabilityEntry,null); } public static Inet4Address getDomainIDfromSimpleDomain(String fileName) { Logger log = LoggerFactory.getLogger("BGP4Peer"); log.debug("Initializng reachability from " + fileName); File file = new File(fileName); Inet4Address domain_id = null; try { DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); Document doc = builder.parse(file); NodeList nodes_domains = doc.getElementsByTagName("domain"); Element element_domain = (Element) nodes_domains.item(0); NodeList nodes_domain_id = element_domain.getElementsByTagName("domain_id"); Element domain_id_e = (Element) nodes_domain_id.item(0); String domain_id_str = getCharacterDataFromElement(domain_id_e); domain_id = (Inet4Address) Inet4Address.getByName(domain_id_str); log.debug("El dominio leido es: " + domain_id); } catch (Exception e) { e.printStackTrace(); } return domain_id; } public static void getDomainReachabilityFromFile(String fileName, /*byte[] domainReachabilityIPv4Prefix,*/ ReachabilityEntry reachabilityEntry,String layer) { Logger log = LoggerFactory.getLogger("BGP4Peer"); log.debug("Initializng reachability from " + fileName); log.debug("probandoooo Initializng reachability from " + fileName); File file = new File(fileName); try { DocumentBuilder builder = DocumentBuilderFactory.newInstance() .newDocumentBuilder(); Document doc = builder.parse(file); NodeList nodes_domains = doc.getElementsByTagName("domain"); for (int j = 0; j < nodes_domains.getLength(); j++) { boolean readNetwork=false; if (layer!=null){ NodeList nodes_layer = doc.getElementsByTagName("layer"); for (int i = 0; i < nodes_layer.getLength(); i++) { Element element = (Element) nodes_layer.item(i); String layer2 =getCharacterDataFromElement(element); if (layer2.equals(layer)){ readNetwork=true; } } }else { readNetwork=true; } if (readNetwork){ Element element_domain = (Element) nodes_domains.item(j); NodeList nodes_domain_id = element_domain .getElementsByTagName("domain_id"); Element domain_id_e = (Element) nodes_domain_id.item(0); String domain_id_str = getCharacterDataFromElement(domain_id_e); Inet4Address domain_id = (Inet4Address) Inet4Address .getByName(domain_id_str); reachabilityEntry.setDomainId(domain_id); log.debug("Network domain es: " + domain_id); NodeList nodes = element_domain .getElementsByTagName("reachability_entry"); for (int i = 0; i < nodes.getLength(); i++) { Element element = (Element) nodes.item(i); NodeList ipv4_address_node = element .getElementsByTagName("ipv4_address"); Element ipv4_address_el = (Element) ipv4_address_node .item(0); String ipv4_address_str = getCharacterDataFromElement(ipv4_address_el); log.debug("ipv4_address: " + ipv4_address_str); Inet4Address ipv4_address = (Inet4Address) Inet4Address .getByName(ipv4_address_str); reachabilityEntry.setAggregatedIPRange(ipv4_address); //FIXME: dudas de esto. Si asignar la IP o copiarla byte a byte con arraycopy /* System.arraycopy(ipv4_address.getAddress(), 0, reachabilityEntry.getAggregatedIPRange(), 0, 4);*/ IPv4prefixEROSubobject eroso = new IPv4prefixEROSubobject(); NodeList prefix_node = element .getElementsByTagName("prefix"); Element prefix_el = (Element) prefix_node.item(0); String prefix_str = getCharacterDataFromElement(prefix_el); int prefix = Integer.parseInt(prefix_str); //Meto el prefijo reachabilityEntry.setPrefix(prefix); long resta = ((long) 0x1 << prefix) - 1; long maskLong = resta << (32 - prefix); byte[] mask = new byte[4]; mask[0] = (byte) (maskLong >>> 24 & 0xFF); mask[1] = (byte) (maskLong >>> 16 & 0xFF); mask[2] = (byte) (maskLong >>> 8 & 0xFF); mask[3] = (byte) (maskLong & 0xFF); //Meto la mascara reachabilityEntry.setMask(mask); } } } } catch (Exception e) { e.printStackTrace(); } } /** * Read the interdomain Topology from a topology file * @param fileName Name of the xml file. * @return List of interdomain edges. */ public static LinkedList<InterDomainEdge> readInterDomainLinks(String fileName) { LinkedList<InterDomainEdge> interDomainLinks = new LinkedList<InterDomainEdge>(); Logger log = LoggerFactory.getLogger("BGP4Peer"); File file = new File(fileName); Inet4Address domain_id=null; try { DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); Document doc = builder.parse(file); NodeList nodes_domains = doc.getElementsByTagName("domain"); if (nodes_domains!=null){ if (nodes_domains.getLength()>=1){ for (int j = 0; j < nodes_domains.getLength(); j++) { Element element_domain = (Element) nodes_domains.item(j); NodeList nodes_domain_id = element_domain.getElementsByTagName("domain_id"); Element domain_id_e = (Element) nodes_domain_id.item(0); String domain_id_str=getCharacterDataFromElement(domain_id_e); domain_id= (Inet4Address) Inet4Address.getByName(domain_id_str); } } } Boolean commonBitmapLabelSet = false; NodeList edgeCommon = doc.getElementsByTagName("edgeCommon"); int grid=0; int cs=0; int n=0; int numLabels=0; for (int i = 0; i < edgeCommon.getLength(); i++) { Element edgeCommonElement = (Element) edgeCommon.item(i); NodeList availableLabels_node = edgeCommonElement.getElementsByTagName("AvailableLabels"); for (int k = 0; k < availableLabels_node.getLength(); k++) { Element availableLabels_e = (Element) availableLabels_node.item(k); NodeList labelSetField_node = availableLabels_e.getElementsByTagName("LabelSetField"); Element labelSetField_el = (Element) labelSetField_node.item(0); if (labelSetField_el.getAttributeNode("type").getValue().equals("4")){//Tengo BitMapSet //Crear un BitMapSet NodeList numbLabels_node = labelSetField_el.getElementsByTagName("numLabels"); Element numbLabels_e = (Element) numbLabels_node.item(0); String numbLabels_s = getCharacterDataFromElement(numbLabels_e); numLabels=Integer.parseInt(numbLabels_s); NodeList baseLabel_node = labelSetField_el.getElementsByTagName("baseLabel"); Element baseLabel_e = (Element) baseLabel_node.item(0); float min_frequency; grid= Integer.parseInt(baseLabel_e.getAttributeNode("grid").getValue()); cs = Integer.parseInt(baseLabel_e.getAttributeNode("cs").getValue()); boolean n_frequency_included=false; if (baseLabel_e.getAttributeNode("n") != null ){ n = Integer.parseInt(baseLabel_e.getAttributeNode("n").getValue()); n_frequency_included = true; } else if (baseLabel_e.getAttributeNode("min_frequency") != null){ String s_min_frequency = labelSetField_el.getAttributeNode("min_frequency").getValue(); min_frequency=Float.parseFloat(s_min_frequency); n = ((int)min_frequency - 1471)/20; n_frequency_included=true; } if (n_frequency_included){ commonBitmapLabelSet = true; }else{ log.error("ERROR reading the xml file of the topology, you should enter <baseLabel grid=\"1\" cs=\"2\" n=\"-11\"></baseLabel> "); } } } } // Read the nodes of the domain which has interdomain connection NodeList edges = doc.getElementsByTagName("edge"); for (int i = 0; i < edges.getLength(); i++) { Element element = (Element) edges.item(i); // We only want those routers which have type="interdomain" //if (((String)element.getAttributeNode("type").getValue()).equals("interdomain")) { if (element.getAttributeNode("type")!=null) { if (element.getAttributeNode("type").getValue().equals("interdomain")) { // Create a variable InterDomainEdge where we include // the two nodes of the connection. InterDomainEdge connection = new InterDomainEdge(); NodeList source = element.getElementsByTagName("source"); Element source_router_el = (Element) source.item(0); //Read the source router IP NodeList source_router_id = source_router_el.getElementsByTagName("router_id"); Element source_router_id_el = (Element) source_router_id.item(0); String s_r_id = getCharacterDataFromElement(source_router_id_el); Inet4Address s_router_id_addr = (Inet4Address) Inet4Address.getByName(s_r_id); //Read the source router interface identifier of the connection NodeList source_if_id_nl = source_router_el.getElementsByTagName("if_id"); Element source_if_id_el = (Element) source_if_id_nl.item(0); String s_source_if_id = getCharacterDataFromElement(source_if_id_el); int src_if_id = Integer.parseInt(s_source_if_id); NodeList src_domain_nl = source_router_el.getElementsByTagName("domain_id"); Inet4Address s_router_domain=null; if (src_domain_nl!=null) { if (src_domain_nl.getLength()>=1){ Element domain_id_el = (Element) src_domain_nl.item(0); String s_r_domain = getCharacterDataFromElement(domain_id_el).trim(); s_router_domain = (Inet4Address) Inet4Address.getByName(s_r_domain); }else{ s_router_domain= domain_id; } }else { s_router_domain= domain_id; } //Read the router destination NodeList dest_nl = element.getElementsByTagName("destination"); Element dest_el = (Element) dest_nl.item(0); NodeList dest_router_id_nl = dest_el.getElementsByTagName("router_id"); Element dest_router_id_el = (Element) dest_router_id_nl.item(0); String d_r_id = getCharacterDataFromElement(dest_router_id_el); log.info("Edge Destination router_id: "+ d_r_id); Inet4Address d_router_id_addr = (Inet4Address) Inet4Address.getByName(d_r_id); NodeList dest_if_id_nl = dest_el.getElementsByTagName("if_id"); Element dest_if_id_el = (Element) dest_if_id_nl.item(0); String s_dest_if_id = getCharacterDataFromElement(dest_if_id_el); log.info("Edge Dest if_id: " + s_dest_if_id); int dst_if_id = Integer.parseInt(s_dest_if_id); NodeList domain = dest_el.getElementsByTagName("domain_id"); Element domain_id_el = (Element) domain.item(0); String d_r_domain = getCharacterDataFromElement(domain_id_el); log.info("Destination router domain: "+ d_r_domain); Inet4Address d_router_domain= (Inet4Address) Inet4Address.getByName(d_r_domain); // Include the connection between both nodes connection.setSrc_if_id(src_if_id); connection.setSrc_router_id(s_router_id_addr); connection.setDst_if_id(dst_if_id); connection.setDst_router_id(d_router_id_addr); connection.setDomain_src_router(s_router_domain); connection.setDomain_dst_router(d_router_domain); if(connection.getTE_info()==null){ TE_Information tE_info= new TE_Information(); if (commonBitmapLabelSet){ tE_info.createBitmapLabelSet(numLabels, grid, cs, n); } connection.setTE_info(tE_info); } //add the connection to the LinkedList. interDomainLinks.add(connection); } } } //}//end for domains } catch (Exception e) { e.printStackTrace(); } return interDomainLinks; } public static int readWSONLambdas(String fileName){ Logger log=LoggerFactory.getLogger("BGP4Peer"); File file = new File(fileName); int num_wavelengths=4; try { DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); Document doc = builder.parse(file); NodeList nodes_domains = doc.getElementsByTagName("domain"); for (int j = 0; j < nodes_domains.getLength(); j++) { Element element_domain = (Element) nodes_domains.item(j); NodeList nodes_wl= element_domain.getElementsByTagName("num_wavelengths"); for (int k = 0; k < nodes_wl.getLength(); k++) { Element nodes_wl_e = (Element) nodes_wl.item(0); String num_wavelengths_id=getCharacterDataFromElement(nodes_wl_e ); num_wavelengths=Integer.parseInt(num_wavelengths_id); log.info("num_wavelength: "+num_wavelengths); } } } catch (Exception e) { e.printStackTrace(); } return num_wavelengths; } public static Hashtable <Object,Object> getITSites(String fileName){ Hashtable <Object,Object> it_site_id_domain_ed=new Hashtable <Object,Object>(); File file2 = new File(fileName); try { DocumentBuilder builder2 = DocumentBuilderFactory.newInstance().newDocumentBuilder(); Document doc2 = builder2.parse(file2); NodeList nodes_domains = doc2.getElementsByTagName("domain"); for (int j = 0; j < nodes_domains.getLength(); j++) { Element element_domain = (Element) nodes_domains.item(j); NodeList nodes_domain_id = element_domain.getElementsByTagName("domain_id"); Element domain_id_e = (Element) nodes_domain_id.item(0); String domain_id_str=getCharacterDataFromElement(domain_id_e); Inet4Address domain_id= (Inet4Address) Inet4Address.getByName(domain_id_str); NodeList ITsites = element_domain.getElementsByTagName("it_site"); for (int i = 0; i < ITsites.getLength(); i++) { Element element = (Element) ITsites.item(i); NodeList it_site_id_node = element.getElementsByTagName("it_site_id"); Element it_site_id_e = (Element) it_site_id_node.item(0); String it_site_id=getCharacterDataFromElement(it_site_id_e); Inet4Address it_site_id_addr= (Inet4Address) Inet4Address.getByName(it_site_id); NodeList domain_id_node = element.getElementsByTagName("domain_id"); it_site_id_domain_ed.put(it_site_id_addr, domain_id); //graph.addVertex(router_id_addr); } } } catch (Exception e) { e.printStackTrace(); } return it_site_id_domain_ed; } public static Hashtable <Object,Object> getResource(String fileName){ Hashtable <Object,Object> resource_id_domain_ed=new Hashtable <Object,Object>(); File file2 = new File(fileName); try { DocumentBuilder builder2 = DocumentBuilderFactory.newInstance().newDocumentBuilder(); Document doc2 = builder2.parse(file2); NodeList nodes_domains = doc2.getElementsByTagName("domain"); for (int j = 0; j < nodes_domains.getLength(); j++) { Element element_domain = (Element) nodes_domains.item(j); NodeList nodes_domain_id = element_domain.getElementsByTagName("domain_id"); Element domain_id_e = (Element) nodes_domain_id.item(0); String domain_id_str=getCharacterDataFromElement(domain_id_e); Inet4Address domain_id= (Inet4Address) Inet4Address.getByName(domain_id_str); NodeList storages = element_domain.getElementsByTagName("storage"); for (int i = 0; i < storages.getLength(); i++) { Element element = (Element) storages.item(i); NodeList resource_id_node = element.getElementsByTagName("resource_id"); Element resource_id_e = (Element) resource_id_node.item(0); String resource_id=getCharacterDataFromElement(resource_id_e); Inet4Address resource_id_addr= (Inet4Address) Inet4Address.getByName(resource_id); NodeList domain_id_node = element.getElementsByTagName("domain_id"); resource_id_domain_ed.put(resource_id_addr, domain_id); //graph.addVertex(router_id_addr); } } } catch (Exception e) { e.printStackTrace(); } return resource_id_domain_ed; } public static Hashtable<StorageTLV,Object> getStorageCharacteristics(String fileName){ Hashtable <StorageTLV,Object> storage_site_ed=new Hashtable <StorageTLV,Object>(); // StorageTLV storagetlv = new StorageTLV(); // ResourceIDSubTLV resourceidsubtlv = new ResourceIDSubTLV(); // CostSubTLV costsubtlv = new CostSubTLV(); // LinkedList<CostSubTLV> costlist = new LinkedList<CostSubTLV> (); // StorageSizeSubTLV storagesizesubtlv = new StorageSizeSubTLV(); File file2 = new File(fileName); try { DocumentBuilder builder2 = DocumentBuilderFactory.newInstance().newDocumentBuilder(); Document doc2 = builder2.parse(file2); NodeList nodes_domains = doc2.getElementsByTagName("domain"); for (int j = 0; j < nodes_domains.getLength(); j++) { Element element_domain = (Element) nodes_domains.item(j); NodeList nodes_domain_id = element_domain.getElementsByTagName("domain_id"); Element domain_id_e = (Element) nodes_domain_id.item(0); String domain_id_str=getCharacterDataFromElement(domain_id_e); Inet4Address domain_id= (Inet4Address) Inet4Address.getByName(domain_id_str); NodeList storages = element_domain.getElementsByTagName("storage"); for (int i = 0; i < storages.getLength(); i++) { StorageTLV storagetlv = new StorageTLV(); ResourceIDSubTLV resourceidsubtlv = new ResourceIDSubTLV(); CostSubTLV costsubtlv = new CostSubTLV(); LinkedList<CostSubTLV> costlist = new LinkedList<CostSubTLV> (); StorageSizeSubTLV storagesizesubtlv = new StorageSizeSubTLV(); Element element = (Element) storages.item(i); NodeList resource_id_node = element.getElementsByTagName("resource_id"); Element resource_id_e = (Element) resource_id_node.item(0); String resource_id=getCharacterDataFromElement(resource_id_e); Inet4Address resource_id_addr= (Inet4Address) Inet4Address.getByName(resource_id); resourceidsubtlv.setResourceID(resource_id_addr); Inet4Address virtual_TI_site= (Inet4Address) Inet4Address.getByName((element.getAttributeNode("it_site").getValue()).toString()); costsubtlv.setUsageUnit((element.getAttributeNode("UsageUnit").getValue()).getBytes()); costsubtlv.setUnitaryPrice((element.getAttributeNode("UnitaryPrice").getValue()).getBytes()); costlist.add(costsubtlv); storagesizesubtlv.setTotalSize(Integer.parseInt(element.getAttributeNode("TotalSize").getValue())); storagesizesubtlv.setAvailableSize(Integer.parseInt(element.getAttributeNode("AvailableSize").getValue())); storagetlv.setResourceIDSubTLV(resourceidsubtlv); storagetlv.setCostList(costlist); storagetlv.setStorageSizeSubTLV(storagesizesubtlv); storage_site_ed.put(storagetlv, virtual_TI_site); } } } catch (Exception e) { e.printStackTrace(); } return storage_site_ed; } }