def test_prefix_mapper_test(self): ipv6_addrs = [ 'ba10:5:6c:9:9d21:4407:d337:1928', '321b:534:6c:9:999:0:d337:1928', '222b:5334:111c:111::d337:1928' ] prefixes = [ get_ipv6_prefix(ipv6_addrs[0]), get_ipv6_prefix(ipv6_addrs[1]) ] interfaces = [ get_ipv6_interface_id(ipv6_addrs[0]), get_ipv6_interface_id(ipv6_addrs[1]), get_ipv6_interface_id(ipv6_addrs[2]) ] self._interface_to_prefix_mapper.save_prefix(interfaces[0], prefixes[0]) self.assertEqual( self._interface_to_prefix_mapper.get_prefix(interfaces[0]), 'ba10:5:6c:9::') self._interface_to_prefix_mapper.save_prefix(interfaces[1], prefixes[1]) self.assertEqual(interfaces[1], '::999:0:d337:1928') self.assertEqual( self._interface_to_prefix_mapper.get_prefix(interfaces[1]), prefixes[1]) self._interface_to_prefix_mapper.save_prefix(interfaces[0], prefixes[1]) self.assertEqual( self._interface_to_prefix_mapper.get_prefix(interfaces[0]), '321b:534:6c:9::') self.assertEqual( self._interface_to_prefix_mapper.get_prefix(interfaces[2]), None)
def _update_ipv6_prefix_store(self, ipv6_addr: bytes): ipv6_str = ipv6_addr.decode('utf-8') interface = get_ipv6_interface_id(ipv6_str) prefix = get_ipv6_prefix(ipv6_str) self._service_manager.interface_to_prefix_mapper.save_prefix( interface, prefix, )
def get_custom_prefix(self, ue_ll_ipv6: str) -> str: """ Retrieve the custom prefix by extracting the interface id out of the packet """ interface_id = get_ipv6_interface_id(ue_ll_ipv6) return self._prefix_mapper.get_prefix(interface_id)
def test_ipv6_flows(self): """ Verify that a UPLINK->UE arp request is properly matched """ ll_addr = get_if_hwaddr('testing_br') pkt_sender = ScapyPacketInjector(self.IFACE) pkt_rs = Ether(dst=self.OTHER_MAC, src=self.UE_MAC) pkt_rs /= IPv6( src='fe80:24c3:d0ff:fef3:9d21:4407:d337:1928', dst='ff02::2', ) pkt_rs /= ICMPv6ND_RS() pkt_rs /= ICMPv6NDOptSrcLLAddr(lladdr=ll_addr) pkt_ns = Ether(dst=self.OTHER_MAC, src=self.UE_MAC) pkt_ns /= IPv6( src='fe80::9d21:4407:d337:1928', dst='ff02::2', ) pkt_ns /= ICMPv6ND_NS(tgt='abcd:87:3::') pkt_ns /= ICMPv6NDOptSrcLLAddr(lladdr=ll_addr) ipv6_addr = 'ab22:5:6c:9:9d21:4407:d337:1928' interface = get_ipv6_interface_id(ipv6_addr) prefix = get_ipv6_prefix(ipv6_addr) self.service_manager.interface_to_prefix_mapper.save_prefix( interface, prefix, ) ulink_args = RyuForwardFlowArgsBuilder(self._tbl_num) \ .set_eth_match(eth_dst=self.OTHER_MAC, eth_src=self.UE_MAC) \ .set_reg_value(DIRECTION_REG, Direction.OUT) \ .build_requests() isolator = RyuDirectTableIsolator(ulink_args, self.testing_controller) snapshot_verifier = SnapshotVerifier( self, self.BRIDGE, self.service_manager, include_stats=False, ) with isolator, snapshot_verifier: pkt_sender.send(pkt_rs) pkt_sender.send(pkt_ns) wait_after_send(self.testing_controller, wait_time=5)
def _update_ipv6_prefix_store(self, ipv6_addr): interface = get_ipv6_interface_id(ipv6_addr) prefix = get_ipv6_prefix(ipv6_addr) self._service_manager.interface_to_prefix_mapper.save_prefix( interface, prefix)