public inbox for passt-dev@passt.top
 help / color / mirror / code / Atom feed
blob 57d7b000d4fd954d56c910f35078af914755dff7 3046 bytes (raw)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
 
#! /usr/bin/env avocado-runner-avocado-classless

# SPDX-License-Identifier: GPL-2.0-or-later
#
# Copyright Red Hat
# Author: David Gibson <david@gibson.dropbear.id.au>

"""
Test A Simple Socket Transport

scenario/simple.py - Smallest sensible network to use passt/pasta
"""

import contextlib

from tasst import address
from tasst.nstool import unshare_site
from tasst.exesite import Site
from tasst.transfer import test_transfers
from tasst.typecheck import typecheck


IFNAME = 'veth'
HOST_NET4 = address.TEST_NET_1
HOST_NET6 = address.TEST_NET6_TASST_A

ipa_local = address.IpiAllocator(HOST_NET4, HOST_NET6)
(IP4, IP6) = ipa_local.next_ipis()
(GW_IP4, GW_IP6) = ipa_local.next_ipis()

ipa_remote = address.IpiAllocator(address.TEST_NET_2,
                                  address.TEST_NET6_TASST_B)
(REMOTE_IP4, REMOTE_IP6) = ipa_remote.next_ipis()


class __SimpleNet:  # pylint: disable=R0903
    """A simple network setup scenario

    The sample network has 2 sites (network namespaces) connected with
    a veth link:
            [simhost]   <-veth->    [gw]

    gw is set up as the default router for simhost.

    simhost has addresses:
        self.IP4 (IPv4), self.IP6 (IPv6), self.ip6_ll (IPv6 link local)

    gw has addresses:
        self.GW_IP4 (IPv4), self.GW_IP6 (IPv6),
            self.gw_ip6_ll (IPv6 link local)
        self.REMOTE_IP4 (IPv4), self.REMOTE_IP6 (IPv6)

    The "remote" addresses are on a different subnet from the others,
    so the only way for simhost to reach them is via its default
    route.  This helps to exercise that we're actually using that,
    rather than just local net routes.

    """

    def __init__(self, hostsite, gwsite):
        self.simhost = typecheck(hostsite, Site)
        self.gw = typecheck(gwsite, Site)

        self.gw_ifname = 'gw' + IFNAME
        self.simhost.veth(IFNAME, self.gw_ifname, self.gw)

        self.gw.ifup('lo')
        self.gw.ifup(self.gw_ifname, GW_IP4, GW_IP6, REMOTE_IP4, REMOTE_IP6)

        self.simhost.ifup('lo')
        self.simhost.ifup(IFNAME, IP4, IP6)

        # Once link is up on both sides, SLAAC will run
        self.gw_ip6_ll = self.gw.addr_wait(self.gw_ifname,
                                           family='inet6', scope='link')[0]
        self.ip6_ll = self.simhost.addr_wait(IFNAME,
                                             family='inet6', scope='link')[0]

        # Set up the default route
        self.simhost.fg(f'ip -4 route add default via {GW_IP4.ip}', sudo=True)
        self.simhost.fg(
            f'ip -6 route add default via {self.gw_ip6_ll.ip} dev {IFNAME}',
            sudo=True
        )


@contextlib.contextmanager
def simple_net():
    with unshare_site('simhost', '-Ucnpf --mount-proc') as simhost, \
         unshare_site('gw', '-n', parent=simhost, sudo=True) as gw:
        yield __SimpleNet(simhost, gw)


@test_transfers(ip4=REMOTE_IP4.ip, ip6=REMOTE_IP6.ip, port=10000)
@contextlib.contextmanager
def simple_net_transfers():
    with simple_net() as net:
        yield (net.simhost, net.gw)

debug log:

solving 57d7b000 ...
found 57d7b000 in https://archives.passt.top/passt-dev/20230627025429.2209702-28-david@gibson.dropbear.id.au/
found 503a388a in https://archives.passt.top/passt-dev/20230627025429.2209702-27-david@gibson.dropbear.id.au/

applying [1/2] https://archives.passt.top/passt-dev/20230627025429.2209702-27-david@gibson.dropbear.id.au/
diff --git a/test/tasst/scenario/simple.py b/test/tasst/scenario/simple.py
new file mode 100644
index 00000000..503a388a


applying [2/2] https://archives.passt.top/passt-dev/20230627025429.2209702-28-david@gibson.dropbear.id.au/
diff --git a/test/tasst/scenario/simple.py b/test/tasst/scenario/simple.py
index 503a388a..57d7b000 100644

Checking patch test/tasst/scenario/simple.py...
Applied patch test/tasst/scenario/simple.py cleanly.
Checking patch test/tasst/scenario/simple.py...
Applied patch test/tasst/scenario/simple.py cleanly.

index at:
100644 57d7b000d4fd954d56c910f35078af914755dff7	test/tasst/scenario/simple.py

Code repositories for project(s) associated with this public inbox

	https://passt.top/passt

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for IMAP folder(s).