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); }