diff options
author | Francis Dupont <fdupont@isc.org> | 2020-07-17 12:56:16 +0200 |
---|---|---|
committer | Francis Dupont <fdupont@isc.org> | 2020-08-04 10:45:38 +0200 |
commit | 16970da27e836797d10bcc887ce056f6fab4cd9c (patch) | |
tree | 37497736b29bf9a8cff26593ad5881ee3822a337 /doc/devel | |
parent | [#1319] Added a comment about error 1452 (diff) | |
download | kea-16970da27e836797d10bcc887ce056f6fab4cd9c.tar.xz kea-16970da27e836797d10bcc887ce056f6fab4cd9c.zip |
[#1329] Added UML files
Diffstat (limited to 'doc/devel')
-rw-r--r-- | doc/devel/images/main-loop.png | bin | 0 -> 41900 bytes | |||
-rw-r--r-- | doc/devel/images/main-loop.svg | 97 | ||||
-rw-r--r-- | doc/devel/images/main-loop.uml | 58 | ||||
-rw-r--r-- | doc/devel/images/packet4.png | bin | 0 -> 183785 bytes | |||
-rw-r--r-- | doc/devel/images/packet4.svg | 149 | ||||
-rw-r--r-- | doc/devel/images/packet4.uml | 84 | ||||
-rw-r--r-- | doc/devel/images/request4.png | bin | 0 -> 88619 bytes | |||
-rw-r--r-- | doc/devel/images/request4.svg | 107 | ||||
-rw-r--r-- | doc/devel/images/request4.uml | 59 | ||||
-rw-r--r-- | doc/devel/images/select4.png | bin | 0 -> 174292 bytes | |||
-rw-r--r-- | doc/devel/images/select4.svg | 152 | ||||
-rw-r--r-- | doc/devel/images/select4.uml | 82 |
12 files changed, 788 insertions, 0 deletions
diff --git a/doc/devel/images/main-loop.png b/doc/devel/images/main-loop.png Binary files differnew file mode 100644 index 0000000000..aec13f41c5 --- /dev/null +++ b/doc/devel/images/main-loop.png diff --git a/doc/devel/images/main-loop.svg b/doc/devel/images/main-loop.svg new file mode 100644 index 0000000000..2c1ec0d549 --- /dev/null +++ b/doc/devel/images/main-loop.svg @@ -0,0 +1,97 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="957px" preserveAspectRatio="none" style="width:674px;height:957px;" version="1.1" viewBox="0 0 674 957" width="674px" zoomAndPan="magnify"><defs><filter height="300%" id="f17jyru5kcc8mi" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="199" x="228.5" y="17.4023">DHCP server main loop</text><!--MD5=[f7a7ee0c51b4e04c55c1f405505b5a33] +cluster Main Loop--><rect fill="#FFFFFF" filter="url(#f17jyru5kcc8mi)" height="911.86" style="stroke: #000000; stroke-width: 1.5;" width="650" x="7" y="28.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="75" x="294.5" y="43.7344">Main Loop</text><!--MD5=[5612987a0f9796801dd6d08eccf6974b] +cluster run_one--><rect fill="#FFFFFF" filter="url(#f17jyru5kcc8mi)" height="467.86" style="stroke: #000000; stroke-width: 1.5;" width="572" x="49" y="170.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="79" x="295.5" y="185.7344">Event Loop</text><!--MD5=[983d0794f401e349a629364dfc448d7d] +entity run--><rect fill="#FEFECE" filter="url(#f17jyru5kcc8mi)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="149" x="145.5" y="63.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="129" x="155.5" y="86.7344">Wait for next event</text><!--MD5=[463fa6ce3d00da797e8ff80a4d9c8378] +entity shutdown--><rect fill="#FEFECE" filter="url(#f17jyru5kcc8mi)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="135" x="28.5" y="888.0592"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="115" x="38.5" y="911.5944">Check Shutdown</text><!--MD5=[f73c77a11c1a01c10ee045ae76f5a064] +entity timeout--><rect fill="#FEFECE" filter="url(#f17jyru5kcc8mi)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="77" x="306.5" y="578.0592"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="57" x="316.5" y="601.5944">Timeout</text><!--MD5=[53133b9ef51e4e7f3d2c6bacee8894bf] +entity signal--><rect fill="#FEFECE" filter="url(#f17jyru5kcc8mi)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="62" x="311" y="277.0592"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="42" x="321" y="300.5944">Signal</text><!--MD5=[7492a645d94b1ba942c71cddc305dc30] +entity handleSignal--><rect fill="#FEFECE" filter="url(#f17jyru5kcc8mi)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="114" x="97" y="277.0592"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="94" x="107" y="300.5944">Handle Signal</text><!--MD5=[82e30069e7a5a9e7454e349f4f7c28bc] +entity external_socket--><rect fill="#FEFECE" filter="url(#f17jyru5kcc8mi)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="126" x="97" y="378.0592"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="106" x="107" y="401.5944">External Socket</text><!--MD5=[ba069a43eac8d7db5b41bef0d2c2bb79] +entity handleExternalSocket--><rect fill="#FEFECE" filter="url(#f17jyru5kcc8mi)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="178" x="395" y="378.0592"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="158" x="405" y="401.5944">Handle External Socket</text><!--MD5=[a096c1983bcf686c95ea726f28f7a0ed] +entity query--><rect fill="#FEFECE" filter="url(#f17jyru5kcc8mi)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="103" x="371.5" y="479.0592"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="83" x="381.5" y="502.5944">DHCP Query</text><!--MD5=[15a052d0312126cb226db0f9a615136d] +entity processQuery--><rect fill="#FEFECE" filter="url(#f17jyru5kcc8mi)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="117" x="97.5" y="479.0592"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="97" x="107.5" y="502.5944">Process Query</text><!--MD5=[3ec86a5ecee919912764a4f49fada726] +entity poll--><rect fill="#FEFECE" filter="url(#f17jyru5kcc8mi)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="94" x="60" y="711.0592"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="74" x="70" y="734.5944">I/O Service</text><!--MD5=[55a3d76f9f066a914db2e6a0219879c4] +entity ready--><rect fill="#FEFECE" filter="url(#f17jyru5kcc8mi)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="173" x="275.5" y="711.0592"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="153" x="285.5" y="734.5944">Execute ready handler</text><!--MD5=[5e1c1922f34751d45a9d92a38b9ac144] +link run to run_one--><path d="M265,99.3792 C265,114.9742 265,138.0042 265,157.8405 C265,160.32 265,162.7496 265,165.1086 C265,166.2881 265,167.4499 265,168.5915 C265,168.8768 265,169.161 265,169.4438 C265,169.5852 265,169.7263 265,169.867 " fill="none" id="run->run_one" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="265,169.867,269,160.867,265,164.867,261,160.867,265,169.867" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="90" x="236" y="142.7676">get next event</text><!--MD5=[0596cb5bc7e39429b5a70ee803d7702a] +link run_one to signal--><path d="M265,198.1292 C265,205.6592 265,286.0592 265,286.0592 C265,286.0592 305.68,286.0592 305.68,286.0592 " fill="none" id="run_one->signal" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="310.68,286.0592,301.68,282.0592,305.68,286.0592,301.68,290.0592,310.68,286.0592" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[71bca8b2b5579f3e01e5a5e6d05e252f] +link signal to handleSignal--><path d="M310.96,295.0592 C310.96,295.0592 216.31,295.0592 216.31,295.0592 " fill="none" id="signal->handleSignal" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="211.31,295.0592,220.31,299.0592,216.31,295.0592,220.31,291.0592,211.31,295.0592" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[59b958d73309821d887c593216a24bf9] +link handleSignal to poll--><path d="M96.78,295.0592 C86.25,295.0592 78.5,295.0592 78.5,295.0592 C78.5,295.0592 78.5,705.9592 78.5,705.9592 " fill="none" id="handleSignal->poll" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="78.5,710.9592,82.5,701.9592,78.5,705.9592,74.5,701.9592,78.5,710.9592" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[85a6501bbdb71fe843a154c65df0b326] +link signal to external_socket--><path d="M310.78,304.0592 C273.76,304.0592 217,304.0592 217,304.0592 C217,304.0592 217,372.8792 217,372.8792 " fill="none" id="signal->external_socket" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="217,377.8792,221,368.8792,217,372.8792,213,368.8792,217,377.8792" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[3cd4ee53a51a0c2827ab7b17e0cc3c3c] +link external_socket to handleExternalSocket--><path d="M223.24,390.0592 C223.24,390.0592 389.87,390.0592 389.87,390.0592 " fill="none" id="external_socket->handleExternalSocket" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="394.87,390.0592,385.87,386.0592,389.87,390.0592,385.87,394.0592,394.87,390.0592" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[9e360989e7d922bcf27daccb5299f564] +link handleExternalSocket to poll--><path d="M394.76,402.0592 C335.73,402.0592 269.17,402.0592 269.17,402.0592 C269.17,402.0592 269.17,723.0592 269.17,723.0592 C269.17,723.0592 159.34,723.0592 159.34,723.0592 " fill="none" id="handleExternalSocket->poll" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="154.34,723.0592,163.34,727.0592,159.34,723.0592,163.34,719.0592,154.34,723.0592" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[281658fee0b0d1e8e512917c18413af8] +link external_socket to query--><path d="M218.75,414.3792 C218.75,441.9792 218.75,491.0592 218.75,491.0592 C218.75,491.0592 366.46,491.0592 366.46,491.0592 " fill="none" id="external_socket->query" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="371.46,491.0592,362.46,487.0592,366.46,491.0592,362.46,495.0592,371.46,491.0592" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[0da47bb881eae3b3085d664f44c330f1] +link query to processQuery--><path d="M371.2,503.0592 C371.2,503.0592 219.62,503.0592 219.62,503.0592 " fill="none" id="query->processQuery" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="214.62,503.0592,223.62,507.0592,219.62,503.0592,223.62,499.0592,214.62,503.0592" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[5ae6948e7f9ea24c9961deb19f615012] +link processQuery to poll--><path d="M116.33,515.2592 C116.33,515.2592 116.33,705.9392 116.33,705.9392 " fill="none" id="processQuery->poll" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="116.33,710.9392,120.33,701.9392,116.33,705.9392,112.33,701.9392,116.33,710.9392" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[351006a45bcbe20db47f41960f495fbd] +link query to timeout--><path d="M377.5,515.2192 C377.5,515.2192 377.5,573.0192 377.5,573.0192 " fill="none" id="query->timeout" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="377.5,578.0192,381.5,569.0192,377.5,573.0192,373.5,569.0192,377.5,578.0192" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[8da1f0cfac91639d3cdbe4344b95ba5e] +link timeout to poll--><path d="M306.02,596.0592 C245.34,596.0592 135.17,596.0592 135.17,596.0592 C135.17,596.0592 135.17,705.8492 135.17,705.8492 " fill="none" id="timeout->poll" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="135.17,710.8492,139.17,701.8492,135.17,705.8492,131.17,701.8492,135.17,710.8492" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="100" x="277" y="675.6276">timeout expired</text><!--MD5=[7fc4943622e5fd2b8bdecbc7965863a3] +link poll to ready--><path d="M154.07,735.0592 C154.07,735.0592 270.48,735.0592 270.48,735.0592 " fill="none" id="poll->ready" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="275.48,735.0592,266.48,731.0592,270.48,735.0592,266.48,739.0592,275.48,735.0592" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[82806226eee1d65d24007de8ef94d3ba] +link poll to shutdown--><path d="M107,747.3392 C107,747.3392 107,882.8792 107,882.8792 " fill="none" id="poll->shutdown" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="107,887.8792,111,878.8792,107,882.8792,103,878.8792,107,887.8792" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="105" x="102" y="823.6276">no ready handler</text><!--MD5=[9e95aa1826d8662af772234e20e4c11a] +link ready to ready--><path d="M285,711.0292 C285,691.4792 285,663.0592 285,663.0592 C285,663.0592 272.33,663.0592 272.33,663.0592 C272.33,663.0592 272.33,818.0592 272.33,818.0592 C272.33,818.0592 362,818.0592 362,818.0592 C362,818.0592 362,752.0692 362,752.0692 " fill="none" id="ready->ready" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="362,747.0692,358,756.0692,362,752.0692,366,756.0692,362,747.0692" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[e3e9af49381d3719c9282a3c352c133e] +reverse link run to shutdown--><path d="M243.5,104.5792 C243.5,104.5792 243.5,906.0592 243.5,906.0592 C243.5,906.0592 202.48,906.0592 163.71,906.0592 " fill="none" id="run<-shutdown" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="243.5,99.5792,239.5,108.5792,243.5,104.5792,247.5,108.5792,243.5,99.5792" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[d0a2a4ab2e4dbed2a237a8cda437bfff] +@startuml
+
+title DHCP server main loop
+
+skinparam linetype ortho
+
+rectangle "Main Loop" {
+ agent "Wait for next event" as run
+
+ rectangle "Event Loop" as run_one {
+ together {
+ agent "Signal" as signal
+
+ agent "Handle Signal" as handleSignal
+ }
+
+ together {
+ agent "External Socket" as external_socket
+
+ agent "Handle External Socket" as handleExternalSocket
+ }
+
+ together {
+ agent "DHCP Query" as query
+
+ agent "Process Query" as processQuery
+ }
+
+ agent "Timeout" as timeout
+ }
+
+ together {
+ agent "I/O Service" as poll
+
+ agent "Execute ready handler" as ready
+ }
+
+ agent "Check Shutdown" as shutdown
+}
+
+run - -> run_one : get next event
+run_one - -> signal
+signal -right-> handleSignal : got signal
+handleSignal - -> poll
+signal -[dashed]-> external_socket
+external_socket -right-> handleExternalSocket : external socket ready
+handleExternalSocket - -> poll
+external_socket -[dashed]-> query
+query -right-> processQuery : DHCP socket ready
+processQuery - -> poll
+query -[dashed]-> timeout
+timeout - -> poll : timeout expired
+poll -> ready : handler ready
+poll - - -> shutdown : no ready handler
+ready -> ready : execute ready handler
+shutdown -u-> run
+
+@enduml
+ +PlantUML version 1.2020.15(Sun Jun 28 13:39:45 CEST 2020) +(GPL source distribution) +Java Runtime: OpenJDK Runtime Environment +JVM: OpenJDK 64-Bit Server VM +Default Encoding: UTF-8 +Language: en +Country: US +--></g></svg>
\ No newline at end of file diff --git a/doc/devel/images/main-loop.uml b/doc/devel/images/main-loop.uml new file mode 100644 index 0000000000..8d47aa9b5b --- /dev/null +++ b/doc/devel/images/main-loop.uml @@ -0,0 +1,58 @@ +@startuml + +title DHCP server main loop + +skinparam linetype ortho + +rectangle "Main Loop" { + agent "Wait for next event" as run + + rectangle "Event Loop" as run_one { + together { + agent "Signal" as signal + + agent "Handle Signal" as handleSignal + } + + together { + agent "External Socket" as external_socket + + agent "Handle External Socket" as handleExternalSocket + } + + together { + agent "DHCP Query" as query + + agent "Process Query" as processQuery + } + + agent "Timeout" as timeout + } + + together { + agent "I/O Service" as poll + + agent "Execute ready handler" as ready + } + + agent "Check Shutdown" as shutdown +} + +run --> run_one : get next event +run_one --> signal +signal -right-> handleSignal : got signal +handleSignal --> poll +signal -[dashed]-> external_socket +external_socket -right-> handleExternalSocket : external socket ready +handleExternalSocket --> poll +external_socket -[dashed]-> query +query -right-> processQuery : DHCP socket ready +processQuery --> poll +query -[dashed]-> timeout +timeout --> poll : timeout expired +poll -> ready : handler ready +poll ---> shutdown : no ready handler +ready -> ready : execute ready handler +shutdown -u-> run + +@enduml
\ No newline at end of file diff --git a/doc/devel/images/packet4.png b/doc/devel/images/packet4.png Binary files differnew file mode 100644 index 0000000000..e391a261f5 --- /dev/null +++ b/doc/devel/images/packet4.png diff --git a/doc/devel/images/packet4.svg b/doc/devel/images/packet4.svg new file mode 100644 index 0000000000..976ee32fcf --- /dev/null +++ b/doc/devel/images/packet4.svg @@ -0,0 +1,149 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="1622px" preserveAspectRatio="none" style="width:1541px;height:1622px;" version="1.1" viewBox="0 0 1541 1622" width="1541px" zoomAndPan="magnify"><defs><filter height="300%" id="f10gx5l1vihluf" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="231" x="646" y="17.4023">DHCPv4 packet processing</text><!--MD5=[91c043391605f0bbc36c648123f05f04] +cluster process--><rect fill="#FFFFFF" filter="url(#f10gx5l1vihluf)" height="103" style="stroke: #000000; stroke-width: 1.5;" width="849" x="205" y="749.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="257" x="501" y="764.7344">Process Query on its Message Type</text><!--MD5=[a6437f938727ef6368484703a6d5a51f] +entity processDiscover--><rect fill="#FEFECE" filter="url(#f10gx5l1vihluf)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="134" x="396" y="792.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="114" x="406" y="815.7344">Process Discover</text><!--MD5=[776f46e8e787ed3ff8f7399fa81d4ef1] +entity processRequest--><rect fill="#FEFECE" filter="url(#f10gx5l1vihluf)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="131" x="229.5" y="792.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="111" x="239.5" y="815.7344">Process Request</text><!--MD5=[fc7d6e37f840cd9a10a681e81df6f28b] +entity processRelease--><rect fill="#FEFECE" filter="url(#f10gx5l1vihluf)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="128" x="726" y="792.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="108" x="736" y="815.7344">Process Release</text><!--MD5=[8d825f552c438f1d41e38a94f08e3f47] +entity processDecline--><rect fill="#FEFECE" filter="url(#f10gx5l1vihluf)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="126" x="565" y="792.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="106" x="575" y="815.7344">Process Decline</text><!--MD5=[3b341f45531d1fcf2cf88cb83e9fdef4] +entity processInform--><rect fill="#FEFECE" filter="url(#f10gx5l1vihluf)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="122" x="889" y="792.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="102" x="899" y="815.7344">Process Inform</text><!--MD5=[aa62c1eea3f70b4dbb2d8a2ad04d8b75] +entity receivePacket--><rect fill="#FEFECE" filter="url(#f10gx5l1vihluf)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="114" x="1239" y="28.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="94" x="1249" y="51.7344">Receive query</text><path d="M1150,33.6992 L1150,59.0098 A0,0 0 0 0 1150,59.0098 L1204,59.0098 A0,0 0 0 0 1204,59.0098 L1204,51.6992 L1238.77,46.1992 L1204,43.6992 L1204,43.6992 L1194,33.6992 L1150,33.6992 A0,0 0 0 0 1150,33.6992 " fill="#FBFB77" filter="url(#f10gx5l1vihluf)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1194,33.6992 L1194,43.6992 L1204,43.6992 L1194,33.6992 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="33" x="1156" y="51.2676">input</text><!--MD5=[37dd4220ca2f2608029cfa1ef00c2d62] +entity isServiceEnabled--><rect fill="#FEFECE" filter="url(#f10gx5l1vihluf)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="127" x="1232.5" y="125.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="107" x="1242.5" y="148.7344">Service Enabled</text><!--MD5=[f1e4a9c8bda8d25100748cfdff400bf1] +entity buffer4_receive--><rect fill="#FEFECE" filter="url(#f10gx5l1vihluf)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="179" x="1087.5" y="238.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="159" x="1097.5" y="261.7344">Callout buffer4_receive</text><path d="M1301.5,243.6992 L1301.5,252.1992 L1266.66,256.1992 L1301.5,260.1992 L1301.5,269.0098 A0,0 0 0 0 1301.5,269.0098 L1354.5,269.0098 A0,0 0 0 0 1354.5,269.0098 L1354.5,253.6992 L1344.5,243.6992 L1301.5,243.6992 A0,0 0 0 0 1301.5,243.6992 " fill="#FBFB77" filter="url(#f10gx5l1vihluf)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1344.5,243.6992 L1344.5,253.6992 L1354.5,253.6992 L1344.5,243.6992 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="32" x="1307.5" y="261.2676">hook</text><!--MD5=[ce6c3f645c8aec4915456c978c48f6f1] +entity unpack--><rect fill="#FEFECE" filter="url(#f10gx5l1vihluf)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="114" x="990" y="351.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="94" x="1000" y="374.7344">Unpack query</text><!--MD5=[f8582116def27e35cdbbbf5463e43073] +entity classify--><rect fill="#FEFECE" filter="url(#f10gx5l1vihluf)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="115" x="989.5" y="448.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="95" x="999.5" y="471.7344">Classify query</text><!--MD5=[92aee3b8b080bbd52e01e7cb395370c4] +entity pkt4_receive--><rect fill="#FEFECE" filter="url(#f10gx5l1vihluf)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="159" x="966.5" y="545.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="139" x="976.5" y="568.7344">Callout pkt4_receive</text><path d="M1160.5,550.6992 L1160.5,559.1992 L1125.59,563.1992 L1160.5,567.1992 L1160.5,576.0098 A0,0 0 0 0 1160.5,576.0098 L1213.5,576.0098 A0,0 0 0 0 1213.5,576.0098 L1213.5,560.6992 L1203.5,550.6992 L1160.5,550.6992 A0,0 0 0 0 1160.5,550.6992 " fill="#FBFB77" filter="url(#f10gx5l1vihluf)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1203.5,550.6992 L1203.5,560.6992 L1213.5,560.6992 L1203.5,550.6992 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="32" x="1166.5" y="568.2676">hook</text><!--MD5=[7aeeef4718a003ce2e7ad9bcbdf71ad9] +entity drop_class--><rect fill="#FEFECE" filter="url(#f10gx5l1vihluf)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="141" x="975.5" y="658.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="121" x="985.5" y="681.7344">Check DROP class</text><!--MD5=[a8af8e48f2cc558a0fee70431885f908] +entity lease4_committed--><rect fill="#FEFECE" filter="url(#f10gx5l1vihluf)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="197" x="530.5" y="923.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="177" x="540.5" y="946.7344">Callout lease4_committed</text><path d="M762.5,928.6992 L762.5,937.1992 L727.75,941.1992 L762.5,945.1992 L762.5,954.0098 A0,0 0 0 0 762.5,954.0098 L815.5,954.0098 A0,0 0 0 0 815.5,954.0098 L815.5,938.6992 L805.5,928.6992 L762.5,928.6992 A0,0 0 0 0 762.5,928.6992 " fill="#FBFB77" filter="url(#f10gx5l1vihluf)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M805.5,928.6992 L805.5,938.6992 L815.5,938.6992 L805.5,928.6992 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="32" x="768.5" y="946.2676">hook</text><!--MD5=[8e18f13991ca58e5a79e0b81ed56b9db] +entity park--><rect fill="#FEFECE" filter="url(#f10gx5l1vihluf)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="50" x="612" y="1036.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="30" x="622" y="1059.7344">Park</text><!--MD5=[145fde1089ff11319f35031b66a8b2bf] +entity pkt4_send--><rect fill="#FEFECE" filter="url(#f10gx5l1vihluf)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="144" x="443" y="1149.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="124" x="453" y="1172.7344">Callout pkt4_send</text><!--MD5=[62d5b04920c444814fafa1dbf06b35cd] +entity send--><rect fill="#FEFECE" filter="url(#f10gx5l1vihluf)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="121" x="537.5" y="1472.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="101" x="547.5" y="1495.7344">Send response</text><!--MD5=[5f600c2348a98514851ba709bbd3f597] +entity pack--><rect fill="#FEFECE" filter="url(#f10gx5l1vihluf)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="118" x="456" y="1262.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="98" x="466" y="1285.7344">Pack response</text><!--MD5=[d6829aa81ee0cd45a2e878b8b13197d5] +entity buffer4_send--><rect fill="#FEFECE" filter="url(#f10gx5l1vihluf)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="164" x="549" y="1359.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="144" x="559" y="1382.7344">Callout buffer4_send</text><path d="M439.5,1477.6992 L439.5,1503.0098 A0,0 0 0 0 439.5,1503.0098 L502.5,1503.0098 A0,0 0 0 0 502.5,1503.0098 L502.5,1495.6992 L537.35,1490.1992 L502.5,1487.6992 L502.5,1487.6992 L492.5,1477.6992 L439.5,1477.6992 A0,0 0 0 0 439.5,1477.6992 " fill="#FBFB77" filter="url(#f10gx5l1vihluf)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M492.5,1477.6992 L492.5,1487.6992 L502.5,1487.6992 L492.5,1477.6992 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="42" x="445.5" y="1495.2676">output</text><!--MD5=[c92710f32fe9c293a125fb7e80204a05] +entity drop--><rect fill="#FEFECE" filter="url(#f10gx5l1vihluf)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="103" x="677.5" y="1569.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="83" x="687.5" y="1592.7344">Drop packet</text><path d="M591.5,1574.6992 L591.5,1600.0098 A0,0 0 0 0 591.5,1600.0098 L642.5,1600.0098 A0,0 0 0 0 642.5,1600.0098 L642.5,1592.6992 L677.49,1587.1992 L642.5,1584.6992 L642.5,1584.6992 L632.5,1574.6992 L591.5,1574.6992 A0,0 0 0 0 591.5,1574.6992 " fill="#FBFB77" filter="url(#f10gx5l1vihluf)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M632.5,1574.6992 L632.5,1584.6992 L642.5,1584.6992 L632.5,1574.6992 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="30" x="597.5" y="1592.2676">error</text><!--MD5=[9670815d90e482d849702fdd57183fae] +link receivePacket to isServiceEnabled--><path d="M1296,64.6192 C1296,80.1592 1296,102.9792 1296,119.8592 " fill="none" id="receivePacket->isServiceEnabled" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1296,124.8892,1300,115.8892,1296,119.8892,1292,115.8892,1296,124.8892" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[8b6c78e5054b687dbc9e19308d3a0129] +link isServiceEnabled to buffer4_receive--><path d="M1277.67,161.2992 C1256.59,180.9592 1221.99,213.2292 1199.35,234.3492 " fill="none" id="isServiceEnabled->buffer4_receive" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1195.55,237.8992,1204.8583,234.6813,1199.2048,234.4871,1199.399,228.8336,1195.55,237.8992" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="112" x="1244" y="204.7676">service is enabled</text><!--MD5=[228411fb88ef1bcdfe7f19b853e215d2] +link isServiceEnabled to drop--><path d="M1334.3,161.3592 C1368.09,179.3992 1412,211.2992 1412,255.1992 C1412,255.1992 1412,255.1992 1412,1491.1992 C1412,1554.2292 949.82,1577.8492 785.85,1584.2392 " fill="none" id="isServiceEnabled->drop" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="780.62,1584.4392,789.7727,1588.0763,785.616,1584.2394,789.4529,1580.0827,780.62,1584.4392" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="116" x="1413" y="889.7676">service is disabled</text><!--MD5=[939988dada0403ed6d1a4e6924dd7701] +link buffer4_receive to unpack--><path d="M1127.37,274.3592 C1111.2,281.6992 1094.07,291.5492 1081,304.1992 C1068.92,315.8892 1060.19,332.8092 1054.6,346.3092 " fill="none" id="buffer4_receive->unpack" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1052.68,351.1192,1059.7182,344.2298,1054.5246,346.4719,1052.2825,341.2784,1052.68,351.1192" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="67" x="1082" y="317.7676">CONTINUE</text><!--MD5=[02f70f5bfef59fd4c02228f0fd276994] +link buffer4_receive to classify--><path d="M1171.43,274.2292 C1167.05,287.2392 1160.59,305.5292 1154,321.1992 C1141.36,351.2492 1140.64,360.4492 1122,387.1992 C1107.15,408.5092 1086.46,429.5592 1070.57,444.4092 " fill="none" id="buffer4_receive->classify" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1066.64,448.0492,1075.955,444.8508,1070.3019,444.6448,1070.5079,438.9917,1066.64,448.0492" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="26" x="1142" y="374.2676">SKIP</text><!--MD5=[41e6595d93b5d76e06ef1219c230b624] +link buffer4_receive to drop--><path d="M1231.41,274.2392 C1272.55,290.9092 1322,320.7992 1322,368.1992 C1322,368.1992 1322,368.1992 1322,1491.1992 C1322,1544.9492 1263.04,1525.7592 1211,1539.1992 C1060.79,1577.9792 876.72,1585.2792 785.63,1586.3192 " fill="none" id="buffer4_receive->drop" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="780.56,1586.3792,789.6051,1590.2761,785.5597,1586.3221,789.5137,1582.2766,780.56,1586.3792" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="35" x="1323" y="946.2676">DROP</text><!--MD5=[1ecae68ae42d9a73e40e9217f03f9ce7] +link unpack to classify--><path d="M1047,387.6192 C1047,403.1592 1047,425.9792 1047,442.8592 " fill="none" id="unpack->classify" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1047,447.8892,1051,438.8892,1047,442.8892,1043,438.8892,1047,447.8892" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[27fcba0ca5551c2a3eff6088113b3400] +link unpack to drop--><path d="M989.92,372.3892 C772.19,381.1192 6,415.3792 6,465.1992 C6,465.1992 6,465.1992 6,1491.1992 C6,1550.8192 494.13,1542.7992 660,1569.1992 C663.94,1569.8292 667.99,1570.5692 672.05,1571.3792 " fill="none" id="unpack->drop" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="677.2,1572.4492,669.1976,1566.708,672.3038,1571.4357,667.576,1574.5419,677.2,1572.4492" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="50" x="7" y="1002.7676">on error</text><!--MD5=[6d44324a94e4b11142830ec71aa81556] +link classify to pkt4_receive--><path d="M1046.82,484.6192 C1046.65,500.1592 1046.41,522.9792 1046.24,539.8592 " fill="none" id="classify->pkt4_receive" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1046.18,544.8892,1050.2572,535.9239,1046.223,539.8894,1042.2575,535.8552,1046.18,544.8892" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[0057d53684278b0199141f1c920049f3] +link pkt4_receive to drop_class--><path d="M1046,581.5392 C1046,600.7692 1046,631.8292 1046,652.8592 " fill="none" id="pkt4_receive->drop_class" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1046,657.9792,1050,648.9792,1046,652.9792,1042,648.9792,1046,657.9792" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="67" x="1047" y="624.7676">CONTINUE</text><!--MD5=[23d76d484a8ade2f68bc32d339275e55] +link pkt4_receive to drop--><path d="M966.21,565.0492 C735.01,568.5592 81,586.3492 81,675.1992 C81,675.1992 81,675.1992 81,1491.1992 C81,1545.4592 591.2,1557.6492 660,1569.1992 C663.94,1569.8592 667.98,1570.6292 672.04,1571.4592 " fill="none" id="pkt4_receive->drop" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="677.18,1572.5492,669.1971,1566.7809,672.2873,1571.5192,667.549,1574.6093,677.18,1572.5492" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="35" x="82" y="1115.7676">DROP</text><!--MD5=[17d61ffc5c9189e7f93f951e2b5510f6] +link drop_class to process--><path d="M1046,694.4592 C1046,703.2642 1046,714.6842 1046,726.8989 C1046,733.0063 1046,739.3123 1046,745.5894 C1046,746.3741 1046,747.1583 1046,747.9415 C1046,748.3332 1046,748.7246 1046,749.1158 " fill="none" id="drop_class->process" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1046,749.1158,1050,740.1158,1046,744.1158,1042,740.1158,1046,749.1158" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[4eef49efa4e6a39b9cad1f9dd4db75c9] +link drop_class to drop--><path d="M1069.48,694.4292 C1097.62,717.2392 1141,760.3492 1141,809.1992 C1141,809.1992 1141,809.1992 1141,1111.6992 C1141,1146.4992 1147.95,1156.7592 1168,1185.1992 C1180,1202.2192 1192.18,1198.0492 1204,1215.1992 C1221.07,1239.9592 1226,1249.1192 1226,1279.1992 C1226,1279.1992 1226,1279.1992 1226,1491.1992 C1226,1579.8992 916.71,1587.7792 786.11,1587.1492 " fill="none" id="drop_class->drop" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="780.78,1587.1192,789.757,1591.1706,785.7799,1587.1478,789.8027,1583.1707,780.78,1587.1192" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="126" x="1169" y="1172.2676">query in DROP class</text><!--MD5=[3640933a3eded42de606c73d1c2efb26] +link process to drop--><path d="M1049.382,852.4605 C1049.3955,852.6507 1049.4089,852.8414 1049.4224,853.0326 C1049.4761,853.7971 1049.53,854.5686 1049.5838,855.3467 C1051.305,880.2467 1053,911.9392 1053,940.1992 C1053,940.1992 1053,940.1992 1053,1491.1992 C1053,1546.2092 878.82,1571.6292 785.88,1581.2692 " fill="none" id="process->drop" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="780.7,1581.7992,790.0638,1584.8519,785.6735,1581.2847,789.2406,1576.8944,780.7,1581.7992" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="148" x="1054" y="1228.7676">unknown message type</text><!--MD5=[952846e6e065ca3396c39be4d5d60980] +link processDiscover to lease4_committed--><path d="M485.04,828.3292 C515.43,851.9392 570.11,894.4292 602.62,919.6992 " fill="none" id="processDiscover->lease4_committed" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="606.87,922.9992,602.2281,914.3129,602.9255,919.9265,597.3119,920.624,606.87,922.9992" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[7f61b5f2e024f0ea6329d761794804a2] +link processDiscover to drop--><path d="M441.41,828.4592 C424.87,840.9692 401.05,857.4992 378,868.1992 C366.26,873.6492 361.87,871.0292 350,876.1992 C299.55,898.1692 244,885.1692 244,940.1992 C244,940.1992 244,940.1992 244,1491.1992 C244,1539.4892 609.77,1559.9192 660,1569.1992 C663.92,1569.9292 667.96,1570.7392 672.01,1571.6092 " fill="none" id="processDiscover->drop" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="677.15,1572.7292,669.2157,1566.8942,672.2661,1571.6582,667.5021,1574.7085,677.15,1572.7292" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="50" x="245" y="1228.7676">on error</text><!--MD5=[f46ab6743faf3720230dd3ca9adf25a5] +link processRequest to lease4_committed--><path d="M316.31,828.4592 C332.64,840.9692 356.18,857.4992 379,868.1992 C430.4,892.2892 491.59,910.0792 540.57,921.9492 " fill="none" id="processRequest->lease4_committed" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="545.57,923.1492,537.7547,917.1558,540.7086,921.9802,535.8842,924.9341,545.57,923.1492" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[46780bcbdce00599e22cc2808afc4298] +link processRequest to drop--><path d="M252.1,828.3292 C209.97,848.2992 152,885.6992 152,940.1992 C152,940.1992 152,940.1992 152,1491.1992 C152,1536.8592 598.86,1558.4592 660,1569.1992 C663.93,1569.8892 667.97,1570.6792 672.03,1571.5292 " fill="none" id="processRequest->drop" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="677.17,1572.6292,669.2195,1566.8164,672.2831,1571.5718,667.5276,1574.6354,677.17,1572.6292" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="50" x="153" y="1228.7676">on error</text><!--MD5=[dd5280f7a4fbe519a789693377d2c3dc] +link processRelease to lease4_committed--><path d="M768.62,828.3292 C739.15,851.9392 686.12,894.4292 654.58,919.6992 " fill="none" id="processRelease->lease4_committed" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="650.47,922.9992,659.9988,920.509,654.3771,919.8792,655.0069,914.2575,650.47,922.9992" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[9c1ccee308c843163ae9c7fab5373c87] +link processRelease to drop--><path d="M809.12,828.3592 C832.5,851.3292 869,894.4992 869,940.1992 C869,940.1992 869,940.1992 869,1168.1992 C869,1245.6192 818.47,1435.0892 793,1508.1992 C787.96,1522.6492 787,1526.8192 778,1539.1992 C771.21,1548.5392 762.44,1557.6192 754.2,1565.2592 " fill="none" id="processRelease->drop" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="750.21,1568.8892,759.5566,1565.7842,753.9058,1565.5216,754.1684,1559.8708,750.21,1568.8892" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="50" x="866" y="1228.7676">on error</text><!--MD5=[762f153a4fd6a7efd08d553c7afbf530] +link processDecline to lease4_committed--><path d="M628.13,828.3292 C628.31,851.3592 628.63,892.3592 628.83,917.8192 " fill="none" id="processDecline->lease4_committed" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="628.87,922.9992,632.8185,913.9765,628.8414,917.9993,624.8186,914.0222,628.87,922.9992" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[6d9fbe084438a9903d341665e19467c6] +link processDecline to drop--><path d="M607.69,828.2192 C592.13,840.5992 569.71,857.0892 548,868.1992 C459.43,913.5492 336,840.6892 336,940.1992 C336,940.1992 336,940.1992 336,1168.1992 C336,1321.2792 285.12,1397.6492 391,1508.1992 C475.8,1596.7292 540.7,1540.9792 660,1569.1992 C664.06,1570.1592 668.24,1571.1592 672.46,1572.1792 " fill="none" id="processDecline->drop" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="677.41,1573.3792,669.5987,1567.3806,672.5494,1572.2069,667.723,1575.1576,677.41,1573.3792" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="50" x="335" y="1228.7676">on error</text><!--MD5=[403b2bcd25ba6f5a11641c975fae6de0] +link processInform to lease4_committed--><path d="M930.7,828.2292 C915.62,840.7892 893.65,857.4892 872,868.1992 C823.01,892.4392 764.35,910.1092 716.93,921.8792 " fill="none" id="processInform->lease4_committed" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="711.8,923.1392,721.4919,924.8907,716.6574,921.9535,719.5946,917.1189,711.8,923.1392" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[c5223c78dfc731d8a0b6dd3ad2587a32] +link processInform to drop--><path d="M952.39,828.2692 C955.62,852.9292 961,899.9692 961,940.1992 C961,940.1992 961,940.1992 961,1491.1992 C961,1566.5992 854.76,1583.4592 786.07,1586.4692 " fill="none" id="processInform->drop" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="780.78,1586.6792,789.9331,1590.3153,785.776,1586.4788,789.6124,1582.3217,780.78,1586.6792" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="50" x="962" y="1228.7676">on error</text><!--MD5=[887612e1a41deb0055e6b261cad7b207] +link lease4_committed to pkt4_send--><path d="M600.35,959.4692 C575.96,975.8892 542.37,1002.9692 526,1036.1992 C508.92,1070.8692 509.72,1117.0692 512.16,1144.0392 " fill="none" id="lease4_committed->pkt4_send" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="512.66,1149.1592,515.7659,1139.8129,512.1738,1144.1829,507.8038,1140.5908,512.66,1149.1592" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="67" x="527" y="1059.2676">CONTINUE</text><!--MD5=[03d4f1b76350f6f230f27d5a69f4e552] +link lease4_committed to drop--><path d="M650.67,959.3192 C659.53,967.4492 669.08,977.8692 675,989.1992 C776.19,1182.8892 746.46,1254.6392 767,1472.1992 C768.5,1488.1292 770.57,1492.5992 767,1508.1992 C763.58,1523.1192 758.7,1525.4392 752,1539.1992 C748.05,1547.3192 743.7,1556.2192 739.86,1564.0592 " fill="none" id="lease4_committed->drop" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="737.54,1568.7992,745.0944,1562.4801,739.7417,1564.3101,737.9117,1558.9574,737.54,1568.7992" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="35" x="757" y="1285.2676">DROP</text><!--MD5=[e6b479318b22374427e5a12769813441] +link lease4_committed to park--><path d="M630.25,959.5392 C631.64,978.7692 633.87,1009.8292 635.39,1030.8592 " fill="none" id="lease4_committed->park" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="635.76,1035.9792,639.1067,1026.7164,635.4027,1030.992,631.1272,1027.288,635.76,1035.9792" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="32" x="634" y="1002.7676">PARK</text><!--MD5=[6b0b05ab5b5e01054aa0e3030e86c15b] +link park to pkt4_send--><path d="M618.2,1072.2992 C596.6,1091.9592 561.13,1124.2292 537.92,1145.3492 " fill="none" id="park->pkt4_send" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="534.02,1148.8992,543.3731,1145.8139,537.7229,1145.5394,537.9974,1139.8892,534.02,1148.8992" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="44" x="584" y="1115.7676">unpark</text><!--MD5=[e1e7c40ae99ae9db4be329f6b3cb143f] +link pkt4_send to pack--><path d="M515,1185.5392 C515,1204.7692 515,1235.8292 515,1256.8592 " fill="none" id="pkt4_send->pack" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="515,1261.9792,519,1252.9792,515,1256.9792,511,1252.9792,515,1261.9792" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="67" x="516" y="1228.7676">CONTINUE</text><!--MD5=[729fab78839d14d65a522c939ef9b552] +link pkt4_send to buffer4_send--><path d="M556.05,1185.4192 C569.28,1192.8092 582.86,1202.6692 592,1215.1992 C622.73,1257.3292 629.49,1320.5292 630.82,1353.8392 " fill="none" id="pkt4_send->buffer4_send" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="630.99,1358.9192,634.6793,1349.7874,630.8187,1353.9222,626.684,1350.0616,630.99,1358.9192" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="26" x="625" y="1285.2676">SKIP</text><!--MD5=[7a343c005ca5222349b93a374f6aa4be] +link pkt4_send to drop--><path d="M495.53,1185.4392 C477.37,1202.8192 451.31,1231.4092 439,1262.1992 C398.31,1363.9592 354.72,1421.6892 422,1508.1992 C422.98,1509.4592 584.15,1549.9492 672.54,1572.0792 " fill="none" id="pkt4_send->drop" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="677.47,1573.3192,669.7131,1567.2504,672.6201,1572.1032,667.7674,1575.0102,677.47,1573.3192" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="35" x="399" y="1382.2676">DROP</text><!--MD5=[e1b3754cee4214144faeedd0f77d1671] +link pack to buffer4_send--><path d="M536.01,1298.3992 C555.72,1314.5392 585.21,1338.6992 606.09,1355.7992 " fill="none" id="pack->buffer4_send" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="610.15,1359.1192,605.7226,1350.3216,606.2821,1355.9507,600.653,1356.5102,610.15,1359.1192" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[0fe92c55fb860475c26b6ea914a50894] +link buffer4_send to send--><path d="M625.84,1395.5392 C620.1,1414.8492 610.82,1446.0892 604.56,1467.1292 " fill="none" id="buffer4_send->send" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="603.12,1471.9792,609.5067,1464.4818,604.537,1467.1842,601.8347,1462.2146,603.12,1471.9792" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="67" x="617" y="1438.7676">CONTINUE</text><!--MD5=[887aa11356841167329c21249679272f] +link buffer4_send to drop--><path d="M661.94,1395.2892 C673.3,1403.0292 685.26,1413.1492 693,1425.1992 C720.92,1468.6592 727.37,1530.7892 728.74,1563.7192 " fill="none" id="buffer4_send->drop" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="728.92,1568.7392,732.5832,1559.597,728.7344,1563.7427,724.5887,1559.8939,728.92,1568.7392" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="35" x="723" y="1495.2676">DROP</text><!--MD5=[6b25e4fe160ab604f67b02c1ded86970] +link send to drop--><!--MD5=[b13d16fe916d552630640f297118268c] +@startuml
+
+title DHCPv4 packet processing
+
+agent "Receive query" as receivePacket
+note left : input
+
+agent "Service Enabled" as isServiceEnabled
+
+agent "Callout buffer4_receive" as buffer4_receive
+note right : hook
+
+agent "Unpack query" as unpack
+
+agent "Classify query" as classify
+
+agent "Callout pkt4_receive" as pkt4_receive
+note right : hook
+
+agent "Check DROP class" as drop_class
+
+rectangle "Process Query on its Message Type" as process {
+ agent "Process Discover" as processDiscover
+ agent "Process Request" as processRequest
+ agent "Process Release" as processRelease
+ agent "Process Decline" as processDecline
+ agent "Process Inform" as processInform
+}
+
+agent "Callout lease4_committed" as lease4_committed
+note right : hook
+
+agent "Park" as park
+
+agent "Callout pkt4_send" as pkt4_send
+
+agent "Send response" as send
+
+agent "Pack response" as pack
+
+agent "Callout buffer4_send" as buffer4_send
+
+agent "Send response" as send
+note left : output
+
+agent "Drop packet" as drop
+note left : error
+
+receivePacket - -> isServiceEnabled
+isServiceEnabled - -> buffer4_receive : service is enabled
+isServiceEnabled - - - -> drop : service is disabled
+buffer4_receive - -> unpack : CONTINUE
+buffer4_receive - -> classify : SKIP
+buffer4_receive - - - -> drop : DROP
+unpack - -> classify
+unpack - - -> drop : on error
+classify - -> pkt4_receive
+pkt4_receive - -> drop_class : CONTINUE
+pkt4_receive - - -> drop : DROP
+drop_class - -> process
+drop_class - - -> drop : query in DROP class
+process - - -> drop : unknown message type
+processDiscover - -> lease4_committed
+processDiscover - - -> drop : on error
+processRequest - -> lease4_committed
+processRequest - - -> drop : on error
+processRelease - -> lease4_committed
+processRelease - - -> drop : on error
+processDecline - -> lease4_committed
+processDecline - - -> drop : on error
+processInform - -> lease4_committed
+processInform - - -> drop : on error
+lease4_committed - -> pkt4_send : CONTINUE
+lease4_committed - - -> drop : DROP
+lease4_committed - -> park : PARK
+park -[dashed]-> pkt4_send : unpark
+pkt4_send - -> pack : CONTINUE
+pkt4_send - -> buffer4_send : SKIP
+pkt4_send - - -> drop : DROP
+pack - -> buffer4_send
+buffer4_send - -> send : CONTINUE
+buffer4_send - - -> drop : DROP
+send -[hidden]-> drop
+@enduml
+ +PlantUML version 1.2020.15(Sun Jun 28 13:39:45 CEST 2020) +(GPL source distribution) +Java Runtime: OpenJDK Runtime Environment +JVM: OpenJDK 64-Bit Server VM +Default Encoding: UTF-8 +Language: en +Country: US +--></g></svg>
\ No newline at end of file diff --git a/doc/devel/images/packet4.uml b/doc/devel/images/packet4.uml new file mode 100644 index 0000000000..a631acca78 --- /dev/null +++ b/doc/devel/images/packet4.uml @@ -0,0 +1,84 @@ +@startuml + +title DHCPv4 packet processing + +agent "Receive query" as receivePacket +note left : input + +agent "Service Enabled" as isServiceEnabled + +agent "Callout buffer4_receive" as buffer4_receive +note right : hook + +agent "Unpack query" as unpack + +agent "Classify query" as classify + +agent "Callout pkt4_receive" as pkt4_receive +note right : hook + +agent "Check DROP class" as drop_class + +rectangle "Process Query on its Message Type" as process { + agent "Process Discover" as processDiscover + agent "Process Request" as processRequest + agent "Process Release" as processRelease + agent "Process Decline" as processDecline + agent "Process Inform" as processInform +} + +agent "Callout lease4_committed" as lease4_committed +note right : hook + +agent "Park" as park + +agent "Callout pkt4_send" as pkt4_send + +agent "Send response" as send + +agent "Pack response" as pack + +agent "Callout buffer4_send" as buffer4_send + +agent "Send response" as send +note left : output + +agent "Drop packet" as drop +note left : error + +receivePacket --> isServiceEnabled +isServiceEnabled --> buffer4_receive : service is enabled +isServiceEnabled ----> drop : service is disabled +buffer4_receive --> unpack : CONTINUE +buffer4_receive --> classify : SKIP +buffer4_receive ----> drop : DROP +unpack --> classify +unpack ---> drop : on error +classify --> pkt4_receive +pkt4_receive --> drop_class : CONTINUE +pkt4_receive ---> drop : DROP +drop_class --> process +drop_class ---> drop : query in DROP class +process ---> drop : unknown message type +processDiscover --> lease4_committed +processDiscover ---> drop : on error +processRequest --> lease4_committed +processRequest ---> drop : on error +processRelease --> lease4_committed +processRelease ---> drop : on error +processDecline --> lease4_committed +processDecline ---> drop : on error +processInform --> lease4_committed +processInform ---> drop : on error +lease4_committed --> pkt4_send : CONTINUE +lease4_committed ---> drop : DROP +lease4_committed --> park : PARK +park -[dashed]-> pkt4_send : unpark +pkt4_send --> pack : CONTINUE +pkt4_send --> buffer4_send : SKIP +pkt4_send ---> drop : DROP +pack --> buffer4_send +buffer4_send --> send : CONTINUE +buffer4_send ---> drop : DROP +send -[hidden]-> drop +@enduml
\ No newline at end of file diff --git a/doc/devel/images/request4.png b/doc/devel/images/request4.png Binary files differnew file mode 100644 index 0000000000..eb9b6e2050 --- /dev/null +++ b/doc/devel/images/request4.png diff --git a/doc/devel/images/request4.svg b/doc/devel/images/request4.svg new file mode 100644 index 0000000000..c4abc7ac81 --- /dev/null +++ b/doc/devel/images/request4.svg @@ -0,0 +1,107 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="1782px" preserveAspectRatio="none" style="width:740px;height:1782px;" version="1.1" viewBox="0 0 740 1782" width="740px" zoomAndPan="magnify"><defs><filter height="300%" id="f60sn3t2och8t" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="225" x="248.5" y="17.4023">DHCPREQUEST processing</text><!--MD5=[638108c05bc1ef8eca3fbd57a1e57fe7] +cluster ack--><rect fill="#FFFFFF" filter="url(#f60sn3t2och8t)" height="762.86" style="stroke: #000000; stroke-width: 1.5;" width="304" x="419" y="717.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="154" x="494" y="732.7344">A lease was assigned</text><!--MD5=[bf2e5648ffce4090541457b458b3eec7] +entity setReservedClasses--><rect fill="#FEFECE" filter="url(#f60sn3t2och8t)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="163" x="449.5" y="806.0592"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="143" x="459.5" y="829.5944">Add reserved classes</text><!--MD5=[b4c6d216ba631a143bfc1836b312cb78] +entity requiredClassify--><rect fill="#FEFECE" filter="url(#f60sn3t2och8t)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="187" x="447.5" y="903.0592"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="167" x="457.5" y="926.5944">Classify required classes</text><!--MD5=[f89e27cff326c32e9ba835d84fbfe859] +entity buildCfgOptionList--><rect fill="#FEFECE" filter="url(#f60sn3t2och8t)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="206" x="455" y="1000.0592"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="186" x="465" y="1023.5944">Build configured option list</text><!--MD5=[66aecdc5adcec4353637f7b7b5526ad2] +entity appendRequestedOptions--><rect fill="#FEFECE" filter="url(#f60sn3t2och8t)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="203" x="464.5" y="1113.0592"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="183" x="474.5" y="1136.5944">Append requested options</text><!--MD5=[c1e338234dc43680cac932baec853545] +entity appendRequestedVendorOptions--><rect fill="#FEFECE" filter="url(#f60sn3t2och8t)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="255" x="443.5" y="1226.0592"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="235" x="453.5" y="1249.5944">Append requested vendor options</text><!--MD5=[c9adb4adbcc3777a62f0437095b92421] +entity appendBasicOptions--><rect fill="#FEFECE" filter="url(#f60sn3t2och8t)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="169" x="485.5" y="1323.0592"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="149" x="495.5" y="1346.5944">Append basic options</text><!--MD5=[f001f897bdcc87f34b1f31db09c9e4bc] +entity setFixedFields--><rect fill="#FEFECE" filter="url(#f60sn3t2och8t)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="121" x="508.5" y="1420.0592"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="101" x="518.5" y="1443.5944">Set fixed fields</text><!--MD5=[e3476fda087b0512b1cf4e3a66ca5e59] +entity entry--><rect fill="#FEFECE" filter="url(#f60sn3t2och8t)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="95" x="78.5" y="28.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="75" x="88.5" y="51.7344">Entry point</text><!--MD5=[a7ec37c34d1a4a150f9193e171f7b981] +entity selectSubnet--><rect fill="#FEFECE" filter="url(#f60sn3t2och8t)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="111" x="70.5" y="125.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="91" x="80.5" y="148.7344">Select subnet</text><path d="M217,130.6992 L217,139.1992 L181.52,143.1992 L217,147.1992 L217,156.0098 A0,0 0 0 0 217,156.0098 L307,156.0098 A0,0 0 0 0 307,156.0098 L307,140.6992 L297,130.6992 L217,130.6992 A0,0 0 0 0 217,130.6992 " fill="#FBFB77" filter="url(#f60sn3t2och8t)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M297,130.6992 L297,140.6992 L307,140.6992 L297,130.6992 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="69" x="223" y="148.2676">hook point</text><!--MD5=[bd2ef8d619eb080c7e3a318a85d9bc74] +entity findReservation--><rect fill="#FEFECE" filter="url(#f60sn3t2och8t)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="165" x="187.5" y="222.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="145" x="197.5" y="245.7344">Find host reservation</text><!--MD5=[2cdbe39ce7f7beceaf096677903e27aa] +entity known--><rect fill="#FEFECE" filter="url(#f60sn3t2och8t)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="280" x="174" y="319.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="260" x="184" y="342.7344">Add either KNOWN or UNKNOWN class</text><!--MD5=[63b5186a9d9ded916d56a4c496be57e4] +entity classify2--><rect fill="#FEFECE" filter="url(#f60sn3t2och8t)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="148" x="248" y="416.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="128" x="258" y="439.7344">Classify (2nd pass)</text><!--MD5=[40832264567e158d4eae9eb68a571da4] +entity processClientName--><rect fill="#FEFECE" filter="url(#f60sn3t2och8t)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="155" x="248.5" y="513.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="135" x="258.5" y="536.7344">Process client name</text><!--MD5=[2a562006d844a2c20ab5026a88816353] +entity assignLease--><rect fill="#FEFECE" filter="url(#f60sn3t2och8t)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="117" x="269.5" y="610.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="97" x="279.5" y="633.7344">Assign a lease</text><!--MD5=[8274bfb416b6365278739ca5c48d26ea] +entity common--><rect fill="#FEFECE" filter="url(#f60sn3t2och8t)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="162" x="487" y="1535.0592"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="142" x="497" y="1558.5944">Adjust interface data</text><!--MD5=[ca1312f187078c0b4317d510df91f0fb] +entity appendServerID--><rect fill="#FEFECE" filter="url(#f60sn3t2och8t)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="138" x="499" y="1632.0592"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="118" x="509" y="1655.5944">Append server ID</text><path d="M308,1637.5592 L308,1662.8698 A0,0 0 0 0 308,1662.8698 L464,1662.8698 A0,0 0 0 0 464,1662.8698 L464,1655.5592 L498.67,1650.0592 L464,1647.5592 L464,1647.5592 L454,1637.5592 L308,1637.5592 A0,0 0 0 0 308,1637.5592 " fill="#FBFB77" filter="url(#f60sn3t2och8t)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M454,1637.5592 L454,1647.5592 L464,1647.5592 L454,1637.5592 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="135" x="314" y="1655.1276">on success exit point</text><!--MD5=[c92710f32fe9c293a125fb7e80204a05] +entity drop--><rect fill="#FEFECE" filter="url(#f60sn3t2och8t)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="155" x="177.5" y="1729.0592"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="135" x="187.5" y="1752.5944">Return no response</text><path d="M6,1734.5592 L6,1759.8698 A0,0 0 0 0 6,1759.8698 L142,1759.8698 A0,0 0 0 0 142,1759.8698 L142,1752.5592 L177.47,1747.0592 L142,1744.5592 L142,1744.5592 L132,1734.5592 L6,1734.5592 A0,0 0 0 0 6,1734.5592 " fill="#FBFB77" filter="url(#f60sn3t2och8t)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M132,1734.5592 L132,1744.5592 L142,1744.5592 L132,1734.5592 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="115" x="12" y="1752.1276">on error exit point</text><!--MD5=[f1b2710c384eb85faf81d18e639f63a6] +link entry to selectSubnet--><path d="M126,64.6192 C126,80.1592 126,102.9792 126,119.8592 " fill="none" id="entry->selectSubnet" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="126,124.8892,130,115.8892,126,119.8892,122,115.8892,126,124.8892" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[b2566f3d1f41175aa140f0cd50933407] +link selectSubnet to findReservation--><path d="M152.08,161.3992 C176.75,177.6792 213.76,202.0992 239.73,219.2292 " fill="none" id="selectSubnet->findReservation" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="244.12,222.1192,238.8174,213.8197,239.9488,219.3622,234.4062,220.4936,244.12,222.1192" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[1a93233187986d890dbf5eee85d4aa4a] +link selectSubnet to drop--><path d="M120.11,161.4792 C114.21,180.3392 106,211.5592 106,239.1992 C106,239.1992 106,239.1992 106,1651.0592 C106,1689.5192 141.74,1713.0992 178.21,1727.1392 " fill="none" id="selectSubnet->drop" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="183.12,1728.9792,176.0975,1722.0738,178.4384,1727.2236,173.2885,1729.5644,183.12,1728.9792" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="94" x="107" y="926.1276">hook set DROP</text><!--MD5=[ec2fdd3e226382e0a9d3911ff6fdaa1e] +link findReservation to known--><path d="M278.07,258.6192 C285.33,274.2892 296.02,297.3792 303.85,314.2892 " fill="none" id="findReservation->known" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="305.98,318.8892,305.8344,309.0414,303.882,314.3507,298.5728,312.3982,305.98,318.8892" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[9b534dc7ab92ef37bc4e582dc201fb22] +link known to classify2--><path d="M315.47,355.6192 C316.78,371.1592 318.7,393.9792 320.12,410.8592 " fill="none" id="known->classify2" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="320.54,415.8892,323.781,406.5889,320.126,410.9064,315.8085,407.2514,320.54,415.8892" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[96b9d5e38c2d93af2aa0f6088adcad57] +link classify2 to processClientName--><path d="M322.73,452.6192 C323.39,468.1592 324.35,490.9792 325.06,507.8592 " fill="none" id="classify2->processClientName" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="325.27,512.8892,328.9071,503.7365,325.0702,507.8932,320.9135,504.0563,325.27,512.8892" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[ad449cd118a7a2b2ce8548c9076b781b] +link processClientName to assignLease--><path d="M326.37,549.6192 C326.69,565.1592 327.17,587.9792 327.53,604.8592 " fill="none" id="processClientName->assignLease" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="327.64,609.8892,331.4592,600.811,327.54,604.8902,323.4608,600.971,327.64,609.8892" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[dbcae5b7ba85be5e06360ecde09c32a7] +link assignLease to ack--><path d="M350.16,646.3192 C370.48,662.0192 401.2825,685.8217 427.3263,705.9467 C430.5817,708.4623 433.7628,710.9205 436.8398,713.2982 C438.3783,714.4871 439.8908,715.6558 441.3735,716.8015 " fill="none" id="assignLease->ack" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="441.3735,716.8015,436.6977,708.1333,437.4171,713.7443,431.8061,714.4636,441.3735,716.8015" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="62" x="407" y="689.7676">DHCPACK</text><!--MD5=[2f984fc865edd3cdda8891855a184a01] +link assignLease to common--><path d="M328.48,646.2492 C329.08,668.5892 330,709.0092 330,743.5592 C330,743.5592 330,743.5592 330,1439.0592 C330,1508.3792 413.41,1535.2292 481.47,1545.5992 " fill="none" id="assignLease->common" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="486.76,1546.3692,478.4373,1541.103,481.8131,1545.6422,477.274,1549.018,486.76,1546.3692" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="63" x="331" y="1079.6276">DHCPNAK</text><!--MD5=[1a01e4a77361624092d23c61082f06c9] +link assignLease to drop--><path d="M308.05,646.4192 C286.44,667.0992 255,703.9892 255,743.5592 C255,743.5592 255,743.5592 255,1651.0592 C255,1675.9292 255,1704.4692 255,1723.7292 " fill="none" id="assignLease->drop" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="255,1728.8992,259,1719.8992,255,1723.8992,251,1719.8992,255,1728.8992" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="50" x="256" y="1192.6276">on error</text><!--MD5=[45361b0d0807638813b657d9c2aeacea] +link ack to setReservedClasses--><path d="M476.04,745.1192 C477.12,746.6492 499.89,778.9392 515.78,801.4792 " fill="none" id="ack->setReservedClasses" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="518.86,805.8392,516.9576,796.1758,515.985,801.7484,510.4124,800.7758,518.86,805.8392" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[59a85614cff14ca40e3cee07aa3bbe30] +link setReservedClasses to requiredClassify--><path d="M532.83,842.4792 C534.47,858.0192 536.87,880.8392 538.65,897.7192 " fill="none" id="setReservedClasses->requiredClassify" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="539.18,902.7492,542.206,893.3768,538.6514,897.7772,534.2509,894.2226,539.18,902.7492" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[2efe0b9050a6d4600ee0e20f04479830] +link requiredClassify to buildCfgOptionList--><path d="M544.12,939.4792 C546.9,955.0192 550.98,977.8392 554,994.7192 " fill="none" id="requiredClassify->buildCfgOptionList" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="554.9,999.7492,557.2671,990.1891,554.027,994.826,549.39,991.5859,554.9,999.7492" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[7441c48dbaadb9becd02fb7c753a194c] +link buildCfgOptionList to appendRequestedOptions--><path d="M559.25,1036.3992 C560.64,1055.6292 562.87,1086.6892 564.39,1107.7192 " fill="none" id="buildCfgOptionList->appendRequestedOptions" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="564.76,1112.8392,568.1067,1103.5764,564.4027,1107.852,560.1272,1104.148,564.76,1112.8392" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[47343daf35e3c3d46fb0ba57547a88fa] +link appendRequestedOptions to appendRequestedVendorOptions--><path d="M566.78,1149.3992 C567.65,1168.6292 569.05,1199.6892 569.99,1220.7192 " fill="none" id="appendRequestedOptions->appendRequestedVendorOptions" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="570.22,1225.8392,573.8048,1216.6659,569.9917,1220.8444,565.8132,1217.0313,570.22,1225.8392" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[58b55c53e5f94649550176181093f5f5] +link appendRequestedVendorOptions to appendBasicOptions--><path d="M570.82,1262.4792 C570.65,1278.0192 570.41,1300.8392 570.24,1317.7192 " fill="none" id="appendRequestedVendorOptions->appendBasicOptions" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="570.18,1322.7492,574.2572,1313.7839,570.223,1317.7494,566.2575,1313.7152,570.18,1322.7492" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[7264f1f21cb707b81d802a97c78240a4] +link appendBasicOptions to setFixedFields--><path d="M569.82,1359.4792 C569.65,1375.0192 569.41,1397.8392 569.24,1414.7192 " fill="none" id="appendBasicOptions->setFixedFields" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="569.18,1419.7492,573.2572,1410.7839,569.223,1414.7494,565.2575,1410.7152,569.18,1419.7492" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[6bbcaa41c57dc9195ee921caca416269] +link setFixedFields to common--><path d="M568.85,1456.2192 C568.67,1475.7992 568.39,1507.8892 568.2,1529.4892 " fill="none" id="setFixedFields->common" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="568.15,1534.7392,572.227,1525.7738,568.1929,1529.7394,564.2273,1525.7053,568.15,1534.7392" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[132fd8477c39c92905ed9637c759fac2] +link common to appendServerID--><path d="M568,1571.4792 C568,1587.0192 568,1609.8392 568,1626.7192 " fill="none" id="common->appendServerID" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="568,1631.7492,572,1622.7492,568,1626.7492,564,1622.7492,568,1631.7492" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[c3fa6a6e0f86213585b749ab16a0c5af] +link appendServerID to drop--><!--MD5=[da6537993b0c75cf7b1e1dfe95a6f951] +@startuml
+
+title DHCPREQUEST processing
+
+agent "Entry point" as entry
+
+agent "Select subnet" as selectSubnet
+note right : hook point
+
+agent "Find host reservation" as findReservation
+
+agent "Add either KNOWN or UNKNOWN class" as known
+
+agent "Classify (2nd pass)" as classify2
+
+agent "Process client name" as processClientName
+
+agent "Assign a lease" as assignLease
+
+rectangle "A lease was assigned" as ack {
+ agent "Add reserved classes" as setReservedClasses
+ agent "Classify required classes" as requiredClassify
+ agent "Build configured option list" as buildCfgOptionList
+ agent "Append requested options" as appendRequestedOptions
+ agent "Append requested vendor options" as appendRequestedVendorOptions
+ agent "Append basic options" as appendBasicOptions
+ agent "Set fixed fields" as setFixedFields
+}
+
+agent "Adjust interface data" as common
+
+agent "Append server ID" as appendServerID
+note left : on success exit point
+
+agent "Return no response" as drop
+note left : on error exit point
+
+entry - -> selectSubnet
+selectSubnet - -> findReservation
+selectSubnet - - -> drop : hook set DROP
+findReservation - -> known
+known - -> classify2
+classify2 - -> processClientName
+processClientName - -> assignLease
+assignLease - -> ack : DHCPACK
+assignLease - -> common : DHCPNAK
+assignLease - - -> drop : on error
+ack - -> setReservedClasses
+setReservedClasses - -> requiredClassify
+requiredClassify - -> buildCfgOptionList
+buildCfgOptionList - -> appendRequestedOptions
+appendRequestedOptions - -> appendRequestedVendorOptions
+appendRequestedVendorOptions - -> appendBasicOptions
+appendBasicOptions - -> setFixedFields
+setFixedFields - -> common
+common - -> appendServerID
+appendServerID -[hidden]-> drop
+
+@enduml
+ +PlantUML version 1.2020.15(Sun Jun 28 13:39:45 CEST 2020) +(GPL source distribution) +Java Runtime: OpenJDK Runtime Environment +JVM: OpenJDK 64-Bit Server VM +Default Encoding: UTF-8 +Language: en +Country: US +--></g></svg>
\ No newline at end of file diff --git a/doc/devel/images/request4.uml b/doc/devel/images/request4.uml new file mode 100644 index 0000000000..b07929cc92 --- /dev/null +++ b/doc/devel/images/request4.uml @@ -0,0 +1,59 @@ +@startuml + +title DHCPREQUEST processing + +agent "Entry point" as entry + +agent "Select subnet" as selectSubnet +note right : hook point + +agent "Find host reservation" as findReservation + +agent "Add either KNOWN or UNKNOWN class" as known + +agent "Classify (2nd pass)" as classify2 + +agent "Process client name" as processClientName + +agent "Assign a lease" as assignLease + +rectangle "A lease was assigned" as ack { + agent "Add reserved classes" as setReservedClasses + agent "Classify required classes" as requiredClassify + agent "Build configured option list" as buildCfgOptionList + agent "Append requested options" as appendRequestedOptions + agent "Append requested vendor options" as appendRequestedVendorOptions + agent "Append basic options" as appendBasicOptions + agent "Set fixed fields" as setFixedFields +} + +agent "Adjust interface data" as common + +agent "Append server ID" as appendServerID +note left : on success exit point + +agent "Return no response" as drop +note left : on error exit point + +entry --> selectSubnet +selectSubnet --> findReservation +selectSubnet ---> drop : hook set DROP +findReservation --> known +known --> classify2 +classify2 --> processClientName +processClientName --> assignLease +assignLease --> ack : DHCPACK +assignLease --> common : DHCPNAK +assignLease ---> drop : on error +ack --> setReservedClasses +setReservedClasses --> requiredClassify +requiredClassify --> buildCfgOptionList +buildCfgOptionList --> appendRequestedOptions +appendRequestedOptions --> appendRequestedVendorOptions +appendRequestedVendorOptions --> appendBasicOptions +appendBasicOptions --> setFixedFields +setFixedFields --> common +common --> appendServerID +appendServerID -[hidden]-> drop + +@enduml
\ No newline at end of file diff --git a/doc/devel/images/select4.png b/doc/devel/images/select4.png Binary files differnew file mode 100644 index 0000000000..c5697e24c4 --- /dev/null +++ b/doc/devel/images/select4.png diff --git a/doc/devel/images/select4.svg b/doc/devel/images/select4.svg new file mode 100644 index 0000000000..957938379d --- /dev/null +++ b/doc/devel/images/select4.svg @@ -0,0 +1,152 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="2113px" preserveAspectRatio="none" style="width:1462px;height:2113px;" version="1.1" viewBox="0 0 1462 2113" width="1462px" zoomAndPan="magnify"><defs><filter height="300%" id="fpaskhkj95i84" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="216" x="614" y="17.4023">DHCPv4 subnet selection</text><!--MD5=[73860abe08ab23c9b8e49eb23f18ae46] +cluster relayed--><rect fill="#FFFFFF" filter="url(#fpaskhkj95i84)" height="374.86" style="stroke: #000000; stroke-width: 1.5;" width="445" x="7" y="232.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="56" x="201.5" y="247.7344">Relayed</text><!--MD5=[234613e222536af9475ae40e3492b0e6] +cluster set_address--><rect fill="#FFFFFF" filter="url(#fpaskhkj95i84)" height="164.86" style="stroke: #000000; stroke-width: 1.5;" width="803" x="227" y="672.0592"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="164" x="546.5" y="687.5944">Set address for lookup</text><!--MD5=[a59c1d05a8f6fb54290705d41e67acbe] +cluster interface--><rect fill="#FFFFFF" filter="url(#fpaskhkj95i84)" height="488" style="stroke: #000000; stroke-width: 1.5;" width="383" x="945" y="893.9192"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="164" x="1054.5" y="909.4544">Try incoming interface</text><!--MD5=[8f3f5adf9176dbd9c419c05d483ab0c6] +cluster address--><rect fill="#FFFFFF" filter="url(#fpaskhkj95i84)" height="294" style="stroke: #000000; stroke-width: 1.5;" width="190" x="739" y="1430.9192"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="85" x="791.5" y="1446.4544">Try address</text><!--MD5=[aeb2f621969028d4547d386ac1a1ba6d] +entity relay_subnet--><rect fill="#FEFECE" filter="url(#fpaskhkj95i84)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="226" x="172" y="321.0592"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="206" x="182" y="344.5944">Relay address matches subnet</text><!--MD5=[bf459b32eaaf498e62edf6d622ac5891] +entity relay_network--><rect fill="#FEFECE" filter="url(#fpaskhkj95i84)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="286" x="142" y="434.0592"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="266" x="152" y="457.5944">Relay address matches shared network</text><!--MD5=[076bfff500cab59e856b606fdf63ed5a] +entity relay_class--><rect fill="#FEFECE" filter="url(#fpaskhkj95i84)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="140" x="112" y="547.0592"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="120" x="122" y="570.5944">Check client class</text><!--MD5=[467e96f12fdeb7da53b220e72b6eb1fc] +entity relay_address--><rect fill="#FEFECE" filter="url(#fpaskhkj95i84)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="136" x="251" y="776.9192"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="116" x="261" y="800.4544">Set relay address</text><!--MD5=[a0e4201c97a623c3dfa593fb75aad03b] +entity client_address--><rect fill="#FEFECE" filter="url(#fpaskhkj95i84)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="140" x="553" y="776.9192"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="120" x="563" y="800.4544">Set client address</text><!--MD5=[a2d7389029b0dd04029e629f1661a883] +entity source_address--><rect fill="#FEFECE" filter="url(#fpaskhkj95i84)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="149" x="856.5" y="776.9192"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="129" x="866.5" y="800.4544">Set source address</text><!--MD5=[8eaa1e77cbee43fcac8de4e493864e04] +entity interface_subnet--><rect fill="#FEFECE" filter="url(#fpaskhkj95i84)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="192" x="995" y="928.9192"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="172" x="1005" y="952.4544">Interface matches subnet</text><!--MD5=[44eac5a65cc5cd7e6cc1fc4b89b09f4d] +entity interface_network--><rect fill="#FEFECE" filter="url(#fpaskhkj95i84)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="239" x="1072.5" y="1041.9192"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="219" x="1082.5" y="1065.4544">Interface atches shared network</text><!--MD5=[8e51806cb27b2b60db022c6084a961c9] +entity interface_class--><rect fill="#FEFECE" filter="url(#fpaskhkj95i84)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="140" x="1022" y="1154.9192"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="120" x="1032" y="1178.4544">Check client class</text><!--MD5=[953883d00ea10db133fca33539954fed] +entity interface_address--><rect fill="#FEFECE" filter="url(#fpaskhkj95i84)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="163" x="961.5" y="1329.9192"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="143" x="971.5" y="1353.4544">Set interface address</text><!--MD5=[132ec46735878e55c0250b14c07769ad] +entity inRange--><rect fill="#FEFECE" filter="url(#fpaskhkj95i84)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="158" x="755" y="1465.9192"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="138" x="765" y="1489.4544">Check subnet prefix</text><!--MD5=[a34f95003b379bc2f5b7f1af307bcb98] +entity address_class--><rect fill="#FEFECE" filter="url(#fpaskhkj95i84)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="140" x="773" y="1672.9192"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="120" x="783" y="1696.4544">Check client class</text><!--MD5=[e3476fda087b0512b1cf4e3a66ca5e59] +entity entry--><rect fill="#FEFECE" filter="url(#fpaskhkj95i84)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="95" x="350.5" y="28.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="75" x="360.5" y="51.7344">Entry point</text><!--MD5=[a23c6b9dab1f8744947aaee2891e743e] +entity rai_link_select--><rect fill="#FEFECE" filter="url(#fpaskhkj95i84)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="141" x="327.5" y="125.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="121" x="337.5" y="148.7344">Try RAI link select</text><!--MD5=[6348f6d706001cc5dc6ed638bec44faf] +entity found--><rect fill="#FEFECE" filter="url(#fpaskhkj95i84)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="127" x="702.5" y="1849.9192"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="107" x="712.5" y="1873.4544">Found a subnet</text><!--MD5=[7dc9e356e22f2f113ceeb6da807ce9ff] +entity not_found--><rect fill="#FEFECE" filter="url(#fpaskhkj95i84)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="137" x="864.5" y="1849.9192"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="117" x="874.5" y="1873.4544">Found no subnet</text><!--MD5=[4a9142d0fee9ff77eb50a001ac7877e7] +entity subnet4_select--><rect fill="#FEFECE" filter="url(#fpaskhkj95i84)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="175" x="761.5" y="1946.9192"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="155" x="771.5" y="1970.4544">Callout subnet4_select</text><!--MD5=[d0fdc5cb89e99cab1ccfec009231794d] +entity success--><rect fill="#FEFECE" filter="url(#fpaskhkj95i84)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="129" x="578.5" y="2059.9192"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="109" x="588.5" y="2083.4544">Return a subnet</text><!--MD5=[d0255a03afa46a62fe0c456dae837167] +entity no_subnet--><rect fill="#FEFECE" filter="url(#fpaskhkj95i84)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="139" x="779.5" y="2059.9192"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="119" x="789.5" y="2083.4544">Return no subnet</text><!--MD5=[c92710f32fe9c293a125fb7e80204a05] +entity drop--><rect fill="#FEFECE" filter="url(#fpaskhkj95i84)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="97" x="980.5" y="2059.9192"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="77" x="990.5" y="2083.4544">Drop query</text><!--MD5=[732ffb0ffbc5cdc82abf95e46b9c6dc7] +link entry to rai_link_select--><path d="M398,64.6192 C398,80.1592 398,102.9792 398,119.8592 " fill="none" id="entry->rai_link_select" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="398,124.8892,402,115.8892,398,119.8892,394,115.8892,398,124.8892" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[5853887b4749cf1e36855f5979bccba8] +link rai_link_select to relayed--><path d="M389.65,161.5692 C382.075,177.3142 370.655,201.0567 361.01,221.1092 C359.8044,223.6158 358.6265,226.0647 357.4873,228.4331 C356.9177,229.6173 356.3578,230.7814 355.8089,231.9225 " fill="none" id="rai_link_select->relayed" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="355.8089,231.9225,363.3147,225.5458,357.9762,227.4167,356.1053,222.0781,355.8089,231.9225" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="45" x="374" y="204.7676">relayed</text><!--MD5=[4e1625724f20f702efa0fa07c823f159] +link rai_link_select to set_address--><path d="M433.44,161.3692 C466.58,180.1792 511,213.7592 511,258.5592 C511,258.5592 511,258.5592 511,566.0592 C511,614.2292 468.365,647.0467 425.0638,667.9542 C422.3574,669.2609 419.6485,670.5211 416.9472,671.7356 " fill="none" id="rai_link_select->set_address" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="416.9472,671.7356,426.796,671.6933,421.5075,669.6853,423.5155,664.3968,416.9472,671.7356" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="70" x="512" y="400.6276">not relayed</text><!--MD5=[289599dfcd7d1f32272e42cc3c26c895] +link relayed to relay_subnet--><path d="M342.96,260.1192 C341.81,261.6492 317.61,294.2092 300.84,316.7592 " fill="none" id="relayed->relay_subnet" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="297.8,320.8392,306.3807,316.0049,300.784,316.8273,299.9616,311.2305,297.8,320.8392" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[65c9b407d2d4ddf1b89c397faeac317e] +link relay_subnet to relay_network--><path d="M285,357.3992 C285,376.6292 285,407.6892 285,428.7192 " fill="none" id="relay_subnet->relay_network" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="285,433.8392,289,424.8392,285,428.8392,281,424.8392,285,433.8392" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="59" x="286" y="400.6276">no match</text><!--MD5=[918f6d4a891df42092f9be64f359f985] +link relay_subnet to relay_class--><path d="M199.58,357.0892 C156.79,370.3892 108.74,393.6992 83,434.0592 C56.99,474.8592 109.58,518.9992 147.59,543.9192 " fill="none" id="relay_subnet->relay_class" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="152.15,546.8592,146.7424,538.6277,147.9441,544.1554,142.4164,545.3571,152.15,546.8592" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="39" x="84" y="457.1276">match</text><!--MD5=[ec56da742308e5dcfe86ad0421278606] +link relay_network to set_address--><path d="M288.52,470.3092 C294.12,497.7992 305.4675,553.4892 315.5475,602.9592 C320.5875,627.6942 325.3106,650.8742 328.84,668.1967 C329.0606,669.2794 329.2765,670.3392 329.4876,671.375 " fill="none" id="relay_network->set_address" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="329.4876,671.375,331.6103,661.7576,328.4893,666.4756,323.7713,663.3547,329.4876,671.375" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="59" x="319" y="570.1276">no match</text><!--MD5=[a30462b61ddf59585f12c8e1078496e0] +link relay_network to relay_class--><path d="M268.91,470.3992 C250.69,490.0392 221.02,522.0092 201.5,543.0392 " fill="none" id="relay_network->relay_class" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="197.98,546.8392,207.0376,542.9713,201.3844,543.1773,201.1785,537.5242,197.98,546.8392" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="39" x="241" y="513.6276">match</text><!--MD5=[44feab40ce9c0df31465bdb13adac7ed] +link relay_class to found--><path d="M177.97,583.0792 C172.39,608.1692 163,656.6292 163,698.4192 C163,698.4192 163,698.4192 163,1781.4192 C163,1834.8592 539.11,1857.2192 697.25,1864.2592 " fill="none" id="relay_class->found" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="702.32,1864.4792,693.5121,1860.0724,697.3252,1864.2509,693.1467,1868.064,702.32,1864.4792" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="70" x="164" y="1265.4876">compatible</text><!--MD5=[d5e1893c7bc3c7589901f4b78d6439f0] +link relay_class to set_address--><path d="M185.6,583.2592 C190.22,601.4992 199.91,630.0992 218,648.0592 C222.9438,652.9667 228.4423,657.4291 234.2844,661.4815 C237.2054,663.5077 240.2123,665.4314 243.2786,667.2571 C244.8117,668.1699 246.3597,669.0582 247.9193,669.9226 C248.6991,670.3547 249.4818,670.7809 250.2669,671.2012 C250.6595,671.4113 251.0527,671.6199 251.4464,671.8271 " fill="none" id="relay_class->set_address" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="251.4464,671.8271,245.3441,664.0965,247.0215,669.499,241.6191,671.1764,251.4464,671.8271" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="95" x="219" y="644.6276">not compatible</text><!--MD5=[3f679d64a1cccee12b0e824b1733c0ed] +link set_address to relay_address--><path d="M334.99,699.9892 C334.66,701.9192 327.44,744.3492 322.81,771.5092 " fill="none" id="set_address->relay_address" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="321.93,776.7292,327.3899,768.5323,322.7728,771.8008,319.5043,767.1837,321.93,776.7292" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="135" x="330" y="743.4876">try the relay addreess</text><!--MD5=[9d0435cdb5bba0d446c223c46240db6f] +link relay_address to client_address--><path d="M387.22,794.9192 C434.95,794.9192 498.7,794.9192 547.88,794.9192 " fill="none" id="relay_address->client_address" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="552.9,794.9192,543.9,790.9192,547.9,794.9192,543.9,798.9192,552.9,794.9192" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="129" x="405.5" y="788.4876">has no relay address</text><!--MD5=[4192df04ddbb3f1e00a57ee174f51cdb] +link client_address to source_address--><path d="M693.28,794.9192 C740.3,794.9192 802.28,794.9192 851.17,794.9192 " fill="none" id="client_address->source_address" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="856.46,794.9192,847.46,790.9192,851.46,794.9192,847.46,798.9192,856.46,794.9192" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="127" x="711.25" y="788.4876">has no client addrss</text><!--MD5=[1cd4e848379fc555ffa76a6d3111f3fb] +link source_address to interface_subnet--><path d="M949.35,813.1292 C979.01,840.9292 1037.35,895.6192 1069.12,925.4092 " fill="none" id="source_address->interface_subnet" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1072.86,928.9092,1069.0287,919.8361,1069.2119,925.49,1063.558,925.6731,1072.86,928.9092" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="123" x="1016" y="874.4876">no suitable address</text><!--MD5=[a29ca77fdc41863d51ecafa8e32dcb85] +link relay_address to inRange--><path d="M319,813.0192 C319,840.8592 319,897.7392 319,945.9192 C319,945.9192 319,945.9192 319,1348.9192 C319,1436.8592 603.78,1468.1092 749.81,1478.3492 " fill="none" id="relay_address->inRange" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="754.94,1478.7092,746.2356,1474.1012,749.9518,1478.3662,745.6868,1482.0823,754.94,1478.7092" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="120" x="320" y="1177.9876">has a relay address</text><!--MD5=[bf38c5431748c4414750c7275409615d] +link client_address to inRange--><path d="M598.14,813.0992 C565.15,838.1492 511,888.0692 511,945.9192 C511,945.9192 511,945.9192 511,1348.9192 C511,1452.3992 654.19,1477.4892 749.89,1482.6992 " fill="none" id="client_address->inRange" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="754.99,1482.9592,746.2073,1478.5023,749.9966,1482.7024,745.7964,1486.4917,754.99,1482.9592" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="125" x="512" y="1177.9876">has a client address</text><!--MD5=[306377b471c1f30003804df3ba3e4280] +link source_address to inRange--><path d="M856.74,812.9992 C791.87,832.8492 708,872.6692 708,945.9192 C708,945.9192 708,945.9192 708,1348.9192 C708,1400.9292 759.01,1440.9992 796.11,1463.2692 " fill="none" id="source_address->inRange" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="800.57,1465.8992,794.8476,1457.8833,796.2625,1463.3604,790.7855,1464.7753,800.57,1465.8992" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="219" x="709" y="1177.9876">has source addess and use unicast</text><!--MD5=[4c5f9760336ab58778079bb174cbf5f0] +link interface_subnet to not_found--><path d="M1179.38,964.9692 C1262.41,983.5892 1374,1016.4992 1374,1058.9192 C1374,1058.9192 1374,1058.9192 1374,1781.4192 C1374,1855.2692 1132.67,1866.6392 1007.06,1867.5692 " fill="none" id="interface_subnet->not_found" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1001.91,1867.5992,1010.9327,1871.5477,1006.9099,1867.5706,1010.887,1863.5479,1001.91,1867.5992" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="75" x="1375" y="1411.4876">no interface</text><!--MD5=[f6d146b568a537518d52dd0109d2cafd] +link interface_subnet to interface_class--><path d="M1069.03,964.9392 C1041.08,988.8192 998.24,1034.2492 1014,1077.9192 C1024.51,1107.0292 1048.39,1133.5092 1066.98,1150.8892 " fill="none" id="interface_subnet->interface_class" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1071.1,1154.6692,1067.178,1145.6349,1067.4178,1151.2867,1061.766,1151.5265,1071.1,1154.6692" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="39" x="1015" y="1064.9876">match</text><!--MD5=[8c73b6f253b7f8003f1aeec9d3e2c401] +link interface_subnet to interface_network--><path d="M1106.78,965.2592 C1124.64,984.8992 1153.74,1016.8692 1172.88,1037.8992 " fill="none" id="interface_subnet->interface_network" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1176.33,1041.6992,1173.2249,1032.3526,1172.9624,1038.0034,1167.3116,1037.7408,1176.33,1041.6992" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="59" x="1148" y="1008.4876">no match</text><!--MD5=[8a490629b42afa0a067bde343f0409be] +link interface_network to interface_class--><path d="M1176.38,1078.2592 C1158.69,1097.8992 1129.88,1129.8692 1110.93,1150.8992 " fill="none" id="interface_network->interface_class" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1107.52,1154.6992,1116.5139,1150.6854,1110.8648,1150.9827,1110.5675,1145.3337,1107.52,1154.6992" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="39" x="1148" y="1121.4876">march</text><!--MD5=[e1288d340d0c431aabe10a4c239c74f7] +link interface_network to not_found--><path d="M1210.94,1078.1492 C1231.06,1098.4392 1260,1134.1792 1260,1171.9192 C1260,1171.9192 1260,1171.9192 1260,1781.4192 C1260,1833.4492 1103.1,1854.4192 1006.67,1862.3992 " fill="none" id="interface_network->not_found" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1001.55,1862.8192,1010.8511,1866.058,1006.5327,1862.404,1010.1867,1858.0856,1001.55,1862.8192" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="59" x="1261" y="1488.9876">no match</text><!--MD5=[9d13a96273b9c1dbfb8a7fbd997b0088] +link interface_class to found--><path d="M1112.08,1191.1592 C1127.3,1205.6292 1147.08,1227.7592 1156,1251.9192 C1201.73,1375.7792 1155.4,1417.0592 1162,1548.9192 C1162.84,1565.6192 1165,1569.6992 1165,1586.4192 C1165,1586.4192 1165,1586.4192 1165,1781.4192 C1165,1782.4592 948.79,1828.2992 834.68,1852.4192 " fill="none" id="interface_class->found" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="829.66,1853.4792,839.2955,1855.5181,834.5505,1852.4384,837.6302,1847.6934,829.66,1853.4792" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="70" x="1163" y="1545.4876">compatible</text><!--MD5=[d4a81a9eb6ae9754c2f91708a00f90ba] +link interface_class to interface_address--><path d="M1081.97,1190.9492 C1073.39,1206.3492 1061.43,1229.9092 1055,1251.9192 C1047.93,1276.1292 1045.02,1305.0192 1043.83,1324.5292 " fill="none" id="interface_class->interface_address" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1043.54,1329.7692,1048.0484,1321.0128,1043.8261,1324.7774,1040.0615,1320.5551,1043.54,1329.7692" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="95" x="1056" y="1265.4876">not compatible</text><!--MD5=[18f0036984a219b8e279d39e6955cbb3] +link interface_address to inRange--><path d="M961.44,1357.3092 C908.88,1364.5992 847.4,1377.2992 831,1397.9192 C817.05,1415.4592 820.69,1442.0692 825.97,1460.8292 " fill="none" id="interface_address->inRange" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="827.49,1465.8992,828.7218,1456.1277,826.0467,1461.1121,821.0623,1458.437,827.49,1465.8992" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="153" x="832" y="1411.4876">has an interface address</text><!--MD5=[1be935c2e674a39bb491f742257146af] +link interface_address to not_found--><path d="M1036.43,1365.9692 C1027.33,1391.1492 1012,1439.9392 1012,1482.9192 C1012,1482.9192 1012,1482.9192 1012,1781.4192 C1012,1809.2692 989.11,1831.9092 967.97,1846.8892 " fill="none" id="interface_address->not_found" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="963.77,1849.7792,973.4482,1847.9538,967.8835,1846.9369,968.9005,1841.3722,963.77,1849.7792" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="128" x="1013" y="1639.4876">no interface address</text><!--MD5=[65c872516cd5acbef394f498ee60e6f6] +link inRange to address_class--><path d="M834.75,1502.0492 C836.38,1539.0492 840.21,1626.4492 842.02,1667.6692 " fill="none" id="inRange->address_class" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="842.24,1672.6992,845.8498,1663.5358,842.0253,1667.7038,837.8572,1663.8793,842.24,1672.6992" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="39" x="839" y="1592.4876">match</text><!--MD5=[c6a81dd9b5c38fb7a31992aeb43efba5] +link inRange to not_found--><path d="M762.39,1501.9792 C720.98,1516.5792 677,1542.4392 677,1586.4192 C677,1586.4192 677,1586.4192 677,1781.4192 C677,1800.7892 783.82,1830.8092 859.46,1849.6392 " fill="none" id="inRange->not_found" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="864.4,1850.8692,856.6221,1844.8274,859.5459,1849.67,854.7033,1852.5938,864.4,1850.8692" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="59" x="678" y="1695.9876">no match</text><!--MD5=[6bbdb059bb8431be14feb2edf9179bcc] +link address_class to found--><path d="M809.7,1708.9392 C759.48,1735.3692 668.36,1786.6192 651,1818.9192 C638.07,1842.9792 665.86,1854.9792 697.35,1860.9692 " fill="none" id="address_class->found" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="702.43,1861.8792,694.2794,1856.3504,697.5088,1860.9948,692.8644,1864.2243,702.43,1861.8792" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="70" x="702" y="1785.4876">compatible</text><!--MD5=[6fa859304e08ed6b1a2f69b396a973f6] +link address_class to not_found--><path d="M850.62,1708.9192 C859.47,1728.4292 874.68,1761.2892 889,1788.9192 C898.99,1808.1792 911.16,1829.6292 920.17,1845.1492 " fill="none" id="address_class->not_found" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="922.86,1849.7592,921.7843,1839.9693,920.3424,1845.4393,914.8724,1843.9974,922.86,1849.7592" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="95" x="890" y="1785.4876">not compatible</text><!--MD5=[920af236d2bfe8ac015294b6ec32c751] +link found to subnet4_select--><path d="M781.22,1886.3392 C795.03,1902.1492 815.43,1925.4892 830.24,1942.4392 " fill="none" id="found->subnet4_select" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="833.87,1946.6092,830.9563,1937.2012,830.5785,1942.8454,824.9343,1942.4676,833.87,1946.6092" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[be5a985c5094547d1aa8a3dfda06631d] +link not_found to subnet4_select--><path d="M917.59,1886.3392 C903.62,1902.1492 882.98,1925.4892 867.99,1942.4392 " fill="none" id="not_found->subnet4_select" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="864.31,1946.6092,873.2712,1942.523,867.6247,1942.8659,867.2818,1937.2194,864.31,1946.6092" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[085d72d70044aeb14e8d963046e88b11] +link found to not_found--><!--MD5=[d0da1e00427a0ca7837196c7dddb3af4] +link subnet4_select to success--><path d="M761.05,1973.2692 C729.7,1979.7092 696,1991.4992 671,2012.9192 C658.53,2023.5992 651.42,2040.8792 647.49,2054.7992 " fill="none" id="subnet4_select->success" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="646.18,2059.7492,652.3343,2052.0599,647.4497,2054.9131,644.5965,2050.0285,646.18,2059.7492" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="164" x="672" y="2026.4876">CONTINUE and subnet set</text><!--MD5=[48d8edc0219dd4d7c3847b4159c280ef] +link subnet4_select to no_subnet--><path d="M847.62,1983.3192 C846.99,1992.1692 846.31,2003.1092 846,2012.9192 C845.56,2026.8292 846.26,2042.4292 847.1,2054.7492 " fill="none" id="subnet4_select->no_subnet" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="847.47,2059.8092,850.8167,2050.5464,847.1127,2054.822,842.8372,2051.118,847.47,2059.8092" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="138" x="847" y="2026.4876">SKIP or subnet not set</text><!--MD5=[f590b573e48b5dfdcd1774729941f83a] +link subnet4_select to drop--><path d="M932.2,1983.0192 C952.54,1989.9392 973.25,1999.5792 990,2012.9192 C1003.78,2023.8892 1013.89,2041.1592 1020.36,2054.9892 " fill="none" id="subnet4_select->drop" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1022.58,2059.9192,1022.5229,2050.0705,1020.5228,2055.362,1015.2313,2053.362,1022.58,2059.9192" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="35" x="1006" y="2026.4876">DROP</text><!--MD5=[b941b6948e212378197cd6fb1db1e006] +@startuml
+
+title DHCPv4 subnet selection
+
+agent "Entry point" as entry
+
+agent "Try RAI link select" as rai_link_select
+
+rectangle "Relayed" as relayed {
+ agent "Relay address matches subnet" as relay_subnet
+ agent "Relay address matches shared network" as relay_network
+ agent "Check client class" as relay_class
+}
+
+rectangle "Set address for lookup" as set_address {
+ agent "Set relay address" as relay_address
+ agent "Set client address" as client_address
+ agent "Set source address" as source_address
+}
+
+rectangle "Try incoming interface" as interface {
+ agent "Interface matches subnet" as interface_subnet
+ agent "Interface atches shared network" as interface_network
+ agent "Check client class" as interface_class
+ agent "Set interface address" as interface_address
+}
+
+rectangle "Try address" as address {
+ agent "Check subnet prefix" as inRange
+ agent "Check client class" as address_class
+}
+
+agent "Found a subnet" as found
+
+agent "Found no subnet" as not_found
+
+agent "Callout subnet4_select" as subnet4_select
+
+agent "Return a subnet" as success
+
+agent "Return no subnet" as no_subnet
+
+agent "Drop query" as drop
+
+entry - -> rai_link_select
+rai_link_select - -> relayed : relayed
+rai_link_select - -> set_address : not relayed
+relayed - -> relay_subnet
+relay_subnet - -> relay_network : no match
+relay_subnet - -> relay_class : match
+relay_network - -> set_address : no match
+relay_network - -> relay_class : match
+relay_class - - -> found : compatible
+relay_class - -> set_address : not compatible
+set_address - -> relay_address : try the relay addreess
+relay_address -r-> client_address : has no relay address
+client_address -r-> source_address : has no client addrss
+source_address - -> interface_subnet : no suitable address
+relay_address - -> inRange : has a relay address
+client_address - -> inRange : has a client address
+source_address - -> inRange : has source addess and use unicast
+interface_subnet - - -> not_found : no interface
+interface_subnet - -> interface_class : match
+interface_subnet - -> interface_network : no match
+interface_network - -> interface_class : march
+interface_network - - -> not_found : no match
+interface_class - - -> found : compatible
+interface_class - - -> interface_address : not compatible
+interface_address - -> inRange : has an interface address
+interface_address - - -> not_found : no interface address
+inRange - - -> address_class : match
+inRange - - -> not_found : no match
+address_class - - -> found : compatible
+address_class - - -> not_found : not compatible
+found - -> subnet4_select
+not_found - -> subnet4_select
+found -[hidden]> not_found
+subnet4_select - -> success : CONTINUE and subnet set
+subnet4_select - -> no_subnet : SKIP or subnet not set
+subnet4_select - -> drop : DROP
+
+@endutl
+ +PlantUML version 1.2020.15(Sun Jun 28 13:39:45 CEST 2020) +(GPL source distribution) +Java Runtime: OpenJDK Runtime Environment +JVM: OpenJDK 64-Bit Server VM +Default Encoding: UTF-8 +Language: en +Country: US +--></g></svg>
\ No newline at end of file diff --git a/doc/devel/images/select4.uml b/doc/devel/images/select4.uml new file mode 100644 index 0000000000..2e54f97d95 --- /dev/null +++ b/doc/devel/images/select4.uml @@ -0,0 +1,82 @@ +@startuml + +title DHCPv4 subnet selection + +agent "Entry point" as entry + +agent "Try RAI link select" as rai_link_select + +rectangle "Relayed" as relayed { + agent "Relay address matches subnet" as relay_subnet + agent "Relay address matches shared network" as relay_network + agent "Check client class" as relay_class +} + +rectangle "Set address for lookup" as set_address { + agent "Set relay address" as relay_address + agent "Set client address" as client_address + agent "Set source address" as source_address +} + +rectangle "Try incoming interface" as interface { + agent "Interface matches subnet" as interface_subnet + agent "Interface atches shared network" as interface_network + agent "Check client class" as interface_class + agent "Set interface address" as interface_address +} + +rectangle "Try address" as address { + agent "Check subnet prefix" as inRange + agent "Check client class" as address_class +} + +agent "Found a subnet" as found + +agent "Found no subnet" as not_found + +agent "Callout subnet4_select" as subnet4_select + +agent "Return a subnet" as success + +agent "Return no subnet" as no_subnet + +agent "Drop query" as drop + +entry --> rai_link_select +rai_link_select --> relayed : relayed +rai_link_select --> set_address : not relayed +relayed --> relay_subnet +relay_subnet --> relay_network : no match +relay_subnet --> relay_class : match +relay_network --> set_address : no match +relay_network --> relay_class : match +relay_class ---> found : compatible +relay_class --> set_address : not compatible +set_address --> relay_address : try the relay addreess +relay_address -r-> client_address : has no relay address +client_address -r-> source_address : has no client addrss +source_address --> interface_subnet : no suitable address +relay_address --> inRange : has a relay address +client_address --> inRange : has a client address +source_address --> inRange : has source addess and use unicast +interface_subnet ---> not_found : no interface +interface_subnet --> interface_class : match +interface_subnet --> interface_network : no match +interface_network --> interface_class : march +interface_network ---> not_found : no match +interface_class ---> found : compatible +interface_class ---> interface_address : not compatible +interface_address --> inRange : has an interface address +interface_address ---> not_found : no interface address +inRange ---> address_class : match +inRange ---> not_found : no match +address_class ---> found : compatible +address_class ---> not_found : not compatible +found --> subnet4_select +not_found --> subnet4_select +found -[hidden]> not_found +subnet4_select --> success : CONTINUE and subnet set +subnet4_select --> no_subnet : SKIP or subnet not set +subnet4_select --> drop : DROP + +@endutl |