digraph G { rankdir=TB; labelloc=t; label="gtplab @ sysmocom"; subgraph cluster_gtplab2 { label="TRex (gtplab2)"; trex [label="TRex",shape=box3d]; gtplab2_172_32 [label="172.16.32.{2-101}/24"]; gtplab2_172_31 [label="172.16.31.{100-200}/24"]; } subgraph cluster_switch { label="Switch (100gb)"; switch_vlan1 [label="vlan1"]; switch_vlan2 [label="vlan2"]; } subgraph cluster_gtplab1 { label="UPF (gtplab1)"; gtplab1_172_31 [label="172.16.31.2/24"]; gtplab1_172_32 [label="172.16.32.1/24"]; upf [label="UPF\ntunend",shape=box3d]; } subgraph cluster_gtplab0 { label="CPF (gtplab0)"; rankdir=TB; gtplab0_172_31 [label="172.16.31.1/24"]; pfcp_tool [label="osmo-udp-load-gen",shape=box3d]; } pfcp_tool -> gtplab0_172_31 -> switch_vlan1 -> gtplab1_172_31 -> upf [label="PFCP",dir=both,style=dashed,color=black]; trex -> gtplab2_172_32 -> switch_vlan2 -> gtplab1_172_32 -> upf [label="GTPU UL (RAN)",style=bold, color=red]; upf -> gtplab1_172_31 -> switch_vlan1 -> gtplab2_172_31 -> trex [label="IP UL (CN)",style=bold, color=purple]; trex -> gtplab2_172_31 -> switch_vlan1 -> gtplab1_172_31 -> upf [label="IP DL (CN)",style=bold,color=blue]; upf -> gtplab1_172_32 -> switch_vlan2 -> gtplab2_172_32 -> trex [label="GTPU DL (RAN)",style=bold,color=darkgreen]; }