def ctrl_conn_init(self): il.do_set_logging(self.sock, CONFIG["tincan_logging"]) # Callback endpoint to receive notifications il.do_set_cb_endpoint(self.sock, self.sock.getsockname()) il.do_set_local_ip(self.sock, self.uid, self.ip4, il.gen_ip6(self.uid), CONFIG["ip4_mask"], CONFIG["ip6_mask"], CONFIG["subnet_mask"], CONFIG["switchmode"], CONFIG["mtu"], CONFIG["internal_mtu"]) # Register to the XMPP server il.do_register_service(self.sock, self.user, self.password, self.host) il.do_set_switchmode(self.sock, CONFIG["switchmode"]) il.do_set_trimpolicy(self.sock, CONFIG["trim_enabled"]) il.do_get_state(self.sock) # Information about the local node
def initialize(self,): # Make Tincan API calls to initialize the controller # Set logging level ipoplib.do_set_logging(self.sock, self.CONFIG["CFx"]["tincan_logging"]) if(self.vpn_type == "GroupVPN"): ipoplib.do_set_translation(self.sock, 0) ipoplib.do_set_switchmode(self.sock, self.CONFIG["TincanSender"] ["switchmode"]) elif(self.vpn_type == "SocialVPN"): ipoplib.do_set_translation(self.sock, 1) # Callback endpoint to receive notifications ipoplib.do_set_cb_endpoint(self.sock, self.sock.getsockname()) # Configure the local node if not self.CONFIG["CFx"]["router_mode"]: ipoplib.do_set_local_ip(self.sock, self.uid, self.ip4, self.ip6, self.CONFIG["CFx"]["ip4_mask"], self.CONFIG["CFx"]["ip6_mask"], self.CONFIG["CFx"]["subnet_mask"], self.CONFIG["TincanSender"]["switchmode"]) else: ipoplib.do_set_local_ip(self.sock, self.uid, self.CONFIG["CFx"]["router_ip"], self.ip6, self.CONFIG["CFx"]["router_ip4_mask"], self.CONFIG["CFx"]["router_ip6_mask"], self.CONFIG["CFx"]["subnet_mask"], self.CONFIG["TincanSender"]["switchmode"]) # Register to the XMPP server ipoplib.do_register_service(self.sock, self.user, self.password, self.host) ipoplib.do_set_trimpolicy(self.sock, self.CONFIG["CFx"]["trim_enabled"]) # Retrieve the state of the local node ipoplib.do_get_state(self.sock) # Ignore the network interfaces in the list if "network_ignore_list" in self.CONFIG["CFx"]: ipoplib.make_call(self.sock, m="set_network_ignore_list", network_ignore_list=CONFIG["CFx"] ["network_ignore_list"]) print "CFx initialized. Loading Controller Modules\n" self.loaded_modules = ['CFx'] # List of modules already loaded # Check for circular dependencies in config.json dependency_graph = {} for key in self.json_data: if(key != 'CFx'): try: dependency_graph[key] = self.json_data[key]['dependencies'] except: pass if(self.detect_cyclic_dependency(dependency_graph)): print "Circular dependency detected in config.json. Exiting" sys.exit() # Iterate through the modules mentioned in config.json # and load them. for key in self.json_data: if (key not in self.loaded_modules): self.load_module(key) # Start all the worker and timer threads for handle in self.CFxHandleDict: self.CFxHandleDict[handle].CMThread.start() if(self.CFxHandleDict[handle].timer_thread): self.CFxHandleDict[handle].timer_thread.start()