aboutgitcodebugslistschat
path: root/test/demo/pasta
blob: 11e4d3c722e1320fdff1245fe1d9c98ed5190654 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
12
13












                                               








                                        
                       
                                       





















                                       
                                                  
         
                             
                            







                                                   

                                            












                                                              
                    


                                     
                                  
         
                    






                                                
                                  











                                                           
                                                 
         
                                                                    






                                       
         
                                                
         
                                                                         




                                                
                                                                               
         
                                     
         
                                                                          

















                                       
                                     

         
                                  
         
                                    

















                                                  
            
            
                  
                        
         
                                           

         
                                            











                                                              


                                                                   



                                                                   

                           
                         
         
                                                                         

                        
                         
         
                                                                         



                            
                          
         
                                                                          

                        
                          
         
                                                                          



                           


                                                                   



                                                                   

                           
                         
         
                                                                               

                        
                         
         
                                                                               



                            
                          
         
                                                                                

                        
                          
         
                                                                                
























                                    
# 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>

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

say	Let's fetch the source
sleep	1
host	cd __STATEDIR__
host	git clone git://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 __STATEDIR__/passt
passtb	./pasta -P pasta.pid
sleep	3

nl
nl
say	For convenience, let's enter this namespace
nl
say	  from another terminal.
sleep	3
ns	cd __STATEDIR__/passt
nsout	TARGET_PID pgrep -P $(cat pasta.pid)
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	/sbin/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	/sbin/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	socat TCP6-LISTEN:31337,bind=[::1] STDOUT
sleep	2
host	echo "Hello from the host" | socat -u STDIN TCP6:[::1]:31337
sleep	5

nl
nl
say	Now the other way around...
nl
say	  we can use a loopback address
sleep	2
hostb	socat TCP6-LISTEN:31337,bind=[::1] STDIO
sleep	2
ns	echo "Hello from the namespace" | socat -u STDIN TCP6:[::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	socat TCP4-LISTEN:31337 STDIO
sleep	2
ns	echo "Hello from the namespace" | socat -u STDIN TCP4:__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
passtb	./pasta -p ../demo_pasta.pcap
sleep	2
passt	
passt	/sbin/dhclient -4 --no-pid
sleep	2
hostb	tshark -r ../demo_pasta.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 -P pasta.pid
sleep	2

nsout	TARGET_PID pgrep -P $(cat pasta.pid)
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
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