graph {
  ogt [label="osmo-gsm-tester"]

  ogt -- {iperf3cli ofono bts sgsn ggsn iperf3srv} [style=dashed]

  subgraph ogt_sub {
    rankdir = LR

    subgraph clusterNetns {
        graph[style=dotted];
        label="modem netns";
        iperf3cli [label = "iperf3 cli"]
        modemiface [label = "modem netiface"]
        iperf3cli -- modemiface [label = "IP"]
    }

    subgraph clusterdefault {
        graph[style=dotted];
        label="default netns";
        ofono
        udev
        modem
        bts [label = "osmo-bts+pcu"]
        btshw [label = "BTS HW"]
        sgsn [label = "osmo-sgsn"]
        ggsn [label = "osmo-ggsn"]
        tun [label = "tun netiface"]
        iperf3srv [label = "iperf3-srv"]

        {rank = same; ofono; bts; sgsn; ggsn; iperf3srv}
        {rank = same; modem; btshw}

        ofono -- modem [label = "QMI"]
        ofono -- udev
        bts -- btshw [label = "L1SAP"]
        modem -- btshw [label = "Um"]
        bts -- sgsn [label = "Gb"]
        sgsn -- ggsn [label = "GTP"]
        ggsn -- tun
        tun -- iperf3srv [label = "IP"]
    }

    udev -- modemiface
    modemiface -- modem
  }
}
