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 (BTS)" OsmoTRX OsmoBTS OsmoPCU [style="dashed"] OsmoPCU -- OsmoBTS [label="pcu_sock"] OsmoTRX -- OsmoBTS { rank=same; OsmoBTS OsmoPCU } } subgraph cluster_1 { label = "Linux PC (Core)" OsmoBSC OsmoMSC OsmoHLR OsmoSGSN [style="dashed"] OsmoGGSN [style="dashed"] OsmoBTS -- OsmoBSC [label="Abis/IP"] OsmoBSC -- OsmoMSC [label="A/IP"] OsmoMSC -- OsmoHLR [label="GSUP/IP"] OsmoPCU -- OsmoSGSN [label="Gb/IP"] OsmoSGSN -- OsmoGGSN [label="Gn/IP"] { rank=same; OsmoMSC OsmoSGSN } } }