diff --git a/README.md b/README.md index c413c1f318154d7de8cc29b81972514b000bb592..907eafaa51a3e28602d80f0d3fae68e375f39965 100644 --- a/README.md +++ b/README.md @@ -72,6 +72,21 @@ A simple showcase how the controller can be addressed after on them. They are currently unsupported. - `controller` represents the `goSDN-controller`. +<div align="center" style="margin-bottom:3em; margin-top:4em"> + <img src="documentation/figures/overview/updated_controller_architecture_overview.drawio.png" /> + <p> Overview of the controller architecture</p> +</div> + +<div align="center" style="margin-bottom:3em; margin-top:4em"> + <img src="documentation/figures/nucleus/updated_controller_architecture_nucleus.drawio.png" /> + <p> Detailed view of nucleus </p> +</div> + +<div align="center" style="margin-bottom:3em; margin-top:4em"> + <img src="documentation/figures/plugins/plugin-device-interaction.drawio.png" /> + <p> Detailed view of plugin mechanism</p> +</div> + --- ## Concepts diff --git a/documentation/figures/goSDN-Architecture-Overall.drawio b/documentation/figures/goSDN-Architecture-Overall.drawio deleted file mode 100644 index c5cdc0859a6a95d186050232f32d86ec6fe68cd8..0000000000000000000000000000000000000000 --- a/documentation/figures/goSDN-Architecture-Overall.drawio +++ /dev/null @@ -1 +0,0 @@ -<mxfile host="Electron" modified="2022-02-17T14:42:51.009Z" agent="5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/16.5.1 Chrome/96.0.4664.110 Electron/16.0.7 Safari/537.36" etag="oVOpiNiALXjf1fX8wkFb" version="16.5.1" type="device"><diagram id="pwvA0ZA2h6faCE5rpLjt" name="Seite-1">7Vpbd5s4EP41fqwPd8NjTJJut23Wu845bfOmgAzayMgVIrb3168E4iaU2ElwtnuO/RI0Iw1i5ptvBoWJHa53HynYpF9JDPHEMuLdxL6cWJZpGh7/IyT7SuIHViVIKIrlpFawRP9AKTSktEAxzHsTGSGYoU1fGJEsgxHryQClZNuftiK4f9cNSOBAsIwAHkq/oZil8imsWSv/DaIkre9sekGlWYN6snySPAUx2XZE9tXEDikhrLpa70KIhfNqv1Trrp/QNhujMGPHLPj7Nt19/+E7q583/p3vpr9nn4sP0sojwIV84InlYW5vviLcrPArJrTUeD8LsdX5xLJt2zBM0BV5ifibkOXlTW3gntbimyLCsMhrBd9iZbzSSu+wfe1ySooshmLXJldvU8TgcgMiod1ykHFZytZYqjG4h3gOooekXBbK7WYkg+IhEMaqiN86bB7KXpU/Ls8ZJQ+w1sRwBYpyt5W8jr3VbLjr+NqLkDK464hkID5CsoaM7vkUqbU9CQqZFdZMjrctxswaOGkHX/U6IGGdNKbbyPMLGfwXAMHSAEGJC8ziC5FRfBRhkOcoKt0DKBuKOxFqw2k85zwY9xJx6LqOa1yNZ2oZhRgw9NhPX5275B0WBJVAryNjKZEJgqnbN5KTgkZQrusmnGpKDfLQFHdeAtnAVBnB5tFfH1T7PbJ7gYskAfcYnhO8jb3lHE5w/z3z2znndznD8UfLb/cwVZw4v91z9T6Q3AkFMYL6NbXuElHeOSKScT2PvQDhaUhhAJj/vOoHAwDdEMrSuQgGl19sNhhFoPTN03E23hrn1wbpBI2YGRwZEudUITF1LfkpmJo7je6/i8HUcaxa8KOrvdz1RvvuaAEp4k8M6f+F+NXks5UIHkv7jhlMDTtof54+qd+pBpi6IqDghb96bsTlCsOdRMh8bAy5XQSZBxA0ClhMQ4OWRvhWuJhNMZeBtYM3AEYxpWLv1BiZHcaIUlkNw/PCkIdKcCmvAfgCo0SQLyObjvSLIPYFyZGk5nvCGFnXjN9RRDzSgivmQNppBB1wcV7HKONlvD7LMZQugG8sLH+Dks81nu+bc1tTT5Qy0y0lmSh32npf58x6l4iTrWkG2ZbQh3zKM6Da+PNFbYzi5D+BwE4SzDQ5oKLrNbVp83kR5X9YNA/Db2xxu7v+8ulO8z5Ztgv3sl34JCK6Ej2ACq4D7UG/ZwQ0kueArqEDjIrINYpjcSMliKWpgnEIlrbEMOc7QFnCRw4fMQrhNcFxJTGl5Ct5bAUZ3F5xRlrWTzKbt20zbBRtJ21fdPQZQ2z/V0lDJLvSzLbCdtBhXr25Elb6tQ2Vv3hlDpM1LJv5dqE4ee1MiQr6yEPTmzGZXfKrGORpE7Qx2mNbqdDWEO7Be8L9mHfmDjqeCrhSViU/dOqvlNTB4A41Wsc/X3Z7bVtbg19adqv6czjzD5bnsZs095U1d4AltV8fr+Jq/TVsyjg5UvCheZk+k+WZLMc8S7A1Zwkzd0iWakKNRpbemSyV5D81WbqGAgHjOLIci+M0b55LcTJzbgfPDDcCw/FmQH1tdocc55tTDcudrCU0f32aa85eTk1z5jvxnGMqPOcd9w+bV/Bc4QJ/Ft1YLAcbJ7oNzD/vTM03Eude7sx0faYb0JompV7AdGbgD5jO8zTdnPV2ntNi3vpVaU5LOX2yei6JjwjKWz8gcU7VlfFh+7VYNb395s6++hc=</diagram></mxfile> \ No newline at end of file diff --git a/documentation/figures/goSDN-Architecture-sbi-concept-detail.drawio b/documentation/figures/goSDN-Architecture-sbi-concept-detail.drawio deleted file mode 100644 index ee2a511ccab5e69370c4a179d2ffe5fbc34d9a83..0000000000000000000000000000000000000000 --- a/documentation/figures/goSDN-Architecture-sbi-concept-detail.drawio +++ /dev/null @@ -1 +0,0 @@ -<mxfile host="Electron" modified="2022-02-17T14:38:29.165Z" agent="5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/16.5.1 Chrome/96.0.4664.110 Electron/16.0.7 Safari/537.36" etag="cQigzejTX8Fo0TpT8GV8" version="16.5.1" type="device"><diagram id="pwvA0ZA2h6faCE5rpLjt" name="Seite-1">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</diagram></mxfile> \ No newline at end of file diff --git a/documentation/figures/nucleus/.gitkeep b/documentation/figures/nucleus/.gitkeep new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/documentation/figures/nucleus/updated_controller_architecture_nucleus.drawio b/documentation/figures/nucleus/updated_controller_architecture_nucleus.drawio new file mode 100644 index 0000000000000000000000000000000000000000..078b06f8a724ca686943abac574fcdb8be705478 --- /dev/null +++ b/documentation/figures/nucleus/updated_controller_architecture_nucleus.drawio @@ -0,0 +1,160 @@ +<mxfile host="Electron" modified="2023-05-15T11:44:28.153Z" agent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/21.2.8 Chrome/112.0.5615.165 Electron/24.2.0 Safari/537.36" etag="IH6VUpZLowaFi8LYPRhs" version="21.2.8" type="device"> + <diagram name="Seite-1" id="3lsldmp1-3ys9wngNFdt"> + <mxGraphModel dx="3354" dy="1847" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0"> + <root> + <mxCell id="0" /> + <mxCell id="1" parent="0" /> + <mxCell id="FOxSIBBW-ZSZTNfWlzPQ-3" value="" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1"> + <mxGeometry x="210" y="698" width="520" height="372" as="geometry" /> + </mxCell> + <mxCell id="FOxSIBBW-ZSZTNfWlzPQ-4" value="NBI<br>(including gRPC-Interceptor (RBAC))" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1"> + <mxGeometry x="280" y="680" width="360" height="40" as="geometry" /> + </mxCell> + <mxCell id="FOxSIBBW-ZSZTNfWlzPQ-28" value="" style="group" parent="1" vertex="1" connectable="0"> + <mxGeometry x="550" y="760" width="140" height="80" as="geometry" /> + </mxCell> + <mxCell id="FOxSIBBW-ZSZTNfWlzPQ-25" value="" style="rounded=1;whiteSpace=wrap;html=1;" parent="FOxSIBBW-ZSZTNfWlzPQ-28" vertex="1"> + <mxGeometry x="20" y="20" width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="FOxSIBBW-ZSZTNfWlzPQ-26" value="" style="rounded=1;whiteSpace=wrap;html=1;" parent="FOxSIBBW-ZSZTNfWlzPQ-28" vertex="1"> + <mxGeometry x="10" y="10" width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="FOxSIBBW-ZSZTNfWlzPQ-27" value="(Entity) <br>gRPC-Server" style="rounded=1;whiteSpace=wrap;html=1;" parent="FOxSIBBW-ZSZTNfWlzPQ-28" vertex="1"> + <mxGeometry width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="FOxSIBBW-ZSZTNfWlzPQ-29" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.917;entryY=1.031;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="FOxSIBBW-ZSZTNfWlzPQ-27" target="FOxSIBBW-ZSZTNfWlzPQ-4" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="450.11" y="700" as="sourcePoint" /> + <mxPoint x="449.83000000000004" y="646" as="targetPoint" /> + <Array as="points"> + <mxPoint x="610" y="740" /> + </Array> + </mxGeometry> + </mxCell> + <mxCell id="FOxSIBBW-ZSZTNfWlzPQ-33" value="" style="group" parent="1" vertex="1" connectable="0"> + <mxGeometry x="250" y="950" width="140" height="80" as="geometry" /> + </mxCell> + <mxCell id="FOxSIBBW-ZSZTNfWlzPQ-30" value="" style="rounded=1;whiteSpace=wrap;html=1;" parent="FOxSIBBW-ZSZTNfWlzPQ-33" vertex="1"> + <mxGeometry x="20" y="20" width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="FOxSIBBW-ZSZTNfWlzPQ-31" value="" style="rounded=1;whiteSpace=wrap;html=1;" parent="FOxSIBBW-ZSZTNfWlzPQ-33" vertex="1"> + <mxGeometry x="10" y="10" width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="FOxSIBBW-ZSZTNfWlzPQ-32" value="Entity Storage <br>Access" style="rounded=1;whiteSpace=wrap;html=1;" parent="FOxSIBBW-ZSZTNfWlzPQ-33" vertex="1"> + <mxGeometry width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="FOxSIBBW-ZSZTNfWlzPQ-34" value="" style="group" parent="1" vertex="1" connectable="0"> + <mxGeometry x="250" y="760" width="140" height="80" as="geometry" /> + </mxCell> + <mxCell id="FOxSIBBW-ZSZTNfWlzPQ-35" value="" style="rounded=1;whiteSpace=wrap;html=1;" parent="FOxSIBBW-ZSZTNfWlzPQ-34" vertex="1"> + <mxGeometry x="20" y="20" width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="FOxSIBBW-ZSZTNfWlzPQ-36" value="" style="rounded=1;whiteSpace=wrap;html=1;" parent="FOxSIBBW-ZSZTNfWlzPQ-34" vertex="1"> + <mxGeometry x="10" y="10" width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="FOxSIBBW-ZSZTNfWlzPQ-37" value="Entity Service" style="rounded=1;whiteSpace=wrap;html=1;" parent="FOxSIBBW-ZSZTNfWlzPQ-34" vertex="1"> + <mxGeometry width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="FOxSIBBW-ZSZTNfWlzPQ-38" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.906;entryY=1.032;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="FOxSIBBW-ZSZTNfWlzPQ-37" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="310" y="749" as="sourcePoint" /> + <mxPoint x="310" y="720" as="targetPoint" /> + <Array as="points"> + <mxPoint x="310" y="740" /> + </Array> + </mxGeometry> + </mxCell> + <mxCell id="FOxSIBBW-ZSZTNfWlzPQ-41" value="Event Service" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1"> + <mxGeometry x="319" y="870" width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="FOxSIBBW-ZSZTNfWlzPQ-42" value="Network Element<br>Watcher" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1"> + <mxGeometry x="500" y="870" width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="FOxSIBBW-ZSZTNfWlzPQ-43" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="390" y="790" as="sourcePoint" /> + <mxPoint x="550" y="790" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="FOxSIBBW-ZSZTNfWlzPQ-44" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;entryX=0.25;entryY=1;entryDx=0;entryDy=0;exitX=0.417;exitY=0;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" source="FOxSIBBW-ZSZTNfWlzPQ-32" target="FOxSIBBW-ZSZTNfWlzPQ-35" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="40" y="780" as="sourcePoint" /> + <mxPoint x="90" y="730" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="FOxSIBBW-ZSZTNfWlzPQ-47" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;entryX=1;entryY=1;entryDx=0;entryDy=0;" parent="1" source="FOxSIBBW-ZSZTNfWlzPQ-41" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="49" y="880" as="sourcePoint" /> + <mxPoint x="379" y="840" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="FOxSIBBW-ZSZTNfWlzPQ-48" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="FOxSIBBW-ZSZTNfWlzPQ-42" target="FOxSIBBW-ZSZTNfWlzPQ-35" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="130" y="870" as="sourcePoint" /> + <mxPoint x="120" y="900" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="FOxSIBBW-ZSZTNfWlzPQ-49" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;exitX=0.75;exitY=0;exitDx=0;exitDy=0;" parent="1" source="FOxSIBBW-ZSZTNfWlzPQ-42" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="590" y="900" as="sourcePoint" /> + <mxPoint x="590" y="840" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="FOxSIBBW-ZSZTNfWlzPQ-50" value="SBI<br>(Transport)" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1"> + <mxGeometry x="280" y="1050" width="360" height="40" as="geometry" /> + </mxCell> + <mxCell id="FOxSIBBW-ZSZTNfWlzPQ-51" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0.778;exitY=-0.005;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" source="FOxSIBBW-ZSZTNfWlzPQ-50" target="FOxSIBBW-ZSZTNfWlzPQ-42" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="110" y="980" as="sourcePoint" /> + <mxPoint x="160" y="930" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="FOxSIBBW-ZSZTNfWlzPQ-52" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0.778;exitY=-0.005;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="630" y="1049" as="sourcePoint" /> + <mxPoint x="630" y="840" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="FOxSIBBW-ZSZTNfWlzPQ-53" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;fillColor=#f8cecc;strokeColor=#FF0000;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="460" y="1140" as="sourcePoint" /> + <mxPoint x="460" y="1090" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="FOxSIBBW-ZSZTNfWlzPQ-54" value="" style="fontColor=#0066CC;verticalAlign=top;verticalLabelPosition=bottom;labelPosition=center;align=center;html=1;outlineConnect=0;fillColor=#CCCCCC;strokeColor=#6881B3;gradientColor=none;gradientDirection=north;strokeWidth=2;shape=mxgraph.networks.router;" parent="1" vertex="1"> + <mxGeometry x="410" y="1141" width="100" height="30" as="geometry" /> + </mxCell> + <mxCell id="FOxSIBBW-ZSZTNfWlzPQ-55" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;dashed=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" target="FOxSIBBW-ZSZTNfWlzPQ-32" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="170" y="980" as="sourcePoint" /> + <mxPoint x="90" y="950" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="FOxSIBBW-ZSZTNfWlzPQ-56" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;dashed=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="170" y="900" as="sourcePoint" /> + <mxPoint x="319" y="899.8" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="FOxSIBBW-ZSZTNfWlzPQ-58" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;fillColor=#f8cecc;strokeColor=#FF0000;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="459.8" y="680" as="sourcePoint" /> + <mxPoint x="459.8" y="630" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="FOxSIBBW-ZSZTNfWlzPQ-59" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="FOxSIBBW-ZSZTNfWlzPQ-41" target="FOxSIBBW-ZSZTNfWlzPQ-42" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="-20" y="850" as="sourcePoint" /> + <mxPoint x="30" y="800" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="FOxSIBBW-ZSZTNfWlzPQ-60" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;dashed=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="690" y="790" as="sourcePoint" /> + <mxPoint x="770" y="790" as="targetPoint" /> + </mxGeometry> + </mxCell> + </root> + </mxGraphModel> + </diagram> +</mxfile> diff --git a/documentation/figures/nucleus/updated_controller_architecture_nucleus.drawio.png b/documentation/figures/nucleus/updated_controller_architecture_nucleus.drawio.png new file mode 100644 index 0000000000000000000000000000000000000000..2fb5af660c774e23ee80b33acae0e27b79c759e2 Binary files /dev/null and b/documentation/figures/nucleus/updated_controller_architecture_nucleus.drawio.png differ diff --git a/documentation/figures/overview/.gitkeep b/documentation/figures/overview/.gitkeep new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/documentation/figures/overview/updated_controller_architecture_overview.drawio b/documentation/figures/overview/updated_controller_architecture_overview.drawio new file mode 100644 index 0000000000000000000000000000000000000000..b7a8d0f374611633ec7cac94ed8446574d9af531 --- /dev/null +++ b/documentation/figures/overview/updated_controller_architecture_overview.drawio @@ -0,0 +1,128 @@ +<mxfile host="Electron" modified="2023-05-15T11:44:20.474Z" agent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/21.2.8 Chrome/112.0.5615.165 Electron/24.2.0 Safari/537.36" etag="YNlTGZZnrK1QxGPOz1hT" version="21.2.8" type="device"> + <diagram name="Seite-1" id="HPBHSIBaAVFy5oWYXxvs"> + <mxGraphModel dx="932" dy="513" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0"> + <root> + <mxCell id="0" /> + <mxCell id="1" parent="0" /> + <mxCell id="g1X504qyV0JU_EHprrVk-23" value="" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1"> + <mxGeometry x="120" y="698" width="470" height="250" as="geometry" /> + </mxCell> + <mxCell id="g1X504qyV0JU_EHprrVk-24" value="NBI" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1"> + <mxGeometry x="280" y="690" width="160" height="20" as="geometry" /> + </mxCell> + <mxCell id="g1X504qyV0JU_EHprrVk-25" value="SBI" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1"> + <mxGeometry x="280" y="939" width="160" height="20" as="geometry" /> + </mxCell> + <mxCell id="g1X504qyV0JU_EHprrVk-26" value="Nucleus" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1"> + <mxGeometry x="280" y="764" width="160" height="120" as="geometry" /> + </mxCell> + <mxCell id="g1X504qyV0JU_EHprrVk-27" value="" style="rounded=1;whiteSpace=wrap;html=1;rotation=90;" parent="1" vertex="1"> + <mxGeometry x="122.5" y="836" width="120" height="70" as="geometry" /> + </mxCell> + <mxCell id="g1X504qyV0JU_EHprrVk-28" value="<font style="font-size: 10px;">goSDN<br>Eventsystem</font>" style="rounded=1;whiteSpace=wrap;html=1;rotation=0;" parent="1" vertex="1"> + <mxGeometry x="148" y="724" width="70" height="70" as="geometry" /> + </mxCell> + <mxCell id="g1X504qyV0JU_EHprrVk-29" value="<font style="font-size: 10px;">Plugin<br>Registry</font>" style="rounded=1;whiteSpace=wrap;html=1;rotation=0;" parent="1" vertex="1"> + <mxGeometry x="481" y="724" width="70" height="70" as="geometry" /> + </mxCell> + <mxCell id="g1X504qyV0JU_EHprrVk-30" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="360" y="690" as="sourcePoint" /> + <mxPoint x="360" y="640" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="g1X504qyV0JU_EHprrVk-31" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" parent="1" source="g1X504qyV0JU_EHprrVk-26" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="359.72" y="760" as="sourcePoint" /> + <mxPoint x="359.72" y="710" as="targetPoint" /> + <Array as="points"> + <mxPoint x="360" y="740" /> + </Array> + </mxGeometry> + </mxCell> + <mxCell id="g1X504qyV0JU_EHprrVk-32" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="360" y="938" as="sourcePoint" /> + <mxPoint x="359.72" y="884" as="targetPoint" /> + <Array as="points"> + <mxPoint x="360" y="914" /> + </Array> + </mxGeometry> + </mxCell> + <mxCell id="g1X504qyV0JU_EHprrVk-33" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="g1X504qyV0JU_EHprrVk-27" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="380" y="831" as="sourcePoint" /> + <mxPoint x="280" y="871" as="targetPoint" /> + <Array as="points" /> + </mxGeometry> + </mxCell> + <mxCell id="g1X504qyV0JU_EHprrVk-34" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="218" y="780" as="sourcePoint" /> + <mxPoint x="280" y="780" as="targetPoint" /> + <Array as="points" /> + </mxGeometry> + </mxCell> + <mxCell id="g1X504qyV0JU_EHprrVk-35" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0;entryY=0.786;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" target="g1X504qyV0JU_EHprrVk-29" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="441" y="778.88" as="sourcePoint" /> + <mxPoint x="470" y="779" as="targetPoint" /> + <Array as="points" /> + </mxGeometry> + </mxCell> + <mxCell id="g1X504qyV0JU_EHprrVk-36" value="<font style="font-size: 10px;">goSDN<br>Data Storage</font>" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> + <mxGeometry x="150" y="817" width="60" height="30" as="geometry" /> + </mxCell> + <mxCell id="g1X504qyV0JU_EHprrVk-38" value="<font style="font-size: 8px;">DB</font>" style="strokeWidth=2;html=1;shape=mxgraph.flowchart.database;whiteSpace=wrap;" parent="1" vertex="1"> + <mxGeometry x="160" y="857" width="40" height="61" as="geometry" /> + </mxCell> + <mxCell id="g1X504qyV0JU_EHprrVk-39" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="360" y="1009" as="sourcePoint" /> + <mxPoint x="360" y="959" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="g1X504qyV0JU_EHprrVk-40" value="" style="fontColor=#0066CC;verticalAlign=top;verticalLabelPosition=bottom;labelPosition=center;align=center;html=1;outlineConnect=0;fillColor=#CCCCCC;strokeColor=#6881B3;gradientColor=none;gradientDirection=north;strokeWidth=2;shape=mxgraph.networks.router;" parent="1" vertex="1"> + <mxGeometry x="310" y="1010" width="100" height="30" as="geometry" /> + </mxCell> + <mxCell id="g1X504qyV0JU_EHprrVk-44" value="" style="group" parent="1" vertex="1" connectable="0"> + <mxGeometry x="290" y="559" width="140" height="80" as="geometry" /> + </mxCell> + <mxCell id="g1X504qyV0JU_EHprrVk-41" value="" style="rounded=1;whiteSpace=wrap;html=1;" parent="g1X504qyV0JU_EHprrVk-44" vertex="1"> + <mxGeometry x="20" y="20" width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="g1X504qyV0JU_EHprrVk-42" value="" style="rounded=1;whiteSpace=wrap;html=1;" parent="g1X504qyV0JU_EHprrVk-44" vertex="1"> + <mxGeometry x="10" y="10" width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="g1X504qyV0JU_EHprrVk-43" value="APP" style="rounded=1;whiteSpace=wrap;html=1;" parent="g1X504qyV0JU_EHprrVk-44" vertex="1"> + <mxGeometry width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="g1X504qyV0JU_EHprrVk-48" value="" style="group" parent="1" vertex="1" connectable="0"> + <mxGeometry x="480" y="830" width="90" height="96" as="geometry" /> + </mxCell> + <mxCell id="g1X504qyV0JU_EHprrVk-46" value="" style="rounded=1;whiteSpace=wrap;html=1;rotation=0;" parent="g1X504qyV0JU_EHprrVk-48" vertex="1"> + <mxGeometry x="20" y="26" width="70" height="70" as="geometry" /> + </mxCell> + <mxCell id="g1X504qyV0JU_EHprrVk-47" value="" style="rounded=1;whiteSpace=wrap;html=1;rotation=0;" parent="g1X504qyV0JU_EHprrVk-48" vertex="1"> + <mxGeometry x="10" y="16" width="70" height="70" as="geometry" /> + </mxCell> + <mxCell id="g1X504qyV0JU_EHprrVk-45" value="<span style="font-size: 10px;">Plugin</span>" style="rounded=1;whiteSpace=wrap;html=1;rotation=0;" parent="g1X504qyV0JU_EHprrVk-48" vertex="1"> + <mxGeometry width="70" height="70" as="geometry" /> + </mxCell> + <mxCell id="g1X504qyV0JU_EHprrVk-49" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0;entryY=0.786;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="440" y="847" as="sourcePoint" /> + <mxPoint x="480" y="847.12" as="targetPoint" /> + <Array as="points" /> + </mxGeometry> + </mxCell> + <mxCell id="vZsy0VxpvCjQ8s4P1SYj-1" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;dashed=1;dashPattern=8 8;" edge="1" parent="1" source="g1X504qyV0JU_EHprrVk-28" target="g1X504qyV0JU_EHprrVk-43"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="150" y="650" as="sourcePoint" /> + <mxPoint x="200" y="600" as="targetPoint" /> + </mxGeometry> + </mxCell> + </root> + </mxGraphModel> + </diagram> +</mxfile> diff --git a/documentation/figures/overview/updated_controller_architecture_overview.drawio.png b/documentation/figures/overview/updated_controller_architecture_overview.drawio.png new file mode 100644 index 0000000000000000000000000000000000000000..a508d48654a03aab7c16e31f289132f8957336f5 Binary files /dev/null and b/documentation/figures/overview/updated_controller_architecture_overview.drawio.png differ diff --git a/documentation/figures/plugins/.gitkeep b/documentation/figures/plugins/.gitkeep new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/documentation/figures/plugins/plugin-device-interaction.drawio b/documentation/figures/plugins/plugin-device-interaction.drawio new file mode 100644 index 0000000000000000000000000000000000000000..1c86f535fd0bc169fb49ec39071a057752ce68b4 --- /dev/null +++ b/documentation/figures/plugins/plugin-device-interaction.drawio @@ -0,0 +1,88 @@ +<mxfile host="Electron" modified="2023-05-11T13:45:07.429Z" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/21.2.8 Chrome/112.0.5615.165 Electron/24.2.0 Safari/537.36" etag="b9W3KDi2VxrPMCuebgYl" version="21.2.8" type="device"> + <diagram name="Page-1" id="7acMf7GGfN7ie8L3jlAE"> + <mxGraphModel dx="1595" dy="933" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0"> + <root> + <mxCell id="0" /> + <mxCell id="1" parent="0" /> + <mxCell id="V2kOSHpwmn09caB3T1uJ-9" value="" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> + <mxGeometry x="80" y="510" width="520" height="180" as="geometry" /> + </mxCell> + <mxCell id="V2kOSHpwmn09caB3T1uJ-3" value="" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1"> + <mxGeometry x="440" y="570" width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="V2kOSHpwmn09caB3T1uJ-4" value="" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1"> + <mxGeometry x="430" y="560" width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="V2kOSHpwmn09caB3T1uJ-5" value="Plugins" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1"> + <mxGeometry x="420" y="550" width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="V2kOSHpwmn09caB3T1uJ-6" value="" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1"> + <mxGeometry x="140" y="570" width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="V2kOSHpwmn09caB3T1uJ-7" value="" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1"> + <mxGeometry x="130" y="560" width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="V2kOSHpwmn09caB3T1uJ-20" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;startArrow=classic;startFill=1;" edge="1" parent="1" source="V2kOSHpwmn09caB3T1uJ-8" target="V2kOSHpwmn09caB3T1uJ-18"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + <mxCell id="V2kOSHpwmn09caB3T1uJ-27" value="Set(), Get(), Subscribe()" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="V2kOSHpwmn09caB3T1uJ-20"> + <mxGeometry x="-0.0932" y="-1" relative="1" as="geometry"> + <mxPoint as="offset" /> + </mxGeometry> + </mxCell> + <mxCell id="V2kOSHpwmn09caB3T1uJ-8" value="Network Elements" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1"> + <mxGeometry x="120" y="550" width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="V2kOSHpwmn09caB3T1uJ-10" value="" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1"> + <mxGeometry x="660" y="500" width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="V2kOSHpwmn09caB3T1uJ-11" value="" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1"> + <mxGeometry x="650" y="490" width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="V2kOSHpwmn09caB3T1uJ-12" value="HashiCorp<br>go-plugin" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1"> + <mxGeometry x="640" y="480" width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="V2kOSHpwmn09caB3T1uJ-13" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="V2kOSHpwmn09caB3T1uJ-5" target="V2kOSHpwmn09caB3T1uJ-12"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="400" y="590" as="sourcePoint" /> + <mxPoint x="450" y="540" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="V2kOSHpwmn09caB3T1uJ-15" value="gRPC" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="V2kOSHpwmn09caB3T1uJ-13"> + <mxGeometry x="0.1618" y="-2" relative="1" as="geometry"> + <mxPoint as="offset" /> + </mxGeometry> + </mxCell> + <mxCell id="V2kOSHpwmn09caB3T1uJ-14" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="V2kOSHpwmn09caB3T1uJ-8" target="V2kOSHpwmn09caB3T1uJ-5"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="260" y="590" as="sourcePoint" /> + <mxPoint x="310" y="540" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="V2kOSHpwmn09caB3T1uJ-17" value="call methods like e.g.,<br>Unmarshal()<br>SetNode()<br>etc." style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="V2kOSHpwmn09caB3T1uJ-14"> + <mxGeometry x="-0.1634" y="2" relative="1" as="geometry"> + <mxPoint x="15" y="2" as="offset" /> + </mxGeometry> + </mxCell> + <mxCell id="V2kOSHpwmn09caB3T1uJ-18" value="SBI (Transport)" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1"> + <mxGeometry x="200" y="680" width="280" height="30" as="geometry" /> + </mxCell> + <mxCell id="V2kOSHpwmn09caB3T1uJ-23" value="" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1"> + <mxGeometry x="300" y="780" width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="V2kOSHpwmn09caB3T1uJ-24" value="" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1"> + <mxGeometry x="290" y="770" width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="V2kOSHpwmn09caB3T1uJ-25" value="Physical Network Element" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1"> + <mxGeometry x="280" y="760" width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="V2kOSHpwmn09caB3T1uJ-26" value="gNMI" style="endArrow=classic;startArrow=classic;html=1;rounded=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" edge="1" parent="1" source="V2kOSHpwmn09caB3T1uJ-18" target="V2kOSHpwmn09caB3T1uJ-25"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="510" y="620" as="sourcePoint" /> + <mxPoint x="560" y="570" as="targetPoint" /> + </mxGeometry> + </mxCell> + </root> + </mxGraphModel> + </diagram> +</mxfile> diff --git a/documentation/figures/plugins/plugin-device-interaction.drawio.png b/documentation/figures/plugins/plugin-device-interaction.drawio.png new file mode 100644 index 0000000000000000000000000000000000000000..13d7b14ff5beb497de3bcccb4c3c3523ccdd041e Binary files /dev/null and b/documentation/figures/plugins/plugin-device-interaction.drawio.png differ