]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[#1329] Added new UMLs
authorFrancis Dupont <fdupont@isc.org>
Fri, 17 Jul 2020 15:49:37 +0000 (17:49 +0200)
committerFrancis Dupont <fdupont@isc.org>
Tue, 4 Aug 2020 08:45:38 +0000 (10:45 +0200)
doc/devel/Makefile.am
doc/devel/images/assign-lease.png [new file with mode: 0644]
doc/devel/images/assign-lease.svg [new file with mode: 0644]
doc/devel/images/assign-lease.uml [new file with mode: 0644]
doc/devel/images/request-lease.png [new file with mode: 0644]
doc/devel/images/request-lease.svg [new file with mode: 0644]
doc/devel/images/request-lease.uml [new file with mode: 0644]

index 9b740be71bb6832faa06648012fcebc75ca77d01..603760b171b490655f440d0e1c1ab221364488c4 100644 (file)
@@ -11,6 +11,25 @@ EXTRA_DIST += mainpage.dox
 EXTRA_DIST += terminology.dox
 EXTRA_DIST += unit-tests.dox
 
+EXTRA_DIST += images/assign-lease.png
+EXTRA_DIST += images/assign-lease.svg
+EXTRA_DIST += images/assign-lease.uml
+EXTRA_DIST += images/main-loop.png
+EXTRA_DIST += images/main-loop.svg
+EXTRA_DIST += images/main-loop.uml
+EXTRA_DIST += images/packet4.png
+EXTRA_DIST += images/packet4.svg
+EXTRA_DIST += images/packet4.uml
+EXTRA_DIST += images/request-lease.png
+EXTRA_DIST += images/request-lease.svg
+EXTRA_DIST += images/request-lease.uml
+EXTRA_DIST += images/request4.png
+EXTRA_DIST += images/request4.svg
+EXTRA_DIST += images/request4.uml
+EXTRA_DIST += images/select4.png
+EXTRA_DIST += images/select4.svg
+EXTRA_DIST += images/select4.uml
+
 all: # do nothing, used only by developers manually
 
 devel:
diff --git a/doc/devel/images/assign-lease.png b/doc/devel/images/assign-lease.png
new file mode 100644 (file)
index 0000000..ad81d9b
Binary files /dev/null and b/doc/devel/images/assign-lease.png differ
diff --git a/doc/devel/images/assign-lease.svg b/doc/devel/images/assign-lease.svg
new file mode 100644 (file)
index 0000000..a17a77d
--- /dev/null
@@ -0,0 +1,111 @@
+<?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="1372px" preserveAspectRatio="none" style="width:1375px;height:1372px;" version="1.1" viewBox="0 0 1375 1372" width="1375px" zoomAndPan="magnify"><defs><filter height="300%" id="forjwnxnobpag" 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="186" x="585.5" y="17.4023">DHCPv4 Assign Lease</text><!--MD5=[96a966798826de6e056b38ba6b9482ca]
+cluster init_reboot--><rect fill="#FFFFFF" filter="url(#forjwnxnobpag)" height="374.86" style="stroke: #000000; stroke-width: 1.5;" width="395" x="447" y="442.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="142" x="573.5" y="457.7344">INIT-REBOOT state</text><!--MD5=[71835f3367ed481a89f53801b2fdf617]
+cluster allocated--><rect fill="#FFFFFF" filter="url(#forjwnxnobpag)" height="263.36" style="stroke: #000000; stroke-width: 1.5;" width="158" x="7" y="1092.0592"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="110" x="31" y="1107.5944">Lease allocated</text><!--MD5=[b13a83736ea85c18a1991bca4dbe863b]
+entity by_client_id--><rect fill="#FEFECE" filter="url(#forjwnxnobpag)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="219" x="471.5" y="547.0592"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="199" x="481.5" y="570.5944">Get existing lease by client id</text><!--MD5=[6b610307314e3774f091112845a2df2b]
+entity by_hw_addr--><rect fill="#FEFECE" filter="url(#forjwnxnobpag)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="288" x="471" y="660.0592"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="268" x="481" y="683.5944">Get existing lease by hardware address</text><!--MD5=[ef5397f1455a008291e257fb65cb453b]
+entity authoritative--><rect fill="#FEFECE" filter="url(#forjwnxnobpag)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="134" x="548" y="757.0592"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="114" x="558" y="780.5944">Get authoritative</text><!--MD5=[a54398e3d2c0f7657eea7ade058e1e7f]
+entity ddns--><rect fill="#FEFECE" filter="url(#forjwnxnobpag)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="110" x="31" y="1198.4192"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="90" x="41" y="1221.9544">update DDNS</text><!--MD5=[8edf83f1bb568d804760d31cec2ffb3b]
+entity ack--><rect fill="#FEFECE" filter="url(#forjwnxnobpag)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="87" x="42.5" y="1295.4192"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="67" x="52.5" y="1318.9544">Send ACK</text><!--MD5=[7f6071cca9390999bbf4a53289faea1c]
+entity subnet--><rect fill="#FEFECE" filter="url(#forjwnxnobpag)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="114" x="1205" y="28.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="94" x="1215" y="51.7344">Check Subnet</text><path d="M1080,33.6992 L1080,59.0098 A0,0 0 0 0 1080,59.0098 L1170,59.0098 A0,0 0 0 0 1170,59.0098 L1170,51.6992 L1205,46.1992 L1170,43.6992 L1170,43.6992 L1160,33.6992 L1080,33.6992 A0,0 0 0 0 1080,33.6992 " fill="#FBFB77" filter="url(#forjwnxnobpag)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1160,33.6992 L1160,43.6992 L1170,43.6992 L1160,33.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="1086" y="51.2676">entry point</text><!--MD5=[d9ce3005481b6be8203f0e568049ebfd]
+entity server_id--><rect fill="#FEFECE" filter="url(#forjwnxnobpag)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="106" x="1033" y="125.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="86" x="1043" y="148.7344">Get server id</text><!--MD5=[ee598753b08e093ad1dc6a89dd6a274b]
+entity hint--><rect fill="#FEFECE" filter="url(#forjwnxnobpag)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="74" x="790" y="222.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="54" x="800" y="245.7344">Get hint</text><!--MD5=[fdc0ebc2726a1e25611a217b1a9cdddd]
+entity ident--><rect fill="#FEFECE" filter="url(#forjwnxnobpag)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="258" x="540" y="335.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="238" x="550" y="358.7344">Get hardware address and client id</text><!--MD5=[9b403e692b0a4a2d394ce21b0c8a8b18]
+entity hostname--><rect fill="#FEFECE" filter="url(#forjwnxnobpag)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="144" x="276" y="888.0592"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="124" x="286" y="911.5944">Process hostname</text><!--MD5=[c7571992746652353b375880ae850124]
+entity allocate--><rect fill="#FEFECE" filter="url(#forjwnxnobpag)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="114" x="204" y="985.0592"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="94" x="214" y="1008.5944">Request lease</text><!--MD5=[18d4eff7c560e0870d2f30d7f8649cf3]
+entity failed--><rect fill="#FEFECE" filter="url(#forjwnxnobpag)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="144" x="189" y="1101.4192"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="124" x="199" y="1124.9544">No lease allocated</text><path d="M368,1106.9192 L368,1115.4192 L333.27,1119.4192 L368,1123.4192 L368,1132.2298 A0,0 0 0 0 368,1132.2298 L450,1132.2298 A0,0 0 0 0 450,1132.2298 L450,1116.9192 L440,1106.9192 L368,1106.9192 A0,0 0 0 0 368,1106.9192 " fill="#FBFB77" filter="url(#forjwnxnobpag)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M440,1106.9192 L440,1116.9192 L450,1116.9192 L440,1106.9192 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="61" x="374" y="1124.4876">exit point</text><!--MD5=[6dac4c34c80be6dabf811d62e9db4883]
+entity nak--><rect fill="#FEFECE" filter="url(#forjwnxnobpag)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="87" x="728.5" y="1198.4192"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="67" x="738.5" y="1221.9544">Send NAK</text><path d="M851,1203.9192 L851,1212.4192 L815.59,1216.4192 L851,1220.4192 L851,1229.2298 A0,0 0 0 0 851,1229.2298 L933,1229.2298 A0,0 0 0 0 933,1229.2298 L933,1213.9192 L923,1203.9192 L851,1203.9192 A0,0 0 0 0 851,1203.9192 " fill="#FBFB77" filter="url(#forjwnxnobpag)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M923,1203.9192 L923,1213.9192 L933,1213.9192 L923,1203.9192 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="61" x="857" y="1221.4876">exit point</text><!--MD5=[be0cad0b32609f2a377600c2fd818d08]
+entity no_response--><rect fill="#FEFECE" filter="url(#forjwnxnobpag)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="106" x="748" y="985.0592"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="86" x="758" y="1008.5944">No response</text><path d="M889,990.5592 L889,999.0592 L854.16,1003.0592 L889,1007.0592 L889,1015.8698 A0,0 0 0 0 889,1015.8698 L971,1015.8698 A0,0 0 0 0 971,1015.8698 L971,1000.5592 L961,990.5592 L889,990.5592 A0,0 0 0 0 889,990.5592 " fill="#FBFB77" filter="url(#forjwnxnobpag)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M961,990.5592 L961,1000.5592 L971,1000.5592 L961,990.5592 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="61" x="895" y="1008.1276">exit point</text><!--MD5=[359b6ca0b36d81a4e33a25f71e3b7c61]
+link subnet to server_id--><path d="M1230.13,64.3992 C1199.73,80.8092 1153.98,105.4992 1122.22,122.6492 " fill="none" id="subnet-&gt;server_id" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1117.64,125.1192,1127.4584,124.3457,1122.0355,122.736,1123.6452,117.313,1117.64,125.1192" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[7db9f4f0423b43d622896ef15525c632]
+link subnet to nak--><path d="M1273.1,64.2792 C1284,82.7192 1299,113.3492 1299,142.1992 C1299,142.1992 1299,142.1992 1299,1120.4192 C1299,1224.6692 934.24,1153.7892 834,1182.4192 C823.22,1185.4992 812.19,1190.6192 802.48,1195.9192 " fill="none" id="subnet-&gt;nak" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="798.11,1198.3592,807.9178,1197.4606,802.4747,1195.9201,804.0152,1190.4771,798.11,1198.3592" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="63" x="1300" y="626.6276">no subnet</text><!--MD5=[a38dfb09b1bcb8b95a969df0005f111d]
+link server_id to hint--><path d="M1039.4,161.2892 C990.82,179.1092 915.39,206.7792 868.72,223.8992 " fill="none" id="server_id-&gt;hint" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="864.01,225.6192,873.8375,226.2668,868.7027,223.8933,871.0761,218.7585,864.01,225.6192" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[34fbc802059013c2537c0989625530bb]
+link hint to ident--><path d="M789.9,249.7492 C765.22,256.8692 733.18,269.0092 710,288.1992 C696.21,299.6192 685.52,316.9092 678.52,330.6392 " fill="none" id="hint-&gt;ident" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="676.29,335.1392,683.8605,328.8395,678.5032,330.6557,676.6869,325.2984,676.29,335.1392" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="186" x="711" y="301.7676">use requested address option</text><!--MD5=[34fbc802059013c2537c0989625530bb]
+link hint to ident--><path d="M864.08,255.1692 C890.28,267.1392 918.1,285.5292 902,305.1992 C888.38,321.8392 847.22,332.7292 803.21,339.7792 " fill="none" id="hint-&gt;ident-1" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="798.11,340.5792,807.6192,343.1436,803.0502,339.8082,806.3855,335.2392,798.11,340.5792" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="114" x="907" y="301.7676">use client address</text><!--MD5=[34fbc802059013c2537c0989625530bb]
+link hint to ident--><path d="M789.99,245.1092 C740.65,251.1692 657.38,264.6692 639,288.1992 C628.94,301.0892 637.47,317.8892 647.97,331.0492 " fill="none" id="hint-&gt;ident-2" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="651.28,335.0092,648.5947,325.5335,648.0805,331.1669,642.447,330.6527,651.28,335.0092" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="45" x="640" y="301.7676">no hint</text><!--MD5=[65f067d78ef63afdf91771d9a656ad03]
+link ident to init_reboot--><path d="M669,371.5692 C669,387.3142 669,411.0567 669,431.1092 C669,433.6158 669,436.0647 669,438.4331 C669,439.6173 669,440.7814 669,441.9225 " fill="none" id="ident-&gt;init_reboot" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="669,441.9225,673,432.9225,669,436.9225,665,432.9225,669,441.9225" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="220" x="670" y="414.7676">requested address and no server id</text><!--MD5=[14830c65b2a034d88d53d1ea466689d7]
+link ident to hostname--><path d="M563,371.2692 C469.5,389.4192 348,421.9692 348,468.5592 C348,468.5592 348,468.5592 348,776.0592 C348,813.4892 348,857.0192 348,882.7392 " fill="none" id="ident-&gt;hostname" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="348,887.9492,352,878.9492,348,882.9492,344,878.9492,348,887.9492" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[f67bf50fbab8c942c3b4d7a43dc78f8a]
+link init_reboot to by_client_id--><path d="M668.94,470.1292 C667.1,472.0892 626.08,515.9092 600.72,542.9992 " fill="none" id="init_reboot-&gt;by_client_id" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="597.1,546.8692,606.1731,543.038,600.5192,543.2211,600.3361,537.5672,597.1,546.8692" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="88" x="641" y="513.6276">has a client id</text><!--MD5=[e73d6babdacfd6f192eca91886274ed0]
+link init_reboot to by_hw_addr--><path d="M669.15,470.0692 C672.13,470.2092 720.24,472.9692 738,500.0592 C742.14,506.3792 739.6,509.6792 738,517.0592 C725.15,576.3792 673.37,628.6792 641.23,656.2992 " fill="none" id="init_reboot-&gt;by_hw_addr" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="637.03,659.8692,646.4838,657.1077,640.8464,656.6389,641.3152,651.0015,637.03,659.8692" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="71" x="735" y="570.1276">no client id</text><!--MD5=[81a28d33e53a361ab0f9b1ac80511604]
+link by_client_id to by_hw_addr--><path d="M562.09,583.1492 C550.23,596.0192 538.64,614.1292 547,630.0592 C552.77,641.0692 562.43,650.0092 572.67,657.0192 " fill="none" id="by_client_id-&gt;by_hw_addr" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="577.09,659.9092,571.7349,651.6435,572.9014,657.1788,567.3661,658.3453,577.09,659.9092" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="59" x="548" y="626.6276">not fount</text><!--MD5=[996213fdf844dcf095df5ccc9b89cdbf]
+link by_hw_addr to authoritative--><path d="M615,696.4792 C615,712.0192 615,734.8392 615,751.7192 " fill="none" id="by_hw_addr-&gt;authoritative" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="615,756.7492,619,747.7492,615,751.7492,611,747.7492,615,756.7492" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[cc7ba6fbd1fdcf375abf61565bb8cbda]
+link authoritative to no_response--><path d="M629.29,793.4192 C662.91,834.2692 746.95,936.3892 783.53,980.8292 " fill="none" id="authoritative-&gt;no_response" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="786.92,984.9492,784.2938,975.457,783.7445,981.0871,778.1143,980.5378,786.92,984.9492" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="233" x="736" y="911.1276">not authoritative and no owned lease</text><!--MD5=[f287a43fa002547e84e3e2517c1b3af8]
+link authoritative to nak--><path d="M682.03,782.3592 C802,795.4992 1041,830.9692 1041,905.0592 C1041,905.0592 1041,905.0592 1041,1120.4192 C1041,1216.4592 922.82,1145.8992 834,1182.4192 C824.67,1186.2492 814.91,1191.0492 805.95,1195.7992 " fill="none" id="authoritative-&gt;nak" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="801.07,1198.4192,810.8922,1197.6951,805.4774,1196.0581,807.1144,1190.6433,801.07,1198.4192" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="203" x="1042" y="1008.1276">owned lease with hint mismatch</text><!--MD5=[f287a43fa002547e84e3e2517c1b3af8]
+link authoritative to nak--><path d="M585.28,793.0692 C552.1,814.5292 503,854.7892 503,905.0592 C503,905.0592 503,905.0592 503,1120.4192 C503,1166.6392 646,1195.9592 723.48,1208.4592 " fill="none" id="authoritative-&gt;nak-1" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="728.48,1209.2592,720.2196,1203.8959,723.542,1208.4743,718.9636,1211.7967,728.48,1209.2592" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="208" x="504" y="1008.1276">authoritative and no owned lease</text><!--MD5=[b7c0267f2f455dcd84cdca29c5404c83]
+link authoritative to hostname--><path d="M547.81,786.6292 C503.91,795.8492 446.82,812.3992 403,841.0592 C386.11,852.1092 371.47,869.7892 361.55,883.7792 " fill="none" id="authoritative-&gt;hostname" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="358.63,887.9892,367.049,882.8785,361.482,883.8824,360.4781,878.3153,358.63,887.9892" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="72" x="404" y="854.6276">other cases</text><!--MD5=[986a8f86ec6d7417d34c7fd351c484dc]
+link hostname to allocate--><path d="M332.04,924.4792 C317.45,940.4192 295.83,964.0292 280.28,981.0092 " fill="none" id="hostname-&gt;allocate" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="276.86,984.7492,285.886,980.8082,280.2347,981.0599,279.9831,975.4086,276.86,984.7492" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[c34dad786bb94ff8f8cc439f61a5c35f]
+link allocate to allocated--><path d="M212.16,1021.1492 C194.16,1028.7392 174.22,1038.7792 158,1051.0592 C150.43,1056.7942 143.1831,1063.7023 136.5469,1070.8789 C133.2288,1074.4672 130.0633,1078.1226 127.0864,1081.732 C125.598,1083.5367 124.1567,1085.3299 122.767,1087.0975 C122.0722,1087.9813 121.3903,1088.8587 120.7219,1089.7279 C120.3876,1090.1625 120.0568,1090.595 119.7294,1091.0253 C119.5657,1091.2405 119.4028,1091.4551 119.2408,1091.6691 C119.1598,1091.7761 119.0791,1091.8829 118.9985,1091.9896 " fill="none" id="allocate-&gt;allocated" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="118.9985,1091.9896,127.6138,1087.2171,122.0113,1087.9992,121.2292,1082.3967,118.9985,1091.9896" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="93" x="159" y="1064.6276">lease allocated</text><!--MD5=[539a3348c1089415ce435c139bd22f41]
+link allocated to ddns--><path d="M100.99,1120.4892 C100.68,1122.4392 93.91,1165.3192 89.58,1192.7692 " fill="none" id="allocated-&gt;ddns" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="88.74,1198.0392,94.1033,1189.7788,89.5249,1193.1012,86.2025,1188.5229,88.74,1198.0392" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[6d51d97a60fea492264b409c209ca1ef]
+link ddns to ack--><path d="M86,1234.8392 C86,1250.3792 86,1273.1992 86,1290.0792 " fill="none" id="ddns-&gt;ack" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="86,1295.1092,90,1286.1092,86,1290.1092,82,1286.1092,86,1295.1092" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[dd12c52c80378d18331ab530a0ed76ab]
+link allocate to failed--><path d="M261,1021.4292 C261,1041.4392 261,1074.3792 261,1096.2292 " fill="none" id="allocate-&gt;failed" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="261,1101.2592,265,1092.2592,261,1096.2592,257,1092.2592,261,1101.2592" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="113" x="262" y="1064.6276">no lease allocated</text><!--MD5=[e8032f725f00abe81d7341b4b6fe8340]
+link failed to nak--><path d="M332.77,1137.5192 C374.7,1147.2092 428.7,1159.2092 477,1168.4192 C563.29,1184.8692 664.54,1200.1292 723.18,1208.5692 " fill="none" id="failed-&gt;nak" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="728.37,1209.3092,720.0325,1204.0665,723.4211,1208.5961,718.8915,1211.9848,728.37,1209.3092" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[4882910f97eaa9c586815446b4846747]
+@startuml\r
+\r
+title DHCPv4 Assign Lease\r
+\r
+agent "Check Subnet" as subnet\r
+note left : entry point\r
+\r
+agent "Get server id" as server_id\r
+\r
+agent "Get hint" as hint\r
+\r
+agent "Get hardware address and client id" as ident\r
+\r
+rectangle "INIT-REBOOT state" as init_reboot {\r
+ agent "Get existing lease by client id" as by_client_id\r
+\r
+ agent "Get existing lease by hardware address" as by_hw_addr\r
+\r
+ agent "Get authoritative" as authoritative\r
+}\r
+\r
+agent "Process hostname" as hostname\r
+\r
+agent "Request lease" as allocate\r
+\r
+rectangle "Lease allocated" as allocated {\r
+ agent "update DDNS" as ddns\r
+ agent "Send ACK" as ack\r
+}\r
+\r
+agent "No lease allocated" as failed\r
+note right : exit point\r
+\r
+agent "Send NAK" as nak\r
+note right : exit point\r
+\r
+agent "No response" as no_response\r
+note right : exit point\r
+\r
+subnet - -> server_id\r
+subnet - - -> nak : no subnet\r
+server_id - -> hint\r
+hint - -> ident : use requested address option\r
+hint - -> ident : use client address\r
+hint - -> ident : no hint\r
+ident - -> init_reboot : requested address and no server id\r
+ident - - -> hostname\r
+init_reboot - -> by_client_id : has a client id\r
+init_reboot - -> by_hw_addr : no client id\r
+by_client_id - -> by_hw_addr : not fount\r
+by_hw_addr - -> authoritative\r
+authoritative - - -> no_response : not authoritative and no owned lease\r
+authoritative - -> nak : owned lease with hint mismatch\r
+authoritative - -> nak : authoritative and no owned lease\r
+authoritative - -> hostname : other cases\r
+hostname - -> allocate\r
+allocate - -> allocated : lease allocated\r
+allocated - -> ddns\r
+ddns - -> ack\r
+allocate - -> failed : no lease allocated\r
+failed - -> nak\r
+\r
+@enduml\r
+
+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/assign-lease.uml b/doc/devel/images/assign-lease.uml
new file mode 100644 (file)
index 0000000..03f6136
--- /dev/null
@@ -0,0 +1,63 @@
+@startuml
+
+title DHCPv4 Assign Lease
+
+agent "Check Subnet" as subnet
+note left : entry point
+
+agent "Get server id" as server_id
+
+agent "Get hint" as hint
+
+agent "Get hardware address and client id" as ident
+
+rectangle "INIT-REBOOT state" as init_reboot {
+ agent "Get existing lease by client id" as by_client_id
+
+ agent "Get existing lease by hardware address" as by_hw_addr
+
+ agent "Get authoritative" as authoritative
+}
+
+agent "Process hostname" as hostname
+
+agent "Request lease" as allocate
+
+rectangle "Lease allocated" as allocated {
+ agent "update DDNS" as ddns
+ agent "Send ACK" as ack
+}
+
+agent "No lease allocated" as failed
+note right : exit point
+
+agent "Send NAK" as nak
+note right : exit point
+
+agent "No response" as no_response
+note right : exit point
+
+subnet --> server_id
+subnet ---> nak : no subnet
+server_id --> hint
+hint --> ident : use requested address option
+hint --> ident : use client address
+hint --> ident : no hint
+ident --> init_reboot : requested address and no server id
+ident ---> hostname
+init_reboot --> by_client_id : has a client id
+init_reboot --> by_hw_addr : no client id
+by_client_id --> by_hw_addr : not fount
+by_hw_addr --> authoritative
+authoritative ---> no_response : not authoritative and no owned lease
+authoritative --> nak : owned lease with hint mismatch
+authoritative --> nak : authoritative and no owned lease
+authoritative --> hostname : other cases
+hostname --> allocate
+allocate --> allocated : lease allocated
+allocated --> ddns
+ddns --> ack
+allocate --> failed : no lease allocated
+failed --> nak
+
+@enduml
diff --git a/doc/devel/images/request-lease.png b/doc/devel/images/request-lease.png
new file mode 100644 (file)
index 0000000..c1a994c
Binary files /dev/null and b/doc/devel/images/request-lease.png differ
diff --git a/doc/devel/images/request-lease.svg b/doc/devel/images/request-lease.svg
new file mode 100644 (file)
index 0000000..2adc979
--- /dev/null
@@ -0,0 +1,196 @@
+<?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="2270px" preserveAspectRatio="none" style="width:2331px;height:2270px;" version="1.1" viewBox="0 0 2331 2270" width="2331px" zoomAndPan="magnify"><defs><filter height="300%" id="fjbup9r5tln9m" 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="298" x="1007.5" y="17.4023">Allocate a lease for DHCPREQUEST</text><!--MD5=[eaee9025590d004dcfc2daa117adb8bb]
+cluster check_hint--><rect fill="#FFFFFF" filter="url(#fjbup9r5tln9m)" height="378.72" style="stroke: #000000; stroke-width: 1.5;" width="939" x="1017" y="248.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="180" x="1396.5" y="263.7344">Check requested address</text><!--MD5=[c6fdc214782d2c6b530af6f84e869950]
+cluster get_existing--><rect fill="#FFFFFF" filter="url(#fjbup9r5tln9m)" height="164.86" style="stroke: #000000; stroke-width: 1.5;" width="245" x="1671" y="347.0592"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="229" x="1679" y="362.5944">Get lease for requested address</text><!--MD5=[57e960cb4db100c9a2ccd6f4d6705f05]
+cluster check_done--><rect fill="#FFFFFF" filter="url(#fjbup9r5tln9m)" height="164.86" style="stroke: #000000; stroke-width: 1.5;" width="161" x="522" y="691.9192"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="130" x="537.5" y="707.4544">Check client lease</text><!--MD5=[a6e23b86b5ec2c7080f88f7cf966373c]
+cluster new_lease--><rect fill="#FFFFFF" filter="url(#fjbup9r5tln9m)" height="1256.08" style="stroke: #000000; stroke-width: 1.5;" width="1101" x="7" y="905.7792"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="147" x="484" y="921.3144">Allocate a new lease</text><!--MD5=[c0a0058b985d9500e1903c17b16df914]
+cluster allocateOrReuseLease4--><rect fill="#FFFFFF" filter="url(#fjbup9r5tln9m)" height="685.36" style="stroke: #000000; stroke-width: 1.5;" width="300" x="71" y="1337.4992"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="164" x="139" y="1353.0344">Allocate or reuse lease</text><!--MD5=[23478a531f37cd80899cad04cd2b7f18]
+cluster allocateUnreservedLease4--><rect fill="#FFFFFF" filter="url(#fjbup9r5tln9m)" height="459.22" style="stroke: #000000; stroke-width: 1.5;" width="477" x="411" y="1044.6392"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="184" x="557.5" y="1060.1744">Allocate unreserved lease</text><!--MD5=[f07ece90dffecaa599052c39e01a94c5]
+entity getReservedLease--><rect fill="#FEFECE" filter="url(#fjbup9r5tln9m)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="246" x="1203" y="451.9192"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="226" x="1213" y="475.4544">Check lease for reserved address</text><!--MD5=[8636dd2beae72b933abf12250cfd1025]
+entity out_of_pool--><rect fill="#FEFECE" filter="url(#fjbup9r5tln9m)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="208" x="1087" y="566.9192"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="188" x="1097" y="590.4544">Check out-of-pool address</text><!--MD5=[ec14e8cae259e632e03b8f7e5f2fa627]
+entity existing--><rect fill="#FEFECE" filter="url(#fjbup9r5tln9m)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="174" x="1718" y="451.9192"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="154" x="1728" y="475.4544">Check requested lease</text><!--MD5=[0edbe06a49914a247f1c11b045d92815]
+entity client_lease--><rect fill="#FEFECE" filter="url(#fjbup9r5tln9m)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="108" x="546" y="796.7792"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="88" x="556" y="820.3144">Check renew</text><!--MD5=[66e1e431ca0dbea91ea05cb758558585]
+entity create--><rect fill="#FEFECE" filter="url(#fjbup9r5tln9m)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="148" x="936" y="1574.8592"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="128" x="946" y="1598.3944">Create a new lease</text><!--MD5=[a85809bef6165a661ce702016b2b24bf]
+entity old_lease--><rect fill="#FEFECE" filter="url(#fjbup9r5tln9m)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="128" x="719" y="2101.8592"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="108" x="729" y="2125.3944">Delete old lease</text><!--MD5=[3e4eb9e968ddf7eb79447dabaa827d00]
+entity candidate--><rect fill="#FEFECE" filter="url(#fjbup9r5tln9m)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="153" x="188.5" y="1443.8592"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="133" x="198.5" y="1467.3944">Get candidate lease</text><!--MD5=[3dd4b79f11e480f9e62df46d2d0a412b]
+entity reuseExpiredLease4--><rect fill="#FEFECE" filter="url(#fjbup9r5tln9m)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="157" x="118.5" y="1574.8592"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="137" x="128.5" y="1598.3944">Reuse expired lease</text><!--MD5=[7989e4485f5064553517c02d5ce8346d]
+entity reclaimExpiredLease--><rect fill="#FEFECE" filter="url(#fjbup9r5tln9m)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="169" x="111.5" y="1671.8592"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="149" x="121.5" y="1695.3944">Reclaim expired lease</text><!--MD5=[8b161cca1eea0fa2f14429822e5193fc]
+entity updateLease4Information--><rect fill="#FEFECE" filter="url(#fjbup9r5tln9m)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="192" x="96" y="1768.8592"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="172" x="106" y="1792.3944">update lease information</text><!--MD5=[20b997f41be7d019adfd03f05289a85b]
+entity lease4_select--><rect fill="#FEFECE" filter="url(#fjbup9r5tln9m)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="163" x="95.5" y="1865.8592"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="143" x="105.5" y="1889.3944">Callout lease4_select</text><path d="M293.5,1871.3592 L293.5,1879.8592 L258.55,1883.8592 L293.5,1887.8592 L293.5,1896.6698 A0,0 0 0 0 293.5,1896.6698 L346.5,1896.6698 A0,0 0 0 0 346.5,1896.6698 L346.5,1881.3592 L336.5,1871.3592 L293.5,1871.3592 A0,0 0 0 0 293.5,1871.3592 " fill="#FBFB77" filter="url(#fjbup9r5tln9m)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M336.5,1871.3592 L336.5,1881.3592 L346.5,1881.3592 L336.5,1871.3592 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="32" x="299.5" y="1888.9276">hook</text><!--MD5=[d0c6f6a5b1ca3e5ac503933fbe44aaa9]
+entity updateLease4--><rect fill="#FEFECE" filter="url(#fjbup9r5tln9m)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="108" x="210" y="1962.8592"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="88" x="220" y="1986.3944">Update lease</text><!--MD5=[8ae068fcc4f60e406016be9ba14134ac]
+entity iterate--><rect fill="#FEFECE" filter="url(#fjbup9r5tln9m)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="194" x="513" y="1133.4992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="174" x="523" y="1157.0344">Iterate pools and subnets</text><!--MD5=[cb628e8ea2f367fa2f488bc44b336c46]
+entity pick--><rect fill="#FEFECE" filter="url(#fjbup9r5tln9m)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="105" x="435.5" y="1230.4992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="85" x="445.5" y="1254.0344">Pick address</text><!--MD5=[3307242102673314e57f67fe596f1a7c]
+entity pick_reserved--><rect fill="#FEFECE" filter="url(#fjbup9r5tln9m)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="200" x="511" y="1346.8592"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="180" x="521" y="1370.3944">Check reserved addressed</text><!--MD5=[3fa202f6559a381d70247672876b819e]
+entity pick_lease--><rect fill="#FEFECE" filter="url(#fjbup9r5tln9m)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="101" x="649.5" y="1443.8592"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="81" x="659.5" y="1467.3944">Check lease</text><!--MD5=[1213eaa42773f0ba0384c538d3efa224]
+entity findClientLease--><rect fill="#FEFECE" filter="url(#fjbup9r5tln9m)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="130" x="1561" y="28.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="110" x="1571" y="51.7344">Find client lease</text><path d="M1726,33.6992 L1726,42.1992 L1691.14,46.1992 L1726,50.1992 L1726,59.0098 A0,0 0 0 0 1726,59.0098 L1816,59.0098 A0,0 0 0 0 1816,59.0098 L1816,43.6992 L1806,33.6992 L1726,33.6992 A0,0 0 0 0 1726,33.6992 " fill="#FBFB77" filter="url(#fjbup9r5tln9m)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1806,33.6992 L1806,43.6992 L1816,43.6992 L1806,33.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="1732" y="51.2676">entry point</text><!--MD5=[0f69bb3143e68c3e4ebf8b928e2a1af4]
+entity addressReserved--><rect fill="#FEFECE" filter="url(#fjbup9r5tln9m)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="216" x="1793" y="141.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="196" x="1803" y="164.7344">Check requested reservation</text><!--MD5=[f1bd864ca92b3a59ad91e15b6c278a16]
+entity hasAddressReservation--><rect fill="#FEFECE" filter="url(#fjbup9r5tln9m)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="124" x="1290" y="141.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="104" x="1300" y="164.7344">Get reservation</text><!--MD5=[29cbf9a69668994ea4ff4bb0b8dea6d6]
+entity update_hint--><rect fill="#FEFECE" filter="url(#fjbup9r5tln9m)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="200" x="1558" y="141.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="180" x="1568" y="164.7344">Update requested address</text><!--MD5=[999fe650e2a9819ebed27de3d290658a]
+entity no_lease--><rect fill="#FEFECE" filter="url(#fjbup9r5tln9m)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="127" x="1466.5" y="2101.8592"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="107" x="1476.5" y="2125.3944">Return no lease</text><path d="M1629,2107.3592 L1629,2115.8592 L1593.71,2119.8592 L1629,2123.8592 L1629,2132.6698 A0,0 0 0 0 1629,2132.6698 L1711,2132.6698 A0,0 0 0 0 1711,2132.6698 L1711,2117.3592 L1701,2107.3592 L1629,2107.3592 A0,0 0 0 0 1629,2107.3592 " fill="#FBFB77" filter="url(#fjbup9r5tln9m)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1701,2107.3592 L1701,2117.3592 L1711,2117.3592 L1701,2107.3592 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="61" x="1635" y="2124.9276">exit point</text><!--MD5=[45b45980895812fee5a3bd80c1953e7a]
+entity renew--><rect fill="#FEFECE" filter="url(#fjbup9r5tln9m)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="168" x="1023" y="796.7792"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="148" x="1033" y="820.3144">Return renewed lease</text><path d="M1226,802.2792 L1226,810.7792 L1191.06,814.7792 L1226,818.7792 L1226,827.5898 A0,0 0 0 0 1226,827.5898 L1308,827.5898 A0,0 0 0 0 1308,827.5898 L1308,812.2792 L1298,802.2792 L1226,802.2792 A0,0 0 0 0 1226,802.2792 " fill="#FBFB77" filter="url(#fjbup9r5tln9m)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1298,802.2792 L1298,812.2792 L1308,812.2792 L1298,802.2792 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="61" x="1232" y="819.8476">exit point</text><!--MD5=[c13398c59c328d6fcc544c8c17f5b117]
+entity return--><rect fill="#FEFECE" filter="url(#fjbup9r5tln9m)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="105" x="730.5" y="2216.8592"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="85" x="740.5" y="2240.3944">Return lease</text><path d="M871,2222.3592 L871,2230.8592 L835.66,2234.8592 L871,2238.8592 L871,2247.6698 A0,0 0 0 0 871,2247.6698 L953,2247.6698 A0,0 0 0 0 953,2247.6698 L953,2232.3592 L943,2222.3592 L871,2222.3592 A0,0 0 0 0 871,2222.3592 " fill="#FBFB77" filter="url(#fjbup9r5tln9m)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M943,2222.3592 L943,2232.3592 L953,2232.3592 L943,2222.3592 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="61" x="877" y="2239.9276">exit point</text><!--MD5=[58c45ac03f61bca16a2604d1f9090edc]
+link findClientLease to addressReserved--><path d="M1668.37,64.2992 C1718.43,84.5092 1801.49,118.0392 1853.64,139.0792 " fill="none" id="findClientLease-&gt;addressReserved" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1858.59,141.0792,1851.7456,133.9973,1853.9546,139.205,1848.7468,141.414,1858.59,141.0792" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="178" x="1780" y="107.7676">has requested address (hint)</text><!--MD5=[3ed98210a29f20764b03cb44cfd671eb]
+link findClientLease to hasAddressReservation--><path d="M1583.79,64.2992 C1533.91,84.5092 1451.15,118.0392 1399.19,139.0792 " fill="none" id="findClientLease-&gt;hasAddressReservation" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1394.26,141.0792,1404.1032,141.414,1398.8954,139.205,1401.1044,133.9973,1394.26,141.0792" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="172" x="1506" y="107.7676">no requested address (hint)</text><!--MD5=[0f8169b991248aaf1e86d3e126ee7fc7]
+link addressReserved to check_hint--><path d="M1887.49,177.4192 C1875.4,191.7792 1856.46,211.8192 1836,224.1992 C1820.57,233.5342 1803.2263,241.3248 1785.8452,247.7658 C1785.5736,247.8664 1785.302,247.9667 1785.0304,248.0667 " fill="none" id="addressReserved-&gt;check_hint" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1785.0304,248.0667,1794.8581,248.7112,1789.7226,246.3394,1792.0944,241.2038,1785.0304,248.0667" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="162" x="1858" y="220.7676">no conflicting reservation</text><!--MD5=[afeb447a9f6636bece5d73dd5d09cefa]
+link addressReserved to no_lease--><path d="M1988.01,177.2392 C2038.81,192.8192 2093,221.7892 2093,274.5592 C2093,274.5592 2093,274.5592 2093,1981.8592 C2093,2092.0292 1720.18,2081.0192 1612,2101.8592 C1607.6,2102.7092 1603.06,2103.5992 1598.5,2104.5092 " fill="none" id="addressReserved-&gt;no_lease" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1593.53,2105.4992,1603.1421,2107.6457,1598.4318,2104.5131,1601.5644,2099.8028,1593.53,2105.4992" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="225" x="2094" y="1156.5676">revervation owned by another client</text><!--MD5=[961d5a31619e7d456669487d013a1899]
+link hasAddressReservation to update_hint--><path d="M1414.29,159.1992 C1454.08,159.1992 1506.68,159.1992 1552.83,159.1992 " fill="none" id="hasAddressReservation-&gt;update_hint" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1557.85,159.1992,1548.85,155.1992,1552.85,159.1992,1548.85,163.1992,1557.85,159.1992" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="107" x="1432.5" y="152.7676">has a reservation</text><!--MD5=[05586e2e35799af932c772159165fde5]
+link update_hint to check_hint--><path d="M1661.19,177.5692 C1664.08,193.3142 1668.44,217.0567 1672.1225,237.1092 C1672.5828,239.6158 1673.0325,242.0647 1673.4675,244.4331 C1673.685,245.6173 1673.8987,246.7814 1674.1083,247.9225 " fill="none" id="update_hint-&gt;check_hint" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1674.1083,247.9225,1676.4169,238.3481,1673.2052,243.0048,1668.5485,239.793,1674.1083,247.9225" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="157" x="1670" y="220.7676">request reserved address</text><!--MD5=[f5740591afdec92972eb12364704fbda]
+link hasAddressReservation to check_done--><path d="M1289.89,164.2492 C1123.29,175.9492 679,212.9292 679,274.5592 C679,274.5592 679,274.5592 679,585.9192 C679,614.8842 678.03,647.4017 677.045,672.958 C676.7987,679.347 676.5516,685.301 676.3184,690.6556 C676.3038,690.9903 676.2893,691.3226 676.2748,691.6526 " fill="none" id="hasAddressReservation-&gt;check_done" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="676.2748,691.6526,680.6651,682.8364,676.4938,686.6574,672.6728,682.486,676.2748,691.6526" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="90" x="680" y="418.4876">no reservation</text><!--MD5=[05b1cca34cf1798b13fb9b06f5ca5f3a]
+link check_hint to get_existing--><path d="M1679,276.1292 C1679,277.5792 1679,301.1692 1679,324.7542 C1679,330.6505 1679,336.5464 1679,342.096 C1679,343.4834 1679,344.8492 1679,346.1879 C1679,346.3552 1679,346.5221 1679,346.6886 " fill="none" id="check_hint-&gt;get_existing" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1679,346.6886,1683,337.6886,1679,341.6886,1675,337.6886,1679,346.6886" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[a6e7bc949cef76964a3dcada3d94e736]
+link get_existing to existing--><path d="M1679.09,374.9892 C1681.74,376.9592 1741.43,421.4892 1777.66,448.5192 " fill="none" id="get_existing-&gt;existing" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1781.95,451.7292,1777.1157,443.1485,1777.938,448.7452,1772.3413,449.5676,1781.95,451.7292" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="124" x="1743" y="418.4876">has requested lease</text><!--MD5=[86bae6c5db5c6e2b2f64eec8702a172a]
+link existing to no_lease--><path d="M1805,488.1492 C1805,510.3092 1805,549.9792 1805,583.9192 C1805,583.9192 1805,583.9192 1805,1981.8592 C1805,2032.4592 1768.51,2037.0392 1725,2062.8592 C1703.52,2075.6092 1645.99,2091.4192 1598.94,2102.9892 " fill="none" id="existing-&gt;no_lease" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1593.84,2104.2292,1603.5367,2105.9538,1598.6941,2103.03,1601.6179,2098.1874,1593.84,2104.2292" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="263" x="1806" y="1310.0676">not expired lease owned by another client</text><!--MD5=[d1913c1ad5468c4f26e27e58c8f67311]
+link get_existing to out_of_pool--><path d="M1670.5702,375.107 C1670.282,375.1139 1669.9868,375.1209 1669.6847,375.1282 C1669.0805,375.1427 1668.4485,375.158 1667.7892,375.1741 C1666.4706,375.2063 1665.043,375.2417 1663.5101,375.2804 C1660.4444,375.3579 1656.9579,375.4487 1653.0818,375.5535 C1637.5772,375.973 1615.8378,376.6183 1589.855,377.543 C1537.8894,379.3923 1468.95,382.3592 1398.9675,386.8717 C1259.0025,395.8967 1114.865,411.1042 1094,435.9192 C1067.68,467.2192 1073.56,492.5092 1094,527.9192 C1103.33,544.0792 1119.3,555.9992 1135.62,564.5792 " fill="none" id="get_existing-&gt;out_of_pool" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1140.22,566.9092,1133.998,559.2747,1135.7594,564.6503,1130.3837,566.4117,1140.22,566.9092" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="90" x="1095" y="474.9876">no reservation</text><!--MD5=[d1913c1ad5468c4f26e27e58c8f67311]
+link get_existing to out_of_pool--><path d="M1670.8377,376.8955 C1670.4057,377.006 1669.9584,377.1212 1669.4962,377.2411 C1667.6472,377.7206 1665.5597,378.2751 1663.2617,378.9056 C1654.0697,381.4277 1641.5094,385.1648 1627.3738,390.173 C1599.1025,400.1892 1564.53,415.2892 1538,435.9192 C1497.23,467.6192 1510.85,500.6192 1467,527.9192 C1417.34,558.8392 1353.82,573.0892 1300.23,579.4992 " fill="none" id="get_existing-&gt;out_of_pool-1" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1295.08,580.0892,1304.4862,583.0087,1300.0457,579.5042,1303.5502,575.0636,1295.08,580.0892" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="162" x="1539" y="474.9876">has requested reservation</text><!--MD5=[a80af0ff9802cb26b63fe0e5cdeeb896]
+link get_existing to getReservedLease--><path d="M1670.7999,374.8934 C1670.5697,374.893 1670.3349,374.8927 1670.0956,374.8923 C1669.6171,374.8916 1669.1205,374.891 1668.6064,374.8904 C1666.5497,374.8882 1664.2106,374.8875 1661.61,374.8892 C1651.2075,374.8962 1636.6199,374.9436 1619.1798,375.1011 C1584.2997,375.4161 1538.0094,376.1717 1490.9688,377.9267 C1396.8875,381.4367 1299.805,388.9442 1285,404.9192 C1272.95,417.9192 1284.84,434.9092 1298.87,448.1092 " fill="none" id="get_existing-&gt;getReservedLease" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1302.86,451.7292,1298.8826,442.7192,1299.1571,448.3694,1293.5069,448.6439,1302.86,451.7292" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="223" x="1286" y="418.4876">has reservation for another address</text><!--MD5=[460f9433d097e6134b488e2edc059749]
+link getReservedLease to no_lease--><path d="M1364.18,487.9592 C1390.63,499.5992 1426.76,515.1592 1459,527.9192 C1526.72,554.7192 1613,511.0892 1613,583.9192 C1613,583.9192 1613,583.9192 1613,1249.4992 C1613,1277.9792 1591.75,1291.6392 1610,1313.4992 C1622.74,1328.7592 1638.13,1309.5292 1654,1321.4992 C1690.13,1348.7692 1699,1367.5992 1699,1412.8592 C1699,1412.8592 1699,1412.8592 1699,1981.8592 C1699,2041.1392 1635.49,2079.2192 1586.33,2099.8192 " fill="none" id="getReservedLease-&gt;no_lease" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1581.62,2101.7592,1591.4651,2102.0312,1586.2434,2099.8555,1588.4191,2094.6338,1581.62,2101.7592" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="150" x="1611" y="1310.0676">no active reserved lease</text><!--MD5=[e9bc3bd5a379396c200e43b0baf79c85]
+link getReservedLease to out_of_pool--><path d="M1305.5,488.0792 C1281.41,508.2392 1241.48,541.6692 1215.71,563.2392 " fill="none" id="getReservedLease-&gt;out_of_pool" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1211.7,566.5992,1221.1757,563.9139,1215.5423,563.3997,1216.0565,557.7663,1211.7,566.5992" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[e17e653abfe61c21e03d310137f9f5d3]
+link out_of_pool to check_done--><path d="M1155.24,602.9392 C1109.8,624.3292 1033.7,659.2992 1004,667.9192 C934.08,688.2192 853.2875,700.7367 789.2638,708.2142 C757.2519,711.953 729.4322,714.4317 709.2598,715.9933 C699.1737,716.7741 690.9993,717.3255 685.1687,717.6906 C684.4399,717.7362 683.7477,717.7789 683.093,717.8188 " fill="none" id="out_of_pool-&gt;check_done" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="683.093,717.8188,692.3195,721.2641,688.0837,717.5148,691.8331,713.279,683.093,717.8188" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="280" x="1045" y="664.4876">owned reservation for the requested address</text><!--MD5=[e17e653abfe61c21e03d310137f9f5d3]
+link out_of_pool to check_done--><path d="M1086.78,593.7092 C974.31,603.4192 803.46,622.2892 745,650.9192 C726.22,660.1192 709.21,676.2117 696.6613,690.3605 C693.5241,693.8977 690.6657,697.3134 688.1282,700.4695 C686.8595,702.0476 685.671,703.5608 684.5679,704.9918 C684.2922,705.3496 684.0217,705.7022 683.7567,706.0494 C683.6242,706.223 683.4931,706.3953 683.3633,706.5662 C683.2984,706.6516 683.2339,706.7367 683.1697,706.8214 " fill="none" id="out_of_pool-&gt;check_done-1" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="683.1697,706.8214,691.793,702.0634,686.1891,702.8361,685.4164,697.2323,683.1697,706.8214" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="249" x="746" y="664.4876">requested address is in allowed an pool</text><!--MD5=[7bd3c3d867479d62123546af0a0eba34]
+link out_of_pool to no_lease--><path d="M1254.36,602.9792 C1281.82,613.0992 1312.52,628.4392 1334,650.9192 C1356.28,674.2392 1361,686.0292 1361,718.2792 C1361,718.2792 1361,718.2792 1361,1981.8592 C1361,2041.1392 1424.51,2079.2192 1473.67,2099.8192 " fill="none" id="out_of_pool-&gt;no_lease" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1478.38,2101.7592,1471.5809,2094.6338,1473.7566,2099.8555,1468.5349,2102.0312,1478.38,2101.7592" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="283" x="1362" y="1369.9276">address not reserved and not in allowed pool</text><!--MD5=[285a75cccafb8a8e1e8a8d054b6bd861]
+link check_done to client_lease--><path d="M674.95,719.8492 C673.39,721.7992 638.7,765.2692 617.07,792.3792 " fill="none" id="check_done-&gt;client_lease" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="613.72,796.5892,622.4617,792.0524,616.84,792.6821,616.2103,787.0604,613.72,796.5892" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="108" x="652" y="763.3476">has a client lease</text><!--MD5=[69a418bc3ca1e1b953129b8feacd7c7c]
+link client_lease to renew--><path d="M654.26,814.7792 C741.18,814.7792 912.52,814.7792 1017.69,814.7792 " fill="none" id="client_lease-&gt;renew" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1022.96,814.7792,1013.96,810.7792,1017.96,814.7792,1013.96,818.7792,1022.96,814.7792" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="332" x="672.5" y="808.3476">requested address was already assigned to the client</text><!--MD5=[82bd19346130f27c4982b22ea05f0ccb]
+link client_lease to new_lease--><path d="M600,832.9492 C600,848.8792 600,873.1567 600,893.7055 C600,896.2741 600,898.7844 600,901.2129 C600,902.4271 600,903.6209 600,904.7913 C600,905.0839 600,905.375 600,905.6646 " fill="none" id="client_lease-&gt;new_lease" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="600,905.6646,604,896.6646,600,900.6646,596,896.6646,600,905.6646" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[f19fad7ef643a710f1fa744c146e27e1]
+link new_lease to allocateOrReuseLease4--><path d="M599.93,933.6492 C594.29,934.4292 233,984.5992 233,1070.9992 C233,1070.9992 233,1070.9992 233,1249.4992 C233,1274.8242 237.36,1302.9242 241.7888,1324.9317 C242.3423,1327.6827 242.897,1330.3384 243.4444,1332.8816 C243.7181,1334.1532 243.9899,1335.3967 244.2589,1336.6099 C244.2925,1336.7616 244.3261,1336.9127 244.3596,1337.0634 " fill="none" id="new_lease-&gt;allocateOrReuseLease4" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="244.3596,1337.0634,246.3094,1327.4095,243.2737,1332.1828,238.5004,1329.147,244.3596,1337.0634" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="152" x="234" y="1156.5676">has a requested address</text><!--MD5=[1e19bcf55215d199025544543592d337]
+link new_lease to allocateUnreservedLease4--><path d="M600,933.7392 C600.09,935.7842 601.545,969.0667 603,1002.3417 C603.3638,1010.6605 603.7275,1018.9788 604.0699,1026.8084 C604.2411,1030.7232 604.407,1034.5158 604.5649,1038.1252 C604.6438,1039.93 604.7208,1041.6889 604.7954,1043.3944 C604.8047,1043.6076 604.814,1043.8199 604.8233,1044.0314 " fill="none" id="new_lease-&gt;allocateUnreservedLease4" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="604.8233,1044.0314,608.4261,1034.8652,604.6047,1039.0362,600.4337,1035.2148,604.8233,1044.0314" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="135" x="603" y="977.2076">no requested address</text><!--MD5=[2c84e3b0a8d19577f3d2d8902e61dda6]
+link allocateOrReuseLease4 to candidate--><path d="M251.01,1365.9292 C251.3,1367.8792 257.62,1410.7592 261.66,1438.2092 " fill="none" id="allocateOrReuseLease4-&gt;candidate" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="262.44,1443.4792,265.0848,1433.9921,261.7109,1438.5327,257.1703,1435.1587,262.44,1443.4792" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[a5e8e7e456414e548f2004cb6dbe84b6]
+link candidate to reuseExpiredLease4--><path d="M255.97,1479.9892 C243.73,1503.2192 221.85,1544.7092 208.46,1570.1092 " fill="none" id="candidate-&gt;reuseExpiredLease4" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="206.07,1574.6592,213.799,1568.5549,208.397,1570.2337,206.7181,1564.8317,206.07,1574.6592" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="148" x="230" y="1541.4276">expired candidate lease</text><!--MD5=[d2a65277aca220a8b88ff33e161a522b]
+link candidate to no_lease--><path d="M300.41,1479.9392 C331,1493.7192 376.81,1512.0492 419,1519.8592 C437.6,1523.2992 1083.67,1518.3092 1100,1527.8592 C1128.36,1544.4492 1137,1558.9992 1137,1591.8592 C1137,1591.8592 1137,1591.8592 1137,1981.8592 C1137,2049.7592 1348.85,2091.8092 1461.47,2109.3592 " fill="none" id="candidate-&gt;no_lease" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1466.42,2110.1292,1458.1445,2104.7892,1461.4798,2109.3582,1456.9108,2112.6936,1466.42,2110.1292" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="169" x="1138" y="1791.9276">conflicting candidate lease</text><!--MD5=[7d0ea550df801bc4f2e5d77c4007fd73]
+link candidate to create--><path d="M302.09,1479.9092 C332.75,1493.1892 377.78,1510.8292 419,1519.8592 C464.29,1529.7792 476.89,1523.0592 523,1527.8592 C667.15,1542.8692 834.55,1566.1592 930.79,1580.1192 " fill="none" id="candidate-&gt;create" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="935.89,1580.8592,927.5546,1575.6131,930.9414,1580.1441,926.4104,1583.5309,935.89,1580.8592" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="117" x="659" y="1541.4276">no candidate lease</text><!--MD5=[41d477ba3ffb73c8ff7e1f8771a2bc5c]
+link reuseExpiredLease4 to reclaimExpiredLease--><path d="M196.82,1611.2792 C196.65,1626.8192 196.41,1649.6392 196.24,1666.5192 " fill="none" id="reuseExpiredLease4-&gt;reclaimExpiredLease" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="196.18,1671.5492,200.2572,1662.5839,196.223,1666.5494,192.2575,1662.5152,196.18,1671.5492" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[6426546e78ac0ba7440fd3d40f44ede2]
+link reclaimExpiredLease to updateLease4Information--><path d="M195.27,1708.2792 C194.61,1723.8192 193.65,1746.6392 192.94,1763.5192 " fill="none" id="reclaimExpiredLease-&gt;updateLease4Information" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="192.73,1768.5492,197.0865,1759.7163,192.9298,1763.5532,189.0929,1759.3965,192.73,1768.5492" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[a62828ac2ba9e6deab1d38c41c6a28c7]
+link updateLease4Information to lease4_select--><path d="M189.25,1805.2792 C186.8,1820.8192 183.19,1843.6392 180.53,1860.5192 " fill="none" id="updateLease4Information-&gt;lease4_select" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="179.73,1865.5492,185.097,1857.2912,180.5172,1860.6116,177.1968,1856.0317,179.73,1865.5492" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[8451cb76573000a7f0f17878defd5d68]
+link lease4_select to no_lease--><path d="M250.77,1901.8792 C408.09,1937.6692 788.49,2021.5792 1111,2071.8592 C1233.61,2090.9692 1377.58,2105.3792 1460.85,2112.9392 " fill="none" id="lease4_select-&gt;no_lease" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1466.24,2113.4292,1457.6428,2108.6242,1461.2609,2112.9727,1456.9124,2116.5907,1466.24,2113.4292" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="26" x="1055" y="1985.9276">SKIP</text><!--MD5=[6d30d4fb129fbbb4308e51704d598b83]
+link lease4_select to updateLease4--><path d="M187.75,1902.0092 C194.04,1911.4992 202.41,1923.2792 211,1932.8592 C219.4,1942.2392 229.56,1951.6292 238.73,1959.5292 " fill="none" id="lease4_select-&gt;updateLease4" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="242.59,1962.8092,238.3406,1953.9243,238.7867,1959.5635,233.1474,1960.0096,242.59,1962.8092" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[f38e7914af006d3091e34eae716cf611]
+link updateLease4 to old_lease--><path d="M271.15,1999.0792 C280.04,2018.1492 297.15,2048.1292 322,2062.8592 C386.6,2101.1592 601.31,2113.3692 713.44,2117.1792 " fill="none" id="updateLease4-&gt;old_lease" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="718.7,2117.3592,709.8301,2113.0785,713.7025,2117.2022,709.5788,2121.0745,718.7,2117.3592" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[9b569e4e69bfc07b8f4591db492d7934]
+link allocateUnreservedLease4 to iterate--><path d="M606,1072.5592 C606.08,1074.0692 607.7,1105.5792 608.85,1128.0692 " fill="none" id="allocateUnreservedLease4-&gt;iterate" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="609.12,1133.2792,612.6525,1124.0857,608.8632,1128.2858,604.663,1124.4965,609.12,1133.2792" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[913c99c1aa5de4d885de0fade3210176]
+link iterate to pick--><path d="M587.91,1169.6992 C567.09,1185.9092 535.9,1210.1992 513.92,1227.3192 " fill="none" id="iterate-&gt;pick" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="509.93,1230.4192,519.4881,1228.044,513.8745,1227.3465,514.5719,1221.7329,509.93,1230.4192" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[98fd2d33f60f8d171595f3ad38490357]
+link pick to pick_reserved--><path d="M507.8,1266.7192 C517.84,1275.5292 530.16,1286.4892 541,1296.4992 C557.65,1311.8792 576.1,1329.6692 589.88,1343.1092 " fill="none" id="pick-&gt;pick_reserved" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="593.64,1346.7692,589.9931,1337.6204,590.0618,1343.2769,584.4054,1343.3456,593.64,1346.7692" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[40bbb0c51a3c4e170e8c88288f4abbc7]
+reverse link iterate to pick_reserved--><path d="M610.11,1174.9692 C610.31,1217.4192 610.74,1308.5692 610.92,1346.6192 " fill="none" id="iterate&lt;-pick_reserved" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="610.08,1169.7992,606.1057,1178.8106,610.0943,1174.7992,614.1057,1178.7878,610.08,1169.7992" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="214" x="612" y="1253.5676">address reserved to another client</text><!--MD5=[c070f87375b0b17682e33c95d0281c7f]
+link pick_reserved to pick_lease--><path d="M627.32,1383.2792 C642.25,1399.2192 664.37,1422.8292 680.28,1439.8092 " fill="none" id="pick_reserved-&gt;pick_lease" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="683.78,1443.5492,680.5621,1434.2409,680.3679,1439.8944,674.7144,1439.7003,683.78,1443.5492" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[2a521ba838ca3ea39c3c98b97230fab1]
+reverse link iterate to pick_lease--><path d="M712.17,1161.6592 C757.55,1171.4192 806.95,1191.0892 835,1230.4992 C888.89,1306.2192 775.56,1404.6392 723.88,1443.7492 " fill="none" id="iterate&lt;-pick_lease" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="707.23,1160.6392,715.2324,1166.3805,712.1262,1161.6527,716.854,1158.5466,707.23,1160.6392" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="73" x="846" y="1310.0676">active lease</text><!--MD5=[63357d070723cd23e47a694c7dc5adee]
+link pick_lease to reuseExpiredLease4--><path d="M649.41,1472.8192 C594.72,1484.0992 505.27,1504.0492 430,1527.8592 C410.41,1534.0592 406.57,1538.5992 387,1544.8592 C352.6,1555.8592 314.02,1565.8292 280.66,1573.7192 " fill="none" id="pick_lease-&gt;reuseExpiredLease4" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="275.77,1574.8692,285.4457,1576.7079,280.6378,1573.7272,283.6185,1568.9193,275.77,1574.8692" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="83" x="431" y="1541.4276">expired lease</text><!--MD5=[cf9da26e069a0df2c62fe2799950086c]
+link pick_lease to create--><path d="M741.17,1479.9892 C798.95,1504.0392 903.78,1547.6592 964.05,1572.7392 " fill="none" id="pick_lease-&gt;create" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="968.66,1574.6592,961.8798,1567.5158,964.0417,1572.7433,958.8142,1574.9051,968.66,1574.6592" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="52" x="892" y="1541.4276">no lease</text><!--MD5=[64e111b9225aa9d21cd5edaf123c77e3]
+link create to old_lease--><path d="M990.36,1611.0192 C972.53,1628.5992 949,1657.6992 949,1688.8592 C949,1688.8592 949,1688.8592 949,1981.8592 C949,2040.6792 886.23,2078.9692 837.89,2099.7292 " fill="none" id="create-&gt;old_lease" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="833.26,2101.6792,843.1072,2101.8623,837.866,2099.7338,839.9945,2094.4927,833.26,2101.6792" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[f504166a5b4bb527b5be2231a925b659]
+link old_lease to return--><path d="M783,2138.0192 C783,2157.5992 783,2189.6892 783,2211.2892 " fill="none" id="old_lease-&gt;return" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="783,2216.5392,787,2207.5392,783,2211.5392,779,2207.5392,783,2216.5392" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[8ff97301ae54650bbe6d52523d790cdf]
+@startuml\r
+\r
+title Allocate a lease for DHCPREQUEST\r
+\r
+agent "Find client lease" as findClientLease\r
+note right : entry point\r
+\r
+agent "Check requested reservation" as addressReserved\r
+\r
+agent "Get reservation" as hasAddressReservation\r
+\r
+agent "Update requested address" as update_hint\r
+\r
+rectangle "Check requested address" as check_hint {\r
+ rectangle "Get lease for requested address" as get_existing {\r
+  agent "Check requested lease" as existing\r
+ }\r
+\r
+ agent "Check lease for reserved address" as getReservedLease\r
+\r
+ agent "Check out-of-pool address" as out_of_pool\r
+}\r
+\r
+rectangle "Check client lease" as check_done {\r
+ agent "Check renew" as client_lease\r
+}\r
+\r
+rectangle "Allocate a new lease" as new_lease {\r
+ together {\r
+  rectangle "Allocate or reuse lease" as allocateOrReuseLease4 {\r
+   agent "Get candidate lease" as candidate\r
+\r
+   agent "Reuse expired lease" as reuseExpiredLease4\r
+\r
+   agent "Reclaim expired lease" as reclaimExpiredLease\r
+\r
+   agent "update lease information" as updateLease4Information\r
+\r
+   agent "Callout lease4_select" as lease4_select\r
+   note right : hook\r
+\r
+   agent "Update lease" as updateLease4\r
+  }\r
+\r
+  rectangle "Allocate unreserved lease" as allocateUnreservedLease4 {\r
+   agent "Iterate pools and subnets" as iterate\r
+\r
+   agent "Pick address" as pick\r
+\r
+   agent "Check reserved addressed" as pick_reserved\r
+\r
+   agent "Check lease" as pick_lease\r
+  }\r
+ }\r
+\r
+ agent "Create a new lease" as create\r
+\r
+ agent "Delete old lease" as old_lease\r
+}\r
+\r
+agent "Return no lease" as no_lease\r
+note right : exit point\r
+\r
+agent "Return renewed lease" as renew\r
+note right : exit point\r
+\r
+agent "Return lease" as return\r
+note right : exit point\r
+\r
+findClientLease - -> addressReserved : has requested address (hint)\r
+findClientLease - -> hasAddressReservation : no requested address (hint)\r
+addressReserved - -> check_hint : no conflicting reservation\r
+addressReserved - -> no_lease : revervation owned by another client\r
+hasAddressReservation -> update_hint : has a reservation\r
+update_hint - -> check_hint : request reserved address\r
+hasAddressReservation - -> check_done : no reservation\r
+check_hint - -> get_existing\r
+get_existing - -> existing : has requested lease\r
+existing - - -> no_lease : not expired lease owned by another client\r
+get_existing - -> out_of_pool : no reservation\r
+get_existing - -> out_of_pool : has requested reservation\r
+get_existing - -> getReservedLease : has reservation for another address\r
+getReservedLease - - -> no_lease : no active reserved lease\r
+getReservedLease - -> out_of_pool\r
+out_of_pool - -> check_done : owned reservation for the requested address\r
+out_of_pool - -> check_done : requested address is in allowed an pool\r
+out_of_pool - ->       no_lease : address not reserved and not in allowed pool\r
+check_done - -> client_lease : has a client lease\r
+client_lease -> renew : requested address was already assigned to the client\r
+client_lease - -> new_lease\r
+new_lease - -> allocateOrReuseLease4 : has a requested address\r
+new_lease - -> allocateUnreservedLease4 : no requested address\r
+allocateOrReuseLease4 - -> candidate\r
+candidate - -> reuseExpiredLease4 : expired candidate lease\r
+candidate - -> no_lease : conflicting candidate lease\r
+candidate - -> create : no candidate lease\r
+reuseExpiredLease4 - -> reclaimExpiredLease\r
+reclaimExpiredLease - -> updateLease4Information\r
+updateLease4Information - -> lease4_select\r
+lease4_select - - -> no_lease : SKIP\r
+lease4_select - -> updateLease4\r
+updateLease4 - -> old_lease\r
+allocateUnreservedLease4 - -> iterate\r
+iterate - -> pick\r
+pick - -> pick_reserved\r
+pick_reserved -up-> iterate : address reserved to another client\r
+pick_reserved - -> pick_lease\r
+pick_lease -up-> iterate : active lease\r
+pick_lease - -> reuseExpiredLease4 : expired lease\r
+pick_lease - -> create : no lease\r
+create - -> old_lease\r
+old_lease - -> return\r
+\r
+@enduml\r
+
+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/request-lease.uml b/doc/devel/images/request-lease.uml
new file mode 100644 (file)
index 0000000..04445cd
--- /dev/null
@@ -0,0 +1,114 @@
+@startuml
+
+title Allocate a lease for DHCPREQUEST
+
+agent "Find client lease" as findClientLease
+note right : entry point
+
+agent "Check requested reservation" as addressReserved
+
+agent "Get reservation" as hasAddressReservation
+
+agent "Update requested address" as update_hint
+
+rectangle "Check requested address" as check_hint {
+ rectangle "Get lease for requested address" as get_existing {
+  agent "Check requested lease" as existing
+ }
+
+ agent "Check lease for reserved address" as getReservedLease
+
+ agent "Check out-of-pool address" as out_of_pool
+}
+
+rectangle "Check client lease" as check_done {
+ agent "Check renew" as client_lease
+}
+
+rectangle "Allocate a new lease" as new_lease {
+ together {
+  rectangle "Allocate or reuse lease" as allocateOrReuseLease4 {
+   agent "Get candidate lease" as candidate
+
+   agent "Reuse expired lease" as reuseExpiredLease4
+
+   agent "Reclaim expired lease" as reclaimExpiredLease
+
+   agent "update lease information" as updateLease4Information
+
+   agent "Callout lease4_select" as lease4_select
+   note right : hook
+
+   agent "Update lease" as updateLease4
+  }
+
+  rectangle "Allocate unreserved lease" as allocateUnreservedLease4 {
+   agent "Iterate pools and subnets" as iterate
+
+   agent "Pick address" as pick
+
+   agent "Check reserved addressed" as pick_reserved
+
+   agent "Check lease" as pick_lease
+  }
+ }
+
+ agent "Create a new lease" as create
+
+ agent "Delete old lease" as old_lease
+}
+
+agent "Return no lease" as no_lease
+note right : exit point
+
+agent "Return renewed lease" as renew
+note right : exit point
+
+agent "Return lease" as return
+note right : exit point
+
+findClientLease --> addressReserved : has requested address (hint)
+findClientLease --> hasAddressReservation : no requested address (hint)
+addressReserved --> check_hint : no conflicting reservation
+addressReserved --> no_lease : revervation owned by another client
+hasAddressReservation -> update_hint : has a reservation
+update_hint --> check_hint : request reserved address
+hasAddressReservation --> check_done : no reservation
+check_hint --> get_existing
+get_existing --> existing : has requested lease
+existing ---> no_lease : not expired lease owned by another client
+get_existing --> out_of_pool : no reservation
+get_existing --> out_of_pool : has requested reservation
+get_existing --> getReservedLease : has reservation for another address
+getReservedLease ---> no_lease : no active reserved lease
+getReservedLease --> out_of_pool
+out_of_pool --> check_done : owned reservation for the requested address
+out_of_pool --> check_done : requested address is in allowed an pool
+out_of_pool -->        no_lease : address not reserved and not in allowed pool
+check_done --> client_lease : has a client lease
+client_lease -> renew : requested address was already assigned to the client
+client_lease --> new_lease
+new_lease --> allocateOrReuseLease4 : has a requested address
+new_lease --> allocateUnreservedLease4 : no requested address
+allocateOrReuseLease4 --> candidate
+candidate --> reuseExpiredLease4 : expired candidate lease
+candidate --> no_lease : conflicting candidate lease
+candidate --> create : no candidate lease
+reuseExpiredLease4 --> reclaimExpiredLease
+reclaimExpiredLease --> updateLease4Information
+updateLease4Information --> lease4_select
+lease4_select ---> no_lease : SKIP
+lease4_select --> updateLease4
+updateLease4 --> old_lease
+allocateUnreservedLease4 --> iterate
+iterate --> pick
+pick --> pick_reserved
+pick_reserved -up-> iterate : address reserved to another client
+pick_reserved --> pick_lease
+pick_lease -up-> iterate : active lease
+pick_lease --> reuseExpiredLease4 : expired lease
+pick_lease --> create : no lease
+create --> old_lease
+old_lease --> return
+
+@enduml