graph G { rankdir=LR; MS0 [label="MS",shape=box] MS1 [label="MS",shape=box] MS2 [label="MS",shape=box] MS0--PHY [label="Um"] MS1--PHY [label="Um"] MS2--PHY [label="Um"] subgraph cluster_0 { label = "sysmoBTS (all-in-one)" OsmoBTS OsmoPCU [style="dashed"] PHY -- OsmoBTS [label="shmem msgq"] PHY -- OsmoPCU [label="shmem msgq"] OsmoPCU -- OsmoBTS [label="pcu_sock"] { rank=same; OsmoBTS OsmoPCU } OsmoBSC OsmoMSC OsmoHLR OsmoSGSN [style="dashed"] OsmoGGSN [style="dashed"] OsmoBTS -- OsmoBSC [label="Abis/IP\n(lo)"] OsmoPCU -- OsmoSGSN [label="Gb/IP\n(lo)"] OsmoSGSN -- OsmoGGSN [label="Gn/IP\n(lo)"] OsmoBSC -- OsmoMSC [label="A/IP\n(lo)"] OsmoMSC -- OsmoHLR [label="GSUP/IP\n(lo)"] { rank=same; OsmoMSC OsmoSGSN } } }