From ad86a4f92598a89b30fabf7085e04db971093b02 Mon Sep 17 00:00:00 2001 From: Drazen Popovic Date: Tue, 9 Dec 2025 13:15:52 +0100 Subject: [PATCH 1/2] Draft configure-netns.sh script for namespaced Leios experiments --- demo/2025-11/build.nix | 6 ++- demo/2025-11/configure-netns.sh | 74 +++++++++++++++++++++++++++++++++ 2 files changed, 79 insertions(+), 1 deletion(-) create mode 100644 demo/2025-11/configure-netns.sh diff --git a/demo/2025-11/build.nix b/demo/2025-11/build.nix index a5db014f2..fd15abd6e 100644 --- a/demo/2025-11/build.nix +++ b/demo/2025-11/build.nix @@ -11,7 +11,11 @@ name = "dev-leios-202511-demo"; src = ./.; inputsFrom = [ config.devShells.dev-demo ]; - packages = [ pkgs.process-compose ]; + packages = [ + pkgs.process-compose + pkgs.iproute2 + pkgs.sqlite + ]; inherit (config.devShells.dev-demo) IMMDB_SERVER CARDANO_NODE; }; diff --git a/demo/2025-11/configure-netns.sh b/demo/2025-11/configure-netns.sh new file mode 100644 index 000000000..c07dcc800 --- /dev/null +++ b/demo/2025-11/configure-netns.sh @@ -0,0 +1,74 @@ +NS_PREFIX="leios_experiment" +NS_UPSTREAM="${NS_PREFIX}-upstream" +NS_NODE0="${NS_PREFIX}-node0" +NS_DOWNSTREAM="${NS_PREFIX}-downstream" + +# Delete all namespaces +ip netns del "$NS_UPSTREAM"; +ip netns del "$NS_NODE0"; +ip netns del "$NS_DOWNSTREAM"; + +# Create all namespaces +ip netns add "$NS_UPSTREAM"; +ip netns add "$NS_NODE0"; +ip netns add "$NS_DOWNSTREAM"; + +# Create a VETH link upstream <-> node0 +ip link add "up->n0" type veth peer name "n0->up" +ip link set "up->n0" netns "$NS_UPSTREAM" +ip link set "n0->up" netns "$NS_NODE0" +ip netns exec "$NS_UPSTREAM" ip link set "up->n0" up +ip netns exec "$NS_NODE0" ip link set "n0->up" up + +# Create a VETH link node0 <-> downstream +ip link add "n0->down" type veth peer name "down->n0" +ip link set "n0->down" netns "$NS_NODE0" +ip link set "down->n0" netns "$NS_DOWNSTREAM" +ip netns exec "$NS_NODE0" ip link set "n0->down" up +ip netns exec "$NS_DOWNSTREAM" ip link set "down->n0" up + +# Configure IFB devices for TC +ip netns exec "$NS_UPSTREAM" ip link add "ifb!up->n0" type ifb +ip netns exec "$NS_NODE0" ip link add "ifb!n0->up" type ifb +ip netns exec "$NS_NODE0" ip link add "ifb!n0->down" type ifb +ip netns exec "$NS_DOWNSTREAM" ip link add "ifb!down->n0" type ifb + +ip netns exec "$NS_UPSTREAM" ip link set "ifb!up->n0" up +ip netns exec "$NS_NODE0" ip link set "ifb!n0->up" up +ip netns exec "$NS_NODE0" ip link set "ifb!n0->down" up +ip netns exec "$NS_DOWNSTREAM" ip link set "ifb!down->n0" up + +# Configure traffic control + +function limit_rate() { + ns="$1" + veth_dev="$2" + rate="$3" + ip netns exec "$ns" tc qdisc add dev "$veth_dev" root handle 1: htb default 1 + ip netns exec "$ns" tc class add dev "$veth_dev" parent 1: classid 1:1 htb rate "$rate" + ip netns exec "$ns" tc qdisc add dev "$veth_dev" parent 1:1 handle 10: fq_codel +} + +function delay() { + ns="$1" + veth_dev="$2" + delay="$3" + ip netns exec "$ns" tc qdisc add dev "$veth_dev" handle ffff: ingress + ip netns exec "$ns" tc filter add dev "$veth_dev" parent ffff: protocol ip u32 match u32 0 0 action mirred egress redirect dev "ifb!$veth_dev" + ip netns exec "$ns" tc qdisc add dev "ifb!$veth_dev" root netem delay "$delay" +} + +limit_rate "$NS_UPSTREAM" "up->n0" "100mbit" +delay "$NS_UPSTREAM" "up->n0" "20ms" + +limit_rate "$NS_NODE0" "n0->up" "100mbit" +delay "$NS_NODE0" "n0->up" "20ms" +limit_rate "$NS_NODE0" "n0->down" "100mbit" +delay "$NS_NODE0" "n0->down" "20ms" + +limit_rate "$NS_DOWNSTREAM" "down->n0" "100mbit" +delay "$NS_DOWNSTREAM" "down->n0" "20ms" + +# Configure UPSTREAM network +# ip netns exec "$NS_UPSTREAM" ip addr add "$NET_NODE0" dev "upstream->node0" + From 23a5fa933f0afaa7bb24b21ae0fdedc242aa3316 Mon Sep 17 00:00:00 2001 From: Drazen Popovic Date: Tue, 9 Dec 2025 13:37:55 +0100 Subject: [PATCH 2/2] Configure IP assignments and network routes --- demo/2025-11/configure-netns.sh | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/demo/2025-11/configure-netns.sh b/demo/2025-11/configure-netns.sh index c07dcc800..939aefb36 100644 --- a/demo/2025-11/configure-netns.sh +++ b/demo/2025-11/configure-netns.sh @@ -2,6 +2,9 @@ NS_PREFIX="leios_experiment" NS_UPSTREAM="${NS_PREFIX}-upstream" NS_NODE0="${NS_PREFIX}-node0" NS_DOWNSTREAM="${NS_PREFIX}-downstream" +IP_UPSTREAM="10.0.0.1" +IP_NODE0="10.0.0.2" +IP_DOWNSTREAM="10.0.0.3" # Delete all namespaces ip netns del "$NS_UPSTREAM"; @@ -69,6 +72,9 @@ delay "$NS_NODE0" "n0->down" "20ms" limit_rate "$NS_DOWNSTREAM" "down->n0" "100mbit" delay "$NS_DOWNSTREAM" "down->n0" "20ms" -# Configure UPSTREAM network -# ip netns exec "$NS_UPSTREAM" ip addr add "$NET_NODE0" dev "upstream->node0" +# Configure IP assignments and network routes +ip netns exec "$NS_UPSTREAM" ip addr add local "$IP_UPSTREAM" peer "$IP_NODE0" dev "up->n0" +ip netns exec "$NS_NODE0" ip addr add local "$IP_NODE0" peer "$IP_UPSTREAM" dev "n0->up" +ip netns exec "$NS_NODE0" ip addr add local "$IP_NODE0" peer "$IP_DOWNSTREAM" dev "n0->down" +ip netns exec "$NS_DOWNSTREAM" ip addr add local "$IP_DOWNSTREAM" peer "$IP_NODE0" dev "down->n0"