diff --git a/src/bgpls_speaker/service/java/BGP4Parameters_3.xml b/src/bgpls_speaker/service/java/BGP4Parameters_3.xml
index bb74215ee0e991cfa7da8e17ab0624bea9e865f7..9607b640fbcfebf1490c450e8a78652f24b1c062 100644
--- a/src/bgpls_speaker/service/java/BGP4Parameters_3.xml
+++ b/src/bgpls_speaker/service/java/BGP4Parameters_3.xml
@@ -1,12 +1,12 @@
 <config>
 	<!-- TCP port where the BGP is listening for incoming bgp4 connections. Optional Parameter. Default value: 179 (BGP Port)  --> 
 	<BGP4Port>12179</BGP4Port>
-	<BGPIdentifier>1.1.1.1</BGPIdentifier>
+	<BGPIdentifier>7.7.7.7</BGPIdentifier>
 <!-- TCP port to connect to manage the BGP connection. Default value: 1112 -->
 	<BGP4ManagementPort>1112</BGP4ManagementPort> 
 	<!-- Peers to which this Peer is going to establish connection -->
     <configPeer>
-                <peer>10.95.86.214</peer>
+                <peer>10.95.90.43</peer>
                 <export>false</export>
                 <import>true</import>
                 <peerPort>179</peerPort>
diff --git a/src/bgpls_speaker/service/java/bgp_ls.jar b/src/bgpls_speaker/service/java/bgp_ls.jar
index a2d2eefc96e50b9b71dd96e74a8c883e6ffe33a9..d858ce37af1efc469db682b03b85d9e9123d764a 100644
Binary files a/src/bgpls_speaker/service/java/bgp_ls.jar and b/src/bgpls_speaker/service/java/bgp_ls.jar differ
diff --git a/src/bgpls_speaker/service/java/netphony-topology/BGP4Parameters_3.xml b/src/bgpls_speaker/service/java/netphony-topology/BGP4Parameters_3.xml
new file mode 100644
index 0000000000000000000000000000000000000000..b89295fceafaf46245e47bd258bbd13983847673
--- /dev/null
+++ b/src/bgpls_speaker/service/java/netphony-topology/BGP4Parameters_3.xml
@@ -0,0 +1,51 @@
+<config>
+	<!-- TCP port where the BGP is listening for incoming bgp4 connections. Optional Parameter. Default value: 179 (BGP Port)  --> 
+	<BGP4Port>12179</BGP4Port>
+	<BGPIdentifier>7.7.7.7</BGPIdentifier>
+<!-- TCP port to connect to manage the BGP connection. Default value: 1112 -->
+	<BGP4ManagementPort>1112</BGP4ManagementPort> 
+	<!-- Peers to which this Peer is going to establish connection -->
+    <configPeer>
+                <peer>10.95.90.43</peer>
+                <export>false</export>
+                <import>true</import>
+                <peerPort>179</peerPort>
+    </configPeer>
+
+	<!-- Ficheros log (servidor, protocolo PCEP y OSPF). Campos opcionales-->
+	<BGP4LogFile>BGP4Parser2.log</BGP4LogFile><!-- Default value: BGP4Parser.log -->
+	<BGP4LogFileClient>BGP4Client2.log</BGP4LogFileClient><!-- Default value: BGP4Client.log-->
+	<BGP4LogFileServer>BGP4Server2.log</BGP4LogFileServer><!-- Default value: BGP4Server.log-->
+	<!-- If the tcp no delay option is used or not. Optional Parameter. Default value: false. -->
+	<nodelay>true</nodelay>
+	<!-- Waiting Time to re-connect to clients. Default value: 6000 ms. -->
+	<delay>40000</delay>
+	<setTraces>true</setTraces>
+	<!-- OPEN Parameters -->
+	<!-- RFC 4271. This 2-octet unsigned integer indicates the number of seconds the sender proposes for the value of the Hold Timer.  
+		Upon receipt of an OPEN message, a BGP speaker MUST calculate the value of the Hold Timer by using the smaller of its configured
+         Hold Time and the Hold Time received in the OPEN message.  The Hold Time MUST be either zero or at least three seconds.  An
+         implementation MAY reject connections on the basis of the Hold Time.  The calculated value indicates the maximum number of
+         seconds that may elapse between the receipt of successive KEEPALIVE and/or UPDATE messages from the sender. -->
+	<holdTime>180</holdTime><!-- Optional Parameter. Default value: 3. -->
+	<!-- RFC 4271. This 1-octet unsigned integer indicates the protocol version number of the message.  The current BGP version number is 4. -->
+	<version>4</version><!-- Optional Parameter. Default value: 4. -->
+	<!-- RFC 4271.  This 2-octet unsigned integer indicates the Autonomous System number of the sender.-->
+	<myAutonomousSystem>100</myAutonomousSystem>
+	<!-- RFC 4271. This 4-octet unsigned integer indicates the BGP Identifier of the sender.  A given BGP speaker sets the value of its BGP
+         Identifier to an IP address that is assigned to that BGP speaker.  The value of the BGP Identifier is determined upon
+         startup and is the same for every local interface and BGP peer. --> 
+	<!--<BGPIdentifier>192.168.1.200</BGPIdentifier> -->
+	<!-- If the peer is in charge of sending its topology (only the interdomain Links) to the other BGP peer it is connected to. Default: false -->
+	<sendTopology>false</sendTopology>
+	<!-- If the peer is in charge of sending its whole topology to the other BGP peer it is connected to. Default: false -->
+	<sendIntradomainLinks>true</sendIntradomainLinks>
+	<!-- Optional Parameter. How to learn the topology. Possibilities: fromXML, fromBGP. Default: fromBGP -->
+	<learnTopology>fromBGP</learnTopology>	
+	<!-- Topology network to read. It is mandatory if and only if learnTopology parameter is fromXML. -->
+	<!--<topologyFile>src/test/resources/network1.xml</topologyFile>-->
+	<!-- Optional Parameter. Instance Identifier for node and link NLRI. See rfc 6549. Default value: 0-->
+	<!--<instanceID>0</instanceID>-->
+	<!-- Optional Parameter. Default value: localhost -->
+	<localBGPAddress>0.0.0.0</localBGPAddress>
+</config>
\ No newline at end of file
diff --git a/src/bgpls_speaker/service/java/netphony-topology/pom.xml b/src/bgpls_speaker/service/java/netphony-topology/pom.xml
index 13fb93775fd00412bbeead3a88404fff1eefee70..c562e0c80be2ed5f0a84164fb5ded13827827f84 100644
--- a/src/bgpls_speaker/service/java/netphony-topology/pom.xml
+++ b/src/bgpls_speaker/service/java/netphony-topology/pom.xml
@@ -38,6 +38,9 @@
 			<groupId>es.tid.netphony</groupId>
 			<artifactId>network-protocols</artifactId>
 			<version>1.1-SNAPSHOT</version>
+			<!-- Next local repo only on docker container -->
+			<!-- <scope>system</scope> 
+			<systemPath>/protocols/target/network-protocols-1.1-SNAPSHOT.jar</systemPath> -->
 		</dependency>
 		<dependency>
 			<groupId>org.jgrapht</groupId>
@@ -113,7 +116,6 @@
 			<artifactId>javax.annotation-api</artifactId>
 			<version>${javax-annotation-api-version}</version>
 		</dependency>
-		
 		<!-- https://mvnrepository.com/artifact/com.google.guava/guava -->
 		<dependency>
 		    <groupId>com.google.guava</groupId>
@@ -193,11 +195,15 @@
 				<configuration>
 					<source>8</source>
 					<target>8</target>
+					<encoding>UTF-8</encoding>
 				</configuration>
 			</plugin>
 			<plugin>
 				<artifactId>maven-resources-plugin</artifactId>
 				<version>2.6</version>
+				<configuration>
+                	<encoding>UTF-8</encoding>
+            	</configuration>
 				<executions>
 					<execution>
 						<id>copy-resources</id>
@@ -234,6 +240,21 @@
 					</execution>
 				</executions>
 			</plugin>
+			<plugin>
+			<!-- Build an executable JAR -->
+			<groupId>org.apache.maven.plugins</groupId>
+			<artifactId>maven-jar-plugin</artifactId>
+			<version>3.1.0</version>
+			<configuration>
+				<archive>
+				<manifest>
+					<addClasspath>true</addClasspath>
+					<classpathPrefix>lib/</classpathPrefix>
+					<mainClass>eu.teraflow.tid.bgp4Peer.peer.BGPPeerMain</mainClass>
+				</manifest>
+				</archive>
+			</configuration>
+			</plugin>
 		</plugins>
 	</build>
 	<profiles>
@@ -292,12 +313,18 @@
 					<artifactId>log4j-core</artifactId>
 					<version>2.5</version>
 				</dependency>
+				<dependency>
+					<groupId>io.netty</groupId>
+					<artifactId>netty-transport-native-epoll</artifactId>
+					<version>4.1.77.Final</version>
+					<classifier>linux-x86_64</classifier>
+				</dependency>
 			</dependencies>
 			<build>
 				<plugins>
 					<plugin>
 						<artifactId>maven-assembly-plugin</artifactId>
-						<version>2.6</version>
+						<version>3.3.0</version>
 						<configuration>
 							<descriptorRefs>
 								<descriptorRef>jar-with-dependencies</descriptorRef>
@@ -305,7 +332,7 @@
 							<finalName>bgp-ls-speaker</finalName>
 							<archive>
 								<manifest>
-									<mainClass>eu.teraflow.tid.bgp.bgp4Peer.peer.BGPPeerMain</mainClass>
+									<mainClass>eu.teraflow.tid.bgp4Peer.peer.BGPPeerMain</mainClass>
 								</manifest>
 							</archive>
 						</configuration>
@@ -389,7 +416,7 @@
 					<groupId>org.apache.logging.log4j</groupId>
 					<artifactId>log4j-core</artifactId>
 					<version>2.5</version>
-				</dependency>
+				</dependency>   
 			</dependencies>
 			<build>
 				<plugins>
@@ -408,23 +435,31 @@
 									<filters>
 										<filter>
 											<artifact>*:*</artifact>
-											<excludes>
+											<!-- <excludes>
 												<exclude>META-INF/*.SF</exclude>
 												<exclude>META-INF/*.DSA</exclude>
 												<exclude>META-INF/*.RSA</exclude>
-											</excludes>
+											</excludes> -->
 										</filter>
 									</filters>
 									<minimizeJar>false</minimizeJar>
 									<transformers>
-										<!--transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/-->
+										<!-- <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/> -->
 										<transformer
 											implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
 											<mainClass>eu.teraflow.tid.bgp.bgp4Peer.peer.BGPPeerMain</mainClass>
+											 <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
 										</transformer>
 									</transformers>
 								</configuration>
 							</execution>
+							<execution>
+								<id>make-assembly</id> <!-- this is used for inheritance merges -->
+								<phase>package</phase> <!-- bind to the packaging phase -->
+								<goals>
+									<goal>single</goal>
+								</goals>
+							</execution>
 						</executions>
 					</plugin>
 				</plugins>
@@ -443,7 +478,7 @@
 		<jgrapht-core-version>0.9.1</jgrapht-core-version>
 		<javax-annotation-api-version>1.3.2</javax-annotation-api-version>
 		<grpc-stub-version>1.24.0</grpc-stub-version>
-		<grpc-protobuf-version>1.52.1</grpc-protobuf-version>
+		<grpc-protobuf-version>1.46.0</grpc-protobuf-version>
 		<jackson-datatype-joda-version>2.1.5</jackson-datatype-joda-version>
 	</properties>
 </project>
diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/grpc/grpcApp.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/grpc/grpcApp.java
index 69929ab73892635830333f0fcea3901851a56c97..6045bc705ed3ae39e14702f838cef28c21ac99b0 100644
--- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/grpc/grpcApp.java
+++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/grpc/grpcApp.java
@@ -8,7 +8,7 @@ public class grpcApp {
 	public static void main( String[] args ) throws Exception
     {
       // Create a new server to listen on port 8080
-      Server server = ServerBuilder.forPort(50052)
+      Server server = ServerBuilder.forPort(2021)
         .addService(new updateServiceImpl())
         .build();
  
diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/grpc/grpcClient.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/grpc/grpcClient.java
index f473775d98758482cda4bf3afa2b84b0eaf24aa3..1d360c870b4d93153f21df292f96c1a8ceca46aa 100644
--- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/grpc/grpcClient.java
+++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/grpc/grpcClient.java
@@ -2,6 +2,10 @@ package eu.teraflow.tid.bgp4Peer.grpc;
 
 
 
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+
 import com.google.common.net.InetAddresses;
 
 import eu.teraflow.tid.bgp4Peer.models.LinkNLRIMsg;
@@ -11,47 +15,51 @@ import eu.teraflow.tid.bgp4Peer.models.UpdateMsgList;
 import io.grpc.ManagedChannel;
 import io.grpc.ManagedChannelBuilder;
 import io.grpc.stub.StreamObserver;
+import jdk.javadoc.internal.doclets.toolkit.util.links.LinkInfo;
 import src.main.proto.GrpcService.linkInfo;
 import src.main.proto.GrpcService.nodeInfo;
 import src.main.proto.GrpcService.NodeDescriptors;
 import src.main.proto.GrpcService.updateRequest;
 import src.main.proto.GrpcService.updateResponse;
 import src.main.proto.updateServiceGrpc;
+import src.main.proto.updateServiceGrpc.updateServiceBlockingStub;
 import src.main.proto.updateServiceGrpc.updateServiceStub;
 
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+import java.util.logging.Logger;
 
 public class grpcClient {
 
-	
-	public static void sendGrpcUpdateMsg(UpdateMsg update) {
-		
-		final ManagedChannel channel = ManagedChannelBuilder.forTarget("localhost:2021").usePlaintext().build();
-		updateServiceStub stub = updateServiceGrpc.newStub(channel);
+	private static final Logger logger = Logger.getLogger(grpcClient.class.getName());
+
+	public static void sendGrpcUpdateMsg(UpdateMsg update) throws Exception{
 		
 		updateRequest request=null;
 		nodeInfo n=null;
-		linkInfo l=null;
-		if(update.getNode()==null && update.getLink()==null){
+		linkInfo unic=null;
+		List <linkInfo> l = new ArrayList<>();
+		if(update.getNode()==null && update.linkCheck()==false){
 			return;
 		}
 //		Build node for grpc message
-		if(update.getNode()!=null && update.getNode().getNodeName()!=null) {		
+		if(update.getNode()!=null) {		
 
 				n = nodeInfo.newBuilder().setNodeName(update.getNode().getNodeName()).
-						setIgpID(update.getNode().getLocalBgplsID()).
-						setBgplsID(update.getNode().getBgplsID().toString()).
+						setIgpID(update.getNode().getRouterID()).
+						setBgplsID(update.getNode().getLocalBgplsID()).
 						setAsID(InetAddresses.coerceToInteger(update.getNode().getAs_number())).
 						setLearntFrom(update.getNode().getLearntFrom()).
 					buildPartial();
 				
 		}
-		if(update.getLink()!=null) {
+		for(LinkNLRIMsg link : update.getLinkList()) {
 			
 //			String strIPlocal;
 //			String strIPremote;
 			String strIgpR;
 			String strIgpL;
-			LinkNLRIMsg link=update.getLink();
+			// LinkNLRIMsg link=update.getLink();
 		
 //			if(link.getiPv4RouterIDLocalNodeLATLV()==null) 
 //				 strIPlocal="-";
@@ -89,68 +97,100 @@ public class grpcClient {
 					
 //			Build link for grpc message. need non null values in some cases
 			
-			l = linkInfo.newBuilder().setLocalID(strIgpR).
+			unic = linkInfo.newBuilder().setLocalID(strIgpR).
 					setLocalIPv4ID(ipv4L).
 					setRemoteID(strIgpL).
 					setRemoteIPv4ID(ipv4R).
 					setLocal(NodeDescriptors.newBuilder().
 							setAsNumber(link.getLocalDomainID().toString()).
-							setBgplsID(link.getLocalBgplsID())).
+							setBgplsID(link.localIGPID())).
 					setRemote(NodeDescriptors.newBuilder().
 							setAsNumber(link.getRemoteDomainID().toString()).
-							setBgplsID(link.getRemoteBgplsID())).
+							setBgplsID(link.remoteIGPID())).
 					setAvailableBw(link.getAvailableBw()).
 					setResidualBw(link.getResidualBw()).setUtilized(link.getUtilizedBw()).
 					setMinLinkDelay(link.getMinDelay()).setMaxLinkDelay(link.getMaxDelay()).
 					setDelayVariation(link.getLinkDelayVar()).setDelay(link.getLinkDelay()).
 					setTEDefaultMetric(1).setAdjacencySid("0").setLearntFrom(link.getLearntFrom()).buildPartial();
 			
-			
+			l.add(unic);
 		} 
 		
-		if(n==null && l!=null) {
+		if(n==null && l.size()>0) {
 			request=updateRequest.newBuilder().
 					setNextHop(update.getNextHop().toString()).
 					setAddressFamilyID(Integer.toString(update.getAFI())).
 					setAsPathSegment(Integer.toString(update.getAsPathSegment())).
-					addLink(l).build();
-		}else if(l==null && n!=null) {
+					addAllLink(l).build();
+		}else if(n!=null&& l.size()==0) {
 			request=updateRequest.newBuilder().
 					setNextHop(update.getNextHop().toString()).
 					setAddressFamilyID(Integer.toString(update.getAFI())).
 					setAsPathSegment(Integer.toString(update.getAsPathSegment())).
 					addNode(n).build();
 		}else {
-			//might not be possible
 			//Error if node name is null 
 			// TODO: handle seng grpc error?
-//			request=updateRequest.newBuilder().
-//					setNextHop("-"+update.getNextHop().toString()).
-//					setAddressFamilyID(Integer.toString(update.getAFI())).
-//					setAsPathSegment(Integer.toString(update.getAsPathSegment())).
-//					addNode(n).addLink(l).build();
+			request=updateRequest.newBuilder().
+					setNextHop("-"+update.getNextHop().toString()).
+					setAddressFamilyID(Integer.toString(update.getAFI())).
+					setAsPathSegment(Integer.toString(update.getAsPathSegment())).
+					addNode(n).addAllLink(l).build();
 			
 		}
-				
+		final ManagedChannel channel = ManagedChannelBuilder.forAddress("localhost",2021).usePlaintext().build();
+		updateServiceBlockingStub stub = updateServiceGrpc.newBlockingStub(channel);
+
 		//TODO: this to a function
-		stub.update(request, new StreamObserver <updateResponse>() {
-      		
-	        public void onNext(updateResponse response) {
-	          System.out.println("respuesta del server: "+response);
-	        }
-	        public void onError(Throwable t) {
-	        	System.out.println("error: "+t.getMessage());
-	        }
-	        public void onCompleted() {
-	          // Typically you'll shutdown the channel somewhere else.
-	          // But for the purpose of the lab, we are only making a single
-	          // request. We'll shutdown as soon as this request is done.
-	        	System.out.println("channel shutdown");
-	          channel.shutdownNow();
-	        }
-	      });
-		
+		System.out.println("grpcClient request: "+request.toString());
+
+		// channel.awaitTermination(20, TimeUnit.SECONDS);
+		// updateResponse response = stub.update(request);
+		// Espera hasta que el canal esté inactivo
+        updateResponse response = stub.update(request);	
+
+		System.out.println("\nRESPUESTA RECIBIDA");
+		System.out.println(response);
 	}
+	// private void shutdownManagedChannel(ManagedChannel managedChannel) {
+	// 	managedChannel.shutdown();
+	// 	try {
+	// 	managedChannel.awaitTermination(mChannelShutdownTimeoutMs, TimeUnit.MILLISECONDS);
+	// 	} catch (InterruptedException e) {
+	// 	Thread.currentThread().interrupt();
+	// 	// Allow thread to exit.
+	// 	} finally {
+	// 	managedChannel.shutdownNow();
+	// 	}
+	// 	Verify.verify(managedChannel.isShutdown());
+	// }
+	// stub.update(request, new StreamObserver <updateResponse>() {
+      		
+	// 	public void onNext(updateResponse response) {
+	// 	  System.out.println("respuesta del server: "+response);
+	// 	}
+	// 	public void onError(Throwable t) {
+	// 		System.out.println("error: "+t.getMessage());
+	// 		latch.countDown();
+	// 	}
+	// 	public void onCompleted() {
+	// 	  // Typically you'll shutdown the channel somewhere else.
+	// 	  // But for the purpose of the lab, we are only making a single
+	// 	  // request. We'll shutdown as soon as this request is done.
+	// 		  latch.countDown();
+	// 		logger.info("gRPC call completed");
+	// 		System.out.println("OnCompleted");
+	// 	//   channel.shutdownNow();
+	// 		// try{
+	// 		// 	channel.shutdown().awaitTermination(5, TimeUnit.SECONDS);
+	// 		// }catch (InterruptedException e){
+	// 		// 	System.out.println("channel error"+e.toString());
+	// 		// }
+			
+	// 	}
+	//   });
+	//   latch.await(5, TimeUnit.SECONDS);
+	//   channel.shutdown().awaitTermination(5, TimeUnit.SECONDS);
 
 	public static void sendGrpc(UpdateMsgList update) {
 		//construir mensaje
@@ -279,7 +319,7 @@ public class grpcClient {
 	}
 	public static void main( String[] args ) throws Exception
     {
-	      final ManagedChannel channel = ManagedChannelBuilder.forTarget("localhost:50052").usePlaintext().build();
+	      final ManagedChannel channel = ManagedChannelBuilder.forTarget("localhost:2021").usePlaintext().build();
 
 	    	      // Replace the previous synchronous code with asynchronous code.
 	    	      // This time use an async stub:
diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/models/LinkNLRIMsg.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/models/LinkNLRIMsg.java
index f45e09902abe9a0568a820b238bc007f3836fc09..9891187c16ebe824fb604cfeba944d00b920c34e 100644
--- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/models/LinkNLRIMsg.java
+++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/models/LinkNLRIMsg.java
@@ -3,6 +3,8 @@ package eu.teraflow.tid.bgp4Peer.models;
 import java.net.Inet4Address;
 import java.util.ArrayList;
 
+import org.slf4j.Logger;
+
 import es.tid.bgp.bgp4.update.fields.LinkNLRI;
 import es.tid.bgp.bgp4.update.tlv.node_link_prefix_descriptor_subTLVs.NodeDescriptorsSubTLV;
 
@@ -27,13 +29,16 @@ public class LinkNLRIMsg {
 	private int residualBw;
 	private int availableBw;
 	private int utilizedBw;
-
+	
 	private Inet4Address iPv4RouterIDLocalNodeLATLV;
 	private Inet4Address iPv4RouterIDNeighborNodeLATLV;
 
+	private int IGP_type;
+	private String localIGPID = null;
+	private String remoteIGPID = null;
 	private String localBgplsID;
 	private String remoteBgplsID;
-
+	private Logger log;
 	private String learntFrom;
 
 	public LinkNLRIMsg(LinkNLRI linkNLRI, String learntFrom) {
@@ -94,11 +99,43 @@ public class LinkNLRIMsg {
 		if (linkNLRI.getIpv4NeighborAddressTLV() != null) {
 			iPv4RouterIDNeighborNodeLATLV = linkNLRI.getIpv4NeighborAddressTLV().getIpv4Address();
 		}
-		if (linkNLRI.getLocalNodeDescriptors().getIGPRouterID().getISIS_ISO_NODE_ID() != 0) {// alguna condicion?
-			localBgplsID = Integer.toString(linkNLRI.getLocalNodeDescriptors().getIGPRouterID().getISIS_ISO_NODE_ID());
+		if (linkNLRI.getLocalNodeDescriptors().getBGPLSIDSubTLV().getBGPLS_ID() != null) {// alguna condicion?
+			localBgplsID = linkNLRI.getLocalNodeDescriptors().getBGPLSIDSubTLV().getBGPLS_ID().toString();
+		}
+		if (linkNLRI.getRemoteNodeDescriptorsTLV().getBGPLSIDSubTLV().getBGPLS_ID() != null) {// alguna condicion?
+			remoteBgplsID = linkNLRI.getRemoteNodeDescriptorsTLV().getBGPLSIDSubTLV().getBGPLS_ID().toString();
+		}
+		if (linkNLRI.getLocalNodeDescriptors().getIGPRouterID() != null) {
+			IGP_type = linkNLRI.getLocalNodeDescriptors().getIGPRouterID().getIGP_router_id_type();
+			switch (IGP_type) {
+			case 1:
+				localIGPID = Integer.toString(linkNLRI.getLocalNodeDescriptors().getIGPRouterID().getISIS_ISO_NODE_ID());
+				break;
+			case 2:
+				localIGPID = Integer.toString(linkNLRI.getLocalNodeDescriptors().getIGPRouterID().getISIS_ISO_NODE_ID());
+				break;
+			case 3:
+				localIGPID = linkNLRI.getLocalNodeDescriptors().getIGPRouterID().getIpv4AddressOSPF().toString();
+
+				break;
+			default:
+				log.info("añadir este tipo de IGP Identifier por implementar ");
+			}
 		}
-		if (linkNLRI.getRemoteNodeDescriptorsTLV().getIGPRouterID().getISIS_ISO_NODE_ID() != 0) {// alguna condicion?
-			remoteBgplsID = Integer.toString(linkNLRI.getRemoteNodeDescriptorsTLV().getIGPRouterID().getISIS_ISO_NODE_ID());
+		if (linkNLRI.getRemoteNodeDescriptorsTLV().getIGPRouterID() != null) {
+			IGP_type = linkNLRI.getRemoteNodeDescriptorsTLV().getIGPRouterID().getIGP_router_id_type();
+			switch (IGP_type) {
+			case 1:
+				remoteIGPID = Integer.toString(linkNLRI.getRemoteNodeDescriptorsTLV().getIGPRouterID().getISIS_ISO_NODE_ID());
+				break;
+			case 2:
+				remoteIGPID = Integer.toString(linkNLRI.getRemoteNodeDescriptorsTLV().getIGPRouterID().getISIS_ISO_NODE_ID());
+			case 3:
+				remoteIGPID = linkNLRI.getRemoteNodeDescriptorsTLV().getIGPRouterID().getIpv4AddressOSPF().toString();
+				break;
+			default:
+				log.info("añadir este tipo de IGP Identifier por implementar ");
+			}
 		}
 
 	}
@@ -131,8 +168,12 @@ public class LinkNLRIMsg {
 			out = out + "ID: " + this.localBgplsID + " ";// esto es id router??
 		if (this.iPv4RouterIDLocalNodeLATLV != null)
 			out = out + this.iPv4RouterIDLocalNodeLATLV.toString();
+		if(this.localIGPID!=null)
+			out = out + " localIGPID: "+ this.localIGPID;
 		if (this.iPv4RouterIDNeighborNodeLATLV != null)
 			out = out + "---->" + this.iPv4RouterIDNeighborNodeLATLV.toString();
+		if(this.remoteIGPID!=null)
+			out = out + " remoteIGPID: "+ this.remoteIGPID;
 		if (this.remoteBgplsID != null)
 			out = out + "ID: " + this.remoteBgplsID + " ";
 		if (this.localDomainID != null)
@@ -149,6 +190,13 @@ public class LinkNLRIMsg {
 
 	}
 
+	public String localIGPID() {
+		return localIGPID;
+	}
+	public String remoteIGPID() {
+		return remoteIGPID;
+	}
+
 	public String getLearntFrom() {
 		return learntFrom;
 	}
diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/models/NodeNLRIMsg.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/models/NodeNLRIMsg.java
index e901d0b68dcb173ad49b0579ab352abd16b8519b..d31dd4103c7848b1183a13df12569aef17c14978 100644
--- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/models/NodeNLRIMsg.java
+++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/models/NodeNLRIMsg.java
@@ -37,6 +37,7 @@ public class NodeNLRIMsg {
 	private Logger log;
 	private String nodeName;
 	private String ISIS_ID_str;
+	private String router_id;
 
 	private String learntFrom;
 
@@ -46,10 +47,6 @@ public class NodeNLRIMsg {
 
 		this.learntFrom = learntFrom;
 
-		if (nodeName != null) {
-			this.nodeName = nodeName;
-		}
-
 		if (nodeNLRI.getLocalNodeDescriptors().getAutonomousSystemSubTLV() != null) {
 			// inetAddr???
 			as_number = nodeNLRI.getLocalNodeDescriptors().getAutonomousSystemSubTLV().getAS_ID();
@@ -58,34 +55,38 @@ public class NodeNLRIMsg {
 			areaID = nodeNLRI.getLocalNodeDescriptors().getAreaID().getAREA_ID();
 		}
 		if (nodeNLRI.getLocalNodeDescriptors().getBGPLSIDSubTLV() != null) {
-			setBgplsID(nodeNLRI.getLocalNodeDescriptors().getBGPLSIDSubTLV().getBGPLS_ID());
-		}
-		if (nodeNLRI.getLocalNodeDescriptors().getIGPRouterID().getISIS_ISO_NODE_ID() != 0) {
-			ISIS_ID_str = Integer.toString(nodeNLRI.getLocalNodeDescriptors().getIGPRouterID().getISIS_ISO_NODE_ID());
+			localBgplsID=nodeNLRI.getLocalNodeDescriptors().getBGPLSIDSubTLV().getBGPLS_ID().toString();
 		}
 
 		if (nodeNLRI.getLocalNodeDescriptors().getIGPRouterID() != null) {
 			IGP_type = nodeNLRI.getLocalNodeDescriptors().getIGPRouterID().getIGP_router_id_type();
 			switch (IGP_type) {
+			case 1:
+			    ISIS_ID_str = Integer.toString(nodeNLRI.getLocalNodeDescriptors().getIGPRouterID().getISIS_ISO_NODE_ID());
+				router_id=ISIS_ID_str;
+			case 2:
+				ISIS_ID_str = Integer.toString(nodeNLRI.getLocalNodeDescriptors().getIGPRouterID().getISIS_ISO_NODE_ID());
+				router_id=ISIS_ID_str;
 			case 3:
 				IGPID = nodeNLRI.getLocalNodeDescriptors().getIGPRouterID().getIpv4AddressOSPF();
-
+				router_id=IGPID.toString();
 				break;
 			default:
 				log.info("añadir este tipo de IGP Identifier por implementar ");
 			}
 		}
 
-		if (nodeNLRI.getLocalNodeDescriptors().getIGPRouterID().getISIS_ISO_NODE_ID() != 0) {// alguna condicion?
-			localBgplsID = Integer.toString(nodeNLRI.getLocalNodeDescriptors().getIGPRouterID().getISIS_ISO_NODE_ID());
-		}
-
 		if (nodeNLRI.getLocalNodeDescriptors().getBGPLSIDSubTLV() != null) {
 			if (nodeNLRI.getLocalNodeDescriptors().getBGPLSIDSubTLV().getBGPLS_ID() != null) {
 				LocalNodeBGPId = nodeNLRI.getLocalNodeDescriptors().getBGPLSIDSubTLV().getBGPLS_ID();
 			}
 		}
 
+		if (nodeName != null) {
+			this.nodeName = nodeName;
+		}else{
+			this.nodeName= this.IGPID.toString();
+		}
 		log.info("End node processing");
 	}
 
@@ -141,6 +142,10 @@ public class NodeNLRIMsg {
 		return bgplsID;
 	}
 
+	public String getRouterID(){
+		return router_id;
+	}
+
 	public void setBgplsID(Inet4Address bgplsID) {
 		this.bgplsID = bgplsID;
 	}
diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/models/UpdateMsg.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/models/UpdateMsg.java
index b61ce749aed48823cc0ff8285b9679d9bfb9bd01..d3b55fcf7cec786190c2cb9b868a71b9c5f15a30 100644
--- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/models/UpdateMsg.java
+++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/models/UpdateMsg.java
@@ -1,6 +1,8 @@
 package eu.teraflow.tid.bgp4Peer.models;
 
 import java.net.InetAddress;
+import java.util.ArrayList;
+import java.util.List;
 
 public class UpdateMsg {
 	
@@ -12,12 +14,11 @@ public class UpdateMsg {
 	private NodeNLRIMsg node;
 	private LinkNLRIMsg link;
 	private PathAttributeMsg path;
+	private List <LinkNLRIMsg> linkList = new ArrayList<>();
 	
-	
-	
-	
-	
-	
+	public List <LinkNLRIMsg> getLinkList(){
+		return this.linkList;
+	}
 	
 	public int getAFI() {
 		return AFI;
@@ -49,12 +50,18 @@ public class UpdateMsg {
 	public void setNode(NodeNLRIMsg node) {
 		this.node = node;
 	}
-	public LinkNLRIMsg getLink() {
-		return link;
+	// public LinkNLRIMsg getLink() {
+	// 	return link;
+	// }
+	public boolean linkCheck(){
+		return linkList.size()>0;
 	}
 	public void setLink(LinkNLRIMsg link) {
 		this.link = link;
 	}
+	public void addLink(LinkNLRIMsg link) {
+		this.linkList.add(link);
+	}
 	public PathAttributeMsg getPath() {
 		return path;
 	}
diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/updateTEDB/UpdateProccesorThread.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/updateTEDB/UpdateProccesorThread.java
index bc3e160820d89450397daf849943bedb008d5ecc..c2c2bd41372e329c89036520df0181199dc509a6 100644
--- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/updateTEDB/UpdateProccesorThread.java
+++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/updateTEDB/UpdateProccesorThread.java
@@ -9,6 +9,7 @@ import java.util.Hashtable;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.TimeUnit;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -80,6 +81,8 @@ import eu.teraflow.tid.tedb.SimpleTEDB;
 import eu.teraflow.tid.tedb.TEDB;
 import eu.teraflow.tid.tedb.TE_Information;
 import eu.teraflow.tid.tedb.WSONInformation;
+import io.grpc.ManagedChannel;
+import io.grpc.ManagedChannelBuilder;
 /**
  * This class process the update messages updating the TEDB.
  * 
@@ -173,7 +176,6 @@ public class UpdateProccesorThread extends Thread {
 		BGP4Update updateMsg;
 		UpdateMsgList updateMsgList = new UpdateMsgList();//write nodes and links info to a file
 		bgpMarshal m = new bgpMarshal();//add to json file
-		
 		try {
 			m.bgpMarshaller();
 		} catch (IOException e1) {
@@ -181,7 +183,7 @@ public class UpdateProccesorThread extends Thread {
 			e1.printStackTrace();
 		}
 		int j=0; //debug coverage
-		while (running && j<6) {
+		while (running && j<100) {
 			try {
 				clearAttributes();
 				UpdateMsg update = new UpdateMsg();//class to send grpc message
@@ -245,9 +247,13 @@ public class UpdateProccesorThread extends Thread {
 				if(att_path!=null) {
 					//More than 1 as_path segment??
 					List<AS_Path_Segment> as_path_segments= ((AS_Path_Attribute)att_path).getAsPathSegments();
-					AS_Path_Segment as_path_segment=as_path_segments.get(0);
-					int numberOfSeg=as_path_segment.getNumberOfSegments();
-					int as_path=as_path_segment.getSegments()[0];
+					AS_Path_Segment as_path_segment;
+					int as_path=0;
+					if(as_path_segments.size()>0){
+						as_path_segment=as_path_segments.get(0);
+						int numberOfSeg=as_path_segment.getNumberOfSegments();
+						as_path=as_path_segment.getSegments()[0];
+					}
 					update.setAsPathSegment(as_path);
 				}
 
@@ -277,21 +283,40 @@ public class UpdateProccesorThread extends Thread {
 							if (afi == AFICodes.AFI_BGP_LS){
 								LinkStateNLRI nlri = (LinkStateNLRI) ((BGP_LS_MP_Reach_Attribute)att).getLsNLRI();
 								int nlriType =  nlri.getNLRIType();
-						
+								
 								switch (nlriType){
 								case NLRITypes.Link_NLRI:
-									log.info("Link_NLRI");
-									LinkNLRIMsg LnlriMsg = new LinkNLRIMsg((LinkNLRI)nlri,learntFrom);
-									log.info("Link info: " + LnlriMsg.toString());
-									updateMsgList.addLinkToJson(LnlriMsg);
-									update.setLink(LnlriMsg);//set for grpc msg
+									// if(((BGP_LS_MP_Reach_Attribute)att).getLsNLRIList().size()<1){
+									// 	log.info("Link_NLRI");
+									// 	LinkNLRIMsg LnlriMsg = new LinkNLRIMsg((LinkNLRI)nlri,learntFrom);
+									// 	log.info("Link info: " + LnlriMsg.toString());
+									// 	updateMsgList.addLinkToJson(LnlriMsg);
+									// 	update.setLink(LnlriMsg);//set for grpc msg , to be deprecated
+									// 	update.addLink(LnlriMsg);//set for grpc msg
+									// }else{
+										for(LinkStateNLRI linkstateNLRI : (List<LinkStateNLRI>) ((BGP_LS_MP_Reach_Attribute)att).getLsNLRIList()){
+											log.info("Link_NLRI");
+											LinkNLRIMsg LnlriMsg = new LinkNLRIMsg((LinkNLRI)linkstateNLRI,learntFrom);
+											log.info("Link info: " + LnlriMsg.toString());
+											updateMsgList.addLinkToJson(LnlriMsg);
+											update.addLink(LnlriMsg);//set for grpc msg
+										}
+									// }
 									continue;
 								case NLRITypes.Node_NLRI:
-									NodeNLRIMsg NnlriMsg = new NodeNLRIMsg((NodeNLRI)nlri,learntFrom,currentName);
-									log.info("Node_NLRI");
-									log.info("Node info: " + NnlriMsg.toString());
-									updateMsgList.addNodeToJson(NnlriMsg,currentName);
-									update.setNode(NnlriMsg);//set for grpc msg
+									// NodeNLRIMsg NnlriMsg = new NodeNLRIMsg((NodeNLRI)nlri,learntFrom,currentName);
+									// log.info("Node_NLRI");
+									// log.info("Node info: " + NnlriMsg.toString());
+									// updateMsgList.addNodeToJson(NnlriMsg,currentName);
+									// update.setNode(NnlriMsg);//set for grpc msg
+									// currentName=null;
+									for(LinkStateNLRI linkstateNLRI : (List<LinkStateNLRI>) ((BGP_LS_MP_Reach_Attribute)att).getLsNLRIList()){
+										log.info("Node_NLRI");
+										NodeNLRIMsg NnlriMsg = new NodeNLRIMsg((NodeNLRI)linkstateNLRI,learntFrom,currentName);
+										log.info("Node info: " + NnlriMsg.toString());
+										updateMsgList.addNodeToJson(NnlriMsg,currentName);
+										update.setNode(NnlriMsg);//set for grpc msg
+									}
 									currentName=null;
 									continue;
 								case NLRITypes.Prefix_v4_NLRI://POR HACER...
@@ -322,7 +347,13 @@ public class UpdateProccesorThread extends Thread {
 				log.warn("\n");
 //				System.out.println(update.toString());
 				//cambiar clase?
-				grpcClient.sendGrpcUpdateMsg(update);
+				log.info("--->Sending to grpc manager");
+				try {
+					grpcClient.sendGrpcUpdateMsg(update);
+				} catch (Exception e) {
+					// TODO Auto-generated catch block
+					e.printStackTrace();
+				}
 				//fin guille
 				
 				
@@ -333,6 +364,12 @@ public class UpdateProccesorThread extends Thread {
 			}
 			j++;
 		}//fin while
+		// try {
+		// 	channel.shutdown().awaitTermination(5, TimeUnit.SECONDS);
+		// } catch (InterruptedException e) {
+		// 	// TODO Auto-generated catch block
+		// 	e.printStackTrace();
+		// }
 		System.exit(0);
 	}