Ejemplo n.º 1
0
 def _resolve_core_core(self, dst_ia, sibra=False):
     """Resolve path from core to core."""
     res = set()
     for cseg in self.core_segments(last_ia=self.addr.isd_as, sibra=sibra,
                                    **dst_ia.params()):
         res.add((None, cseg, None))
     if sibra:
         return res
     return tuples_to_full_paths(res)
Ejemplo n.º 2
0
 def _resolve_not_core_not_core_scion(self, dst_ia):
     """Resolve SCION path from non-core to non-core."""
     up_segs = self.up_segments()
     down_segs = self.down_segments(last_ia=dst_ia)
     core_segs = self._calc_core_segs(dst_ia[0], up_segs, down_segs)
     full_paths = build_shortcut_paths(up_segs, down_segs, self.peer_revs)
     tuples = []
     for up_seg in up_segs:
         for down_seg in down_segs:
             tuples.append((up_seg, None, down_seg))
             for core_seg in core_segs:
                 tuples.append((up_seg, core_seg, down_seg))
     full_paths.extend(tuples_to_full_paths(tuples))
     return full_paths
Ejemplo n.º 3
0
 def _resolve_not_core_core(self, dst_ia, sibra=False):
     """Resolve path from non-core to core."""
     res = set()
     params = dst_ia.params()
     params["sibra"] = sibra
     if dst_ia[0] == self.addr.isd_as[0]:
         # Dst in local ISD. First check whether DST is a (super)-parent.
         for useg in self.up_segments(**params):
             res.add((useg, None, None))
     # Check whether dst is known core AS.
     for cseg in self.core_segments(**params):
         # Check do we have an up-seg that is connected to core_seg.
         for useg in self.up_segments(first_ia=cseg.last_ia(), sibra=sibra):
             res.add((useg, cseg, None))
     if sibra:
         return res
     return tuples_to_full_paths(res)
Ejemplo n.º 4
0
 def _resolve_core_not_core(self, dst_ia, sibra=False):
     """Resolve path from core to non-core."""
     res = set()
     # First check whether there is a direct path.
     for dseg in self.down_segments(
             first_ia=self.addr.isd_as, last_ia=dst_ia, sibra=sibra):
         res.add((None, None, dseg))
     # Check core-down combination.
     for dseg in self.down_segments(last_ia=dst_ia, sibra=sibra):
         dseg_ia = dseg.first_ia()
         if self.addr.isd_as == dseg_ia:
             pass
         for cseg in self.core_segments(
                 first_ia=dseg_ia, last_ia=self.addr.isd_as, sibra=sibra):
             res.add((None, cseg, dseg))
     if sibra:
         return res
     return tuples_to_full_paths(res)