passt: Relicense to GPL 2.0, or any later version
In practical terms, passt doesn't benefit from the additional
protection offered by the AGPL over the GPL, because it's not
suitable to be executed over a computer network.
Further, restricting the distribution under the version 3 of the GPL
wouldn't provide any practical advantage either, as long as the passt
codebase is concerned, and might cause unnecessary compatibility
dilemmas.
Change licensing terms to the GNU General Public License Version 2,
or any later version, with written permission from all current and
past contributors, namely: myself, David Gibson, Laine Stump, Andrea
Bolognani, Paul Holzinger, Richard W.M. Jones, Chris Kuhn, Florian
Weimer, Giuseppe Scrivano, Stefan Hajnoczi, and Vasiliy Ulyanov.
Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
2023-04-05 20:11:44 +02:00
|
|
|
# SPDX-License-Identifier: GPL-2.0-or-later
|
2021-09-27 15:10:35 +02:00
|
|
|
#
|
|
|
|
# PASST - Plug A Simple Socket Transport
|
|
|
|
# for qemu/UNIX domain socket mode
|
|
|
|
#
|
|
|
|
# PASTA - Pack A Subtle Tap Abstraction
|
|
|
|
# for network namespace/tap device mode
|
|
|
|
#
|
|
|
|
# test/two_guests/basic - Check basic functionality with two guests
|
|
|
|
#
|
|
|
|
# Copyright (c) 2021 Red Hat GmbH
|
|
|
|
# Author: Stefano Brivio <sbrivio@redhat.com>
|
|
|
|
|
2022-07-15 07:21:34 +02:00
|
|
|
g1tools ip jq dhclient socat cat
|
|
|
|
g2tools ip jq dhclient socat cat
|
2022-09-26 12:43:40 +02:00
|
|
|
htools ip jq
|
2021-09-27 15:10:35 +02:00
|
|
|
|
|
|
|
test Interface names
|
2022-06-10 04:32:42 +02:00
|
|
|
g1out IFNAME1 ip -j link show | jq -rM '.[] | select(.link_type == "ether").ifname'
|
|
|
|
g2out IFNAME2 ip -j link show | jq -rM '.[] | select(.link_type == "ether").ifname'
|
2022-07-15 07:21:40 +02:00
|
|
|
hout HOST_IFNAME ip -j -4 route show|jq -rM '[.[] | select(.dst == "default").dev] | .[0]'
|
2022-07-22 07:31:13 +02:00
|
|
|
hout HOST_IFNAME6 ip -j -6 route show|jq -rM '[.[] | select(.dst == "default").dev] | .[0]'
|
2021-09-27 15:10:35 +02:00
|
|
|
check [ -n "__IFNAME1__" ]
|
|
|
|
check [ -n "__IFNAME2__" ]
|
|
|
|
|
|
|
|
test DHCP: addresses
|
2022-07-07 16:39:09 +02:00
|
|
|
guest1 ip link set dev __IFNAME1__ up
|
2022-06-10 04:32:43 +02:00
|
|
|
guest1 /sbin/dhclient -4 __IFNAME1__
|
2022-07-07 16:39:09 +02:00
|
|
|
guest2 ip link set dev __IFNAME2__ up
|
|
|
|
guest2 /sbin/dhclient -4 __IFNAME2__
|
2022-06-10 04:32:42 +02:00
|
|
|
g1out ADDR1 ip -j -4 addr show|jq -rM '.[] | select(.ifname == "__IFNAME1__").addr_info[0].local'
|
|
|
|
g2out ADDR2 ip -j -4 addr show|jq -rM '.[] | select(.ifname == "__IFNAME2__").addr_info[0].local'
|
|
|
|
hout HOST_ADDR ip -j -4 addr show|jq -rM '.[] | select(.ifname == "__HOST_IFNAME__").addr_info[0].local'
|
2021-09-27 15:10:35 +02:00
|
|
|
check [ "__ADDR1__" = "__HOST_ADDR__" ]
|
|
|
|
check [ "__ADDR2__" = "__HOST_ADDR__" ]
|
|
|
|
|
|
|
|
test DHCPv6: addresses
|
2021-10-21 20:10:23 +02:00
|
|
|
# Link is up now, wait for DAD to complete
|
2024-10-18 03:35:51 +02:00
|
|
|
guest1 while ip -j -6 addr show tentative | jq -e '.[].addr_info'; do sleep 0.1; done
|
|
|
|
guest2 while ip -j -6 addr show tentative | jq -e '.[].addr_info'; do sleep 0.1; done
|
2021-09-27 15:10:35 +02:00
|
|
|
guest1 /sbin/dhclient -6 __IFNAME1__
|
2022-07-07 16:39:09 +02:00
|
|
|
guest2 /sbin/dhclient -6 __IFNAME2__
|
2024-10-18 03:35:52 +02:00
|
|
|
# Wait for DAD to complete on the DHCP address
|
|
|
|
guest1 while ip -j -6 addr show tentative | jq -e '.[].addr_info'; do sleep 0.1; done
|
|
|
|
guest2 while ip -j -6 addr show tentative | jq -e '.[].addr_info'; do sleep 0.1; done
|
2023-12-08 18:41:36 +01:00
|
|
|
g1out ADDR1_6 ip -j -6 addr show|jq -rM '[.[] | select(.ifname == "__IFNAME1__").addr_info[] | select(.prefixlen == 128).local] | .[0]'
|
|
|
|
g2out ADDR2_6 ip -j -6 addr show|jq -rM '[.[] | select(.ifname == "__IFNAME2__").addr_info[] | select(.prefixlen == 128).local] | .[0]'
|
2024-05-22 09:22:32 +02:00
|
|
|
hout HOST_ADDR6 ip -j -6 addr show|jq -rM '[.[] | select(.ifname == "__HOST_IFNAME6__").addr_info[] | select(.scope == "global" and .deprecated != true).local] | .[0]'
|
2021-09-27 15:10:35 +02:00
|
|
|
check [ "__ADDR1_6__" = "__HOST_ADDR6__" ]
|
|
|
|
check [ "__ADDR2_6__" = "__HOST_ADDR6__" ]
|
|
|
|
|
|
|
|
test TCP/IPv4: guest 1 > guest 2
|
2022-06-10 04:32:42 +02:00
|
|
|
g1out GW1 ip -j -4 route show|jq -rM '.[] | select(.dst == "default").gateway'
|
2022-07-15 07:21:34 +02:00
|
|
|
guest2b socat -u TCP4-LISTEN:10004 OPEN:msg,create,trunc
|
|
|
|
guest1 echo "Hello_from_guest_1" | socat -u STDIN TCP4:__GW1__:10004
|
2021-09-27 15:10:35 +02:00
|
|
|
guest2w
|
2022-01-26 07:29:07 +01:00
|
|
|
sleep 1
|
2021-09-27 15:10:35 +02:00
|
|
|
g2out MSG2 cat msg
|
|
|
|
check [ "__MSG2__" = "Hello_from_guest_1" ]
|
|
|
|
|
|
|
|
test TCP/IPv6: guest 2 > guest 1
|
2022-06-10 04:32:42 +02:00
|
|
|
g2out GW2_6 ip -j -6 route show|jq -rM '.[] | select(.dst == "default").gateway'
|
2022-07-15 07:21:34 +02:00
|
|
|
guest1b socat -u TCP6-LISTEN:10001 OPEN:msg,create,trunc
|
|
|
|
guest2 echo "Hello_from_guest_2" | socat -u STDIN TCP6:[__GW2_6__%__IFNAME2__]:10001
|
2021-09-27 15:10:35 +02:00
|
|
|
guest1w
|
2022-01-26 07:29:07 +01:00
|
|
|
sleep 1
|
2021-09-27 15:10:35 +02:00
|
|
|
g1out MSG1 cat msg
|
|
|
|
check [ "__MSG1__" = "Hello_from_guest_2" ]
|
|
|
|
|
|
|
|
test UDP/IPv4: guest 1 > guest 2
|
2022-07-15 07:21:34 +02:00
|
|
|
guest2b socat -u TCP4-LISTEN:10004 OPEN:msg,create,trunc
|
|
|
|
guest1 echo "Hello_from_guest_1" | socat -u STDIN TCP4:__GW1__:10004
|
2021-09-27 15:10:35 +02:00
|
|
|
guest2w
|
2022-01-26 07:29:07 +01:00
|
|
|
sleep 1
|
2021-09-27 15:10:35 +02:00
|
|
|
g2out MSG2 cat msg
|
|
|
|
check [ "__MSG2__" = "Hello_from_guest_1" ]
|
|
|
|
|
|
|
|
test UDP/IPv6: guest 2 > guest 1
|
2022-07-15 07:21:34 +02:00
|
|
|
guest1b socat -u TCP6-LISTEN:10001 OPEN:msg,create,trunc
|
|
|
|
guest2 echo "Hello_from_guest_2" | socat -u STDIN TCP6:[__GW2_6__%__IFNAME2__]:10001
|
2021-09-27 15:10:35 +02:00
|
|
|
guest1w
|
2022-01-26 07:29:07 +01:00
|
|
|
sleep 1
|
2021-09-27 15:10:35 +02:00
|
|
|
g1out MSG1 cat msg
|
|
|
|
check [ "__MSG1__" = "Hello_from_guest_2" ]
|