aboutgitcodebugslistschat
path: root/test/demo/pasta
blob: e2517ed343880859f6ae18693437590edf91d72e (plain) (tree)















































                                               
                                                  

                            
               







                                                   

                                                                            












                                                              
                    


                                     
                            
         
                    






                                                
                            





















                                                           
         







                                                               
                                                                               

























                                                            
                                  



















                                                  
            
            
                  
                        
         
                              

         
                                                                            











                                                              


                                                                   



                                                                   

                           
                         
         
                                                                         

                        
                         
         
                                                                         



                            
                          
         
                                                                          

                        
                          
         
                                                                          



                           


                                                                   



                                                                   

                           
                         
         
                                                                               

                        
                         
         
                                                                               



                            
                          
         
                                                                                

                        
                          
         
                                                                                








                        
                            















                                    
# SPDX-License-Identifier: AGPL-3.0-or-later
#
# 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/demo/pasta - Quick introduction to pasta
#
# Copyright (c) 2021 Red Hat GmbH
# Author: Stefano Brivio <sbrivio@redhat.com>

onlyfor	pasta
say	This is a short introduction to 
em	pasta
say	.
nl
nl
sleep	3

say	Let's fetch the source
sleep	1
tempdir	TEMPDIR
host	cd __TEMPDIR__
host	git clone https://passt.top/passt
sleep	1

say	 and build it.
sleep	1
host	cd passt
host	make
sleep	1

nl
nl
say	A quick look at the man page...
sleep	1
hostb	man ./pasta.1
sleep	5
hostb	/pasta
sleep	2
hostb	n
sleep	2
hostb	n
sleep	10

nl
say	  without PID, it will create a namespace.
sleep	3
passt	cd __TEMPDIR__/passt
passtb	./pasta
sleep	3

nl
nl
say	For convenience, let's enter this namespace
nl
say	  from another terminal.
sleep	3
ns	pstree -p | grep pasta
nsout	TARGET_PID pstree -p | grep pasta | sed -n 's/.*(\([0-9].*\))$/\1/p'
sleep	1

ns	nsenter -t __TARGET_PID__ -U -n --preserve-credentials
sleep	5

nl
nl
say	Now, we're ready to configure networking.
sleep	2
host	q

nl
nl
ns	ip link show
sleep	3
say	Let's configure IPv4 first...
sleep	2
ns	dhclient -4 --no-pid
sleep	2
ns	ip addr show
sleep	5

nl
say	  SLAAC is already done, but we can also
nl
say	  get another address via DHCPv6.
sleep	3
ns	dhclient -6 --no-pid
sleep	3

nl
nl
say	Let's try to communicate between host and namespace
sleep	2
nl
say	  ...there's no need to configure port forwarding,
nl
say	  pasta detects bound ports and forwards them.
sleep	3

nsb	nc -6 -l -p 31337
sleep	2
host	echo "Hello from the host" | nc -N ::1 31337
sleep	5

nl
nl
say	Now the other way around...
nl
say	  we can use a loopback address
sleep	2
hostb	nc -l -p 31337
sleep	2
ns	echo "Hello from the namespace" | nc -N 127.0.0.1 31337
sleep	5

nl
say	  or the address of the default gateway.
sleep	2
nsout	GW ip -j -4 route show|jq -rM '.[] | select(.dst == "default").gateway'
sleep	5
hostb	nc -l -p 31337
sleep	2
ns	echo "Hello from the namespace" | nc -N __GW__ 31337
sleep	3

nl
nl
say	UDP...
sleep	2
ns	host -t A passt.top
sleep	3
say	 seems to work too.
sleep	3

nl
nl
em	pasta
say	 can also take packet captures.
sleep	3
passt	exit
sleep	2
temp	TEMP
passtb	./pasta -p __TEMP__.pcap
sleep	2
passt	
passt	/sbin/dhclient -4 --no-pid
sleep	2
hostb	tshark -r __TEMP__.pcap
sleep	5

nl
nl
say	And there are tons of totally useless
sleep	1
bsp	14
say	absolutely useful features
nl
say	  you can find described in the man page.
sleep	5

nl
nl
say	Let's have a (quick!) look at performance
nl
say	  more in the "Performance" section below.
sleep	3
ns	exit
passt	exit
passt	make clean
passt	CFLAGS="-g" make
sleep	2
passtb	perf record -g ./pasta
sleep	2

nsout	TARGET_PID pstree -p | grep pasta | sed -n 's/.*(\([0-9].*\))$/\1/p'
sleep	1
ns	nsenter -t __TARGET_PID__ -U -n --preserve-credentials
sleep	5

nl
nl
info	Throughput in Gbps, latency in µs
th	flow init>ns ns>init

set	OPTS -P4 -l 1M -w 32M -i1 --pacing-timer 100000

tr	TCP/IPv6 throughput
hostb	sleep 10; iperf3 -c ::1 __OPTS__
nsout	BW iperf3 -s1J | jq -rM ".end.sum_received.bits_per_second"
bw	__BW__ 10.0 20.0
sleep	5
nsb	sleep 10; iperf3 -c ::1 __OPTS__
hout	BW iperf3 -s1J | jq -rM ".end.sum_received.bits_per_second"
bw	__BW__ 10.0 20.0

tl	TCP/IPv6 RR latency
nsb	tcp_rr -6 --nolog
sleep	2
hout	LAT tcp_rr --nolog -c -H ::1 | sed -n 's/^throughput=\(.*\)/\1/p'
lat	__LAT__ 1000 500
sleep	2
hostb	tcp_rr -6 --nolog
sleep	2
nsout	LAT tcp_rr --nolog -c -H ::1 | sed -n 's/^throughput=\(.*\)/\1/p'
lat	__LAT__ 1000 500
sleep	2

tl	TCP/IPv6 CRR latency
nsb	tcp_crr -6 --nolog
sleep	2
hout	LAT tcp_crr --nolog -c -H ::1 | sed -n 's/^throughput=\(.*\)/\1/p'
lat	__LAT__ 1000 500
sleep	2
hostb	tcp_crr -6 --nolog
sleep	2
nsout	LAT tcp_crr --nolog -c -H ::1 | sed -n 's/^throughput=\(.*\)/\1/p'
lat	__LAT__ 1000 500
sleep	2

tr	TCP/IPv4 throughput
hostb	sleep 10; iperf3 -c 127.0.0.1 __OPTS__
nsout	BW iperf3 -s1J | jq -rM ".end.sum_received.bits_per_second"
bw	__BW__ 10.0 20.0
sleep	5
nsb	sleep 10; iperf3 -c 127.0.0.1 __OPTS__
hout	BW iperf3 -s1J | jq -rM ".end.sum_received.bits_per_second"
bw	__BW__ 10.0 20.0

tl	TCP/IPv4 RR latency
nsb	tcp_rr -4 --nolog
sleep	2
hout	LAT tcp_rr --nolog -c -H 127.0.0.1 | sed -n 's/^throughput=\(.*\)/\1/p'
lat	__LAT__ 1000 500
sleep	2
hostb	tcp_rr -4 --nolog
sleep	2
nsout	LAT tcp_rr --nolog -c -H 127.0.0.1 | sed -n 's/^throughput=\(.*\)/\1/p'
lat	__LAT__ 1000 500
sleep	2

tl	TCP/IPv4 CRR latency
nsb	tcp_crr -4 --nolog
sleep	2
hout	LAT tcp_crr --nolog -c -H 127.0.0.1 | sed -n 's/^throughput=\(.*\)/\1/p'
lat	__LAT__ 1000 500
sleep	2
hostb	tcp_crr -4 --nolog
sleep	2
nsout	LAT tcp_crr --nolog -c -H 127.0.0.1 | sed -n 's/^throughput=\(.*\)/\1/p'
lat	__LAT__ 1000 500
sleep	2

sleep	5
passt	exit
sleep	2
killp	PASST
killp	HOST
sleep	2
ns	cd __TEMPDIR__/passt
nsb	perf report -g --max-stack 3
sleep	10

nl
nl
say	I 
em	knew
say	 it. 
em	syscalls
say	.
sleep	5

nl
nl
say	Thanks for watching!
sleep	5