示例#1
0
 def update_graph(self, new_graph):
     self.leader_watchdog.check_leader(self.get_leader())
     added_edges = new_graph.difference(self.graph)
     removed_edges = self.graph.difference(new_graph)
     node_prop_diff = {n: data
                       for n, data in new_graph.nodes_iter(data=True)
                       if n not in self.graph or
                       (data.viewitems() - self.graph.node[n].viewitems())}
     # Propagate differences
     if added_edges or removed_edges or node_prop_diff:
         log.debug('Pushing changes')
         for u, v in added_edges:
             self.for_all_listeners('add_edge', u, v,
                                    new_graph.export_edge_data(u, v))
         for u, v in removed_edges:
             self.for_all_listeners('remove_edge', u, v)
         if node_prop_diff:
             self.for_all_listeners('update_node_properties',
                                    **node_prop_diff)
         if CFG.getboolean(DEFAULTSECT, 'draw_graph'):
             new_graph.draw(CFG.get(DEFAULTSECT, 'graph_loc'))
         self.graph = new_graph
         log.info('LSA update yielded +%d -%d edges changes, '
                   '%d node property changes', len(added_edges),
                   len(removed_edges), len(node_prop_diff))
         self.for_all_listeners('commit')
示例#2
0
 def apply(self, graph, lsdb):
     if ip_address(self.routerid) in lsdb.exclude_net and \
        CFG.getboolean(DEFAULTSECT, 'exclude_fake_lsa'):
         log.debug('Skipping AS-external Fake LSA %s via %s',
                   self.address, [self.resolve_fwd_addr(r.fwd_addr)
                                  for r in self.routes])
         return
     for route in self.routes:
         graph.add_edge(self.resolve_fwd_addr(route.fwd_addr), self.prefix,
                        metric=route.metric)
示例#3
0
 def update_graph(self, new_graph):
     added_edges = graph_diff(new_graph, self.graph)
     removed_edges = graph_diff(self.graph, new_graph)
     # Propagate differences
     if len(added_edges) > 0 or len(removed_edges) > 0:
         log.debug('Pushing changes')
         for u, v in added_edges:
             self.listener_add_edge(u, v, new_graph[u][v]['metric'])
         for u, v in removed_edges:
             self.listener_remove_edge(u, v)
         if CFG.getboolean(DEFAULTSECT, 'draw_graph'):
             draw_graph(new_graph)
         self.graph = new_graph
         log.info('LSA update yielded +%d -%d edges changes' %
                  (len(added_edges), len(removed_edges)))