| #!/usr/bin/env python |
| # |
| # Copyright 2016 the original author or authors. |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| # |
| |
| """TODO This is a POC placeholder """ |
| import grpc |
| from twisted.internet import reactor |
| |
| from agent import Agent |
| from protos import voltha_pb2 |
| |
| from grpc_client import GrpcClient |
| |
| |
| if __name__ == '__main__': |
| |
| # Create grpc channel to Voltha and grab client stub |
| channel = grpc.insecure_channel('localhost:50055') |
| |
| # Connect to voltha using grpc and fetch the list of logical devices |
| stub = voltha_pb2.VolthaLogicalLayerStub(channel) |
| devices = stub.ListLogicalDevices(voltha_pb2.NullMessage()).items |
| print 'device id and datapaht_id list:' |
| for device in devices: |
| print '\t{} -> {}'.format(device.id, device.datapath_id) |
| |
| # make a device.datapath_id -> device.id map (this will need to be actively |
| # managed in the real agent based on devices coming and going |
| device_id_map = dict((device.datapath_id, device.id) for device in devices) |
| |
| # Create shared gRPC API object |
| grpc_client = GrpcClient(channel, device_id_map) |
| |
| # Instantiate an OpenFlow agent for each logical device |
| agents = [ |
| Agent('localhost:6633', device.datapath_id, grpc_client).run() |
| for device in devices |
| ] |
| |
| def shutdown(): |
| [a.stop() for a in agents] |
| |
| reactor.addSystemEventTrigger('before', 'shutdown', shutdown) |
| reactor.run() |