def add_link_data( link_proto: core_pb2.Link ) -> Tuple[InterfaceData, InterfaceData, LinkOptions, LinkTypes]: """ Convert link proto to link interfaces and options data. :param link_proto: link proto :return: link interfaces and options """ iface1_data = link_iface(link_proto.iface1) iface2_data = link_iface(link_proto.iface2) link_type = LinkTypes(link_proto.type) options = LinkOptions() options_proto = link_proto.options if options_proto: options.delay = options_proto.delay options.bandwidth = options_proto.bandwidth options.loss = options_proto.loss options.dup = options_proto.dup options.jitter = options_proto.jitter options.mer = options_proto.mer options.burst = options_proto.burst options.mburst = options_proto.mburst options.unidirectional = options_proto.unidirectional options.key = options_proto.key return iface1_data, iface2_data, options, link_type
def read_links(self) -> None: link_elements = self.scenario.find("links") if link_elements is None: return node_sets = set() for link_element in link_elements.iterchildren(): node1_id = get_int(link_element, "node1") if node1_id is None: node1_id = get_int(link_element, "node_one") node2_id = get_int(link_element, "node2") if node2_id is None: node2_id = get_int(link_element, "node_two") node_set = frozenset((node1_id, node2_id)) iface1_element = link_element.find("iface1") if iface1_element is None: iface1_element = link_element.find("interface_one") iface1_data = None if iface1_element is not None: iface1_data = create_iface_data(iface1_element) iface2_element = link_element.find("iface2") if iface2_element is None: iface2_element = link_element.find("interface_two") iface2_data = None if iface2_element is not None: iface2_data = create_iface_data(iface2_element) options_element = link_element.find("options") options = LinkOptions() if options_element is not None: options.bandwidth = get_int(options_element, "bandwidth") options.burst = get_int(options_element, "burst") options.delay = get_int(options_element, "delay") options.dup = get_int(options_element, "dup") options.mer = get_int(options_element, "mer") options.mburst = get_int(options_element, "mburst") options.jitter = get_int(options_element, "jitter") options.key = get_int(options_element, "key") options.loss = get_float(options_element, "loss") if options.loss is None: options.loss = get_float(options_element, "per") options.unidirectional = get_int(options_element, "unidirectional") options.buffer = get_int(options_element, "buffer") if options.unidirectional == 1 and node_set in node_sets: logging.info("updating link node1(%s) node2(%s)", node1_id, node2_id) self.session.update_link(node1_id, node2_id, iface1_data.id, iface2_data.id, options) else: logging.info("adding link node1(%s) node2(%s)", node1_id, node2_id) self.session.add_link(node1_id, node2_id, iface1_data, iface2_data, options) node_sets.add(node_set)