Porting PicoTCP WIP

This commit is contained in:
2025-10-29 14:29:06 +01:00
parent 6722f42e68
commit 815c2239fe
464 changed files with 235009 additions and 24 deletions

View File

@ -0,0 +1,135 @@
#PicoTCP topology test environment.
#Guidelines to prepare test scenarios.
#
#The interface is simple, it has three objects:
# * Topology
# * Network
# * Host
#
#And a handful of helping routines, such as:
# * start()
# * loop()
# * sleep()
# * wait()
#
#
########################################################################
#== Create a test scenario ==#
########################################################################
# Every script file will start with: "#!/usr/bin/python" in the first
# line, and will have execution permissions. This script is an exception
# because it is not intended to be run, as it is in fact a walkthrough to
# all the functionalities.
# Importing the topology objects is mandatory, so add:
from topology import *
# A Topology must be created to use all other objects:
T = Topology()
# Now, we can create "Network" objects. The networks will have address
# 172.16.X.0/24, where 'X' is the order of creation, starting from 1.
#
network1 = Network(T)
network2 = Network(T)
# The two networks are separated and using different address pools:
#
# ## ### ## ## ## ### ## ##
# # network1 # # network2 #
# # 172.16.1.0 # # 172.16.2.0 #
# ## ## ###### ## ## ######
#
# If you are running your test as root, you can also add a tun-tap connection
# to the network, which will be automatically configured:
networkLocal = Network(T,'tap0')
# In the same way ad networks, you can create a PicoTCP Host that connects to a
# network as follows:
host1_1 = Host(T, network1)
# Also, you can specify a role for the application/host, by using picoapp's
# args format for '--app'. For example, the machine below will ping the previously
# created one:
host1_2 = Host(T, network1, args ="ping:172.16.1.1:")
#
# ## ### ## ## ## ### ## ##
# host1.1--# network1 # # network2 #
# # 172.16.1.0 # # 172.16.2.0 #
# ## ## ###### ## ## ######
# /
# host1.2___/
# (ping host1.1)
#
# At this point, a picoTCP host with two network cards can connect
# the two networks like this:
router1 = Host(T, network1, network2)
#
# ## ### ## ## router1 ## ### ## ##
# host1.1--# network1 #__/ \__ # network2 #
# # 172.16.1.0 # # 172.16.2.0 #
# ## ## ###### ## ## ######
# /
# host1.2___/
# (ping host1.1)
# Now, we can attach an host to the second network too:
# Connection to the host can be an emulated channel, i.e.
# it is possible to add bidirectional delay and limited
# bandwidth in the link between the host and the network:
#
host2_2 = Host(network2, delay1="100", bw1="500K")
#
# ## ### ## ## router1 ## ### ## ##
# host1.1--# network1 #__/ \__ # network2 #
# # 172.16.1.0 # # 172.16.2.0 #
# ## ## ###### ## ## ######
# / *
# host1.2.__/ \._*_*_host2.2
# (ping host1.1)
## Since the routes will be automatically added before the test starts,
# all the hosts in the networks will be reachable to each other:
# all the picoapps will have their static routes populated automatically
# by the topology tool, no matter how complex the network is. The only
# requirement is that all the networks share at least one router.
#
# For this reason, we can create a host that pings across the network:
host1_4 = Host(T, network1, args="ping:172.16.2.2:")
#
# host1.4.
# (ping 2.2) \
# \## ### ## ## router1 ## ### ## ##
# host1.1--# network1 #__/ \__ # network2 #
# # 172.16.1.0 # # 172.16.2.0 #
# ## ## ###### ## ## ######
# / *
# host1.2.__/ \._*_*_host2.2
# (ping host1.1)
########################################################################
#== Start the test ==#
########################################################################
# All the host will be connected and activated when you call:
start()
# At this point you may want to define your exit strategy. Valid commands
# are:
loop() # Loop forever, until the test is interrupted (e.g. by ctrl+c)
sleep(N) # Sleep N seconds
wait(host1_4) # Wait for application running on host 1.4, and return only if
# it has terminated
########################################################################
#== End the test ==#
########################################################################
# Always call:
cleanup()