def initdb(self, nl=None): ''' Restart IPRoute channel, and create all the DB from scratch. Can be used when sync is lost. ''' self.nl = nl or IPRoute() # resolvers self.interfaces = Dotkeys() self.routes = RoutingTableSet(ipdb=self, ignore_rtables=self._ignore_rtables) self.by_name = View(src=self.interfaces, constraint=lambda k, v: isinstance(k, basestring)) self.by_index = View(src=self.interfaces, constraint=lambda k, v: isinstance(k, int)) # caches self.ipaddr = {} self.neighbours = {} try: self.nl.bind(async=self._nl_async) # load information links = self.nl.get_links() for link in links: self.device_put(link, skip_slaves=True) for link in links: self.update_slaves(link) # bridge info links = self.nl.get_vlans() for link in links: self.update_dev(link) # self.update_addr(self.nl.get_addr()) self.update_neighbours(self.nl.get_neighbours()) routes4 = self.nl.get_routes(family=AF_INET) routes6 = self.nl.get_routes(family=AF_INET6) self.update_routes(routes4) self.update_routes(routes6) except Exception as e: try: self.nl.close() except: pass raise e