diff --git a/grpc/topologyService.proto b/grpc/topologyService.proto new file mode 100644 index 0000000..cf9601a --- /dev/null +++ b/grpc/topologyService.proto @@ -0,0 +1,38 @@ +//Example of topology +syntax = "proto3"; +package topology; + +import "google/protobuf/empty.proto"; + +service TopologyService { + rpc GetTopology (google.protobuf.Empty) returns (Topology) {} +} + + +message Link { + string link_id = 1; + string source_node = 2; + string target_node = 3; + string source_port = 4; + string target_port = 5; +} + +message Node { + string node_id = 1; + repeated Port port = 2; +} + +message Port { + string port_id = 1; + enum LayerProtocolName { + ETH = 0; + OPTICAL = 1; + } + LayerProtocolName layerProtocolName = 2; +} + +message Topology { + repeated Node node = 1; + repeated Link link = 2; +} + diff --git a/grpc/topologyService/topologyService_client.py b/grpc/topologyService/topologyService_client.py new file mode 100644 index 0000000..24ce803 --- /dev/null +++ b/grpc/topologyService/topologyService_client.py @@ -0,0 +1,21 @@ +from __future__ import print_function + +import grpc + +import topologyService_pb2 +import topologyService_pb2_grpc +from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2 +try: + raw_input # Python 2 +except NameError: + raw_input = input # Python 3 + + +def getTopology(): + with grpc.insecure_channel('localhost:50051') as channel: + stub = topologyService_pb2_grpc.TopologyServiceStub(channel) + response = stub.GetTopology(google_dot_protobuf_dot_empty__pb2.Empty()) + print("TopologyService client received: " + str(response) ) + +if __name__ == '__main__': + getTopology() diff --git a/grpc/topologyService/topologyService_server.py b/grpc/topologyService/topologyService_server.py new file mode 100644 index 0000000..bb72e22 --- /dev/null +++ b/grpc/topologyService/topologyService_server.py @@ -0,0 +1,48 @@ +from concurrent import futures +import time +import logging +import grpc + +import topologyService_pb2 +import topologyService_pb2_grpc +from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2 + +_ONE_DAY_IN_SECONDS = 60 * 60 * 24 + +class topologyService(topologyService_pb2_grpc.TopologyServiceServicer): + def __init__(self): + self.topology = topologyService_pb2.Topology() + node1=self.topology.node.add() + node1.node_id = "node1" + portA = node1.port.add() + portA.port_id = "node1portA" + node2=self.topology.node.add() + node2.node_id = "node2" + portB=node2.port.add() + portB.port_id = "node2portA" + link=self.topology.link.add() + link.link_id = "link1" + link.source_node = "node1" + link.target_node = "node2" + link.source_port = "node1portA" + link.target_port = "node2portA" + + def GetTopology(self, request, context): + logging.debug("Get Topology") + return self.topology + +def serve(): + server = grpc.server(futures.ThreadPoolExecutor(max_workers=10)) + topologyService_pb2_grpc.add_TopologyServiceServicer_to_server(topologyService(), server) + server.add_insecure_port('[::]:50051') + logging.debug("Starting server") + server.start() + try: + while True: + time.sleep(_ONE_DAY_IN_SECONDS) + except KeyboardInterrupt: + server.stop(0) + +if __name__ == '__main__': + logging.basicConfig(level=logging.DEBUG) + serve()