public inbox for passt-dev@passt.top
 help / color / mirror / code / Atom feed
blob 8f6b41ef557b6652e4ec6438dbf2050e1ad13141 3346 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
 
#! /usr/bin/python3

# SPDX-License-Identifier: GPL-2.0-or-later
#
# tasst - Test A Simple Socket Transport
#         library of test helpers for passt & pasta
#
# tasst/scenario/simple - Smallest sensible network to use passt/pasta
#
# Copyright Red Hat
# Author: David Gibson <david@gibson.dropbear.id.au>

from tasst import Tasst
from tasst.nstool import UnshareSite
from tasst.address import IpiAllocator, TEST_NET_2, TEST_NET6_TASST_B
from tasst.transfer import BaseTransferTasst, MetaTcpUploadTasst, MetaUdpTransferTasst


class SimpleNetTasst(Tasst):
    """Base class for tests in a simple network 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 setUp(self):
        super().setUp()

        self.simhost = UnshareSite(type(self).__name__ + '.simhost',
                                   '-Ucnpf --mount-proc')
        self.gw = UnshareSite(type(self).__name__ + '.gw', '-n',
                              parent=self.simhost, sudo=True)

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

        ipa_local = IpiAllocator()
        self.ip4, self.ip6 = ipa_local.next_ipis()
        self.gw_ip4, self.gw_ip6 = ipa_local.next_ipis()

        ipa_remote = IpiAllocator(TEST_NET_2, TEST_NET6_TASST_B)
        self.remote_ip4, self.remote_ip6 = ipa_remote.next_ipis()

        self.gw.ifup('lo')
        self.gw.ifup(self.gw_ifname, self.gw_ip4, self.gw_ip6,
                     self.remote_ip4, self.remote_ip6)

        self.simhost.ifup('lo')
        self.simhost.ifup(self.ifname, self.ip4, self.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(self.ifname, family='inet6', scope='link')[0]

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

    def tearDown(self):
        self.gw.close()
        self.simhost.close()
        super().tearDown()


class SimpleNetConnectivityTasst(SimpleNetTasst, MetaTcpUploadTasst, MetaUdpTransferTasst):
    """
    Check connectivity between the simulated host and the gateway,
    before involving passt/pasta.

    :avocado: tags=meta

    """

    def setUp(self):
        super().setUp()

        BaseTransferTasst.subsetup(self, 'test/small.bin', self.simhost, self.gw,
                                   self.remote_ip4.ip, self.remote_ip6.ip, 10000)

debug log:

solving 8f6b41e ...
found 8f6b41e in https://archives.passt.top/passt-dev/20230516020135.1901256-21-david@gibson.dropbear.id.au/

applying [1/1] https://archives.passt.top/passt-dev/20230516020135.1901256-21-david@gibson.dropbear.id.au/
diff --git a/avocado/tasst/scenario/simple.py b/avocado/tasst/scenario/simple.py
new file mode 100644
index 0000000..8f6b41e

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

index at:
100644 8f6b41ef557b6652e4ec6438dbf2050e1ad13141	avocado/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).