예제 #1
0
 def _prop_to_core(self):
     if not self._segs_to_prop:
         return
     logging.info("Propagating %d segment(s) to other core ASes",
                  len(self._segs_to_prop))
     for pcbs in self._gen_prop_recs(self._segs_to_prop):
         self._propagate_to_core_ases(PathRecordsReply.from_values(pcbs))
예제 #2
0
 def _send_path_segments(self,
                         req,
                         meta,
                         logger,
                         up=None,
                         core=None,
                         down=None):
     """
     Sends path-segments to requester (depending on Path Server's location).
     """
     up = up or set()
     core = core or set()
     down = down or set()
     all_segs = up | core | down
     if not all_segs:
         logger.warning("No segments to send for request: %s from: %s" %
                        (req.short_desc(), meta))
         return
     revs_to_add = self._peer_revs_for_segs(all_segs)
     pld = PathRecordsReply.from_values(
         {
             PST.UP: up,
             PST.CORE: core,
             PST.DOWN: down
         }, revs_to_add)
     self.send_meta(pld, meta)
     logger.info("Sending PATH_REPLY with %d segment(s).", len(all_segs))
예제 #3
0
 def _send_path_segments(self, pkt, up=None, core=None, down=None):
     """
     Sends path-segments to requester (depending on Path Server's location).
     """
     up = up or set()
     core = core or set()
     down = down or set()
     if not (up | core | down):
         logging.warning("No segments to send")
         return
     req = pkt.get_payload()
     rep_pkt = pkt.reversed_copy()
     rep_pkt.set_payload(
         PathRecordsReply.from_values(
             {
                 PST.UP: up,
                 PST.CORE: core,
                 PST.DOWN: down
             }, ))
     rep_pkt.addrs.src.host = self.addr.host
     next_hop, port = self.get_first_hop(rep_pkt)
     if next_hop is None:
         logging.error("Next hop is None for Interface %s",
                       rep_pkt.path.get_fwd_if())
         return
     logging.info(
         "Sending PATH_REPLY with %d segment(s) to:%s "
         "port:%s in response to: %s",
         len(up | core | down),
         rep_pkt.addrs.dst,
         rep_pkt.l4_hdr.dst_port,
         req.short_desc(),
     )
     self.send(rep_pkt, next_hop, port)
예제 #4
0
 def _send_path_segments(self, req, meta, up=None, core=None, down=None):
     """
     Sends path-segments to requester (depending on Path Server's location).
     """
     up = up or set()
     core = core or set()
     down = down or set()
     if not (up | core | down):
         logging.warning("No segments to send")
         return
     pld = PathRecordsReply.from_values(
         {
             PST.UP: up,
             PST.CORE: core,
             PST.DOWN: down
         }, )
     self.send_meta(pld, meta)
     logging.info(
         "Sending PATH_REPLY with %d segment(s) to:%s "
         "port:%s in response to: %s",
         len(up | core | down),
         meta.get_addr(),
         meta.port,
         req.short_desc(),
     )
예제 #5
0
파일: core.py 프로젝트: ercanucan/scion
 def _prop_to_core(self):
     assert self.zk.have_lock()
     if not self._segs_to_prop:
         return
     logging.debug("Propagating %d segment(s) to other core ASes",
                   len(self._segs_to_prop))
     for pcbs in self._gen_prop_recs(self._segs_to_prop):
         reply = PathRecordsReply.from_values(pcbs)
         self._propagate_to_core_ases(reply)
예제 #6
0
 def _prop_to_master(self):
     if self._is_master():
         self._segs_to_master.clear()
         return
     if not self._segs_to_master:
         return
     logging.info("Propagating %d segment(s) to master PS",
                  len(self._segs_to_master))
     for pcbs in self._gen_prop_recs(self._segs_to_master):
         self._send_to_master(PathRecordsReply.from_values(pcbs))
예제 #7
0
 def _prop_to_master(self):
     assert not self.zk.have_lock()
     if not self._master_id:
         self._segs_to_master.clear()
         return
     if not self._segs_to_master:
         return
     logging.info("Propagating %d segment(s) to master PS: %s",
                  len(self._segs_to_master), self._master_id)
     for pcbs in self._gen_prop_recs(self._segs_to_master):
         self._send_to_master(PathRecordsReply.from_values(pcbs))