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))
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))
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)
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(), )
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)
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))
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))