Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
es.tid.tedb.FileTEDBUpdater Maven / Gradle / Ivy
Go to download
Traffic Engineering Database, BGP-LS peer, Topology Module
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 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 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 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 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 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 graph = new SimpleDirectedWeightedGraph(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);
HashMapSIDS = new HashMap();
HashMapSIDSDP = new HashMap();
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 ");
}
}
}
}
/*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;k0){
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 ");
}
}
}
}
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 readGraphIntraDomain(Element element1, String layer, Logger log){
Object router_id_addr = null;
HashMapSIDS = new HashMap();
HashMapSIDSDP = new HashMap();
SimpleDirectedWeightedGraph graph = new SimpleDirectedWeightedGraph(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 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 TEDBs = new Hashtable();
//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);
HashMapSIDS = new HashMap();
HashMapSIDSDP = new HashMap();
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 graph = new SimpleDirectedWeightedGraph(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 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 ");
}
}
}
}
/*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 ");
}
}
}
}
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: ");
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 interDomainLinks= new LinkedList();
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 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 TEDBs = new Hashtable();
//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);
HashMapSIDS = new HashMap();
HashMapSIDSDP = new HashMap();
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 graph = new SimpleDirectedWeightedGraph(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 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 ");
}
}
}
}
/*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 ");
}
}
}
}
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: ");
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 interDomainLinks= new LinkedList();
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;k0){
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 readITNetwork(String fileName){
Logger log=LoggerFactory.getLogger("BGP4Peer");
SimpleDirectedWeightedGraph graph =new SimpleDirectedWeightedGraph(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");
HashMapSIDS = new HashMap();
HashMapSIDSDP = new HashMap();
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 readMDNetwork(
String fileName) {
Logger log = LoggerFactory.getLogger("BGP4Peer");
DirectedWeightedMultigraph graph = new DirectedWeightedMultigraph(
InterDomainEdge.class);
Hashtable router_id_domain_ed = new Hashtable();
Hashtable router_id_domain_ed_dp = new Hashtable();
HashMapSIDS = new HashMap();
HashMapSIDSDP = new HashMap();
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 ");
}
}
}
}
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 readMDNetwork(
String fileName, String LearntFrom) {
Logger log = LoggerFactory.getLogger("BGP4Peer");
DirectedWeightedMultigraph graph = new DirectedWeightedMultigraph(
InterDomainEdge.class);
Hashtable router_id_domain_ed = new Hashtable();
Hashtable router_id_domain_ed_dp = new Hashtable();
HashMapSIDS = new HashMap();
HashMapSIDSDP = new HashMap();
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 ");
}
}
}
}
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 readITMDNetwork(String fileName){
Logger log=LoggerFactory.getLogger("BGP4Peer");
DirectedWeightedMultigraphgraph =new DirectedWeightedMultigraph(InterDomainEdge.class);
Hashtable router_id_domain_ed=new Hashtable ();
Hashtable it_site_id_domain_ed2=new Hashtable ();
Hashtable resource_id_domain_ed=new Hashtable ();
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 ");
}
}
}
}
//}
} 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 ");
}
}
}
}
//}
} 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)>> 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 readInterDomainLinks(String fileName) {
LinkedList interDomainLinks = new LinkedList();
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 ");
}
}
}
}
// 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 getITSites(String fileName){
Hashtable it_site_id_domain_ed=new Hashtable ();
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 getResource(String fileName){
Hashtable resource_id_domain_ed=new Hashtable ();
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 getStorageCharacteristics(String fileName){
Hashtable storage_site_ed=new Hashtable ();
// StorageTLV storagetlv = new StorageTLV();
// ResourceIDSubTLV resourceidsubtlv = new ResourceIDSubTLV();
// CostSubTLV costsubtlv = new CostSubTLV();
// LinkedList costlist = new LinkedList ();
// 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 costlist = new LinkedList ();
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;
}
}