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