def createbridgedsession(self, numnodes, verbose=False): """ Build a topology consisting of the given number of LxcNodes connected to a WLAN. """ # IP subnet prefix = ipaddress.Ipv4Prefix("10.0.0.0/16") self.session = Session(1) # emulated network self.net = self.session.create_node(cls=core.nodes.network.WlanNode, name="wlan1") prev = None for i in range(1, numnodes + 1): addr = "%s/%s" % (prefix.addr(i), 32) tmp = self.session.create_node(cls=core.nodes.base.CoreNode, _id=i, name="n%d" % i) tmp.newnetif(self.net, [addr]) self.nodes.append(tmp) self.session.services.add_services(tmp, "router", "IPForward") self.session.services.boot_services(tmp) self.staticroutes(i, prefix, numnodes) # link each node in a chain, with the previous node if prev: self.net.link(prev.netif(0), tmp.netif(0)) prev = tmp
def test_node_set_mac_exception(self, session: Session, mac: str): # given node = session.add_node(CoreNode) switch = session.add_node(SwitchNode) iface_data = InterfaceData() iface = node.new_iface(switch, iface_data) # when with pytest.raises(CoreError): node.set_mac(iface.node_id, mac)
def get_mobility_node(session: Session, node_id: int, context: ServicerContext) -> Union[WlanNode, EmaneNet]: try: return session.get_node(node_id, WlanNode) except CoreError: try: return session.get_node(node_id, EmaneNet) except CoreError: context.abort(grpc.StatusCode.NOT_FOUND, "node id is not for wlan or emane")
def test_node_delete(self, session: Session): # given node = session.add_node(CoreNode) # when session.delete_node(node.id) # then with pytest.raises(CoreError): session.get_node(node.id, CoreNode)
def test_node_set_pos(self, session: Session): # given node = session.add_node(CoreNode) x, y = 100.0, 50.0 # when session.set_node_pos(node, x, y) # then assert node.position.x == x assert node.position.y == y
def test_node_sethwaddr_exception(self, session: Session): # given node = session.add_node(CoreNode) switch = session.add_node(SwitchNode) interface_data = InterfaceData() index = node.newnetif(switch, interface_data) node.netif(index) mac = "aa:aa:aa:ff:ff:fff" # when with pytest.raises(CoreError): node.sethwaddr(index, mac)
def test_node_set_mac(self, session: Session, mac: str, expected: str): # given node = session.add_node(CoreNode) switch = session.add_node(SwitchNode) iface_data = InterfaceData() iface = node.new_iface(switch, iface_data) # when node.set_mac(iface.node_id, mac) # then assert str(iface.mac) == expected
def test_net_to_node(self, session: Session, ip_prefixes: IpPrefixes): # given node_one = session.add_node(SwitchNode) node_two = session.add_node(CoreNode) interface_two = ip_prefixes.create_interface(node_two) # when session.add_link(node_one.id, node_two.id, interface_two=interface_two) # then assert node_one.all_link_data() assert node_two.netif(interface_two.id)
def test_add_net_to_node(self, session: Session, ip_prefixes: IpPrefixes): # given node1 = session.add_node(SwitchNode) node2 = session.add_node(CoreNode) iface2_data = ip_prefixes.create_iface(node2) # when session.add_link(node1.id, node2.id, iface2_data=iface2_data) # then assert node1.links() assert node2.get_iface(iface2_data.id)
def test_node_set_geo(self, session: Session): # given node = session.add_node(CoreNode) lon, lat, alt = 0.0, 0.0, 0.0 # when session.set_node_geo(node, lon, lat, alt) # then assert node.position.lon == lon assert node.position.lat == lat assert node.position.alt == alt
def test_update_ptp(self, session: Session, ip_prefixes: IpPrefixes): # given delay = 50 bandwidth = 5000000 loss = 25 dup = 25 jitter = 10 buffer = 100 node1 = session.add_node(CoreNode) node2 = session.add_node(CoreNode) iface1_data = ip_prefixes.create_iface(node1) iface2_data = ip_prefixes.create_iface(node2) session.add_link(node1.id, node2.id, iface1_data, iface2_data) iface1 = node1.get_iface(iface1_data.id) iface2 = node2.get_iface(iface2_data.id) assert iface1.getparam("delay") != delay assert iface1.getparam("bw") != bandwidth assert iface1.getparam("loss") != loss assert iface1.getparam("duplicate") != dup assert iface1.getparam("jitter") != jitter assert iface1.getparam("buffer") != buffer assert iface2.getparam("delay") != delay assert iface2.getparam("bw") != bandwidth assert iface2.getparam("loss") != loss assert iface2.getparam("duplicate") != dup assert iface2.getparam("jitter") != jitter assert iface2.getparam("buffer") != buffer # when options = LinkOptions( delay=delay, bandwidth=bandwidth, loss=loss, dup=dup, jitter=jitter, buffer=buffer, ) session.update_link(node1.id, node2.id, iface1_data.id, iface2_data.id, options) # then assert iface1.getparam("delay") == delay assert iface1.getparam("bw") == bandwidth assert iface1.getparam("loss") == loss assert iface1.getparam("duplicate") == dup assert iface1.getparam("jitter") == jitter assert iface1.getparam("buffer") == buffer assert iface2.getparam("delay") == delay assert iface2.getparam("bw") == bandwidth assert iface2.getparam("loss") == loss assert iface2.getparam("duplicate") == dup assert iface2.getparam("jitter") == jitter assert iface2.getparam("buffer") == buffer
def test_node_update(self, session: Session): # given node = session.add_node(CoreNode) position_value = 100 update_options = NodeOptions() update_options.set_position(x=position_value, y=position_value) # when session.edit_node(node.id, update_options) # then assert node.position.x == position_value assert node.position.y == position_value
def test_delete_node_to_net_error(self, session: Session, ip_prefixes: IpPrefixes): # given node1 = session.add_node(CoreNode) node2 = session.add_node(SwitchNode) node3 = session.add_node(SwitchNode) iface1_data = ip_prefixes.create_iface(node1) iface1, _ = session.add_link(node1.id, node2.id, iface1_data) assert iface1 # when with pytest.raises(CoreError): session.delete_link(node1.id, node3.id)
def test_delete_net_to_net(self, session: Session, ip_prefixes: IpPrefixes): # given node1 = session.add_node(SwitchNode) node2 = session.add_node(SwitchNode) session.add_link(node1.id, node2.id) assert node1.get_linked_iface(node2) # when session.delete_link(node1.id, node2.id) # then assert not node1.get_linked_iface(node2)
def test_ptp(self, session: Session, ip_prefixes: IpPrefixes): # given node_one = session.add_node(CoreNode) node_two = session.add_node(CoreNode) interface_one = ip_prefixes.create_interface(node_one) interface_two = ip_prefixes.create_interface(node_two) # when session.add_link(node_one.id, node_two.id, interface_one, interface_two) # then assert node_one.netif(interface_one.id) assert node_two.netif(interface_two.id)
def test_node_sethwaddr(self, session: Session): # given node = session.add_node(CoreNode) switch = session.add_node(SwitchNode) interface_data = InterfaceData() index = node.newnetif(switch, interface_data) interface = node.netif(index) mac = "aa:aa:aa:ff:ff:ff" # when node.sethwaddr(index, mac) # then assert interface.hwaddr == mac
def test_node_addaddr(self, session: Session): # given node = session.add_node(CoreNode) switch = session.add_node(SwitchNode) interface_data = InterfaceData() index = node.newnetif(switch, interface_data) interface = node.netif(index) addr = "192.168.0.1/24" # when node.addaddr(index, addr) # then assert interface.addrlist[0] == addr
def create_ptp_network(session: Session, ip_prefixes: IpPrefixes) -> Tuple[CoreNode, CoreNode]: # create nodes node1 = session.add_node(CoreNode) node2 = session.add_node(CoreNode) # link nodes to net node iface1_data = ip_prefixes.create_iface(node1) iface2_data = ip_prefixes.create_iface(node2) session.add_link(node1.id, node2.id, iface1_data, iface2_data) # instantiate session session.instantiate() return node1, node2
def test_remote_node(self, session: Session): # given server_name = "core2" host = "127.0.0.1" # when session.distributed.add_server(server_name, host) options = NodeOptions(server=server_name) node = session.add_node(CoreNode, options=options) session.instantiate() # then assert node.server is not None assert node.server.name == server_name assert node.server.host == host
def test_model_set_error(self, session: Session): # given wlan_node = session.add_node(WlanNode) # when / then with pytest.raises(ValueError): session.mobility.set_model(wlan_node, EmaneIeee80211abgModel)
def create_ptp_network( session: Session, ip_prefixes: IpPrefixes ) -> Tuple[CoreNode, CoreNode]: # create nodes node_one = session.add_node(CoreNode) node_two = session.add_node(CoreNode) # link nodes to net node interface_one = ip_prefixes.create_interface(node_one) interface_two = ip_prefixes.create_interface(node_two) session.add_link(node_one.id, node_two.id, interface_one, interface_two) # instantiate session session.instantiate() return node_one, node_two
def test_update_net_to_net(self, session: Session, ip_prefixes: IpPrefixes): # given node1 = session.add_node(SwitchNode) node2 = session.add_node(SwitchNode) iface1, _ = session.add_link(node1.id, node2.id) assert iface1.local_options != LINK_OPTIONS # when session.update_link(node1.id, node2.id, options=LINK_OPTIONS) # then assert iface1.local_options == LINK_OPTIONS assert iface1.has_local_netem assert iface1.options == LINK_OPTIONS assert iface1.has_netem
def test_node_add_ip(self, session: Session, ip: str, expected: str, is_ip6: bool): # given node = session.add_node(CoreNode) switch = session.add_node(SwitchNode) iface_data = InterfaceData() iface = node.new_iface(switch, iface_data) # when node.add_ip(iface.node_id, ip) # then if is_ip6: assert str(iface.get_ip6()) == expected else: assert str(iface.get_ip4()) == expected
def test_delete_ptp(self, session: Session, ip_prefixes: IpPrefixes): # given node1 = session.add_node(CoreNode) node2 = session.add_node(CoreNode) iface1_data = ip_prefixes.create_iface(node1) iface2_data = ip_prefixes.create_iface(node2) session.add_link(node1.id, node2.id, iface1_data, iface2_data) assert node1.get_iface(iface1_data.id) assert node2.get_iface(iface2_data.id) # when session.delete_link(node1.id, node2.id, iface1_data.id, iface2_data.id) # then assert iface1_data.id not in node1.ifaces assert iface2_data.id not in node2.ifaces
def test_add_net_to_node(self, session: Session, ip_prefixes: IpPrefixes): # given node1 = session.add_node(SwitchNode) node2 = session.add_node(CoreNode) iface2_data = ip_prefixes.create_iface(node2) # when _, iface = session.add_link(node1.id, node2.id, iface2_data=iface2_data, options=LINK_OPTIONS) # then assert node1.links() assert node2.get_iface(iface2_data.id) assert iface is not None assert iface.local_options == LINK_OPTIONS assert iface.has_local_netem
def test_update_node_to_net(self, session: Session, ip_prefixes: IpPrefixes): # given node1 = session.add_node(CoreNode) node2 = session.add_node(SwitchNode) iface1_data = ip_prefixes.create_iface(node1) iface1, _ = session.add_link(node1.id, node2.id, iface1_data) assert iface1.local_options != LINK_OPTIONS # when session.update_link(node1.id, node2.id, iface1_id=iface1_data.id, options=LINK_OPTIONS) # then assert iface1.local_options == LINK_OPTIONS assert iface1.has_local_netem
def createemanesession(self, numnodes, verbose=False, cls=None, values=None): """ Build a topology consisting of the given number of LxcNodes connected to an EMANE WLAN. """ prefix = ipaddress.Ipv4Prefix("10.0.0.0/16") self.session = Session(2) self.session.node_count = str(numnodes + 1) self.session.master = True self.session.location.setrefgeo(47.57917, -122.13232, 2.00000) self.session.location.refscale = 150.0 self.session.emane.loadmodels() self.net = self.session.create_node(cls=EmaneNode, _id=numnodes + 1, name="wlan1") self.net.verbose = verbose # self.session.emane.addobj(self.net) for i in range(1, numnodes + 1): addr = "%s/%s" % (prefix.addr(i), 32) tmp = self.session.create_node(cls=core.nodes.base.CoreNode, _id=i, name="n%d" % i) # tmp.setposition(i * 20, 50, None) tmp.setposition(50, 50, None) tmp.newnetif(self.net, [addr]) self.nodes.append(tmp) self.session.services.add_services(tmp, "router", "IPForward") if values is None: values = cls.getdefaultvalues() self.session.emane.setconfig(self.net.id, cls.name, values) self.session.instantiate() self.info("waiting %s sec (TAP bring-up)" % 2) time.sleep(2) for i in range(1, numnodes + 1): tmp = self.nodes[i - 1] self.session.services.boot_services(tmp) self.staticroutes(i, prefix, numnodes)
def test_model_set(self, session: Session): # given wlan_node = session.add_node(WlanNode) # when session.mobility.set_model(wlan_node, BasicRangeModel) # then assert session.mobility.get_model_config(wlan_node.id, BasicRangeModel.name)
def test_node_add(self, session: Session, model: str): # given options = NodeOptions(model=model) # when node = session.add_node(CoreNode, options=options) # then assert node assert node.alive() assert node.up
def test_get_models(self, session: Session): # given wlan_node = session.add_node(WlanNode) session.mobility.set_model(wlan_node, BasicRangeModel) # when models = session.mobility.get_models(wlan_node) # then assert models assert len(models) == 1