summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBeniamino Galvani <bgalvani@redhat.com>2023-06-27 14:05:42 +0200
committerBeniamino Galvani <bgalvani@redhat.com>2023-06-27 14:29:18 +0200
commit7aeadee8b17c17781bf785efcb5449f72570325f (patch)
tree77ddc6ea984bfc729de08af357e8695e8440841c
parent2b8197d0dcebdfa743073f1bc0f6c778685ff530 (diff)
docs: add daemon internal documentationbg/device-doc
Add documentation about the implementation of the daemon.
-rw-r--r--docs/internal/daemon.drawio253
-rw-r--r--docs/internal/daemon.md169
-rw-r--r--docs/internal/daemon.pngbin0 -> 134343 bytes
3 files changed, 422 insertions, 0 deletions
diff --git a/docs/internal/daemon.drawio b/docs/internal/daemon.drawio
new file mode 100644
index 0000000000..1acb77dafa
--- /dev/null
+++ b/docs/internal/daemon.drawio
@@ -0,0 +1,253 @@
+<mxfile host="app.diagrams.net" modified="2023-06-12T10:17:05.292Z" agent="Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/113.0" etag="8MesaF3xUGlt9W82ADAx" version="21.3.7" type="device">
+ <diagram name="Page-1" id="k2zOC9XmYpEz0HNFKLcK">
+ <mxGraphModel dx="1551" dy="810" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1169" pageHeight="1654" math="0" shadow="0">
+ <root>
+ <mxCell id="0" />
+ <mxCell id="1" parent="0" />
+ <mxCell id="iPdrRtlw78q6A_erutjM-63" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="iPdrRtlw78q6A_erutjM-1" target="iPdrRtlw78q6A_erutjM-6" edge="1">
+ <mxGeometry relative="1" as="geometry" />
+ </mxCell>
+ <mxCell id="iPdrRtlw78q6A_erutjM-65" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.25;entryY=0;entryDx=0;entryDy=0;" parent="1" source="iPdrRtlw78q6A_erutjM-1" target="iPdrRtlw78q6A_erutjM-56" edge="1">
+ <mxGeometry relative="1" as="geometry">
+ <mxPoint x="865" y="650" as="targetPoint" />
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="iPdrRtlw78q6A_erutjM-67" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.75;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" parent="1" source="iPdrRtlw78q6A_erutjM-1" target="iPdrRtlw78q6A_erutjM-20" edge="1">
+ <mxGeometry relative="1" as="geometry" />
+ </mxCell>
+ <mxCell id="iPdrRtlw78q6A_erutjM-68" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.75;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="iPdrRtlw78q6A_erutjM-1" target="iPdrRtlw78q6A_erutjM-42" edge="1">
+ <mxGeometry relative="1" as="geometry" />
+ </mxCell>
+ <mxCell id="iPdrRtlw78q6A_erutjM-1" value="Manager" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1">
+ <mxGeometry x="760" y="420" width="120" height="60" as="geometry" />
+ </mxCell>
+ <mxCell id="iPdrRtlw78q6A_erutjM-70" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.75;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="iPdrRtlw78q6A_erutjM-6" target="iPdrRtlw78q6A_erutjM-45" edge="1">
+ <mxGeometry relative="1" as="geometry" />
+ </mxCell>
+ <mxCell id="iPdrRtlw78q6A_erutjM-77" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.25;exitY=1;exitDx=0;exitDy=0;entryX=1;entryY=0;entryDx=0;entryDy=0;" parent="1" source="iPdrRtlw78q6A_erutjM-6" edge="1">
+ <mxGeometry relative="1" as="geometry">
+ <mxPoint x="440" y="482" as="targetPoint" />
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="iPdrRtlw78q6A_erutjM-95" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="iPdrRtlw78q6A_erutjM-6" target="iPdrRtlw78q6A_erutjM-92" edge="1">
+ <mxGeometry relative="1" as="geometry" />
+ </mxCell>
+ <mxCell id="QsOSWD6k7liXDyBiQe3i-2" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.75;entryY=1;entryDx=0;entryDy=0;" parent="1" source="iPdrRtlw78q6A_erutjM-6" target="QsOSWD6k7liXDyBiQe3i-1" edge="1">
+ <mxGeometry relative="1" as="geometry">
+ <mxPoint x="480" y="370" as="targetPoint" />
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="iPdrRtlw78q6A_erutjM-6" value="Settings" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
+ <mxGeometry x="430" y="392" width="140" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="iPdrRtlw78q6A_erutjM-9" value="SettingsConnection" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
+ <mxGeometry x="310" y="486" width="140" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="iPdrRtlw78q6A_erutjM-10" value="SettingsConnection" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
+ <mxGeometry x="320" y="496" width="140" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="iPdrRtlw78q6A_erutjM-11" value="SettingsConnection" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
+ <mxGeometry x="330" y="506" width="140" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="iPdrRtlw78q6A_erutjM-14" value="&lt;div&gt;Policy&lt;/div&gt;" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
+ <mxGeometry x="601" y="280" width="140" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="iPdrRtlw78q6A_erutjM-15" value="Platform" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
+ <mxGeometry x="360" y="740" width="160" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="iPdrRtlw78q6A_erutjM-17" value="ActiveConnection" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
+ <mxGeometry x="830" y="280" width="140" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="iPdrRtlw78q6A_erutjM-18" value="ActiveConnection" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
+ <mxGeometry x="840" y="290" width="140" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="iPdrRtlw78q6A_erutjM-19" value="ActiveConnection" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
+ <mxGeometry x="850" y="300" width="140" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="iPdrRtlw78q6A_erutjM-20" value="ActiveConnection" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
+ <mxGeometry x="860" y="310" width="140" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="iPdrRtlw78q6A_erutjM-82" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.75;exitY=1;exitDx=0;exitDy=0;entryX=0.25;entryY=0;entryDx=0;entryDy=0;" parent="1" source="xCeQDJBRfkX65UmuQ1iu-15" target="iPdrRtlw78q6A_erutjM-49" edge="1">
+ <mxGeometry relative="1" as="geometry" />
+ </mxCell>
+ <mxCell id="iPdrRtlw78q6A_erutjM-84" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.348;exitY=1.029;exitDx=0;exitDy=0;entryX=0.1;entryY=-0.014;entryDx=0;entryDy=0;entryPerimeter=0;exitPerimeter=0;" parent="1" source="xCeQDJBRfkX65UmuQ1iu-15" target="iPdrRtlw78q6A_erutjM-50" edge="1">
+ <mxGeometry relative="1" as="geometry">
+ <mxPoint x="1230" y="300" as="sourcePoint" />
+ <mxPoint x="1231.94" y="378" as="targetPoint" />
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="xCeQDJBRfkX65UmuQ1iu-19" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.75;exitY=0;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="iPdrRtlw78q6A_erutjM-30" target="xCeQDJBRfkX65UmuQ1iu-15" edge="1">
+ <mxGeometry relative="1" as="geometry" />
+ </mxCell>
+ <mxCell id="iPdrRtlw78q6A_erutjM-30" value="DnsManager" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
+ <mxGeometry x="1059" y="305" width="140" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="iPdrRtlw78q6A_erutjM-31" value="HostnameManager" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
+ <mxGeometry x="1059" y="353" width="140" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="iPdrRtlw78q6A_erutjM-32" value="&lt;div&gt;FirewalldManager&lt;/div&gt;" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
+ <mxGeometry x="694" y="739.9999999999999" width="100" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="iPdrRtlw78q6A_erutjM-34" value="SleepMonitor" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
+ <mxGeometry x="1059" y="544" width="140" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="iPdrRtlw78q6A_erutjM-35" value="SessionMonitor" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
+ <mxGeometry x="1059" y="592" width="140" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="iPdrRtlw78q6A_erutjM-36" value="&lt;div&gt;RfkillManager&lt;/div&gt;" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
+ <mxGeometry x="1059" y="400" width="140" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="iPdrRtlw78q6A_erutjM-38" value="AuthManager" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
+ <mxGeometry x="1059" y="448" width="140" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="iPdrRtlw78q6A_erutjM-39" value="DbusManager" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
+ <mxGeometry x="1059" y="496" width="140" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="iPdrRtlw78q6A_erutjM-69" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.925;entryY=-0.075;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="iPdrRtlw78q6A_erutjM-42" edge="1">
+ <mxGeometry relative="1" as="geometry">
+ <mxPoint x="889.5" y="612" as="targetPoint" />
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="iPdrRtlw78q6A_erutjM-42" value="DeviceFactory" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
+ <mxGeometry x="870" y="526" width="140" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="iPdrRtlw78q6A_erutjM-43" value="DhcpClient" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
+ <mxGeometry x="694" y="788.54" width="100" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="iPdrRtlw78q6A_erutjM-44" value="&lt;div&gt;L3Cfg&lt;/div&gt;" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
+ <mxGeometry x="585" y="741.54" width="100" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="iPdrRtlw78q6A_erutjM-71" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.25;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="iPdrRtlw78q6A_erutjM-45" target="iPdrRtlw78q6A_erutjM-46" edge="1">
+ <mxGeometry relative="1" as="geometry" />
+ </mxCell>
+ <mxCell id="iPdrRtlw78q6A_erutjM-72" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" parent="1" source="iPdrRtlw78q6A_erutjM-45" target="iPdrRtlw78q6A_erutjM-47" edge="1">
+ <mxGeometry relative="1" as="geometry" />
+ </mxCell>
+ <mxCell id="iPdrRtlw78q6A_erutjM-73" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.75;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="iPdrRtlw78q6A_erutjM-45" target="iPdrRtlw78q6A_erutjM-48" edge="1">
+ <mxGeometry relative="1" as="geometry" />
+ </mxCell>
+ <mxCell id="iPdrRtlw78q6A_erutjM-45" value="SettingsPlugin" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
+ <mxGeometry x="510" y="472" width="140" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="iPdrRtlw78q6A_erutjM-46" value="Keyfile" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
+ <mxGeometry x="500" y="541" width="90" height="30" as="geometry" />
+ </mxCell>
+ <mxCell id="iPdrRtlw78q6A_erutjM-47" value="Ifcfg-rh" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
+ <mxGeometry x="530" y="585" width="100" height="30" as="geometry" />
+ </mxCell>
+ <mxCell id="iPdrRtlw78q6A_erutjM-48" value="Ifupdown" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
+ <mxGeometry x="566" y="630" width="100" height="30" as="geometry" />
+ </mxCell>
+ <mxCell id="iPdrRtlw78q6A_erutjM-49" value="DnsSystemdResolved" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
+ <mxGeometry x="1238" y="330" width="140" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="iPdrRtlw78q6A_erutjM-50" value="DnsDnsmasq" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
+ <mxGeometry x="1215" y="376" width="140" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="iPdrRtlw78q6A_erutjM-55" value="NDisc" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
+ <mxGeometry x="694" y="835.54" width="100" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="iPdrRtlw78q6A_erutjM-56" value="&lt;div&gt;Device&lt;/div&gt;" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
+ <mxGeometry x="750" y="610" width="140" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="iPdrRtlw78q6A_erutjM-57" value="&lt;div&gt;Device&lt;/div&gt;" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
+ <mxGeometry x="760" y="620" width="140" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="iPdrRtlw78q6A_erutjM-80" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.1;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="iPdrRtlw78q6A_erutjM-58" target="iPdrRtlw78q6A_erutjM-93" edge="1">
+ <mxGeometry relative="1" as="geometry">
+ <mxPoint x="930" y="740" as="targetPoint" />
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="iPdrRtlw78q6A_erutjM-58" value="&lt;div&gt;Device&lt;/div&gt;" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
+ <mxGeometry x="770" y="630" width="140" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="iPdrRtlw78q6A_erutjM-62" value="" style="endArrow=none;html=1;rounded=0;entryX=0.25;entryY=0;entryDx=0;entryDy=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;endFill=0;startArrow=classic;startFill=1;" parent="1" source="iPdrRtlw78q6A_erutjM-14" target="iPdrRtlw78q6A_erutjM-1" edge="1">
+ <mxGeometry width="50" height="50" relative="1" as="geometry">
+ <mxPoint x="750" y="580" as="sourcePoint" />
+ <mxPoint x="800" y="530" as="targetPoint" />
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="iPdrRtlw78q6A_erutjM-79" value="LldpListener" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
+ <mxGeometry x="585" y="788.54" width="100" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="iPdrRtlw78q6A_erutjM-86" value="" style="shape=curlyBracket;whiteSpace=wrap;html=1;rounded=1;labelPosition=left;verticalLabelPosition=middle;align=right;verticalAlign=middle;" parent="1" vertex="1">
+ <mxGeometry x="1030" y="306" width="20" height="374" as="geometry" />
+ </mxCell>
+ <mxCell id="iPdrRtlw78q6A_erutjM-88" value="BondManager" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
+ <mxGeometry x="585" y="835.54" width="100" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="iPdrRtlw78q6A_erutjM-89" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
+ <mxGeometry x="270" y="370" width="100" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="iPdrRtlw78q6A_erutjM-91" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
+ <mxGeometry x="280" y="380" width="100" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="iPdrRtlw78q6A_erutjM-92" value="NMSecretAgent" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
+ <mxGeometry x="290" y="390" width="100" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="iPdrRtlw78q6A_erutjM-93" value="" style="shape=curlyBracket;whiteSpace=wrap;html=1;rounded=1;flipH=1;labelPosition=right;verticalLabelPosition=middle;align=left;verticalAlign=middle;rotation=-90;" parent="1" vertex="1">
+ <mxGeometry x="680.38" y="620" width="20" height="217.1" as="geometry" />
+ </mxCell>
+ <mxCell id="QsOSWD6k7liXDyBiQe3i-4" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.25;exitY=1;exitDx=0;exitDy=0;entryX=0.9;entryY=0;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="QsOSWD6k7liXDyBiQe3i-1" target="iPdrRtlw78q6A_erutjM-89" edge="1">
+ <mxGeometry relative="1" as="geometry" />
+ </mxCell>
+ <mxCell id="QsOSWD6k7liXDyBiQe3i-1" value="AgentManager" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
+ <mxGeometry x="370" y="280" width="140" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="QsOSWD6k7liXDyBiQe3i-6" value="DeviceEthernet" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
+ <mxGeometry x="1059" y="745" width="140" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="QsOSWD6k7liXDyBiQe3i-9" value="DeviceWiFi" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
+ <mxGeometry x="1059" y="793" width="140" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="QsOSWD6k7liXDyBiQe3i-13" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.1;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;endArrow=block;endFill=0;" parent="1" source="QsOSWD6k7liXDyBiQe3i-11" target="iPdrRtlw78q6A_erutjM-58" edge="1">
+ <mxGeometry relative="1" as="geometry">
+ <Array as="points">
+ <mxPoint x="990" y="813" />
+ <mxPoint x="990" y="650" />
+ </Array>
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="QsOSWD6k7liXDyBiQe3i-11" value="" style="shape=curlyBracket;whiteSpace=wrap;html=1;rounded=1;labelPosition=left;verticalLabelPosition=middle;align=right;verticalAlign=middle;" parent="1" vertex="1">
+ <mxGeometry x="1031" y="745" width="20" height="135" as="geometry" />
+ </mxCell>
+ <mxCell id="QsOSWD6k7liXDyBiQe3i-12" value="..." style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
+ <mxGeometry x="1059" y="841" width="140" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="xCeQDJBRfkX65UmuQ1iu-1" value="" style="endArrow=classic;dashed=1;html=1;dashPattern=1 3;strokeWidth=2;rounded=0;entryX=0.1;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;endFill=1;" parent="1" target="iPdrRtlw78q6A_erutjM-86" edge="1">
+ <mxGeometry width="50" height="50" relative="1" as="geometry">
+ <mxPoint x="985" y="493" as="sourcePoint" />
+ <mxPoint x="820" y="530" as="targetPoint" />
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="xCeQDJBRfkX65UmuQ1iu-3" value="" style="endArrow=classic;dashed=1;html=1;dashPattern=1 3;strokeWidth=2;rounded=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;endFill=1;" parent="1" target="iPdrRtlw78q6A_erutjM-15" edge="1">
+ <mxGeometry width="50" height="50" relative="1" as="geometry">
+ <mxPoint x="480" y="680" as="sourcePoint" />
+ <mxPoint x="820" y="530" as="targetPoint" />
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="xCeQDJBRfkX65UmuQ1iu-5" value="DhcpDhclient" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
+ <mxGeometry x="850" y="738.9999999999999" width="100" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="xCeQDJBRfkX65UmuQ1iu-6" value="DhcpSystemd" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
+ <mxGeometry x="850" y="838.9999999999999" width="100" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="xCeQDJBRfkX65UmuQ1iu-7" value="DhcpNettools" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
+ <mxGeometry x="850" y="789" width="100" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="xCeQDJBRfkX65UmuQ1iu-18" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.1;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;endArrow=block;endFill=0;" parent="1" source="xCeQDJBRfkX65UmuQ1iu-13" target="iPdrRtlw78q6A_erutjM-43" edge="1">
+ <mxGeometry relative="1" as="geometry" />
+ </mxCell>
+ <mxCell id="xCeQDJBRfkX65UmuQ1iu-13" value="" style="shape=curlyBracket;whiteSpace=wrap;html=1;rounded=1;labelPosition=left;verticalLabelPosition=middle;align=right;verticalAlign=middle;" parent="1" vertex="1">
+ <mxGeometry x="824" y="739" width="20" height="140" as="geometry" />
+ </mxCell>
+ <mxCell id="xCeQDJBRfkX65UmuQ1iu-15" value="DnsPlugin" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
+ <mxGeometry x="1190" y="260" width="110" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="-SxGT6HAmeN4DeN2HHq2-1" value="Dispatcher" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="1">
+ <mxGeometry x="1059" y="640" width="140" height="40" as="geometry" />
+ </mxCell>
+ </root>
+ </mxGraphModel>
+ </diagram>
+</mxfile>
diff --git a/docs/internal/daemon.md b/docs/internal/daemon.md
new file mode 100644
index 0000000000..b563dcddc6
--- /dev/null
+++ b/docs/internal/daemon.md
@@ -0,0 +1,169 @@
+NetworkManager daemon
+=====================
+
+The following diagram describes the main components of the
+NetworkManager daemon. Note that each component is in most cases a
+GObject and the names always start with the "NM" prefix, which has
+been omitted for clarity.
+
+![](daemon.png "")
+
+## Manager
+
+The main responsibilities of the manager are:
+
+- initialize all known device factories. A device factory contains the
+ logic detect new devices of a certain type and create the
+ corresponding object;
+
+- maintain a list of devices created by the factories;
+
+- maintain a list of active connections;
+
+- expose on D-Bus properties, methods and signal on the
+ `/org/freedesktop/NetworkManager`
+ [object](../../introspection/org.freedesktop.NetworkManager.xml).
+
+## Policy
+
+This object implements some policy decisions that involve multiple
+connection profiles, such as:
+
+ - it determines what is the best (with lowest metric) active
+ connection with default route for IPv4 and IPv6;
+
+ - it updates the DNS configuration in the DNS manager, also according
+ to what connection has the best default route;
+
+ - it handles the activation of secondary connections when a
+ connection goes up (see property `connection.secondaries` in
+ `man nm-settings`);
+
+ - it collects IPv6 prefix delegations from active connections, to
+ distribute them on connections using IPv6 shared mode;
+
+## Settings
+
+This object handles connection profiles; each profile is represented
+as a *SettingsConnection* object and is persisted to disk using one of
+the existing *SettingsPlugin*s such as keyfile, ifcfg-rh or
+ifupdown.
+
+It also controls *SecretAgent*s; an agent is an external service that
+registers to NetworkManager as capable of handling requests for new
+secrets. For example, when a Wi-Fi connection is activated and the
+password is missing or wrong, NetworkManager asks all registered
+agents for the missing secrets and then continues with
+activation. Examples of tools that register as agents are: nmcli,
+nmtui, GNOME shell, the GTK nm-applet and the KDE network applet.
+
+## Devices and device factories
+
+As mentioned before, NetworkManager instantiates device factories to
+discover and create new devices. Those factories are internal to the
+daemon or provided by a device plugin; a plugin is a dynamic library
+(shared object) that is loaded at runtime. NetworkManager uses plugins
+for optional functionality that depend on external software. In this
+way, it is possible to install a minimal version of NetworkManager
+with a limited set of dependencies. As there is no stable API/ABI for
+those plugins, they must be built together with the daemonq and
+maintained as part of NetworkManager.
+
+Currently the following device types are provided by plugins:
+
+ - Wi-Fi (depends on wpa_supplicant)
+ - OVS (depends on openswitch)
+ - PPP (depends on pppd)
+ - Bluetooth (depends on bluez)
+ - team (depends on teamd)
+
+When a device is activated, it relies on other objects:
+
+ - *L3cfg*: controls the IP configuration (address, routes, etc) on a
+ given ifindex, and also does IPv4 ACD (address conflict detection,
+ also know as DAD - duplicate address detection);
+ - *DhcpClient*: performs DHCPv4 and DHCPv6 on the interface; the
+ object has different implementations;
+ - *NDisc*: implements IPv6 SLAAC (stateless address
+ autoconfiguration, RFC 4861 and 4862); it supports acting both as
+ a host or a router for shared IPv6 mode;
+ - *LldpListener*: when the profile enables
+ [LLDP](https://en.wikipedia.org/wiki/Link_Layer_Discovery_Protocol)
+ via the `connection.lldp` property, this object sets up a socket
+ to listen for neighbors;
+ - *FirewalldManager*: talks with [firewalld](https://firewalld.org/)
+ to set the interface in the zone specified by the
+ `connection.zone` property;
+ - *BondManager*: used to configure bond devices in a special mode
+ (balance-slb) that requires the creation of nftables rules;
+
+For more information about the implementation of devices, see [this
+document](./device.md).
+
+## Platform
+
+*Platform* communicates with kernel to query and update the
+configuration of network interfaces; it uses netlink and implements
+the crafting and parsing of netlink message by itself without relying
+on external libraries such as libnl.
+
+Platform has two subclasses, *PlatformLinux* and a *PlatformFake*. The
+former is the one that contain the actual implementation while the
+latter is only used for unit testing.
+
+Note how the platform object has an incoming dotted arrow in the
+diagram, to represent that the object is used by several other
+objects.
+
+As mentioned, the purposes of platform are:
+
+ - perform operations such as adding or removing links, addresses,
+ routes, routing rules and other kernel entities
+
+ - allow querying the current state of the kernel configuration. To do
+ so, platform listens to kernel notifications and parses them to
+ build a cache of `NMPObject`s that is always up to date.
+
+NMPObject and its subtypes are also used through the core to represent
+information about addresses, routes, etc. Thus the cache of NMPlatform
+contains the currently configured objects in the netlink API, while
+other NMPObject instances are used for other tracking purposes.
+
+For these purposes platform uses two sockets, one with protocol
+NETLINK_ROUTE for regular operations about links, addresses, routes,
+etc. and a NETLINK_GENERIC socket to configure Wireguard and MPTCP.
+
+## Other objects
+
+The diagram shows other objects on the right side:
+
+ - *DnsManager*: merges all the DNS data received by multiple
+ interfaces and updates the system configuration. Besides directly
+ writing `/etc/resolv.conf`, it supports updating
+ `systemd-resolved` and `dnsmasq` via plugins.
+
+ - *HostnameManager*: implements reading and updating the system
+ hostname; by default it tries to do that by talking to
+ [systemd-hostnamed](https://www.freedesktop.org/wiki/Software/systemd/hostnamed/)
+ via D-Bus; in case it's not available, the hostname manager falls
+ back to reading and writing `/etc/hostname` directly.
+
+ - *RfkillManager*: enumerates RFKill devices and controls their status. See also
+ the [related page](https://networkmanager.dev/docs/rfkill/) on the website.
+
+ - *AuthManager*: is used to authenticate the API requests received by
+ the daemon. The authentication is done via
+ [Polkit](https://www.freedesktop.org/software/polkit/docs/latest/polkit.8.html)
+
+ - *DbusManager*: creates a connection to the system D-Bus instance
+ and allows exporting objects
+
+ - *SleepMonitor*: gets notifications for sleep and wake events by
+ registering to the available subsystem provided by the distro such
+ as systemd-logind, upower or ConsoleKit.
+
+ - *SessionMonitor*: tracks which users have an active session by
+ using systemd-logind, elogind or ConsoleKit.
+
+ - *Dispatcher*: takes care of spawning dispatcher scripts by talking
+ to the `nm-dispatcher` service via D-Bus.
diff --git a/docs/internal/daemon.png b/docs/internal/daemon.png
new file mode 100644
index 0000000000..454c2ebc6e
--- /dev/null
+++ b/docs/internal/daemon.png
Binary files differ