graph "ring-4-duts" {
    layout="neato";
    overlap=false;
    esep="+20";
    splines=true;
    size=10;

    node [shape=record, fontname="DejaVu Sans Mono, Book"];
    edge [color="cornflowerblue", penwidth="2", fontname="DejaVu Serif, Book"];

    PC [
        label=" { PC | { <mgmt4> mgmt4 | <data4> data4 | <mgmt1> mgmt1 | &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; | <mgmt2> mgmt2 | <data3> data3 | <mgmt3> mgmt3 } }",
        pos="150,200!"
        requires="controller",
    ];

    R1 [
        label="{ { <mgmt> mgmt } | R1 \n 10.0.0.1/32 \n(lo) } | { <ring1> ring1 | <cross> cross | <ring2> ring2 }",
        pos="50,150!",
        requires="infix",
    ];

    R4 [
        label="{ { <mgmt> mgmt | <data> data } | R4 \n 10.0.0.4/32 \n(lo) } | { <ring1> ring1 | <cross> cross | <ring2> ring2 }",
        pos="50,50!"
        requires="infix",
    ];

    R2 [
        label="{ <ring2> ring2 | <cross> cross | <ring1> ring1 } | { { <mgmt> mgmt } | R2 \n10.0.0.2/32 \n(lo) }",
        pos="250,150!"
        requires="infix",
    ];

    R3 [
        label="{ <ring2> ring2 | <cross> cross | <ring1> ring1 } | { { <data> data | <mgmt> mgmt } | R3 \n10.0.0.3/32 \n(lo) }",
        pos="250,50!"
        requires="infix",
    ];

    # Management Connections
    PC:mgmt1 -- R1:mgmt [requires="mgmt", color="lightgray"]
    PC:mgmt2 -- R2:mgmt [requires="mgmt", color="lightgray"]
    PC:mgmt3 -- R3:mgmt [requires="mgmt", color="lightgray", overlap=false, weight=0.1]
    PC:mgmt4 -- R4:mgmt [requires="mgmt", color="lightgray", overlap=false, weight=0.1]

    # PC-Dut links
    PC:data3 -- R3:data [color="purple", headlabel=".1", label="192.168.3.0/24\n(Area 1)", taillabel=".2", labeldistance=2, fontcolor="purple"]
    PC:data4 -- R4:data [color="black", headlabel=".1", label="192.168.4.0/24&#160;", taillabel=".2", labeldistance=2, fontcolor="black"]

    # Ring
    R1:ring1 -- R2:ring2 [color="blue", headlabel=".2", label="(Area 0)\n10.0.12.0/30", taillabel=".1", labeldistance=2, fontcolor="blue"]
    R2:ring1 -- R3:ring2 [color="purple", headlabel=".2", label="10.0.23.0/30\n(Area 1)", taillabel=".1", labeljust=r, labeldistance=2, fontcolor="purple"]
    R4:ring1 -- R1:ring2 [color="brown", headlabel=".2", label="10.0.41.0/30\n(Area 2)", taillabel=".1", labeldistance=2, fontcolor="brown"]

    # Cross
    R1:cross -- R3:cross [color="purple", headlabel=".2", label="10.0.13.0/30\n(Area 1)", labeljust=r taillabel=".1", labeldistance=2, fontcolor="purple"]
    R2:cross -- R4:cross [color="brown", headlabel=".2", label="\n\n10.0.24.0/30\n(Area 2)", labeljust=r taillabel=".1", labeldistance=2, fontcolor="brown"]
}
