Exemple #1
0
    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,
     )
Exemple #3
0
    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)
Exemple #5
0
 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)