def __init__(self, instance_number): """ :param instance_number: the controller instance number :param net: the subnet allocated for the fibbing nodes """ self.leader = False self.instance = instance_number self.name = 'c%s' % instance_number self.nodes = {} self.bridge = Bridge('br0', self.name) self.root = None net = ip_network(CFG.get(DEFAULTSECT, 'base_net')) controller_prefix = CFG.getint(DEFAULTSECT, 'controller_prefixlen') host_prefix = net.max_prefixlen - controller_prefix controller_base = (int(net.network_address) + (instance_number << host_prefix)) controller_net = ip_address(controller_base) self.net = ip_network('%s/%s' % (controller_net, controller_prefix)) self.graph_thread = daemon_thread(target=self.infer_graph, name="Graph inference thread") self.json_proxy = SJMPServer(hostname=CFG.get(DEFAULTSECT, 'json_hostname'), port=CFG.getint(DEFAULTSECT, 'json_port'), invoke=self.proxy_connected, target=FakeNodeProxyImplem(self)) self.json_thread = daemon_thread(target=self.json_proxy.communicate, name="JSON proxy thread") # Used to assign unique router-id to each node self.next_id = 1 self.links = [] # The fibbing routes self.routes = {} self.route_mappings = {}
self.client.execute('sum', a, b=b) def do_exit(self, line): return True def do_info(self, line): # Query the remopte end for the supported methods/docs/args self.client.ask_info() def default(self, line): items = line.split(' ') self.client.execute(items[0], *items[1:]) if __name__ == '__main__': log.setLevel(logging.DEBUG) s = SJMPServer(H, P, target=EchoProxy()) c = SJMPClient(H, P) a = ProxyCloner(EchoProxy, c) log.debug(dir(a)) st = Thread(target=s.communicate, name='server') st.daemon = True st.start() log.debug('Started server') ct = Thread(target=c.communicate, name='client') ct.daemon = True ct.start() log.debug('Started client') a.echo('hello world') a.sum(1, 2) TestCLI(c).cmdloop() c.stop()