def setUp(self): self.encoder_type = self.get_encoder() self.simulation_bus = SimulationBus(packetencoder=self.encoder_type()) self.fetch_tool1 = Fetch("rsu1", None, 255, self.encoder_type(), [self.simulation_bus.add_interface("fetchtool1")]) self.fetch_tool2 = Fetch("rsu2", None, 255, self.encoder_type(), [self.simulation_bus.add_interface("fetchtool2")]) self.rsu1 = NFNForwarder(port=0, encoder=self.encoder_type(), interfaces=[self.simulation_bus.add_interface("rsu1")], log_level=255, ageing_interval=1) self.rsu2 = NFNForwarder(port=0, encoder=self.encoder_type(), interfaces=[self.simulation_bus.add_interface("rsu2")], log_level=255, ageing_interval=1) self.rsu3 = NFNForwarder(port=0, encoder=self.encoder_type(), interfaces=[self.simulation_bus.add_interface("rsu3")], log_level=255, ageing_interval=1) self.rsu1.icnlayer.pit.set_pit_timeout(0) self.rsu1.icnlayer.cs.set_cs_timeout(30) self.rsu2.icnlayer.pit.set_pit_timeout(0) self.rsu2.icnlayer.cs.set_cs_timeout(30) self.rsu3.icnlayer.pit.set_pit_timeout(0) self.rsu3.icnlayer.cs.set_cs_timeout(30) self.rsu1.nfnlayer.optimizer = EdgeComputingOptimizer(self.rsu1.icnlayer.cs, self.rsu1.icnlayer.fib, self.rsu1.icnlayer.pit, self.rsu1.linklayer.faceidtable) self.rsu2.nfnlayer.optimizer = EdgeComputingOptimizer(self.rsu2.icnlayer.cs, self.rsu2.icnlayer.fib, self.rsu2.icnlayer.pit, self.rsu2.linklayer.faceidtable) self.rsu3.nfnlayer.optimizer = EdgeComputingOptimizer(self.rsu3.icnlayer.cs, self.rsu3.icnlayer.fib, self.rsu3.icnlayer.pit, self.rsu3.linklayer.faceidtable) self.mgmt_client1 = MgmtClient(self.rsu1.mgmt.mgmt_sock.getsockname()[1]) self.mgmt_client2 = MgmtClient(self.rsu2.mgmt.mgmt_sock.getsockname()[1]) self.mgmt_client3 = MgmtClient(self.rsu3.mgmt.mgmt_sock.getsockname()[1])
def setUp(self): self.encoder_type = SimpleStringEncoder() self.simulation_bus = SimulationBus(packetencoder=self.encoder_type) chunk_size = 8192 self.chunkifyer = SimpleContentChunkifyer(chunk_size) # Initialize two cars self.cars = [] self.fetch_tool_cars = [] self.mgmt_client_cars = [] for i in range(2): self.cars.append( ICNForwarder( 0, encoder=self.encoder_type, routing=True, interfaces=[self.simulation_bus.add_interface(f"car{i}")])) self.fetch_tool_cars.append( Fetch(f"car{i}", None, 255, self.encoder_type, interfaces=[ self.simulation_bus.add_interface(f"ftcar{i}") ])) self.mgmt_client_cars.append( MgmtClient(self.cars[i].mgmt.mgmt_sock.getsockname()[1])) self.cars[i].icnlayer.cs.set_cs_timeout(40) # Initialize RSUs self.rsus = [] self.fetch_tools = [] self.mgmt_clients = [] for i in range(3): self.rsus.append( NFNForwarderData( 0, encoder=self.encoder_type, interfaces=[self.simulation_bus.add_interface(f"rsu{i}")], chunk_size=chunk_size, num_of_forwards=1, ageing_interval=10)) self.fetch_tools.append( Fetch(f"rsu{i}", None, 255, self.encoder_type, interfaces=[self.simulation_bus.add_interface(f"ft{i}") ])) self.rsus[i].nfnlayer.optimizer = EdgeComputingOptimizer( self.rsus[i].icnlayer.cs, self.rsus[i].icnlayer.fib, self.rsus[i].icnlayer.pit, self.rsus[i].linklayer.faceidtable) self.mgmt_clients.append( MgmtClient(self.rsus[i].mgmt.mgmt_sock.getsockname()[1])) self.fetch_tools[i].timeoutpreventionlayer.timeout_interval = 40 self.rsus[i].icnlayer.cs.set_cs_timeout(60)
def setUp(self): self.data1 = "data1" self.data2 = 'a' * 5000 self.data3 = 'b' * 20000 self.path = "/tmp/repo_unit_test" try: os.stat(self.path) except: os.mkdir(self.path) with open(self.path + "/d1", 'w+') as content_file: content_file.write(self.data1) with open(self.path + "/d2", 'w+') as content_file: content_file.write(self.data2) with open(self.path + "/d3", 'w+') as content_file: content_file.write('b' * 20000) self.ICNRepo: ICNDataRepository = ICNDataRepository( "/tmp/repo_unit_test", Name("/test/data"), 0, encoder=self.get_encoder(), log_level=255) self.forwarder1: NFNForwarder = NFNForwarder( 0, log_level=255, encoder=self.get_encoder()) self.forwarder2: NFNForwarder = NFNForwarder( 0, log_level=255, encoder=self.get_encoder()) self.repo_port = self.ICNRepo.linklayer.interfaces[0].get_port() self.fwd_port1 = self.forwarder1.linklayer.interfaces[0].get_port() self.fwd_port2 = self.forwarder2.linklayer.interfaces[0].get_port() self.fetch = Fetch("127.0.0.1", self.fwd_port1, encoder=self.get_encoder())
def setUp(self): self.data1 = "data1" self.data2 = 'A' * 5000 self.data3 = 'B' * 20000 self.encoder = self.get_encoder() self.path = "/tmp/repo_unit_test" try: os.stat(self.path) except: os.mkdir(self.path) with open(self.path + "/f1", 'w+') as content_file: content_file.write(self.data1) with open(self.path + "/f2", 'w+') as content_file: content_file.write(self.data2) with open(self.path + "/f3", 'w+') as content_file: content_file.write('B' * 20000) self.ICNRepo: ICNDataRepository = ICNDataRepository( "/tmp/repo_unit_test", Name("/test/data"), 0, encoder=self.get_encoder(), log_level=255) self.repo_port = self.ICNRepo.linklayer.interfaces[0].get_port() self.fetch = Fetch("127.0.0.1", self.repo_port, encoder=self.get_encoder())
def test_fetch_single_data_from_repo_over_forwarder_native_code(self): """Test fetch data from repo over forwarder using native code""" if platform.system() != 'Darwin': self.skipTest("Test only for OSX available") execs = {"PYTHON": NFNPythonExecutor(), "x86": x86Executor()} self.forwarder1 = NFNForwarder(0, log_level=255, encoder=self.get_encoder(), executors=execs) self.fwd_port1 = self.forwarder1.linklayer.interfaces[0].get_port() self.fetch = Fetch("127.0.0.1", self.fwd_port1, encoder=self.get_encoder()) self.ICNRepo.start_repo() self.forwarder1.start_forwarder() self.forwarder2.start_forwarder() time.sleep(2) self.add_face_and_forwadingrule() nfnfile = open('NFN-x86-file-osx', 'r') content_obj = nfnfile.read() self.forwarder1.icnlayer.cs.add_content_object(Content("/func/native/test", content_obj)) #self.mgmtClient1.add_new_content(Name("/func/native/test"), content_obj) time.sleep(5) fetch_name = Name("/func/native/test") fetch_name += '_("hello")' fetch_name += 'NFN' try: content = None while content is None or content == 'Received Nack: no forwarding rule': content = self.fetch.fetch_data(fetch_name, timeout=20) except: self.fail self.assertEqual("5", content)
def test_hopping_repo(self): for n in self.nodes.values(): n.start_forwarder() chunks: List[str] = [] for i, edge in [(1, 11), (2, 12), (3, 13), (4, 21), (5, 22), (6, 23), (7, 31), (8, 32), (9, 33)]: # Instead of moving a single repo from one node to the next, it's far easier to simply create a new one, and # it SHOULDN'T make a difference. repo = ICNDataRepository('/tmp/test_hopping_repo', Name('/hoppingrepo'), 0, encoder=NdnTlvEncoder(), autoconfig=True, autoconfig_routed=True) repo.autoconfiglayer._broadcast_port = self.ports[edge] repo.start_repo() sleep(10) # Start a fetch client which sends its interests to the core00 node fetch = Fetch('127.0.0.1', self.ports[00], encoder=NdnTlvEncoder()) for _ in range(5): try: chunks.append( fetch.fetch_data(Name(f'/edge/hoppingrepo/c{i}'), timeout=4.0)) break except queue.Empty: pass fetch.stop_fetch() repo.stop_repo() expected: List[str] = [] for c in [1, 2, 3, 4, 5, 6, 7, 8, 9]: expected.append(f'This is test chunk {c}!') self.assertEqual(expected, chunks)
def measure_depth_scaling( n: int, ageing: float, random_startup_delay: bool) -> Tuple[int, float, float, bool]: forwarders: List[ICNForwarder] = [] for i in range(n): forwarders.append( ICNForwarder(0, encoder=NdnTlvEncoder(), routing=True)) repo = ICNDataRepository(None, Name('/picn/routing/testrepo'), port=0, encoder=NdnTlvEncoder()) for i in range(n): if i < len(forwarders) - 1: forwarders[i].routinglayer._peers.append( forwarders[i + 1].linklayer.sock.getsockname()) if i == len(forwarders) - 1: fid = forwarders[i].linklayer.get_or_create_fid( repo.linklayer.sock.getsockname(), static=True) rib: BaseRoutingInformationBase = forwarders[i].data_structs['rib'] rib.insert(Name('/picn/routing/testrepo'), fid, 1) forwarders[i].data_structs['rib'] = rib forwarders[i].routinglayer._ageing_interval = ageing repo.repo.add_content(Name('/picn/routing/testrepo/testcontent'), 'testcontent') fetchaddr = forwarders[0].linklayer.sock.getsockname() fetch = Fetch(fetchaddr[0], fetchaddr[1], encoder=NdnTlvEncoder()) time, data = measure(fetch, repo, forwarders, n * ageing * 3, random_startup_delay) return n, ageing, time, data == 'testcontent'
def main(args): name_str = args.name name = None if 'NFN' in name_str and '_' not in name_str: name = parse_nfn_str(name_str) if name is None: if '[' in name_str and ']' in name_str: name = unescape_str_to_Name(args.name) else: name = Name(args.name) name = unescape_name(name) name.format = args.format encoder = NdnTlvEncoder( ) if args.format == 'ndntlv' else SimpleStringEncoder fetchTool = Fetch(args.ip, args.port, encoder=encoder, autoconfig=args.autoconfig) content = fetchTool.fetch_data(name, timeout=10) print(content) fetchTool.stop_fetch()
def test_single_interest_repo_fetch(self): """Test simulation by requesting data from a repo using the fetch program lib and chunking""" self.path = "/tmp/repo_unit_test" try: os.stat(self.path) except: os.mkdir(self.path) with open(self.path + "/f1", 'w+') as content_file: content_file.write("A" * 50000) self.icn_forwarder2 = ICNDataRepository(self.path, Name("/test/data"), 0, log_level=255, encoder=self.encoder_type(), interfaces=[self.simulation_bus.add_interface("icnfwd2")]) self.fetchtool = Fetch("icnfwd1", None, 255, encoder=self.encoder_type(), interfaces=[self.simulation_bus.add_interface("fetchtool")]) self.icn_forwarder1.start_forwarder() self.icn_forwarder2.start_repo() self.simulation_bus.start_process() mgmt_client1 = MgmtClient(self.icn_forwarder1.mgmt.mgmt_sock.getsockname()[1]) mgmt_client1.add_face("icnfwd2", None, 0) mgmt_client1.add_forwarding_rule(Name("/test"), [0]) res = self.fetchtool.fetch_data(Name("/test/data/f1"), 3) self.assertEqual("A"*50000, res) mgmt_client1.shutdown() self.fetchtool.stop_fetch()
def _setup_mobile_nodes(self): """configure the mobile nodes""" for node in self._mobile_nodes: node.forwarder = ICNForwarder( 0, encoder=SimpleStringEncoder(), routing=True, interfaces=[ self._simulation_bus.add_interface(f"car{node.node_id}") ]) node.fetch = Fetch( f"car{node.node_id}", None, 255, SimpleStringEncoder(), interfaces=[ self._simulation_bus.add_interface(f"ftcar{node.node_id}") ]) node.mgmt_tool = MgmtClient( node.forwarder.mgmt.mgmt_sock.getsockname()[1]) for stationary_node in self._stationary_nodes: car_face_id = node.forwarder.linklayer.faceidtable.get_or_create_faceid( AddressInfo(f"rsu{stationary_node.node_id}", 0)) self.to_rsu_faces[stationary_node.node_id][ node.node_id] = car_face_id rsu_face_id = node.forwarder.linklayer.faceidtable.get_or_create_faceid( AddressInfo(f"car{stationary_node.node_id}", 0)) self.to_car_faces[stationary_node.node_id][ node.node_id] = rsu_face_id
def setUp(self): self.encoder_type = SimpleStringEncoder() self.simulation_bus = SimulationBus(packetencoder=self.encoder_type) chunk_size = 4 self.chunkifyer = SimpleContentChunkifyer(chunk_size) self.car = ICNForwarder( 0, encoder=self.encoder_type, routing=True, interfaces=[self.simulation_bus.add_interface("car")]) self.fetch_tool_car = Fetch( "car", None, 255, self.encoder_type, interfaces=[self.simulation_bus.add_interface("ftcar")]) self.mgmt_client_car = MgmtClient( self.car.mgmt.mgmt_sock.getsockname()[1]) self.rsus = [] self.fetch_tools = [] self.mgmt_clients = [] for i in range(4): self.rsus.append( NFNForwarderData( 0, encoder=self.encoder_type, interfaces=[self.simulation_bus.add_interface(f"rsu{i}")], chunk_size=chunk_size, num_of_forwards=0)) self.fetch_tools.append( Fetch(f"rsu{i}", None, 255, self.encoder_type, interfaces=[self.simulation_bus.add_interface(f"ft{i}") ])) self.rsus[i].nfnlayer.optimizer = EdgeComputingOptimizer( self.rsus[i].icnlayer.cs, self.rsus[i].icnlayer.fib, self.rsus[i].icnlayer.pit, self.rsus[i].linklayer.faceidtable) self.mgmt_clients.append( MgmtClient(self.rsus[i].mgmt.mgmt_sock.getsockname()[1])) self.fetch_tools[i].timeoutpreventionlayer.timeout_interval = 30
def setUp(self): self.encoder = self.get_encoder() self.forwarder1 = NFNForwarder(0, encoder=self.get_encoder(), log_level=255, use_thunks=True) self.forwarder2 = NFNForwarder(0, encoder=self.get_encoder(), log_level=255, use_thunks=True) self.forwarder3 = NFNForwarder(0, encoder=self.get_encoder(), log_level=255, use_thunks=True) self.forwarder1_port = self.forwarder1.linklayer.interfaces[ 0].get_port() self.forwarder2_port = self.forwarder2.linklayer.interfaces[ 0].get_port() self.forwarder3_port = self.forwarder3.linklayer.interfaces[ 0].get_port() self.forwarder1.icnlayer.pit.set_pit_timeout(10) self.forwarder1.icnlayer.pit.set_pit_retransmits(10) self.client = Fetch("127.0.0.1", self.forwarder1_port, 255, self.get_encoder()) self.mgmt1 = MgmtClient(self.forwarder1_port) self.mgmt2 = MgmtClient(self.forwarder2_port) self.mgmt3 = MgmtClient(self.forwarder3_port) self.forwarder1.start_forwarder() self.forwarder2.start_forwarder() self.forwarder3.start_forwarder() self.mgmt1.add_face("127.0.0.1", self.forwarder2_port, 0) self.mgmt1.add_face("127.0.0.1", self.forwarder3_port, 0) self.mgmt1.add_forwarding_rule(Name("/dat"), [0]) self.mgmt1.add_forwarding_rule(Name("/fct"), [1]) self.content1 = "This is our test content object" * 20 self.function1 = "PYTHON\nf\ndef f(a):\n return a.upper()" self.mgmt2.add_new_content(Name("/dat/data/d1"), self.content1) self.mgmt3.add_new_content(Name("/fct/f1"), self.function1)
def setUp(self): self.encoder_type = self.get_encoder() self.simulation_bus = SimulationBus(packetencoder=self.encoder_type()) self.fetch_tool1 = Fetch( "nfn1", None, 255, self.encoder_type(), interfaces=[self.simulation_bus.add_interface("fetchtool1")]) self.nfn1 = NFNForwarder( port=0, encoder=self.encoder_type(), interfaces=[self.simulation_bus.add_interface("nfn1")], log_level=255, ageing_interval=1) self.nfn2 = NFNForwarder( port=0, encoder=self.encoder_type(), interfaces=[self.simulation_bus.add_interface("nfn2")], log_level=255, ageing_interval=1) self.simulation_bus.add_interface("deadend") self.nfn1.icnlayer.pit.set_pit_timeout(0) self.nfn1.icnlayer.cs.set_cs_timeout(30) self.nfn2.icnlayer.pit.set_pit_timeout(0) self.nfn2.icnlayer.cs.set_cs_timeout(30) self.nfn1.nfnlayer.optimizer = ToDataFirstOptimizer( self.nfn1.icnlayer.cs, self.nfn1.icnlayer.fib, self.nfn1.icnlayer.pit, self.nfn1.linklayer.faceidtable) self.nfn2.nfnlayer.optimizer = ToDataFirstOptimizer( self.nfn2.icnlayer.cs, self.nfn2.icnlayer.fib, self.nfn2.icnlayer.pit, self.nfn2.linklayer.faceidtable) self.mgmt_client1 = MgmtClient( self.nfn1.mgmt.mgmt_sock.getsockname()[1]) self.mgmt_client2 = MgmtClient( self.nfn2.mgmt.mgmt_sock.getsockname()[1])
def setUp(self): self.f9000 = ICNForwarder(9000, encoder=NdnTlvEncoder(), routing=True, peers=[('127.0.0.1', 9001), ('127.0.0.1', 9002), ('127.0.0.1', 9090)]) self.f9001 = ICNForwarder(9001, encoder=NdnTlvEncoder(), routing=True, peers=[('127.0.0.1', 9000), ('127.0.0.1', 9002), ('127.0.0.1', 9003), ('127.0.0.1', 9004)]) self.f9002 = ICNForwarder(9002, encoder=NdnTlvEncoder(), routing=True, peers=[('127.0.0.1', 9000), ('127.0.0.1', 9001), ('127.0.0.1', 9004)]) self.f9003 = ICNForwarder(9003, encoder=NdnTlvEncoder(), routing=True, peers=[('127.0.0.1', 9001), ('127.0.0.1', 9004)]) self.f9004 = ICNForwarder(9004, encoder=NdnTlvEncoder(), routing=True, peers=[('127.0.0.1', 9001), ('127.0.0.1', 9002), ('127.0.0.1', 9003)]) os.makedirs('/tmp/test_repo', exist_ok=True) f = open('/tmp/test_repo/helloworld', 'w') f.write('Hello, World!\n') f.close() self.repo = ICNDataRepository('/tmp/test_repo', Name('/testrepo'), port=9090, encoder=NdnTlvEncoder()) self.fetch = Fetch('127.0.0.1', 9004, encoder=NdnTlvEncoder()) # Create RIB entry for the repository (with Python weirdness) repo_fid: int = self.f9000.linklayer.faceidtable.get_or_create_faceid(AddressInfo(('127.0.0.1', 9090), 0)) rib: BaseRoutingInformationBase = self.f9000.routinglayer.rib rib.insert(Name('/testrepo'), repo_fid, distance=1, timeout=None)
def test_fetching_content_from_second_repo_after_nack(self): """Test sending an interest to forwarder with no matching content, choose second route to fetch content""" self.forwarder2: ICNForwarder = ICNForwarder(0, encoder=self.get_encoder(), log_level=255) self.ICNRepo.start_repo() self.forwarder.start_forwarder() self.forwarder2.start_forwarder() #check for nack on first route self.mgmtClient = MgmtClient(self.forwarder_port) self.mgmtClient.add_face("127.0.0.1", self.forwarder2.linklayer.interfaces[0].get_port(), 0) data = self.mgmtClient.add_forwarding_rule(Name("/test/data"), [0]) nack = self.fetch.fetch_data(Name("/test/data/f3")) self.assertEqual(nack, "Received Nack: " + NackReason.NO_ROUTE.value) time.sleep(0.1) #install second forwarding rule and check for result. data = self.mgmtClient.add_face("127.0.0.1", self.repo_port, 0) self.mgmtClient.add_forwarding_rule(Name("/test"), [2]) time.sleep(0.1) fetch2 = Fetch("127.0.0.1", self.forwarder_port) content = self.fetch.fetch_data(Name("/test/data/f3")) self.assertEqual(content, self.data3) self.forwarder2.stop_forwarder()
interfaces=[simulation_bus.add_interface("nfn0")], log_level=255, ageing_interval=1) nfn_fwd1 = NFNForwarder(port=0, encoder=NdnTlvEncoder(), interfaces=[simulation_bus.add_interface("nfn1")], log_level=255, ageing_interval=1) mgmt_client0 = MgmtClient(nfn_fwd0.mgmt.mgmt_sock.getsockname()[1]) mgmt_client1 = MgmtClient(nfn_fwd1.mgmt.mgmt_sock.getsockname()[1]) fetch_tool = Fetch("nfn0", None, 255, NdnTlvEncoder(), interfaces=[simulation_bus.add_interface("fetchtool1")]) nfn_fwd0.start_forwarder() nfn_fwd1.start_forwarder() simulation_bus.start_process() mgmt_client0.add_face("nfn1", None, 0) mgmt_client0.add_forwarding_rule(Name("/data"), [0]) mgmt_client0.add_new_content( Name("/func/combine"), "PYTHON\nfunc\ndef func(a, b):\n return a + b") mgmt_client1.add_new_content(Name("/data/obj1"), "World") name = Name("/func/combine")
def simulation(classic, amount_of_parts): generateExampleFiles("../InputFiles/exampleInputFile", amount_of_parts) simulation_bus = SimulationBus(packetencoder=NdnTlvEncoder()) nfn_fwd0 = NFNForwarder( port=0, encoder=NdnTlvEncoder(), interfaces=[simulation_bus.add_interface("nfn0")], log_level=255, executors={"PYTHONSTREAM": NFNPythonExecutorStreaming()}, ageing_interval=1) nfn_fwd0.executors["PYTHONSTREAM"].initialize_executor( nfn_fwd0.nfnlayer.queue_to_lower, nfn_fwd0.nfnlayer.queue_from_lower, nfn_fwd0.nfnlayer.cs, classic) nfn_fwd0.icnlayer.pit.ageing = ageing nfn_fwd0.timeoutpreventionlayer.ageing = ageing nfn_fwd1 = NFNForwarder( port=0, encoder=NdnTlvEncoder(), interfaces=[simulation_bus.add_interface("nfn1")], log_level=255, executors={"PYTHONSTREAM": NFNPythonExecutorStreaming()}, ageing_interval=1) nfn_fwd1.executors["PYTHONSTREAM"].initialize_executor( nfn_fwd1.nfnlayer.queue_to_lower, nfn_fwd1.nfnlayer.queue_from_lower, nfn_fwd1.nfnlayer.cs, classic) nfn_fwd1.icnlayer.pit.ageing = ageing nfn_fwd1.timeoutpreventionlayer.ageing = ageing nfn_fwd2 = NFNForwarder( port=0, encoder=NdnTlvEncoder(), interfaces=[simulation_bus.add_interface("nfn2")], log_level=255, executors={"PYTHONSTREAM": NFNPythonExecutorStreaming()}, ageing_interval=1) nfn_fwd2.executors["PYTHONSTREAM"].initialize_executor( nfn_fwd2.nfnlayer.queue_to_lower, nfn_fwd2.nfnlayer.queue_from_lower, nfn_fwd2.nfnlayer.cs, classic) nfn_fwd2.icnlayer.pit.ageing = ageing nfn_fwd2.timeoutpreventionlayer.ageing = ageing repo = ICNDataRepository("../InputFiles", Name("/repo/r1"), 0, 255, NdnTlvEncoder(), False, False, interfaces=[simulation_bus.add_interface("repo")]) repo.start_repo() mgmt_client0 = MgmtClient(nfn_fwd0.mgmt.mgmt_sock.getsockname()[1]) mgmt_client1 = MgmtClient(nfn_fwd1.mgmt.mgmt_sock.getsockname()[1]) mgmt_client2 = MgmtClient(nfn_fwd2.mgmt.mgmt_sock.getsockname()[1]) fetch_tool = Fetch("nfn0", None, 255, NdnTlvEncoder(), interfaces=[simulation_bus.add_interface("fetchtoo1")]) nfn_fwd0.start_forwarder() nfn_fwd1.start_forwarder() nfn_fwd2.start_forwarder() simulation_bus.start_process() mgmt_client0.add_face("nfn1", None, 0) mgmt_client0.add_forwarding_rule(Name("/lib"), [0]) mgmt_client1.add_face("nfn2", None, 0) mgmt_client1.add_forwarding_rule(Name("/lib"), [0]) mgmt_client2.add_face("repo", None, 0) mgmt_client2.add_forwarding_rule(Name("/repo/r1"), [0]) mgmt_client0.add_new_content( Name("/lib/node0"), "PYTHONSTREAM\ngetnext_on_writeout\ndef getnext_on_writeout(arg):\n print('Start dritte')\n res = ''\n a = get_next(arg)\n while a != None:\n res = res + a\n a = get_next(arg)\n print('Ende dritte')\n return res" ) mgmt_client1.add_new_content( Name("/lib/node1"), "PYTHONSTREAM\nwriteout_on_getnext\ndef writeout_on_getnext(arg):\n print('Start zweite')\n a = get_next(arg)\n while a and check_end_streaming(a) is False:\n a = a.upper()\n sleep(1)\n write_out(a)\n a = get_next(arg)\n last_write_out()\n return print('Ende zweite')\n" ) mgmt_client2.add_new_content( Name("/lib/node2"), "PYTHONSTREAM\nwriteout_on_getnext\ndef writeout_on_getnext(arg):\n print('Start erste')\n write_out_on_get_next(arg)\n return print('Ende erste')\n" ) scenario_node_2 = Name("/lib/node2") scenario_node_2 += "#(=/repo/r1/exampleInputFile=)" scenario_node_2 += "NFN" scenario_node_1 = Name("/lib/node1") scenario_node_1 += "#(=" + str(scenario_node_2) + "=)" scenario_node_1 += "NFN" scenario_node_0 = Name("/lib/node0") scenario_node_0 += '_("' + str(scenario_node_1) + '")' scenario_node_0 += "NFN" start_time = time.perf_counter() res = fetch_tool.fetch_data(scenario_node_0, timeout=60) end_time = time.perf_counter() time_needed = end_time - start_time if res.startswith("CONTENT OF NAME"): print("Time:", time_needed, res) return time_needed else: print("Something went wrong") None
def setUp(self): self.encoder_type = self.get_encoder() self.simulation_bus = SimulationBus(packetencoder=self.encoder_type()) self.fetch_tool1 = Fetch( "distributor", None, 255, self.encoder_type(), interfaces=[self.simulation_bus.add_interface("fetchtool1")]) self.distributor = NFNForwarder( port=0, encoder=self.encoder_type(), interfaces=[self.simulation_bus.add_interface("distributor")], log_level=255, ageing_interval=3) self.nfn1 = NFNForwarder( port=0, encoder=self.encoder_type(), interfaces=[self.simulation_bus.add_interface("nfn1")], log_level=255, ageing_interval=3) self.nfn2 = NFNForwarder( port=0, encoder=self.encoder_type(), interfaces=[self.simulation_bus.add_interface("nfn2")], log_level=255, ageing_interval=3) self.nfn3 = NFNForwarder( port=0, encoder=self.encoder_type(), interfaces=[self.simulation_bus.add_interface("nfn3")], log_level=255, ageing_interval=3) self.nfn4 = NFNForwarder( port=0, encoder=self.encoder_type(), interfaces=[self.simulation_bus.add_interface("nfn4")], log_level=255, ageing_interval=3) self.repo1 = ICNDataRepository( "/tmp/repo1", Name("/repo/r1"), 0, 255, self.encoder_type(), False, False, [self.simulation_bus.add_interface("repo1")]) self.repo2 = ICNDataRepository( "/tmp/repo2", Name("/repo/r2"), 0, 255, self.encoder_type(), False, False, [self.simulation_bus.add_interface("repo2")]) self.repo3 = ICNDataRepository( "/tmp/repo3", Name("/repo/r3"), 0, 255, self.encoder_type(), False, False, [self.simulation_bus.add_interface("repo3")]) self.repo4 = ICNDataRepository( "/tmp/repo4", Name("/repo/r4"), 0, 255, self.encoder_type(), False, False, [self.simulation_bus.add_interface("repo4")]) self.nfn1.icnlayer.pit.set_pit_timeout(50) self.nfn1.icnlayer.cs.set_cs_timeout(0) self.nfn2.icnlayer.pit.set_pit_timeout(50) self.nfn2.icnlayer.cs.set_cs_timeout(0) self.nfn3.icnlayer.pit.set_pit_timeout(50) self.nfn3.icnlayer.cs.set_cs_timeout(0) self.nfn4.icnlayer.pit.set_pit_timeout(50) self.nfn4.icnlayer.cs.set_cs_timeout(0) self.mgmt_client0 = MgmtClient( self.distributor.mgmt.mgmt_sock.getsockname()[1]) self.mgmt_client1 = MgmtClient( self.nfn1.mgmt.mgmt_sock.getsockname()[1]) self.mgmt_client2 = MgmtClient( self.nfn2.mgmt.mgmt_sock.getsockname()[1]) self.mgmt_client3 = MgmtClient( self.nfn3.mgmt.mgmt_sock.getsockname()[1]) self.mgmt_client4 = MgmtClient( self.nfn4.mgmt.mgmt_sock.getsockname()[1])
def setUp(self): self.encoder_type = self.get_encoder() self.simulation_bus = SimulationBus(packetencoder=self.encoder_type()) self.fetch_tool1 = Fetch( "nfn0", None, 255, self.encoder_type(), interfaces=[self.simulation_bus.add_interface("fetchtool1")]) self.nfn0 = NFNForwarder( port=0, encoder=self.encoder_type(), interfaces=[self.simulation_bus.add_interface("nfn0")], log_level=255, ageing_interval=1) self.nfn1 = NFNForwarder( port=0, encoder=self.encoder_type(), interfaces=[self.simulation_bus.add_interface("nfn1")], log_level=255, ageing_interval=1) self.nfn2 = NFNForwarder( port=0, encoder=self.encoder_type(), interfaces=[self.simulation_bus.add_interface("nfn2")], log_level=255, ageing_interval=1) self.nfn3 = NFNForwarder( port=0, encoder=self.encoder_type(), interfaces=[self.simulation_bus.add_interface("nfn3")], log_level=255, ageing_interval=1) self.nfn4 = NFNForwarder( port=0, encoder=self.encoder_type(), interfaces=[self.simulation_bus.add_interface("nfn4")], log_level=255, ageing_interval=1) self.repo1 = ICNDataRepository( "/tmp/repo1", Name("/repo/r1"), 0, 255, self.encoder_type(), False, False, [self.simulation_bus.add_interface("repo1")]) self.repo2 = ICNDataRepository( "/tmp/repo2", Name("/repo/r2"), 0, 255, self.encoder_type(), False, False, [self.simulation_bus.add_interface("repo2")]) self.repo3 = ICNDataRepository( "/tmp/repo3", Name("/repo/r3"), 0, 255, self.encoder_type(), False, False, [self.simulation_bus.add_interface("repo3")]) self.repo4 = ICNDataRepository( "/tmp/repo4", Name("/repo/r4"), 0, 255, self.encoder_type(), False, False, [self.simulation_bus.add_interface("repo4")]) self.nfn1.icnlayer.pit.set_pit_timeout(0) self.nfn1.icnlayer.cs.set_cs_timeout(30) self.nfn2.icnlayer.pit.set_pit_timeout(0) self.nfn2.icnlayer.cs.set_cs_timeout(30) self.nfn3.icnlayer.pit.set_pit_timeout(0) self.nfn3.icnlayer.cs.set_cs_timeout(30) self.nfn4.icnlayer.pit.set_pit_timeout(0) self.nfn4.icnlayer.cs.set_cs_timeout(30) self.nfn0.nfnlayer.optimizer = MapReduceOptimizer( self.nfn0.icnlayer.cs, self.nfn0.icnlayer.fib, self.nfn0.icnlayer.pit, self.nfn0.linklayer.faceidtable) self.nfn1.nfnlayer.optimizer = MapReduceOptimizer( self.nfn1.icnlayer.cs, self.nfn1.icnlayer.fib, self.nfn1.icnlayer.pit, self.nfn1.linklayer.faceidtable) self.nfn2.nfnlayer.optimizer = MapReduceOptimizer( self.nfn2.icnlayer.cs, self.nfn2.icnlayer.fib, self.nfn2.icnlayer.pit, self.nfn2.linklayer.faceidtable) self.nfn3.nfnlayer.optimizer = MapReduceOptimizer( self.nfn3.icnlayer.cs, self.nfn3.icnlayer.fib, self.nfn3.icnlayer.pit, self.nfn3.linklayer.faceidtable) self.nfn4.nfnlayer.optimizer = MapReduceOptimizer( self.nfn4.icnlayer.cs, self.nfn4.icnlayer.fib, self.nfn4.icnlayer.pit, self.nfn4.linklayer.faceidtable) self.mgmt_client0 = MgmtClient( self.nfn0.mgmt.mgmt_sock.getsockname()[1]) self.mgmt_client1 = MgmtClient( self.nfn1.mgmt.mgmt_sock.getsockname()[1]) self.mgmt_client2 = MgmtClient( self.nfn2.mgmt.mgmt_sock.getsockname()[1]) self.mgmt_client3 = MgmtClient( self.nfn3.mgmt.mgmt_sock.getsockname()[1]) self.mgmt_client4 = MgmtClient( self.nfn4.mgmt.mgmt_sock.getsockname()[1])
def setUp(self): self.simulation_bus = SimulationBus(packetencoder=NdnTlvEncoder()) self.fetch_tool1 = Fetch( "nfn0", None, 255, NdnTlvEncoder(), interfaces=[self.simulation_bus.add_interface("fetchtoo11")]) self.nfn0 = NFNForwarder( port=0, encoder=NdnTlvEncoder(), interfaces=[self.simulation_bus.add_interface("nfn0")], log_level=255, executors={"PYTHONSTREAM": NFNPythonExecutorStreaming()}, ageing_interval=1) self.nfn0.executors["PYTHONSTREAM"].initialize_executor( self.nfn0.nfnlayer.queue_to_lower, self.nfn0.nfnlayer.queue_from_lower, self.nfn0.nfnlayer.cs, False) self.nfn0.icnlayer.pit.ageing = self.ageing self.nfn0.timeoutpreventionlayer.ageing = self.ageing self.nfn1 = NFNForwarder( port=0, encoder=NdnTlvEncoder(), interfaces=[self.simulation_bus.add_interface("nfn1")], log_level=255, executors={"PYTHONSTREAM": NFNPythonExecutorStreaming()}, ageing_interval=1) self.nfn1.executors["PYTHONSTREAM"].initialize_executor( self.nfn1.nfnlayer.queue_to_lower, self.nfn1.nfnlayer.queue_from_lower, self.nfn1.nfnlayer.cs, False) self.nfn1.icnlayer.pit.ageing = self.ageing self.nfn1.timeoutpreventionlayer.ageing = self.ageing self.nfn12 = NFNForwarder( port=0, encoder=NdnTlvEncoder(), interfaces=[self.simulation_bus.add_interface("nfn12")], log_level=255, executors={"PYTHONSTREAM": NFNPythonExecutorStreaming()}, ageing_interval=1) self.nfn12.executors["PYTHONSTREAM"].initialize_executor( self.nfn12.nfnlayer.queue_to_lower, self.nfn12.nfnlayer.queue_from_lower, self.nfn12.nfnlayer.cs, False) self.nfn12.icnlayer.pit.ageing = self.ageing self.nfn12.timeoutpreventionlayer.ageing = self.ageing self.repo1 = ICNDataRepository( "/tmp/repo1", Name("/repo/r1"), 0, 255, NdnTlvEncoder(), False, False, interfaces=[self.simulation_bus.add_interface("repo1")]) self.mgmt_client0 = MgmtClient( self.nfn0.mgmt.mgmt_sock.getsockname()[1]) self.mgmt_client1 = MgmtClient( self.nfn1.mgmt.mgmt_sock.getsockname()[1]) self.mgmt_client01 = MgmtClient( self.nfn12.mgmt.mgmt_sock.getsockname()[1])
interfaces=[simulation_bus.add_interface('fw1')], node_name='forwarder1') # Initialize forwarder 1 mgmt_repo0 = MgmtClient( repo0.mgmt.mgmt_sock.getsockname()[1]) # Mgmt client for repository 0 mgmt_repo1 = MgmtClient( repo1.mgmt.mgmt_sock.getsockname()[1]) # Mgmt client for repository 1 mgmt_fw0 = MgmtClient( fw0.mgmt.mgmt_sock.getsockname()[1]) # Mgmt client for forwarder 0 mgmt_fw1 = MgmtClient( fw1.mgmt.mgmt_sock.getsockname()[1]) # Mgmt client for forwarder 1 # This is unintuitive. Why does the fetch tool add its own face, but the other components don't? fetch0 = Fetch('fw0', None, log_level=255, interfaces=[simulation_bus.add_interface('fetcht0')], name='fetch0') fetch1 = FetchSessions( 'fw1', None, log_level=0, interfaces=[simulation_bus.add_interface('fetcht1')], name='fetch1') repo0.start_repo() repo1.start_repo() fw0.start_forwarder() fw1.start_forwarder() simulation_bus.start_process()
def setup(dummy): dummy.simulation_bus = SimulationBus() # Use BasicStringEncoder dummy.icn_repo0 = ICNDataRepository( port=0, prefix=Name("/test/t1"), foldername=None, interfaces=[dummy.simulation_bus.add_interface("repo0")], log_level=255) # Initialize repository 0 dummy.icn_repo1 = ICNDataRepository( port=0, prefix=Name("/test/t2"), foldername=None, interfaces=[dummy.simulation_bus.add_interface("repo1")], log_level=255) # Initialize repository 1 (this one has sessions) dummy.icn_forwarder0 = ICNForwarder( port=0, log_level=255, interfaces=[dummy.simulation_bus.add_interface("fw0") ]) # Initialize forwarder 0 dummy.icn_forwarder1 = ICNForwarder( port=0, interfaces=[dummy.simulation_bus.add_interface("fw1") ]) # Initialize forwarder 1 dummy.mgmt_client0 = MgmtClient( dummy.icn_repo0.mgmt.mgmt_sock.getsockname() [1]) # Mgmt client for repository 0 dummy.mgmt_client1 = MgmtClient( dummy.icn_repo1.mgmt.mgmt_sock.getsockname() [1]) # Mgmt client for repository 1 dummy.mgmt_client2 = MgmtClient( dummy.icn_forwarder0.mgmt.mgmt_sock.getsockname() [1]) # Mgmt client for forwarder 0 dummy.mgmt_client3 = MgmtClient( dummy.icn_forwarder1.mgmt.mgmt_sock.getsockname() [1]) # Mgmt client for forwarder 1 # This is unintuitive. Why does the fetch tool add its own face, but the other components don't? dummy.fetch_tool = Fetch("fw0", None, log_level=255, interfaces=[ dummy.simulation_bus.add_interface("fetcht0") ]) # Initialize a client (fetch tool) dummy.icn_repo0.start_repo() dummy.icn_repo1.start_repo() dummy.icn_forwarder0.start_forwarder() dummy.icn_forwarder1.start_forwarder() dummy.simulation_bus.start_process() dummy.mgmt_client2.add_face( "repo0", None, 0) # Add a connection between fw0 and repo0 interface dummy.mgmt_client2.add_forwarding_rule(Name("/test/t1"), [ 0 ]) # Add a rule to forward packages with this prefix to this forwarder. # dummy.mgmt_client0.add_forwarding_rule(Name("/test/t1"), [0]) # Add dummy.mgmt_client3.add_face( "repo1", None, 0) # Add a network interface to forwarder 0 and give it ip and port dummy.mgmt_client3.add_forwarding_rule(Name("/test/t2"), [0]) # Add # dummy.mgmt_client0.add_face("repo0", None, 0) # Add a network interface to forwarder 0 and give it ip and port # dummy.mgmt_client0.add_forwarding_rule(Name("/test/t1"), [0]) # Add # dummy.mgmt_client1.add_face("repo1", None, 0) # Add a network interface to forwarder 0 and give it ip and port # dummy.mgmt_client1.add_forwarding_rule(Name("/test/t2"), [0]) # Add dummy.icn_repo0.repolayer._repository.add_content( Name("/test/t1/content_object"), "This is just a test for repo0.") dummy.mgmt_client1.add_new_content(Name("/test/t2/session_connector"), "This shouldn't be needed.") interest0 = Name("/test/t1/content_object") interest1 = Name("/test/t2/session_connector") res0 = dummy.fetch_tool.fetch_data(interest0, timeout=20) #res1 = dummy.fetch_tool.fetch_data(interest1, timeout=20) print(res0)
def setup_network(self): """configure a network according to the configuration""" #create RSUs and RSU mgmt tools self.rsus = [] self.mgmt_rsu = [] for i in range(0, self.number_of_rsus): rsu = NFNForwarderData(0, encoder=self.encoder_type, interfaces=[self.simulation_bus.add_interface(f"rsu{i}")], chunk_size=self.chunk_size, num_of_forwards=1, ageing_interval=10) rsu.nfnlayer.optimizer = self.optimizer(rsu.icnlayer.cs, rsu.icnlayer.fib, rsu.icnlayer.pit, rsu.linklayer.faceidtable) mgmt_client = MgmtClient(rsu.mgmt.mgmt_sock.getsockname()[1]) self.rsus.append(rsu) self.mgmt_rsu.append(mgmt_client) self.rsus[i].icnlayer.cs.set_cs_timeout(60) #setup connections for i in range(1, self.number_of_rsus-1): #setup connections between rsus faceid_rsu_l = self.rsus[i].linklayer.faceidtable.get_or_create_faceid(AddressInfo("rsu" + str(i-1), 0)) faceid_rsu_r = self.rsus[i].linklayer.faceidtable.get_or_create_faceid(AddressInfo("rsu" + str(i+1), 0)) self.rsus[i].icnlayer.fib.add_fib_entry(Name("/nL"), [faceid_rsu_l]) self.rsus[i].icnlayer.fib.add_fib_entry(Name("/nR"), [faceid_rsu_r]) #setup first and last rsu faceid_rsu_1st = self.rsus[0].linklayer.faceidtable.get_or_create_faceid(AddressInfo("rsu" + str(1), 0)) faceid_rsu_last = self.rsus[self.number_of_rsus-1].linklayer.faceidtable.get_or_create_faceid(AddressInfo("rsu" + str(self.number_of_rsus-2), 0)) self.rsus[0].icnlayer.fib.add_fib_entry(Name("/nR"), [faceid_rsu_1st]) self.rsus[self.number_of_rsus-1].icnlayer.fib.add_fib_entry(Name("/nL"), [faceid_rsu_last]) #add function for i in range(0, self.number_of_rsus): for n in zip(self.named_functions.keys(), self.named_functions.values()): add_msg = self.rsus[i].icnlayer.cs.add_content_object(Content(Name(n[0]), n[1]), static=True) #setup cars self.car_forwarders = [] self.car_fetch = [] self.car_mgmt = [] for i in range (0, self.number_of_cars): self.car_forwarders.append(ICNForwarder(0, encoder=self.encoder_type, routing=True, interfaces=[self.simulation_bus.add_interface(f"car{i}")])) self.car_fetch.append(Fetch(f"car{i}", None, 255, self.encoder_type, interfaces=[self.simulation_bus.add_interface(f"ftcar{i}")])) mgmt_client_car = MgmtClient(self.car_forwarders[i].mgmt.mgmt_sock.getsockname()[1]) self.car_mgmt.append(mgmt_client_car) for j in range(0, self.number_of_rsus): car_face_id = self.car_forwarders[i].linklayer.faceidtable.get_or_create_faceid(AddressInfo(f"rsu{j}", 0)) self.to_rsu_faces[j][i] = car_face_id rsu_face_id = self.rsus[j].linklayer.faceidtable.get_or_create_faceid(AddressInfo(f"car{i}", 0)) self.to_car_faces[j][i] = rsu_face_id #Starting nodes for i in range(0, self.number_of_rsus): self.rsus[i].start_forwarder() for i in range(0, self.number_of_cars): self.car_forwarders[i].start_forwarder() self.simulation_bus.start_process()
def setUp(self): self.simulation_bus = SimulationBus( log_level=0) # Use BasicStringEncoder self.icn_repo0 = ICNDataRepository( port=0, prefix=Name('/test/t1'), foldername=None, interfaces=[self.simulation_bus.add_interface('repo0')], log_level=255) # Initialize repository 0 self.icn_repo1 = ICNDataRepositorySession( port=0, prefix=Name('/test/t2'), foldername=None, interfaces=[self.simulation_bus.add_interface('repo1')], log_level=0) # Initialize repository 1 (this one has sessions) self.icn_forwarder0 = ICNForwarder( port=0, log_level=255, interfaces=[self.simulation_bus.add_interface('fw0') ]) # Initialize forwarder 0 self.icn_forwarder1 = ICNForwarder( port=0, log_level=255, interfaces=[self.simulation_bus.add_interface('fw1') ]) # Initialize forwarder 1 self.mgmt_client0 = MgmtClient( self.icn_repo0.mgmt.mgmt_sock.getsockname() [1]) # Mgmt client for repository 0 self.mgmt_client1 = MgmtClient( self.icn_repo1.mgmt.mgmt_sock.getsockname() [1]) # Mgmt client for repository 1 self.mgmt_client2 = MgmtClient( self.icn_forwarder0.mgmt.mgmt_sock.getsockname() [1]) # Mgmt client for forwarder 0 self.mgmt_client3 = MgmtClient( self.icn_forwarder1.mgmt.mgmt_sock.getsockname() [1]) # Mgmt client for forwarder 1 # This is unintuitive. Why does the fetch tool add its own face, but the other components don't? self.fetch0 = Fetch('fw0', None, log_level=255, interfaces=[ self.simulation_bus.add_interface('fetcht0') ]) # Initialize a client (fetch tool) self.fetch1 = FetchSessions( 'fw0', None, log_level=255, interfaces=[self.simulation_bus.add_interface('fetcht1')]) self.icn_repo0.start_repo() self.icn_repo1.start_repo() self.icn_forwarder0.start_forwarder() self.icn_forwarder1.start_forwarder() self.simulation_bus.start_process() time.sleep(1) # Be safe and wait for all processes to start self.mgmt_client2.add_face( 'repo0', None, 0) # Add new interface to forwarder 0, index has to be 0. self.mgmt_client2.add_face( 'fw1', None, 0) # # Add new interface to forwarder 0, index has to be 0. self.mgmt_client2.add_forwarding_rule( Name('/test/t1'), [0]) # Add a forward-rule this prefix to interface with index 0. self.mgmt_client2.add_forwarding_rule( Name('/test/t2'), [1]) # Add a forward-rule this prefix to interface with index 1. self.mgmt_client3.add_face( 'repo1', None, 0) # Add new interface to forwarder 1, index has to be 0. self.mgmt_client3.add_forwarding_rule( Name('/test/t2'), [0]) # Add a forward-rule this prefix to interface with index 0. # Repositories do not need a forwarding rule or an interface. All done in constructor. self.test_content = 'This is just a test for repo0.' self.icn_repo0.repo.add_content( Name('/test/t1/content_object'), self.test_content ) # TODO: Create add_new_content command for DataRepository in ManagementClient print(self.icn_forwarder0.icnlayer.fib) print(self.icn_forwarder1.icnlayer.fib)