The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
digraph "ospf legend" {
	node [ color=gray50 fontsize=14 ];
	edge [ color=gray50 fontsize=8  ];
	router0 -> network0 -> edgerouter0 [ style=invis ];
	edgenetwork0 -> linkrouter0 [ style=invis ];
	linkdst0 -> summarynetwork0 [ style=invis ];
	router0 [
		style="solid"
		shape="box"
		label="ospf\nrouter"
	];
	router1 [
		peripheries="2"
		style="solid"
		shape="box"
		label="current\nlocation"
	];
	router2 [
		style="bold"
		shape="box"
		label="area border\nrouter"
	];
	router3 [
		style="dashed"
		shape="box"
		label="summary AS\nboundary router"
	];
	{ rank=same; router0; router1; router2; router3; }
	network0 [
		style="bold"
		shape="ellipse"
		label="transit\nnetwork"
	];
	network1 [
		style="dashed"
		shape="ellipse"
		label="summary\nnetwork"
	];
	network2 [
		color="gray35"
		style="solid"
		shape="egg"
		label="AS external\nnetwork"
	];
	network3 [
		style="solid"
		shape="hexagon"
		label="link\nprefix"
	];
	network4 [
		style="solid"
		shape="octagon"
		label="intra-area\nprefix"
	];
	{ rank=same; network0; network1; network2; network3; network4; }
	edgenetwork0 [
		style="solid"
		shape="ellipse"
		label="network"
	];
	edgenetwork1 [
		style="bold"
		shape="ellipse"
		label="transit\nnetwork"
	];
	edgenetwork2 [
		color="gray35"
		style="solid"
		shape="egg"
		label="ASE type 1\nnetwork"
	];
	edgenetwork3 [
		color="gray35"
		style="solid"
		shape="egg"
		label="ASE type 2\nnetwork"
	];
	edgenetwork4 [
		style="solid"
		shape="hexagon"
		label="link\nprefix"
	];
	edgenetwork5 [
		style="solid"
		shape="octagon"
		label="intra-area\nrouter prefix"
	];
	edgerouter0 [
		style="solid"
		shape="box"
		label="router"
	];
	edgerouter1 [
		style="solid"
		shape="box"
		label="designated\nrouter"
	];
	edgerouter2 [
		style="solid"
		shape="box"
		label="AS boundary\nrouter"
	];
	edgerouter3 [
		style="solid"
		shape="box"
		label="AS boundary\nrouter"
	];
	edgerouter4 [
		style="solid"
		shape="box"
		label="router"
	];
	edgerouter0 -> edgenetwork0 [
		taillabel="cost"
		style="solid"
		headlabel="Interface"
	];
	edgenetwork1 -> edgerouter1 [
		style="bold"
	];
	edgenetwork2 -> edgerouter2 [
		taillabel="LS-ID"
		color="gray35"
		style="solid"
		headlabel="cost"
	];
	edgenetwork3 -> edgerouter3 [
		taillabel="LS-ID"
		color="gray35"
		style="dashed"
		headlabel="cost"
	];
	edgenetwork4 -> edgerouter4 [
		taillabel="Interface"
		style="bold"
	];
	edgenetwork5 -> edgerouter4 [
		taillabel="LS-ID"
		style="bold"
	];
	{ rank=same; edgerouter0; edgenetwork1; edgenetwork2; edgenetwork3; edgenetwork4; edgenetwork5; }
	linkrouter0 [
		style="solid"
		shape="box"
		label="router"
	];
	linkrouter1 [
		style="solid"
		shape="box"
		label="router"
	];
	linkrouter2 [
		style="solid"
		shape="box"
		label="designated\nrouter"
	];
	linkrouter3 [
		style="solid"
		shape="box"
		label="router"
	];
	linkrouter4 [
		style="solid"
		shape="hexagon"
		label="link\nprefix"
	];
	linkrouter5 [
		style="solid"
		shape="octagon"
		label="intra-area\nnetwork prefix"
	];
	linkdst0 [
		style="solid"
		shape="box"
		label="router"
	];
	linkdst1 [
		style="bold"
		shape="ellipse"
		label="transit\nnetwork"
	];
	linkdst2 [
		style="bold"
		shape="ellipse"
		label="transit\nnetwork"
	];
	linkdst3 [
		style="solid"
		shape="box"
		label="router"
	];
	linkdst4 [
		style="bold"
		shape="ellipse"
		label="transit\nnetwork"
	];
	linkrouter0 -> linkdst0 [
		style="solid"
		label="point-to-point\nlink"
	];
	linkrouter1 -> linkdst1 [
		style="solid"
		label="link to\ntransit network"
	];
	linkrouter2 -> linkdst2 [
		style="bold"
		label="link to\ntransit network"
	];
	linkrouter3 -> linkdst3 [
		style="dotted"
		label="virtual\nlink"
	];
	linkrouter4 -> linkdst4 [
		style="solid"
	];
	linkrouter5 -> linkdst4 [
		taillabel="LS-ID"
		style="bold"
	];
	{ rank=same; linkrouter0; linkrouter1; linkrouter2; linkrouter3; linkrouter4; linkrouter5; }
	summarynetwork0 [
		style="dashed"
		shape="ellipse"
		label="summary\nnetwork"
	];
	summarynetwork1 [
		style="dashed"
		shape="box"
		label="summary AS\nboundary router"
	];
	summarynetwork2 [
		style="solid"
		shape="box"
		label="router and summary \nAS boundary router"
	];
	summarynetwork3 [
		color="gray35"
		style="solid"
		shape="egg"
		label="ASE\nnetwork"
	];
	summaryrouter0 [
		style="bold"
		shape="box"
		label="area border\nrouter"
	];
	summaryrouter1 [
		style="bold"
		shape="box"
		label="area border\nrouter"
	];
	summaryrouter2 [
		color="black"
		style="bold"
		shape="box"
		label="area border\nrouter"
	];
	summaryrouter3 [
		color="gray35"
		style="dashed"
		shape="box"
		label="summary AS\nboundary router"
	];
	summarynetwork0 -> summaryrouter0 [
		taillabel="LS-ID"
		style="dashed"
		headlabel="cost"
	];
	summarynetwork1 -> summaryrouter1 [
		taillabel="LS-ID"
		style="dashed"
		headlabel="cost"
	];
	summarynetwork2 -> summaryrouter2 [
		taillabel="LS-ID"
		color="gray75"
		style="dashed"
		headlabel="cost"
	];
	summarynetwork3 -> summaryrouter3 [
		taillabel="LS-ID"
		color="gray35"
		style="solid"
		headlabel="cost"
	];
	{ rank=same; summarynetwork0; summarynetwork1; summarynetwork2; summarynetwork3; }
}